何騰飛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 鑑於現有競品的保質期都比我司長一倍,所以對退貨產品中經檢...