當一個數據包到達網卡的時候,首先要經過內核Openvswitch.ko,流表Flow Table在內核中有一份,通過key查找內核中的flow table,即可以得到action,然后執行action之后,直接發送這個包,只有在內核無法查找到流表項的時候,才會到用戶態查找用戶態的流表 ...
當內核無法查找到流表項的時候,則會通過upcall來調用用戶態ovs vswtichd中的flow table。 會調用ofproto dpif upcall.c中的udpif upcall handler函數。 static void udpif upcall handler void arg struct handler handler arg struct udpif udpif handl ...
2016-09-24 00:07 0 3454 推薦指數:
當一個數據包到達網卡的時候,首先要經過內核Openvswitch.ko,流表Flow Table在內核中有一份,通過key查找內核中的flow table,即可以得到action,然后執行action之后,直接發送這個包,只有在內核無法查找到流表項的時候,才會到用戶態查找用戶態的流表 ...
添加一個flow,調用的命令為 ovs-ofctl add-flow hello "hard_timeout=0 idle_timeout=0 priority=1 table=21 pkt_mark=0x55 tun_id=0x55 actions=mod_nw_dst ...
流表組成 每條流表規則由一些列字段組成,可以分為**基礎字段、匹配字段和動作字段**三部分。 在打印流表時,在流表中還存在一些顯示字段,如duration,idle_age等,此處把這些字段也暫時歸之於基礎字段之中. 流表組成部分字段說明 基礎字段: cookie=value 流表 ...
上一節我們講了ovs-vswitchd,其中虛擬網橋初始化的時候,對調用內核模塊來添加虛擬網卡。 我們從openvswitch內核模塊的加載過程,來看這個過程。 在datapath/datapath.c中會調用module_init(dp_init);來初始化內核模塊。 ...
一、Opevswitch總體架構 Openvswitch的架構網上有如下的圖表示: 每個模塊都有不同的功能 ovs-vswitchd 為主要模塊,實現交換機的守護進程daemon 在Openvswitch所在的服務器進行ps aux可以看到 ...
有時候我們需要自定義一些自己的action,根據包頭里面的信息,做一些自己的操作。 例如添加一個action名為handle_example 第一、修改ofp-actions.c文件 首先在ofp-actions.c里面添加Openflow各個版本的這個action ...
在上一節提到,Openvswitch的內核模塊openvswitch.ko會在網卡上注冊一個函數netdev_frame_hook,每當有網絡包到達網卡的時候,這個函數就會被調用 ...
ovs-vswitchd.c的main函數最終會進入一個while循環,在這個無限循環中,里面最重要的兩個函數是bridge_run()和netdev_run()。 Openvswitch主要管理兩種類型的設備,一個是創建的虛擬網橋,一個是連接到虛擬網橋上的設備 ...