net: define gso types for IPx over IPv4 and IPv6
This patch defines two new GSO definitions SKB_GSO_IPXIP4 and SKB_GSO_IPXIP6 along with corresponding NETIF_F_GSO_IPXIP4 and NETIF_F_GSO_IPXIP6. These are used to described IP in IP tunnel and what the outer protocol is. The inner protocol can be deduced from other GSO types (e.g. SKB_GSO_TCPV4 and SKB_GSO_TCPV6). The GSO types of SKB_GSO_IPIP and SKB_GSO_SIT are removed (these are both instances of SKB_GSO_IPXIP4). SKB_GSO_IPXIP6 will be used when support for GSO with IP encapsulation over IPv6 is added. Signed-off-by: Tom Herbert <tom@herbertland.com> Acked-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5c7cdf339a
commit
7e13318daa
19 changed files with 37 additions and 50 deletions
|
@ -13259,12 +13259,11 @@ static int bnx2x_init_dev(struct bnx2x *bp, struct pci_dev *pdev,
|
|||
NETIF_F_RXHASH | NETIF_F_HW_VLAN_CTAG_TX;
|
||||
if (!chip_is_e1x) {
|
||||
dev->hw_features |= NETIF_F_GSO_GRE | NETIF_F_GSO_UDP_TUNNEL |
|
||||
NETIF_F_GSO_IPIP | NETIF_F_GSO_SIT;
|
||||
NETIF_F_GSO_IPXIP4;
|
||||
dev->hw_enc_features =
|
||||
NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG |
|
||||
NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 |
|
||||
NETIF_F_GSO_IPIP |
|
||||
NETIF_F_GSO_SIT |
|
||||
NETIF_F_GSO_IPXIP4 |
|
||||
NETIF_F_GSO_GRE | NETIF_F_GSO_UDP_TUNNEL;
|
||||
}
|
||||
|
||||
|
|
|
@ -6311,7 +6311,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG |
|
||||
NETIF_F_TSO | NETIF_F_TSO6 |
|
||||
NETIF_F_GSO_UDP_TUNNEL | NETIF_F_GSO_GRE |
|
||||
NETIF_F_GSO_IPIP | NETIF_F_GSO_SIT |
|
||||
NETIF_F_GSO_IPXIP4 |
|
||||
NETIF_F_GSO_UDP_TUNNEL_CSUM | NETIF_F_GSO_GRE_CSUM |
|
||||
NETIF_F_GSO_PARTIAL | NETIF_F_RXHASH |
|
||||
NETIF_F_RXCSUM | NETIF_F_LRO | NETIF_F_GRO;
|
||||
|
@ -6321,8 +6321,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
NETIF_F_TSO | NETIF_F_TSO6 |
|
||||
NETIF_F_GSO_UDP_TUNNEL | NETIF_F_GSO_GRE |
|
||||
NETIF_F_GSO_UDP_TUNNEL_CSUM | NETIF_F_GSO_GRE_CSUM |
|
||||
NETIF_F_GSO_IPIP | NETIF_F_GSO_SIT |
|
||||
NETIF_F_GSO_PARTIAL;
|
||||
NETIF_F_GSO_IPXIP4 | NETIF_F_GSO_PARTIAL;
|
||||
dev->gso_partial_features = NETIF_F_GSO_UDP_TUNNEL_CSUM |
|
||||
NETIF_F_GSO_GRE_CSUM;
|
||||
dev->vlan_features = dev->hw_features | NETIF_F_HIGHDMA;
|
||||
|
|
|
@ -9083,8 +9083,7 @@ static int i40e_config_netdev(struct i40e_vsi *vsi)
|
|||
NETIF_F_TSO6 |
|
||||
NETIF_F_GSO_GRE |
|
||||
NETIF_F_GSO_GRE_CSUM |
|
||||
NETIF_F_GSO_IPIP |
|
||||
NETIF_F_GSO_SIT |
|
||||
NETIF_F_GSO_IPXIP4 |
|
||||
NETIF_F_GSO_UDP_TUNNEL |
|
||||
NETIF_F_GSO_UDP_TUNNEL_CSUM |
|
||||
NETIF_F_GSO_PARTIAL |
|
||||
|
|
|
@ -2284,8 +2284,7 @@ static int i40e_tso(struct sk_buff *skb, u8 *hdr_len, u64 *cd_type_cmd_tso_mss)
|
|||
|
||||
if (skb_shinfo(skb)->gso_type & (SKB_GSO_GRE |
|
||||
SKB_GSO_GRE_CSUM |
|
||||
SKB_GSO_IPIP |
|
||||
SKB_GSO_SIT |
|
||||
SKB_GSO_IPXIP4 |
|
||||
SKB_GSO_UDP_TUNNEL |
|
||||
SKB_GSO_UDP_TUNNEL_CSUM)) {
|
||||
if (!(skb_shinfo(skb)->gso_type & SKB_GSO_PARTIAL) &&
|
||||
|
|
|
@ -1559,8 +1559,7 @@ static int i40e_tso(struct sk_buff *skb, u8 *hdr_len, u64 *cd_type_cmd_tso_mss)
|
|||
|
||||
if (skb_shinfo(skb)->gso_type & (SKB_GSO_GRE |
|
||||
SKB_GSO_GRE_CSUM |
|
||||
SKB_GSO_IPIP |
|
||||
SKB_GSO_SIT |
|
||||
SKB_GSO_IPXIP4 |
|
||||
SKB_GSO_UDP_TUNNEL |
|
||||
SKB_GSO_UDP_TUNNEL_CSUM)) {
|
||||
if (!(skb_shinfo(skb)->gso_type & SKB_GSO_PARTIAL) &&
|
||||
|
|
|
@ -2230,8 +2230,7 @@ int i40evf_process_config(struct i40evf_adapter *adapter)
|
|||
NETIF_F_TSO6 |
|
||||
NETIF_F_GSO_GRE |
|
||||
NETIF_F_GSO_GRE_CSUM |
|
||||
NETIF_F_GSO_IPIP |
|
||||
NETIF_F_GSO_SIT |
|
||||
NETIF_F_GSO_IPXIP4 |
|
||||
NETIF_F_GSO_UDP_TUNNEL |
|
||||
NETIF_F_GSO_UDP_TUNNEL_CSUM |
|
||||
NETIF_F_GSO_PARTIAL |
|
||||
|
|
|
@ -2418,8 +2418,7 @@ static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
#define IGB_GSO_PARTIAL_FEATURES (NETIF_F_GSO_GRE | \
|
||||
NETIF_F_GSO_GRE_CSUM | \
|
||||
NETIF_F_GSO_IPIP | \
|
||||
NETIF_F_GSO_SIT | \
|
||||
NETIF_F_GSO_IPXIP4 | \
|
||||
NETIF_F_GSO_UDP_TUNNEL | \
|
||||
NETIF_F_GSO_UDP_TUNNEL_CSUM)
|
||||
|
||||
|
|
|
@ -2763,8 +2763,7 @@ static int igbvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
#define IGBVF_GSO_PARTIAL_FEATURES (NETIF_F_GSO_GRE | \
|
||||
NETIF_F_GSO_GRE_CSUM | \
|
||||
NETIF_F_GSO_IPIP | \
|
||||
NETIF_F_GSO_SIT | \
|
||||
NETIF_F_GSO_IPXIP4 | \
|
||||
NETIF_F_GSO_UDP_TUNNEL | \
|
||||
NETIF_F_GSO_UDP_TUNNEL_CSUM)
|
||||
|
||||
|
|
|
@ -9482,8 +9482,7 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
#define IXGBE_GSO_PARTIAL_FEATURES (NETIF_F_GSO_GRE | \
|
||||
NETIF_F_GSO_GRE_CSUM | \
|
||||
NETIF_F_GSO_IPIP | \
|
||||
NETIF_F_GSO_SIT | \
|
||||
NETIF_F_GSO_IPXIP4 | \
|
||||
NETIF_F_GSO_UDP_TUNNEL | \
|
||||
NETIF_F_GSO_UDP_TUNNEL_CSUM)
|
||||
|
||||
|
|
|
@ -4062,8 +4062,7 @@ static int ixgbevf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
#define IXGBEVF_GSO_PARTIAL_FEATURES (NETIF_F_GSO_GRE | \
|
||||
NETIF_F_GSO_GRE_CSUM | \
|
||||
NETIF_F_GSO_IPIP | \
|
||||
NETIF_F_GSO_SIT | \
|
||||
NETIF_F_GSO_IPXIP4 | \
|
||||
NETIF_F_GSO_UDP_TUNNEL | \
|
||||
NETIF_F_GSO_UDP_TUNNEL_CSUM)
|
||||
|
||||
|
|
|
@ -44,8 +44,8 @@ enum {
|
|||
NETIF_F_FSO_BIT, /* ... FCoE segmentation */
|
||||
NETIF_F_GSO_GRE_BIT, /* ... GRE with TSO */
|
||||
NETIF_F_GSO_GRE_CSUM_BIT, /* ... GRE with csum with TSO */
|
||||
NETIF_F_GSO_IPIP_BIT, /* ... IPIP tunnel with TSO */
|
||||
NETIF_F_GSO_SIT_BIT, /* ... SIT tunnel with TSO */
|
||||
NETIF_F_GSO_IPXIP4_BIT, /* ... IP4 or IP6 over IP4 with TSO */
|
||||
NETIF_F_GSO_IPXIP6_BIT, /* ... IP4 or IP6 over IP6 with TSO */
|
||||
NETIF_F_GSO_UDP_TUNNEL_BIT, /* ... UDP TUNNEL with TSO */
|
||||
NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT,/* ... UDP TUNNEL with TSO & CSUM */
|
||||
NETIF_F_GSO_PARTIAL_BIT, /* ... Only segment inner-most L4
|
||||
|
@ -121,8 +121,8 @@ enum {
|
|||
#define NETIF_F_RXALL __NETIF_F(RXALL)
|
||||
#define NETIF_F_GSO_GRE __NETIF_F(GSO_GRE)
|
||||
#define NETIF_F_GSO_GRE_CSUM __NETIF_F(GSO_GRE_CSUM)
|
||||
#define NETIF_F_GSO_IPIP __NETIF_F(GSO_IPIP)
|
||||
#define NETIF_F_GSO_SIT __NETIF_F(GSO_SIT)
|
||||
#define NETIF_F_GSO_IPXIP4 __NETIF_F(GSO_IPXIP4)
|
||||
#define NETIF_F_GSO_IPXIP6 __NETIF_F(GSO_IPXIP6)
|
||||
#define NETIF_F_GSO_UDP_TUNNEL __NETIF_F(GSO_UDP_TUNNEL)
|
||||
#define NETIF_F_GSO_UDP_TUNNEL_CSUM __NETIF_F(GSO_UDP_TUNNEL_CSUM)
|
||||
#define NETIF_F_TSO_MANGLEID __NETIF_F(TSO_MANGLEID)
|
||||
|
@ -200,8 +200,8 @@ enum {
|
|||
|
||||
#define NETIF_F_GSO_ENCAP_ALL (NETIF_F_GSO_GRE | \
|
||||
NETIF_F_GSO_GRE_CSUM | \
|
||||
NETIF_F_GSO_IPIP | \
|
||||
NETIF_F_GSO_SIT | \
|
||||
NETIF_F_GSO_IPXIP4 | \
|
||||
NETIF_F_GSO_IPXIP6 | \
|
||||
NETIF_F_GSO_UDP_TUNNEL | \
|
||||
NETIF_F_GSO_UDP_TUNNEL_CSUM)
|
||||
|
||||
|
|
|
@ -4006,8 +4006,8 @@ static inline bool net_gso_ok(netdev_features_t features, int gso_type)
|
|||
BUILD_BUG_ON(SKB_GSO_FCOE != (NETIF_F_FSO >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_GRE != (NETIF_F_GSO_GRE >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_GRE_CSUM != (NETIF_F_GSO_GRE_CSUM >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_IPIP != (NETIF_F_GSO_IPIP >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_SIT != (NETIF_F_GSO_SIT >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_IPXIP4 != (NETIF_F_GSO_IPXIP4 >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_IPXIP6 != (NETIF_F_GSO_IPXIP6 >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_UDP_TUNNEL != (NETIF_F_GSO_UDP_TUNNEL >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_UDP_TUNNEL_CSUM != (NETIF_F_GSO_UDP_TUNNEL_CSUM >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_PARTIAL != (NETIF_F_GSO_PARTIAL >> NETIF_F_GSO_SHIFT));
|
||||
|
|
|
@ -471,9 +471,9 @@ enum {
|
|||
|
||||
SKB_GSO_GRE_CSUM = 1 << 8,
|
||||
|
||||
SKB_GSO_IPIP = 1 << 9,
|
||||
SKB_GSO_IPXIP4 = 1 << 9,
|
||||
|
||||
SKB_GSO_SIT = 1 << 10,
|
||||
SKB_GSO_IPXIP6 = 1 << 10,
|
||||
|
||||
SKB_GSO_UDP_TUNNEL = 1 << 11,
|
||||
|
||||
|
|
|
@ -84,8 +84,8 @@ static const char netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN]
|
|||
[NETIF_F_FSO_BIT] = "tx-fcoe-segmentation",
|
||||
[NETIF_F_GSO_GRE_BIT] = "tx-gre-segmentation",
|
||||
[NETIF_F_GSO_GRE_CSUM_BIT] = "tx-gre-csum-segmentation",
|
||||
[NETIF_F_GSO_IPIP_BIT] = "tx-ipip-segmentation",
|
||||
[NETIF_F_GSO_SIT_BIT] = "tx-sit-segmentation",
|
||||
[NETIF_F_GSO_IPXIP4_BIT] = "tx-ipxip4-segmentation",
|
||||
[NETIF_F_GSO_IPXIP6_BIT] = "tx-ipxip6-segmentation",
|
||||
[NETIF_F_GSO_UDP_TUNNEL_BIT] = "tx-udp_tnl-segmentation",
|
||||
[NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT] = "tx-udp_tnl-csum-segmentation",
|
||||
[NETIF_F_GSO_PARTIAL_BIT] = "tx-gso-partial",
|
||||
|
|
|
@ -1483,7 +1483,7 @@ static int inet_gro_complete(struct sk_buff *skb, int nhoff)
|
|||
static int ipip_gro_complete(struct sk_buff *skb, int nhoff)
|
||||
{
|
||||
skb->encapsulation = 1;
|
||||
skb_shinfo(skb)->gso_type |= SKB_GSO_IPIP;
|
||||
skb_shinfo(skb)->gso_type |= SKB_GSO_IPXIP4;
|
||||
return inet_gro_complete(skb, nhoff);
|
||||
}
|
||||
|
||||
|
|
|
@ -219,7 +219,7 @@ static netdev_tx_t ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
if (unlikely(skb->protocol != htons(ETH_P_IP)))
|
||||
goto tx_error;
|
||||
|
||||
if (iptunnel_handle_offloads(skb, SKB_GSO_IPIP))
|
||||
if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP4))
|
||||
goto tx_error;
|
||||
|
||||
skb_set_inner_ipproto(skb, IPPROTO_IPIP);
|
||||
|
|
|
@ -86,7 +86,7 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb,
|
|||
proto = ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr);
|
||||
|
||||
if (skb->encapsulation &&
|
||||
skb_shinfo(skb)->gso_type & (SKB_GSO_SIT|SKB_GSO_IPIP))
|
||||
skb_shinfo(skb)->gso_type & (SKB_GSO_IPXIP4 | SKB_GSO_IPXIP6))
|
||||
udpfrag = proto == IPPROTO_UDP && encap;
|
||||
else
|
||||
udpfrag = proto == IPPROTO_UDP && !skb->encapsulation;
|
||||
|
@ -294,7 +294,7 @@ static int ipv6_gro_complete(struct sk_buff *skb, int nhoff)
|
|||
static int sit_gro_complete(struct sk_buff *skb, int nhoff)
|
||||
{
|
||||
skb->encapsulation = 1;
|
||||
skb_shinfo(skb)->gso_type |= SKB_GSO_SIT;
|
||||
skb_shinfo(skb)->gso_type |= SKB_GSO_IPXIP4;
|
||||
return ipv6_gro_complete(skb, nhoff);
|
||||
}
|
||||
|
||||
|
|
|
@ -913,7 +913,7 @@ static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb,
|
|||
goto tx_error;
|
||||
}
|
||||
|
||||
if (iptunnel_handle_offloads(skb, SKB_GSO_SIT)) {
|
||||
if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP4)) {
|
||||
ip_rt_put(rt);
|
||||
goto tx_error;
|
||||
}
|
||||
|
@ -1000,7 +1000,7 @@ static netdev_tx_t ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
struct ip_tunnel *tunnel = netdev_priv(dev);
|
||||
const struct iphdr *tiph = &tunnel->parms.iph;
|
||||
|
||||
if (iptunnel_handle_offloads(skb, SKB_GSO_IPIP))
|
||||
if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP4))
|
||||
goto tx_error;
|
||||
|
||||
skb_set_inner_ipproto(skb, IPPROTO_IPIP);
|
||||
|
|
|
@ -932,17 +932,14 @@ ip_vs_prepare_tunneled_skb(struct sk_buff *skb, int skb_af,
|
|||
|
||||
static inline int __tun_gso_type_mask(int encaps_af, int orig_af)
|
||||
{
|
||||
if (encaps_af == AF_INET) {
|
||||
if (orig_af == AF_INET)
|
||||
return SKB_GSO_IPIP;
|
||||
|
||||
return SKB_GSO_SIT;
|
||||
switch (encaps_af) {
|
||||
case AF_INET:
|
||||
return SKB_GSO_IPXIP4;
|
||||
case AF_INET6:
|
||||
return SKB_GSO_IPXIP6;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* GSO: we need to provide proper SKB_GSO_ value for IPv6:
|
||||
* SKB_GSO_SIT/IPV6
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue