diff --git a/dp-core/vr_bridge.c b/dp-core/vr_bridge.c index b9782db77..df85f48b2 100644 --- a/dp-core/vr_bridge.c +++ b/dp-core/vr_bridge.c @@ -420,7 +420,6 @@ vr_bridge_input(struct vrouter *router, struct vr_packet *pkt, /* Adjust MSS for V4 and V6 packets */ if ((pkt->vp_type == VP_TYPE_IP) || (pkt->vp_type == VP_TYPE_IP6)) { - pull_len = pkt_get_network_header_off(pkt) - pkt_head_space(pkt); if (!pkt_pull(pkt, pull_len)) { vr_pfree(pkt, VP_DROP_PULL); diff --git a/dp-core/vr_flow.c b/dp-core/vr_flow.c index 9822fbe8e..9a356bd77 100644 --- a/dp-core/vr_flow.c +++ b/dp-core/vr_flow.c @@ -474,6 +474,8 @@ vr_enqueue_flow(struct vrouter *router, struct vr_flow_entry *fe, if (fmd) { pnode->pl_outer_src_ip = fmd->fmd_outer_src_ip; pnode->pl_label = fmd->fmd_label; + if (fmd->fmd_to_me) + pnode->pl_flags |= PN_FLAG_TO_ME; } __sync_synchronize(); @@ -804,6 +806,8 @@ vr_flush_flow_queue(struct vrouter *router, struct vr_flow_entry *fe, memset(fmd, 0, sizeof(*fmd)); fmd->fmd_outer_src_ip = pnode->pl_outer_src_ip; fmd->fmd_label = pnode->pl_label; + if (pnode->pl_flags & PN_FLAG_TO_ME) + fmd->fmd_to_me = 1; } pkt = pnode->pl_packet; diff --git a/include/vr_flow.h b/include/vr_flow.h index f0d70b4e3..d5ae73eb6 100644 --- a/include/vr_flow.h +++ b/include/vr_flow.h @@ -142,6 +142,7 @@ struct vr_flow_stats { #define VR_MAX_FLOW_QUEUE_ENTRIES 3U #define PN_FLAG_LABEL_IS_VNID 0x1 +#define PN_FLAG_TO_ME 0x2 struct vr_packet_node { struct vr_packet *pl_packet;