From 1aeddfa501aaccf0d3502c12bbdeced24b5b1b93 Mon Sep 17 00:00:00 2001 From: "Anand H. Krishnan" Date: Fri, 22 Jul 2016 10:58:52 +0530 Subject: [PATCH] Disable remarking of packets to VM/vhost Change-Id: Id9064800253e8be987fcdb34e7f66dc73913f19b Partial-Bug: #1571493 --- dp-core/vr_nexthop.c | 46 +++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/dp-core/vr_nexthop.c b/dp-core/vr_nexthop.c index 5587a4cef..c1d2265b9 100644 --- a/dp-core/vr_nexthop.c +++ b/dp-core/vr_nexthop.c @@ -1998,20 +1998,27 @@ nh_encap_l2(struct vr_packet *pkt, struct vr_nexthop *nh, pkt->vp_flags &= ~VP_FLAG_GRO; vif = nh->nh_dev; + if (!vif) { + vr_pfree(pkt, VP_DROP_INVALID_IF); + return 0; + } + stats = vr_inet_vrf_stats(fmd->fmd_dvrf, pkt->vp_cpu); - if (!(pkt->vp_flags & VP_FLAG_GROED)) { - qos = vr_qos_get_forwarding_class(nh->nh_router, pkt, fmd); - if (qos) { - if (pkt->vp_type == VP_TYPE_IP) { - vr_inet_set_tos((struct vr_ip *)pkt_network_header(pkt), - VR_IP_DSCP(qos->vfcq_dscp)); - } else if (pkt->vp_type == VP_TYPE_IP6) { - vr_inet6_set_tos((struct vr_ip6 *)pkt_network_header(pkt), - qos->vfcq_dscp); + if (vif_is_fabric(vif)) { + if (!(pkt->vp_flags & VP_FLAG_GROED)) { + qos = vr_qos_get_forwarding_class(nh->nh_router, pkt, fmd); + if (qos) { + if (pkt->vp_type == VP_TYPE_IP) { + vr_inet_set_tos((struct vr_ip *)pkt_network_header(pkt), + VR_IP_DSCP(qos->vfcq_dscp)); + } else if (pkt->vp_type == VP_TYPE_IP6) { + vr_inet6_set_tos((struct vr_ip6 *)pkt_network_header(pkt), + qos->vfcq_dscp); + } + pkt->vp_queue = qos->vfcq_queue_id + 1; + pkt->vp_priority = qos->vfcq_dotonep_qos; } - pkt->vp_queue = qos->vfcq_queue_id + 1; - pkt->vp_priority = qos->vfcq_dotonep_qos; } } @@ -2057,11 +2064,18 @@ nh_encap_l3(struct vr_packet *pkt, struct vr_nexthop *nh, stats = vr_inet_vrf_stats(fmd->fmd_dvrf, pkt->vp_cpu); vif = nh->nh_dev; - if (!(pkt->vp_flags & VP_FLAG_GROED)) { - qos = vr_qos_get_forwarding_class(nh->nh_router, pkt, fmd); - if (qos) { - pkt->vp_queue = qos->vfcq_queue_id; - pkt->vp_priority = qos->vfcq_dotonep_qos; + if (!vif) { + vr_pfree(pkt, VP_DROP_INVALID_IF); + return 0; + } + + if (vif_is_fabric(vif)) { + if (!(pkt->vp_flags & VP_FLAG_GROED)) { + qos = vr_qos_get_forwarding_class(nh->nh_router, pkt, fmd); + if (qos) { + pkt->vp_queue = qos->vfcq_queue_id; + pkt->vp_priority = qos->vfcq_dotonep_qos; + } } }