When iterating the list of mrouters, skip any that are not on the same vlan as the multicast packet to be forwarded. This bug was causing duplicate packets when more than one mrouter was behind a trunk port.
Reported-at: https://mail.openvswitch.org/pipermail/ovs-discuss/2016-November/042938.html Signed-off-by: Darragh O'Reilly <darragh.orei...@hpe.com> --- ofproto/ofproto-dpif-xlate.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index f6391ed..4d10a54 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -2172,11 +2172,14 @@ xlate_normal_mcast_send_mrouters(struct xlate_ctx *ctx, xcfg = ovsrcu_get(struct xlate_cfg *, &xcfgp); LIST_FOR_EACH(mrouter, mrouter_node, &ms->mrouter_lru) { mcast_xbundle = xbundle_lookup(xcfg, mrouter->port); - if (mcast_xbundle && mcast_xbundle != in_xbundle) { + if (mcast_xbundle && mcast_xbundle != in_xbundle + && mrouter->vlan == vlan) { xlate_report(ctx, "forwarding to mcast router port"); output_normal(ctx, mcast_xbundle, vlan); } else if (!mcast_xbundle) { xlate_report(ctx, "mcast router port is unknown, dropping"); + } else if (mrouter->vlan != vlan) { + xlate_report(ctx, "mcast router is on another vlan, dropping"); } else { xlate_report(ctx, "mcast router port is input port, dropping"); } -- 2.7.4 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev