diff options
author | O'Reilly, Darragh <darragh.oreilly@hpe.com> | 2016-11-11 13:57:00 +0000 |
---|---|---|
committer | Simon Horman <simon.horman@netronome.com> | 2016-11-14 13:41:27 +0100 |
commit | 94a881c1c8e3e291d1ccaadb35e45836be8a7eb9 (patch) | |
tree | a50919261f5a113916b0e4d791500ef8a6898cd6 /ofproto | |
parent | 9989631ef9ae0b52f73c2828586ff5f8672d9cd2 (diff) | |
download | openvswitch-94a881c1c8e3e291d1ccaadb35e45836be8a7eb9.tar.gz |
ofproto-dpif-xlate: Fix duplicate multicast packets
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.oreilly@hpe.com>
Signed-off-by: Simon Horman <simon.horman@netronome.com>
Diffstat (limited to 'ofproto')
-rw-r--r-- | ofproto/ofproto-dpif-xlate.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index f6391ed29..4d10a5430 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"); } |