+static void
+iavf_refine_proto_hdrs_l2tpv2(struct virtchnl_proto_hdrs *proto_hdrs,
+ uint64_t phint)
+{
+ struct virtchnl_proto_hdr *hdr1;
+ int i;
+
+ if (!(phint & IAVF_PHINT_L2TPV2))
+ return;
+
+ if (proto_hdrs->tunnel_level == TUNNEL_LEVEL_INNER) {
+ /* shift headers layer */
+ for (i = proto_hdrs->count - 1 + 1; i > 0; i--)
+ proto_hdrs->proto_hdr[i] = proto_hdrs->proto_hdr[i - 1];
+
+ /* adding outer ip header at layer 0 */
+ hdr1 = &proto_hdrs->proto_hdr[0];
+ hdr1->field_selector = 0;
+ proto_hdrs->count++;
+ proto_hdrs->tunnel_level = TUNNEL_LEVEL_OUTER;
+ if (phint & IAVF_PHINT_OUTER_IPV4)
+ VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, IPV4);
+ else if (phint & IAVF_PHINT_OUTER_IPV6)
+ VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, IPV6);
+ }
+}
+