Openflow訊息處理流程筆記

2023-02-11 03:30:03 字數 4646 閱讀 2554

何騰飛2017.04.25更新

原始碼:sptn_code中ofp/dpa/tne模組。

簡介: ofp模組接收sck的flow_mod訊息,處理後傳送給dpa, dpa處理後在傳送給tne。

以下訊息處理過程均以flow_mod訊息為例,*部分為group_mod訊息的處理。

sck_create_proc()

sck_receive_proc()

簡介:接收sck訊息,傳送給dpa。

一系列初始化操作;

設定接收函式ofp_receive_proc() ;

... in: ips訊息,queue_id佇列id

判斷queue_id:

sck : 呼叫ofp_rcv_sck_ips();

in: ips訊息

判斷ips_type訊息型別:

sck_register;

sck_unregister;

sck_rsp;

sck_error;

sck_data;

openflow協議資料:

ofp_message_reassemble() ;

ofp_check_of_msg_list();

netconf協議資料:

...sck_close;

收到ofp訊息後,首先需要存入ofp訊息佇列,此時先要判斷是否需要新建乙個ofp訊息塊節點or使用現有的lqe佇列對應的ofp訊息塊節點,

ofp訊息佇列如下:

1---2---3---4---5---...---n

該訊息隊列為乙個雙向迴圈鍊錶;

n為全域性變數v_ofp_shared->ofp_msgs始終不變;初始化時和均指向n自身,n自身是沒有資料域的(

有資料節點時,始終指向第1個結點,始終指向最後1個結點;

故只有滿足以下條件才不需要新建lqe節點:

1. 隊列為空( == n時);

2. 佇列不為空但尾結點為null

**實現如下,

解釋: a --- b---n

(n為當前的全域性ofp訊息的lqe )

申請分配並初始化乙個ofp_sck_msg_cb結構型別的ofp_message,

然後插入ofp訊息佇列(lqe型別的ofp_msgs)的前面;

nbb_insert_before()說明:

n為目前的全域性ofp訊息 lqe;

e為新分配的ofp訊息的lqe;

assert巨集只有debug模式下有效,用於驗證入參e的指標為null,n的指標不為null;

依次處理ofp_msg,對符合條件的msg執行以下處理:

ofp_s**e_of_data();

ofp_rcv_of_data(ofp_message);

ofp_free_ofp_message(ofp_message);

提取ofp_header(openflow頭);

關閉timer()定時器,其他一些處理;

判斷header_type型別:

hello;

echo_request;

...flow_mod:

ofp_rcv_flow_mod();

group_mod:

ofp_rcv_group_mod();

...mulyipart_request;

...其他自定義型別;

賦值flow_mod header;

賦值flow_mod body(行動);

賦值match ,判斷處理;(只有type,length ?)

判斷指令型別:

goto_table;

...write_actions;

ofp_fill_action_list();

...構造ips;

將flow_mod ,match拷貝到ips;

判斷各類偏移:

...ofp_snd_dpa_ips(); //傳送ips訊息給dpa

一系列初始化;

判斷action_type(組幀action_array):

output;

ttl_out;

...push_vlan;

...sptn_exp_action_type;

...用action_array 組幀instruction_entry;

賦值group_mod header;

賦值group_mod body(行動);

ofp_fill_bucket_action();

構造ips;

將group_mod 拷貝到ips;

ofp_snd_dpa_ips();

file:

一系列初始化;

判斷action_type(組幀action_array):

output;

ttl_out;

...push_vlan;

...sptn_exp_action_type;

...用action_array 組幀bucket_entry;

呼叫n-base介面函式nbb_send_ips();

nbb_send_ips(haf_mj_cb->partner_data_pid, user_to_dpa_q, ips);

簡介:接收ofp訊息,傳送給tne。

前期處理流程均類似,參考上面的ofp處理流程。

dpa_create_proc();

dpa_receive_proc();

case user_to_dpa_q: dpa_rcv_dpa_ips();

file:

判斷ips訊息型別:

dpa_register;

...flow_mod:

dpa_rcv_flow_mod();

group_mod;

dpa_rcv_group_mod();

...file: dpa_flow_mod_

dpa_s**e_match();

判斷flow_ 指令型別:

add(新增新的流表項):

flow_entry_cb非空判斷,dpa_send_tne_flow_mod();

delete:

flow_entry_cb中command修改為del,dpa_send_tne_flow_mod();

modify:

flow_entry_cb非空判斷,dpa_send_tne_flow_mod();

通過flow_entry_cb組幀flow_mod_array;

組幀flow_mod_ips;

判斷send_data_ind_type 型別;

傳送訊息dpa_snd_dpa_ips();

file: dpa_flow_mod_

判斷group_ 指令型別:

add(新增新的流表項):

group_entry_cb非空判斷,dpa_send_tne_group_mod();

delete:

group_entry_cb中command修改為del,dpa_send_tne_group_mod();

modify:

group_entry_cb非空判斷,dpa_send_tne_group_mod();

通過group_entry_cb組幀group_mod_array;

組幀group_mod_ips;

判斷send_data_ind_type 型別;

傳送訊息 dpa_snd_dpa_ips();

file:

呼叫n-base介面函式nbb_send_ips();

簡介:接收dpa訊息,傳送給?。

前期處理流程均類似,參考上面的ofp處理流程。

tne_create_proc();

tne_receive_proc();

判斷queue_id型別:

...case dpa_to_user_q : tne_rcv_dpa_ips();

...case sck_to_appl_q : tne_rcv_sck_ips();

...case user_to_dci_q : tne_rcv_dci_ips();

判斷ips訊息型別:

dpa_register;

...flow_mod:

tne_rcv_dpa_flow_mod();

group_mod:

tne_rcv_dpa_group_mod();

...file:

parms : ips

判斷table_id型別:

9 : tne_assemble_injected_flow_table()

10 (valn_flow_table):tne_assemble_vlan_flow_table();//流表編碼

13 : tne_assemble_mpls_l2_port_flow_table()

...tne_s**e_config();//?

tne_send_set_rq();//?

流表編碼函式。

...tne_code_key_vlan_table();//match field編碼

判斷flow_指令型別:

add / modify :

tne_code_goto_table();// 流表動作goto編碼。

tne_code_apply_action();// 流表動作apply編碼。

第203章處理錯誤和訊息

概覽內容錯誤處理簡介 檢查螢幕欄位的有效性 理解自動字段檢查 檢查螢幕流邏輯中的字段 在 abap 4 中檢查字段 檢查單個字段 檢查多個字段 有條件地呼叫模組 條件 field 語句 條件 chain 語句 避免自動字段檢查 發布訊息 傳送訊息 建立訊息類 建立訊息 當使用者鍵入螢幕輸入時 事務在...

短訊息流程及其信令抓圖大全

1 手機發起業務請求,後續的從1 5都是乙個業務請求的流程,其中2和3是乙個class mark的流程,4和5是乙個加密的流程,都沒有什麼好講的,這個訊息跟蹤中缺少了cm service accept的訊息。2 訊息6,a口受到手機上報的cp data,cp data包含什麼內容呢?見下圖 3 4 ...

客戶退貨處理流程流程

二 退貨操作處理 1 品管部對於大批量退貨產品 退貨品 20件 按正常專案進行抽樣檢測,對於小批量退回產品 20件 採取多批次混合抽樣,進行正常專案檢測。2 在 之前由工藝監督對每罐實施外觀檢查,若存在產品明顯增稠 固化現象,進行報廢處理。3 鑑於現有競品的保質期都比我司長一倍,所以對退貨產品中經檢...