summaryrefslogtreecommitdiffstats
path: root/dpdk/dpdk-2.1.0_patches/0003-e1000-Set-VLAN-Rx-Offload-tag-correctly.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dpdk/dpdk-2.1.0_patches/0003-e1000-Set-VLAN-Rx-Offload-tag-correctly.patch')
-rw-r--r--dpdk/dpdk-2.1.0_patches/0003-e1000-Set-VLAN-Rx-Offload-tag-correctly.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/dpdk/dpdk-2.1.0_patches/0003-e1000-Set-VLAN-Rx-Offload-tag-correctly.patch b/dpdk/dpdk-2.1.0_patches/0003-e1000-Set-VLAN-Rx-Offload-tag-correctly.patch
new file mode 100644
index 00000000000..d1ea27ad778
--- /dev/null
+++ b/dpdk/dpdk-2.1.0_patches/0003-e1000-Set-VLAN-Rx-Offload-tag-correctly.patch
@@ -0,0 +1,75 @@
+From 699252f0b685db4cd298e90f0e1d64e4792356f2 Mon Sep 17 00:00:00 2001
+From: Damjan Marion <damarion@cisco.com>
+Date: Wed, 21 Oct 2015 14:46:12 +0200
+Subject: [PATCH 3/9] e1000: Set VLAN Rx Offload tag correctly
+
+---
+ drivers/net/e1000/igb_rxtx.c | 30 ++++++++++++++++++++++++++++++
+ lib/librte_ether/rte_ether.h | 3 +++
+ 2 files changed, 33 insertions(+)
+
+diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c
+index b13930e..7fe76c8 100644
+--- a/drivers/net/e1000/igb_rxtx.c
++++ b/drivers/net/e1000/igb_rxtx.c
+@@ -885,6 +885,21 @@ eth_igb_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
+ pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss);
+ pkt_flags = pkt_flags | rx_desc_status_to_pkt_flags(staterr);
+ pkt_flags = pkt_flags | rx_desc_error_to_pkt_flags(staterr);
++ {
++ /*
++ * Check packet for VLAN ethernet types and set
++ * RX Offload flag PKT_RX_VLAN_PKT accordingly.
++ */
++ struct ether_hdr *eth_hdr =
++ rte_pktmbuf_mtod(rxm, struct ether_hdr *);
++ u16 eth_type = rte_be_to_cpu_16(eth_hdr->ether_type);
++
++ if ((eth_type == ETHER_TYPE_VLAN) ||
++ (eth_type == ETHER_TYPE_VLAN_AD) ||
++ (eth_type == ETHER_TYPE_VLAN_9100) ||
++ (eth_type == ETHER_TYPE_VLAN_9200))
++ pkt_flags |= PKT_RX_VLAN_PKT;
++ }
+ rxm->ol_flags = pkt_flags;
+ #ifdef RTE_NEXT_ABI
+ rxm->packet_type = igb_rxd_pkt_info_to_pkt_type(rxd.wb.lower.
+@@ -1123,6 +1138,21 @@ eth_igb_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
+ pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss);
+ pkt_flags = pkt_flags | rx_desc_status_to_pkt_flags(staterr);
+ pkt_flags = pkt_flags | rx_desc_error_to_pkt_flags(staterr);
++ {
++ /*
++ * Check packet for VLAN ethernet types and set
++ * RX Offload flag PKT_RX_VLAN_PKT accordingly.
++ */
++ struct ether_hdr *eth_hdr =
++ rte_pktmbuf_mtod(rxm, struct ether_hdr *);
++ u16 eth_type = rte_be_to_cpu_16(eth_hdr->ether_type);
++
++ if ((eth_type == ETHER_TYPE_VLAN) ||
++ (eth_type == ETHER_TYPE_VLAN_AD) ||
++ (eth_type == ETHER_TYPE_VLAN_9100) ||
++ (eth_type == ETHER_TYPE_VLAN_9200))
++ pkt_flags |= PKT_RX_VLAN_PKT;
++ }
+ first_seg->ol_flags = pkt_flags;
+ #ifdef RTE_NEXT_ABI
+ first_seg->packet_type = igb_rxd_pkt_info_to_pkt_type(rxd.wb.
+diff --git a/lib/librte_ether/rte_ether.h b/lib/librte_ether/rte_ether.h
+index 07c17d7..fd646ec 100644
+--- a/lib/librte_ether/rte_ether.h
++++ b/lib/librte_ether/rte_ether.h
+@@ -332,6 +332,9 @@ struct vxlan_hdr {
+ #define ETHER_TYPE_1588 0x88F7 /**< IEEE 802.1AS 1588 Precise Time Protocol. */
+ #define ETHER_TYPE_SLOW 0x8809 /**< Slow protocols (LACP and Marker). */
+ #define ETHER_TYPE_TEB 0x6558 /**< Transparent Ethernet Bridging. */
++#define ETHER_TYPE_VLAN_AD 0x88a8 /**< IEEE 802.1AD VLAN tagging. */
++#define ETHER_TYPE_VLAN_9100 0x9100 /**< VLAN 0x9100 tagging. */
++#define ETHER_TYPE_VLAN_9200 0x9200 /**< VLAN 0x9200 tagging. */
+
+ #define ETHER_VXLAN_HLEN (sizeof(struct udp_hdr) + sizeof(struct vxlan_hdr))
+ /**< VXLAN tunnel header length. */
+--
+2.5.0
+