mpls: support fragmentation of mpls output packet

Type: fix

Signed-off-by: Rajesh Goel <rajegoel@cisco.com>
Change-Id: Ie4372c5cf58ab215cdec5ce56f8a994daaba2844
diff --git a/src/vnet/dpo/mpls_label_dpo.c b/src/vnet/dpo/mpls_label_dpo.c
index 1074a95..9d147f9 100644
--- a/src/vnet/dpo/mpls_label_dpo.c
+++ b/src/vnet/dpo/mpls_label_dpo.c
@@ -484,6 +484,12 @@
                         exp2 = ip_dscp_to_mpls_exp(ip2->tos);
                         exp3 = ip_dscp_to_mpls_exp(ip3->tos);
                     }
+
+                    /* save the payload proto information in mpls opaque */
+                    vnet_buffer(b0)->mpls.pyld_proto = DPO_PROTO_IP4;
+                    vnet_buffer(b1)->mpls.pyld_proto = DPO_PROTO_IP4;
+                    vnet_buffer(b2)->mpls.pyld_proto = DPO_PROTO_IP4;
+                    vnet_buffer(b3)->mpls.pyld_proto = DPO_PROTO_IP4;
                 }
                 else if (DPO_PROTO_IP6 == dproto)
                 {
@@ -518,6 +524,12 @@
                         exp3 = ip_dscp_to_mpls_exp(
                             ip6_traffic_class_network_order(ip3));
                     }
+
+                    /* save the payload proto information in mpls opaque */
+                    vnet_buffer(b0)->mpls.pyld_proto = DPO_PROTO_IP6;
+                    vnet_buffer(b1)->mpls.pyld_proto = DPO_PROTO_IP6;
+                    vnet_buffer(b2)->mpls.pyld_proto = DPO_PROTO_IP6;
+                    vnet_buffer(b3)->mpls.pyld_proto = DPO_PROTO_IP6;
                 }
                 else
                 {
@@ -787,6 +799,9 @@
                         ttl0 = ip0->ttl;
                         exp0 = ip_dscp_to_mpls_exp(ip0->tos);
                     }
+
+                    /* save the payload proto information in mpls opaque */
+                    vnet_buffer(b0)->mpls.pyld_proto = DPO_PROTO_IP4;
                 }
                 else if (DPO_PROTO_IP6 == dproto)
                 {
@@ -805,6 +820,9 @@
                         exp0 = ip_dscp_to_mpls_exp(
                             ip6_traffic_class_network_order(ip0));
                     }
+
+                    /* save the payload proto information in mpls opaque */
+                    vnet_buffer(b0)->mpls.pyld_proto = DPO_PROTO_IP6;
                 }
                 else
                 {