From d5c774a7f702ee796e17e04a14664f4ce062171a Mon Sep 17 00:00:00 2001 From: Divakar Date: Thu, 14 Apr 2016 14:34:33 +0530 Subject: [PATCH] Treat ARP requestsas VM's requests if VRF is different when compared to VIF's VRF This issue is valid only for unicast ARP request packets. As multicast ARP request packets are always handled in Multicast Composite nexthop and as they are never subjected to GRO, this issue is not observed for multicast ARP packets. When an unicast ARP request is received on Fabric interface it is treated as ARP reqest for VM if there is a label attached to it. Due to the changes in GRO, post GRO, the label is not going to be present in fmd. So ARP packets are treated as if they are meant for fabric network. This is resulting in unicast ARP requests never being answered. As a fix, if the VRF of fmd is different from VIF's VRF, these packets are treated as VM's ARP packets. Change-Id: I013b83c38642697c81e32460be936154e42a067e closes-bug: #1570180 --- dp-core/vr_interface.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dp-core/vr_interface.c b/dp-core/vr_interface.c index ebe04cfe6..d250bc437 100644 --- a/dp-core/vr_interface.c +++ b/dp-core/vr_interface.c @@ -963,7 +963,10 @@ eth_mac_request(struct vr_interface *vif, struct vr_packet *pkt, if (vif_mode_xconnect(vif)) return MR_XCONNECT; - if (fmd->fmd_label >= 0) + /* + * If there is a label or if the vrf is different, it is meant for VM's + */ + if ((fmd->fmd_label >= 0) || (fmd->fmd_dvrf != vif->vif_vrf)) return vm_mac_request(vif, pkt, fmd, dmac); if (pkt->vp_type == VP_TYPE_ARP) {