Add a new RTE_PTYPE_L2_ETHER_VLAN packet type, and its support in rte_pktmbuf_get_ptype().
Signed-off-by: Didier Pallard <didier.pallard at 6wind.com> Signed-off-by: Olivier Matz <olivier.matz at 6wind.com> --- lib/librte_mbuf/rte_mbuf_ptype.c | 13 +++++++++++++ lib/librte_mbuf/rte_mbuf_ptype.h | 9 ++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/librte_mbuf/rte_mbuf_ptype.c b/lib/librte_mbuf/rte_mbuf_ptype.c index 73284ae..6bbb255 100644 --- a/lib/librte_mbuf/rte_mbuf_ptype.c +++ b/lib/librte_mbuf/rte_mbuf_ptype.c @@ -166,6 +166,19 @@ uint32_t rte_pktmbuf_get_ptype(const struct rte_mbuf *m, off = sizeof(*eh); hdr_lens->l2_len = off; + if (proto == rte_cpu_to_be_16(ETHER_TYPE_VLAN)) { + const struct vlan_hdr *vh; + struct vlan_hdr vh_copy; + + pkt_type = RTE_PTYPE_L2_ETHER_VLAN; + vh = rte_pktmbuf_read(m, off, sizeof(*vh), &vh_copy); + if (unlikely(vh == NULL)) + return pkt_type; + off += sizeof(*vh); + hdr_lens->l2_len += sizeof(*vh); + proto = vh->eth_proto; + } + if (proto == rte_cpu_to_be_16(ETHER_TYPE_IPv4)) { const struct ipv4_hdr *ip4h; struct ipv4_hdr ip4h_copy; diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/librte_mbuf/rte_mbuf_ptype.h index f468520..5f1325c 100644 --- a/lib/librte_mbuf/rte_mbuf_ptype.h +++ b/lib/librte_mbuf/rte_mbuf_ptype.h @@ -136,6 +136,13 @@ extern "C" { */ #define RTE_PTYPE_L2_ETHER_NSH 0x00000005 /** + * VLAN packet type. + * + * Packet format: + * <'ether type'=[0x8100]> + */ +#define RTE_PTYPE_L2_ETHER_VLAN 0x00000006 +/** * Mask of layer 2 packet types. * It is used for outer packet for tunneling cases. */ @@ -573,7 +580,7 @@ struct rte_mbuf_hdr_lens { * (retval & RTE_PTYPE_L2_MASK) != RTE_PTYPE_UNKNOWN. * * Supported packet types are: - * L2: Ether + * L2: Ether, Vlan * L3: IPv4, IPv6 * L4: TCP, UDP, SCTP * -- 2.8.1