diff --git a/dp-core/vr_mirror.c b/dp-core/vr_mirror.c index 1babcea0e..cecf68297 100644 --- a/dp-core/vr_mirror.c +++ b/dp-core/vr_mirror.c @@ -404,6 +404,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 668587839..827f00b8e 100644 --- a/dp-core/vr_nexthop.c +++ b/dp-core/vr_nexthop.c @@ -1826,7 +1826,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++; @@ -1889,7 +1890,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; }