From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Charles (Chas) Williams" Subject: [PATCH v2 4/4] net/af_packet: add 802.1Q (VLAN) support Date: Thu, 5 Jan 2017 08:53:44 -0500 Message-ID: <1483624424-2806-4-git-send-email-ciwillia@brocade.com> References: <1483624424-2806-1-git-send-email-ciwillia@brocade.com> Mime-Version: 1.0 Content-Type: text/plain Cc: , "Charles (Chas) Williams" To: Return-path: Received: from mx0a-000f0801.pphosted.com (mx0b-000f0801.pphosted.com [67.231.152.113]) by dpdk.org (Postfix) with ESMTP id 8DEEA5A44 for ; Thu, 5 Jan 2017 14:54:02 +0100 (CET) In-Reply-To: <1483624424-2806-1-git-send-email-ciwillia@brocade.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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: Charles (Chas) Williams --- drivers/net/af_packet/rte_eth_af_packet.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c index 6aa8132..ee51c17 100644 --- a/drivers/net/af_packet/rte_eth_af_packet.c +++ b/drivers/net/af_packet/rte_eth_af_packet.c @@ -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)) -- 2.1.4