diff --git a/dp-core/vr_datapath.c b/dp-core/vr_datapath.c index 1772c4c93..66fc98c9a 100644 --- a/dp-core/vr_datapath.c +++ b/dp-core/vr_datapath.c @@ -349,6 +349,13 @@ vr_handle_arp_reply(struct vr_arp *sarp, struct vr_packet *pkt, if (fmd->fmd_label >= 0) return !handled; + /* + * in gro cases, fmd label won't be set. Hence, resort to the + * following check to identify whether the packet was tunneled + */ + if (fmd->fmd_dvrf != vif->vif_vrf) + return !handled; + /* If fabric: Agent and kernel are interested in it */ cloned_pkt = vr_pclone(pkt); if (cloned_pkt) { diff --git a/dp-core/vr_vxlan.c b/dp-core/vr_vxlan.c index 95f98c075..bf0ffcef8 100644 --- a/dp-core/vr_vxlan.c +++ b/dp-core/vr_vxlan.c @@ -57,7 +57,8 @@ vr_vxlan_input(struct vrouter *router, struct vr_packet *pkt, drop_reason = VP_DROP_INVALID_PACKET; goto fail; } - pkt->vp_flags |= VP_FLAG_GRO; + if (vr_perfr) + pkt->vp_flags |= VP_FLAG_GRO; if (nh->nh_vrf >= 0) { fmd->fmd_dvrf = nh->nh_vrf;