mpls: support fragmentation of mpls output packet
[vpp.git] / src / vnet / dpo / mpls_label_dpo.c
index 1074a95..9d147f9 100644 (file)
@@ -484,6 +484,12 @@ mpls_label_imposition_inline (vlib_main_t * vm,
                         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 @@ mpls_label_imposition_inline (vlib_main_t * vm,
                         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 @@ mpls_label_imposition_inline (vlib_main_t * vm,
                         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 @@ mpls_label_imposition_inline (vlib_main_t * vm,
                         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
                 {