From 571f4f28655388cb56ebb3bf4e9b2514d6a98b19 Mon Sep 17 00:00:00 2001 From: Divakar Date: Tue, 16 Feb 2016 15:59:57 +0530 Subject: [PATCH] Cross connect Fabric Multicast packets Right now we dont have L2 support on Fabric network. Due to this, the packets on fabric interfaces (Vhost and physical) are L3 processed directly. The Fabric VRF contains default route that is pointing to default gw. So the broadcast route entry 255/8 also points to default gw and any mulicast traffic coming from physical inteface (excepp ARP) is forwarded back to default gw. This can potentially lead to a loop if default gw floods back the packet. As a fix, the multicast fabric packets are cross connected without using route tables. Change-Id: If192c2447da77af7729e48dfcae08a27f395d325 closes-bug: #1545229 --- dp-core/vr_datapath.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/dp-core/vr_datapath.c b/dp-core/vr_datapath.c index 3035b8754..230cee045 100644 --- a/dp-core/vr_datapath.c +++ b/dp-core/vr_datapath.c @@ -560,6 +560,15 @@ vr_fabric_input(struct vr_interface *vif, struct vr_packet *pkt, if (pkt->vp_type == VP_TYPE_IP6) return vif_xconnect(vif, pkt, &fmd); + /* + * On Fabric only ARP packets are specially handled. Rest all BUM + * traffic can be cross connected + */ + if ((pkt->vp_type != VP_TYPE_ARP) && + (pkt->vp_flags & VP_FLAG_MULTICAST)) { + return vif_xconnect(vif, pkt, &fmd); + } + pull_len = pkt_get_network_header_off(pkt) - pkt_head_space(pkt); pkt_pull(pkt, pull_len);