前言
localnet port,动态学习ip-mac关系,不走内核,存储在MAC_Binding
表里。
分析
过程是这样的,
logic router确定了nexthop的转发端口,用get_arp
action来查找nexthop的mac是否已经学习到(在table 66里面)。如果没有,则使用arp action(在table=24里)从转发端口广播一个arp request,logic switch会广播到它下的每一个端口,如果有arp应答,logic switch会回给logic router,logic router会执行put_arp
action(在table=17里),同时,ovn-controller会在MAC_Binding
表里增加一行记录。ovn-controller收到MAC_Binding
表的更新后,添加一条flow到table=66里面。
涉及到的flow如下,
|
|
table=17这条flow解释下(代码函数是pinctrl_handle_put_mac_binding
),
执行controller这个action时,reg0=arp_spa
,dl_src=arp_sha
,再加上logic input port值,实现了action=(put_arp(inport, arp.spa, arp.sha)
),
后面是恢复寄存器的值。userdata的前四个字节是opcode,这里是0x01,表示opcode是ACTION_OPCODE_PUT_ARP
。