br-tun网桥,作用是连接隧道,桥里包含两类端口:
1、patch-int(另一端是patch-tun),连接着br-int网桥;
2、vxlan-XXXXXXXX,连接着隧道口;
br-tun默认使用的流表有8个,分别为table0/1/2/4/9/10/20/22,各流表之间的关系如图(图中的数字代表优先级,先匹配优先级高的条目):
下面对各个表进行解析:
1、table0(LOCAL_SWITCHING)
对进入网桥的数据包做分类:
从br-int网桥转过来的包,送入table1处理。
从隧道口来的包,送入table4处理。
从其他端口来的包,则丢弃。
2、table1(DVR_PROCESS,DVR process Table)
处理跟分布式router相关的数据包:
如果查询DVR qr口的MAC,则丢弃。
如果数据包发给DVR,则丢弃。
(以上两条是防止这些数据包泄露出本节点,因为DVR只在本节点范围内响应)
如果数据包由DVR发出/转发,则修改源MAC为DVR host MAC,送入table2处理。
其他的数据包直接送入table2处理。
3、table2(PATCH_LV_TO_TUN)
对数据包进行分类,单播报文送入table20处理,广播/组播报文送入table22处理。
4、table4(VXLAN_TUN_TO_LV)
处理VxLAN隧道包,把对应VNI打上对应的局部VLAN后,送入table9处理。其他的则丢弃。
5、table9(DVR_NOT_LEARN,DVR Learning blocker)
自学习流表过滤器。
如果源MAC是DVR host MAC(即收到其他节点的DVR发过来的数据包),就从patch-int发出,进入br-int处理。
其他数据包送入table10处理(自学习)。
6、table10(LEARN_FROM_TUN)
自学习远端未知MAC。
将局部VLAN、VNI、VxLAN隧道口、源MAC学习记录到table20,然后从patch-int发出,进入br-int处理。
7、table20(UCAST_TO_TUN)
单播到指定隧道
如果找到对应的自学习记录,就剥离局部VLAN,设置对应的tun_id,从对应的隧道口发出。
否则送入table22处理。
8、table22(FLOOD_TO_TUN)
广播/组播到所有隧道。
如果是组播包,则剥离局部VLAN,设置对应的tun_id,然后从关联的隧道口送出。
如果是广播包,则剥离局部VLAN,设置对应的tun_id,然后从所有隧道口送出。