+ rte_pktmbuf_pkt_len(mbuf) = pktlen + (vlan ? 4 : 0);
+ rte_pktmbuf_data_len(mbuf) = pktlen + (vlan ? 4 : 0);
+}
+
+prox_rte_ipv6_hdr *prox_get_ipv6_hdr(prox_rte_ether_hdr *hdr, uint16_t len, uint16_t *vlan)
+{
+ prox_rte_vlan_hdr *vlan_hdr;
+ prox_rte_ipv6_hdr *ipv6_hdr;
+ uint16_t ether_type = hdr->ether_type;
+ uint16_t l2_len = sizeof(prox_rte_ether_hdr);
+ ipv6_hdr = (prox_rte_ipv6_hdr *)(hdr + 1);
+
+ while (((ether_type == ETYPE_8021ad) || (ether_type == ETYPE_VLAN)) && (l2_len + sizeof(prox_rte_vlan_hdr) < len)) {
+ vlan_hdr = (prox_rte_vlan_hdr *)((uint8_t *)hdr + l2_len);
+ l2_len +=4;
+ ether_type = vlan_hdr->eth_proto;
+ *vlan = rte_be_to_cpu_16(vlan_hdr->vlan_tci & 0xFF0F);
+ ipv6_hdr = (prox_rte_ipv6_hdr *)(vlan_hdr + 1);
+ }
+ if (ether_type == ETYPE_IPv6)
+ return ipv6_hdr;
+ else
+ return NULL;