Thanks for reviewing. I will change them in next version.
-------------- Han Ding >Hello Han, > >"Han Ding" <hand...@chinatelecom.cn> writes: > >> Commit ba07cf222a add the feature "Handle gratuitous ARP requests and >> replies in tnl_arp_snoop()". But commit 83c2757bd1 just allow the ARP whitch >> the destination address of the ARP is matched against the known xbridge >> addresses. >> So the modification of commit ba07cf222a is not effective. When ovs receive >> the >> gratuitous ARP from underlay gateway which the source address and destination >> address are all gateway IP, tunnel neighbor will not be updated. >> > >I think it would be clearer formatting the commits like below: > >$ git -P show -s --format="%h (\"%s\")" --abbrev=12 ba07cf222a >ba07cf222a0c ("Handle gratuitous ARP requests and replies in tnl_arp_snoop()") > >$ git -P show -s --format="%h (\"%s\")" --abbrev=12 83c2757bd1 >83c2757bd16e ("xlate: Move tnl_neigh_snoop() to terminate_native_tunnel()") > >I guess that the last commit deserves a Fixes tag as well. > >> Signed-off-by: Han Ding <hand...@chinatelecom.cn> >> --- >> >> Notes: >> v3 >> Correct the spell mistake. >> >> v2 >> Change author name. >> >> ofproto/ofproto-dpif-xlate.c | 10 +++++++--- >> tests/tunnel-push-pop.at | 20 ++++++++++++++++++++ >> 2 files changed, 27 insertions(+), 3 deletions(-) >> >> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c >> index 8e5d030ac..6c69f981b 100644 >> --- a/ofproto/ofproto-dpif-xlate.c >> +++ b/ofproto/ofproto-dpif-xlate.c >> @@ -4126,6 +4126,11 @@ xport_has_ip(const struct xport *xport) >> return n_in6 ? true : false; >> } >> >> +#define IS_VALID_NEIGHBOR_REPLY(flow, ctx) \ >> +((flow->dl_type == htons(ETH_TYPE_ARP) || \ >> + flow->nw_proto == IPPROTO_ICMPV6) && \ >> + is_neighbor_reply_correct(ctx, flow)) >> + > >Although terminate_native_tunnel() would be the only user, I guess a >static function could be ok here, instead. > >> static bool >> terminate_native_tunnel(struct xlate_ctx *ctx, const struct xport *xport, >> struct flow *flow, struct flow_wildcards *wc, >> @@ -4146,9 +4151,8 @@ terminate_native_tunnel(struct xlate_ctx *ctx, const >> struct xport *xport, >> /* If no tunnel port was found and it's about an ARP or ICMPv6 >>packet, >> * do tunnel neighbor snooping. */ >> if (*tnl_port == ODPP_NONE && >> - (flow->dl_type == htons(ETH_TYPE_ARP) || >> - flow->nw_proto == IPPROTO_ICMPV6) && >> - is_neighbor_reply_correct(ctx, flow)) { >> + (IS_VALID_NEIGHBOR_REPLY(flow, ctx) || >> + is_garp(flow, wc))) { > >AFAICT, this seems ok to me and the tests related to tunnel_push_pop >succeed. There's probably some room for improvement in the code down to >tnl_arp_snoop(), but I guess it's a bit out of scope of this patch. > >> tnl_neigh_snoop(flow, wc, ctx->xbridge->name, >> ctx->xin->allow_side_effects); >> } else if (*tnl_port != ODPP_NONE && >> diff --git a/tests/tunnel-push-pop.at b/tests/tunnel-push-pop.at >> index c63344196..0bac362f4 100644 >> --- a/tests/tunnel-push-pop.at >> +++ b/tests/tunnel-push-pop.at >> @@ -369,6 +369,26 @@ AT_CHECK([ovs-appctl tnl/neigh/show | grep br | sort], >> [0], [dnl >> 1.1.2.92 f8:bc:12:44:34:b6 br0 >> ]) >> >> +dnl Receiving Gratuitous ARP request with correct VLAN id should alter >> tunnel neighbor cache >> +AT_CHECK([ovs-appctl netdev-dummy/receive p0 >> 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:c8,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8100),vlan(vid=10,pcp=7),encap(eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.92,op=1,sha=f8:bc:12:44:34:c8,tha=00:00:00:00:00:00))']) >> + >> +ovs-appctl time/warp 1000 >> +ovs-appctl time/warp 1000 >> + >> +AT_CHECK([ovs-appctl tnl/neigh/show | grep br | sort], [0], [dnl >> +1.1.2.92 f8:bc:12:44:34:c8 br0 >> +]) >> + >> +dnl Receiving Gratuitous ARP reply with correct VLAN id should alter tunnel >> neighbor cache >> +AT_CHECK([ovs-appctl netdev-dummy/receive p0 >> 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b2,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8100),vlan(vid=10,pcp=7),encap(eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.92,op=2,sha=f8:bc:12:44:34:b2,tha=f8:bc:12:44:34:b2))']) >> + >> +ovs-appctl time/warp 1000 >> +ovs-appctl time/warp 1000 >> + >> +AT_CHECK([ovs-appctl tnl/neigh/show | grep br | sort], [0], [dnl >> +1.1.2.92 f8:bc:12:44:34:b2 br0 >> +]) >> + >> dnl Receive ARP reply without VLAN header >> AT_CHECK([ovs-vsctl set port br0 tag=0]) >> AT_CHECK([ovs-appctl tnl/neigh/flush], [0], [OK >> -- >> 2.27.0 >> >> >> >> >> _______________________________________________ >> dev mailing list >> d...@openvswitch.org >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev