summaryrefslogtreecommitdiff
path: root/ofproto
diff options
context:
space:
mode:
authorO'Reilly, Darragh <darragh.oreilly@hpe.com>2016-11-11 13:57:00 +0000
committerSimon Horman <simon.horman@netronome.com>2016-11-14 13:41:27 +0100
commit94a881c1c8e3e291d1ccaadb35e45836be8a7eb9 (patch)
treea50919261f5a113916b0e4d791500ef8a6898cd6 /ofproto
parent9989631ef9ae0b52f73c2828586ff5f8672d9cd2 (diff)
downloadopenvswitch-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.c5
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");
}