ovs的patch端口,用於連接兩個網橋,命令如下
添加端口時,會先後調用 port_construct 和 port_add,下面看壹下這兩個函數對於patch端口的特殊處理
a. port_construct
b. port_add
如果是patch類型端口,不會將其添加到datapath中,所以通過 ovs-appctl dpctl/show 是看不到patch端口的
br10和br12必須在同壹個datapath,否則尋找peer就會失敗,ofport->peer就會為空,後面數據轉發時也不會從peer設備發出。
假如出端口為patch port,流程如下:
最後會將流表和action安裝到datapath中,指導後續報文轉發。
下面做壹個小實驗,拓撲圖如下:
創建三個網橋br10,br11和br12,其中br10和br12為netdev類型,br11為system類型。
br10和br11通過patch端口patch1/patch2相連接,br10和br12通過patch端口patch3/patch4相連接。
br10上還添加了壹個物理網卡enp129s0f0,其直連的網卡enp129s0f1配置ip地址2.2.2.2/24。
結論:
a. patch端口只存在網橋上,datapath中不會存在
b. 如果出端口為patch端口,則相當於其peer設備收到報文,在peer設備所在網橋查找openflow流表進行轉發
c. 不同類型datapath的網橋不能通過patch端口相連接