net/af_packet: support 802.1Q VLAN
AF_PACKET has some flags to check on the receive side for 802.1Q information. If present, we copy into the mbuf. For transmit, we insert any 802.1Q information into the packet before copying to the ring. Signed-off-by: Chas Williams <ciwillia@brocade.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
218259590e
commit
23deeebfcf
@ -161,6 +161,12 @@ eth_af_packet_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
|
||||
pbuf = (uint8_t *) ppd + ppd->tp_mac;
|
||||
memcpy(rte_pktmbuf_mtod(mbuf, void *), pbuf, rte_pktmbuf_data_len(mbuf));
|
||||
|
||||
/* check for vlan info */
|
||||
if (ppd->tp_status & TP_STATUS_VLAN_VALID) {
|
||||
mbuf->vlan_tci = ppd->tp_vlan_tci;
|
||||
mbuf->ol_flags |= (PKT_RX_VLAN_PKT | PKT_RX_VLAN_STRIPPED);
|
||||
}
|
||||
|
||||
/* release incoming frame and advance ring buffer */
|
||||
ppd->tp_status = TP_STATUS_KERNEL;
|
||||
if (++framenum >= framecount)
|
||||
@ -214,6 +220,14 @@ eth_af_packet_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
|
||||
continue;
|
||||
}
|
||||
|
||||
/* insert vlan info if necessary */
|
||||
if (mbuf->ol_flags & PKT_TX_VLAN_PKT) {
|
||||
if (rte_vlan_insert(&mbuf)) {
|
||||
rte_pktmbuf_free(mbuf);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* point at the next incoming frame */
|
||||
if ((ppd->tp_status != TP_STATUS_AVAILABLE) &&
|
||||
(poll(&pfd, 1, -1) < 0))
|
||||
|
Loading…
x
Reference in New Issue
Block a user