Initial commit of vpp code.
[vpp.git] / dpdk / dpdk-2.1.0_patches / 0003-e1000-Set-VLAN-Rx-Offload-tag-correctly.patch
1 From 699252f0b685db4cd298e90f0e1d64e4792356f2 Mon Sep 17 00:00:00 2001
2 From: Damjan Marion <damarion@cisco.com>
3 Date: Wed, 21 Oct 2015 14:46:12 +0200
4 Subject: [PATCH 3/9] e1000: Set VLAN Rx Offload tag correctly
5
6 ---
7  drivers/net/e1000/igb_rxtx.c | 30 ++++++++++++++++++++++++++++++
8  lib/librte_ether/rte_ether.h |  3 +++
9  2 files changed, 33 insertions(+)
10
11 diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c
12 index b13930e..7fe76c8 100644
13 --- a/drivers/net/e1000/igb_rxtx.c
14 +++ b/drivers/net/e1000/igb_rxtx.c
15 @@ -885,6 +885,21 @@ eth_igb_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
16                 pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss);
17                 pkt_flags = pkt_flags | rx_desc_status_to_pkt_flags(staterr);
18                 pkt_flags = pkt_flags | rx_desc_error_to_pkt_flags(staterr);
19 +               {
20 +                 /*
21 +                  * Check packet for VLAN ethernet types and set
22 +                  * RX Offload flag PKT_RX_VLAN_PKT accordingly.
23 +                  */
24 +                 struct ether_hdr *eth_hdr = 
25 +              rte_pktmbuf_mtod(rxm, struct ether_hdr *);
26 +                 u16 eth_type = rte_be_to_cpu_16(eth_hdr->ether_type);
27 +
28 +                 if ((eth_type == ETHER_TYPE_VLAN) ||
29 +                     (eth_type == ETHER_TYPE_VLAN_AD) ||
30 +                     (eth_type == ETHER_TYPE_VLAN_9100) ||
31 +                     (eth_type == ETHER_TYPE_VLAN_9200))
32 +                   pkt_flags |= PKT_RX_VLAN_PKT;
33 +               }
34                 rxm->ol_flags = pkt_flags;
35  #ifdef RTE_NEXT_ABI
36                 rxm->packet_type = igb_rxd_pkt_info_to_pkt_type(rxd.wb.lower.
37 @@ -1123,6 +1138,21 @@ eth_igb_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
38                 pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss);
39                 pkt_flags = pkt_flags | rx_desc_status_to_pkt_flags(staterr);
40                 pkt_flags = pkt_flags | rx_desc_error_to_pkt_flags(staterr);
41 +               {
42 +                 /*
43 +                  * Check packet for VLAN ethernet types and set
44 +                  * RX Offload flag PKT_RX_VLAN_PKT accordingly.
45 +                  */
46 +                 struct ether_hdr *eth_hdr = 
47 +              rte_pktmbuf_mtod(rxm, struct ether_hdr *);
48 +                 u16 eth_type = rte_be_to_cpu_16(eth_hdr->ether_type);
49 +
50 +                 if ((eth_type == ETHER_TYPE_VLAN) ||
51 +                     (eth_type == ETHER_TYPE_VLAN_AD) ||
52 +                     (eth_type == ETHER_TYPE_VLAN_9100) ||
53 +                     (eth_type == ETHER_TYPE_VLAN_9200))
54 +                   pkt_flags |= PKT_RX_VLAN_PKT;
55 +               }
56                 first_seg->ol_flags = pkt_flags;
57  #ifdef RTE_NEXT_ABI
58                 first_seg->packet_type = igb_rxd_pkt_info_to_pkt_type(rxd.wb.
59 diff --git a/lib/librte_ether/rte_ether.h b/lib/librte_ether/rte_ether.h
60 index 07c17d7..fd646ec 100644
61 --- a/lib/librte_ether/rte_ether.h
62 +++ b/lib/librte_ether/rte_ether.h
63 @@ -332,6 +332,9 @@ struct vxlan_hdr {
64  #define ETHER_TYPE_1588 0x88F7 /**< IEEE 802.1AS 1588 Precise Time Protocol. */
65  #define ETHER_TYPE_SLOW 0x8809 /**< Slow protocols (LACP and Marker). */
66  #define ETHER_TYPE_TEB  0x6558 /**< Transparent Ethernet Bridging. */
67 +#define ETHER_TYPE_VLAN_AD     0x88a8 /**< IEEE 802.1AD VLAN tagging. */
68 +#define ETHER_TYPE_VLAN_9100   0x9100 /**< VLAN 0x9100 tagging. */
69 +#define ETHER_TYPE_VLAN_9200   0x9200 /**< VLAN 0x9200 tagging. */
70  
71  #define ETHER_VXLAN_HLEN (sizeof(struct udp_hdr) + sizeof(struct vxlan_hdr))
72  /**< VXLAN tunnel header length. */
73 -- 
74 2.5.0
75