diff --git a/dp-core/vr_mirror.c b/dp-core/vr_mirror.c index 7baaf3282..b99b649db 100644 --- a/dp-core/vr_mirror.c +++ b/dp-core/vr_mirror.c @@ -411,6 +411,7 @@ vr_mirror(struct vrouter *router, uint8_t mirror_id, clone_len += mirror_md_len; nh = mirror->mir_nh; + pkt->vp_flags &= ~VP_FLAG_GRO; pkt = vr_pclone(pkt); if (!pkt) return 0; diff --git a/dp-core/vr_nexthop.c b/dp-core/vr_nexthop.c index 39d8c68f3..0d154ce9a 100644 --- a/dp-core/vr_nexthop.c +++ b/dp-core/vr_nexthop.c @@ -1912,7 +1912,8 @@ nh_encap_l2(struct vr_packet *pkt, struct vr_nexthop *nh, stats = vr_inet_vrf_stats(fmd->fmd_dvrf, pkt->vp_cpu); - if ((pkt->vp_flags & VP_FLAG_GRO) && vif_is_virtual(vif)) { + if ((pkt->vp_flags & VP_FLAG_GRO) && vif_is_virtual(vif) && + (!(vif->vif_flags & VIF_FLAG_MIRROR_TX))) { if (vr_gro_input(pkt, nh)) { if (stats) stats->vrf_gros++; @@ -1975,7 +1976,8 @@ nh_encap_l3(struct vr_packet *pkt, struct vr_nexthop *nh, } } - if ((pkt->vp_flags & VP_FLAG_GRO) && vif_is_virtual(vif)) { + if ((pkt->vp_flags & VP_FLAG_GRO) && vif_is_virtual(vif) && + (!(vif->vif_flags & VIF_FLAG_MIRROR_TX))) { if (vr_gro_input(pkt, nh)) return 0; }