OpenFastPath 學習6 (default_event_dispatcher)
在我的udpecho中,並未指定CPU核,gdb時發現有thread 6~11均在執行 default_event_dispatcher。該執行緒由使用者編寫,如下:

主要工作執行緒
該執行緒為資料平面執行緒,會分別繫結不同的CPU核。執行緒函式為default_event_dispatcher,顧名思義:預設的收包分發處理執行緒(其實還有發包)。該函式不停的收包,然後呼叫ofp_packet_input函式,再呼叫pkt_func,pkt_func即是上圖中的ofp_eth_vlan_processing。
ofp_eth_vlan_processing中對於不同的協議(IP/IPV4/ARP)處理如下:

協議分類處理
資料包會根據協議內容不同進行不同的處理。
default_event_dispatcher在收包處理完後,每次迴圈還會呼叫ofp_send_pending_pkt,將未發出去的包進行傳送。上層協議比如IP層在傳送資料時,會呼叫send_pkt_out,其實是把資料包放在一個數組,此時,如果陣列中資料包數量達到一個閾值(tx_burst = global_param->pkt_tx_burst_size)會直接進行傳送,否則不會發送。為了保證資料立即能發出去,因此,default_event_dispatcher執行緒會呼叫ofp_send_pending_pkt進行發包。