Merge branch 'udp-allow-forwarding-of-plain-non-fraglisted-udp-gro-packets'
Alexander Lobakin says: ==================== udp: allow forwarding of plain (non-fraglisted) UDP GRO packets This series allows to form UDP GRO packets in cases without sockets (for forwarding). To not change the current datapath, this is performed only when the new corresponding netdev feature is enabled via Ethtool (and fraglisted GRO is disabled). Prior to this point, only fraglisted UDP GRO was available. Plain UDP GRO shows better forwarding performance when a target NIC is capable of GSO UDP offload. Since v3 [2]: - rename introduced netdev feature to reflect that it targets forwarding and don't touch fraglisted GRO at all (Willem de Bruijn). Since v2 [1]: - convert to a series; - new: add new netdev_feature to explicitly enable/disable UDP GRO when there is no socket, defaults to off (Paolo Abeni). Since v1 [0]: - drop redundant 'if (sk)' check (Alexander Duyck); - add a ref in the commit message to one more commit that was an important step for UDP GRO forwarding. [0] https://lore.kernel.org/netdev/20210112211536.261172-1-alobakin@pm.me [1] https://lore.kernel.org/netdev/20210113103232.4761-1-alobakin@pm.me [2] https://lore.kernel.org/netdev/20210118193122.87271-1-alobakin@pm.me ==================== Link: https://lore.kernel.org/r/20210122181909.36340-1-alobakin@pm.me Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
acb4151f5d
@ -84,6 +84,7 @@ enum {
|
||||
NETIF_F_GRO_FRAGLIST_BIT, /* Fraglist GRO */
|
||||
|
||||
NETIF_F_HW_MACSEC_BIT, /* Offload MACsec operations */
|
||||
NETIF_F_GRO_UDP_FWD_BIT, /* Allow UDP GRO for forwarding */
|
||||
|
||||
/*
|
||||
* Add your fresh new feature above and remember to update
|
||||
@ -157,6 +158,7 @@ enum {
|
||||
#define NETIF_F_GRO_FRAGLIST __NETIF_F(GRO_FRAGLIST)
|
||||
#define NETIF_F_GSO_FRAGLIST __NETIF_F(GSO_FRAGLIST)
|
||||
#define NETIF_F_HW_MACSEC __NETIF_F(HW_MACSEC)
|
||||
#define NETIF_F_GRO_UDP_FWD __NETIF_F(GRO_UDP_FWD)
|
||||
|
||||
/* Finds the next feature with the highest number of the range of start till 0.
|
||||
*/
|
||||
@ -234,7 +236,7 @@ static inline int find_next_netdev_feature(u64 feature, unsigned long start)
|
||||
#define NETIF_F_SOFT_FEATURES (NETIF_F_GSO | NETIF_F_GRO)
|
||||
|
||||
/* Changeable features with no special hardware requirements that defaults to off. */
|
||||
#define NETIF_F_SOFT_FEATURES_OFF NETIF_F_GRO_FRAGLIST
|
||||
#define NETIF_F_SOFT_FEATURES_OFF (NETIF_F_GRO_FRAGLIST | NETIF_F_GRO_UDP_FWD)
|
||||
|
||||
#define NETIF_F_VLAN_FEATURES (NETIF_F_HW_VLAN_CTAG_FILTER | \
|
||||
NETIF_F_HW_VLAN_CTAG_RX | \
|
||||
|
@ -68,6 +68,7 @@ const char netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN] = {
|
||||
[NETIF_F_HW_TLS_RX_BIT] = "tls-hw-rx-offload",
|
||||
[NETIF_F_GRO_FRAGLIST_BIT] = "rx-gro-list",
|
||||
[NETIF_F_HW_MACSEC_BIT] = "macsec-hw-offload",
|
||||
[NETIF_F_GRO_UDP_FWD_BIT] = "rx-udp-gro-forwarding",
|
||||
};
|
||||
|
||||
const char
|
||||
|
@ -460,7 +460,8 @@ struct sk_buff *udp_gro_receive(struct list_head *head, struct sk_buff *skb,
|
||||
if (skb->dev->features & NETIF_F_GRO_FRAGLIST)
|
||||
NAPI_GRO_CB(skb)->is_flist = sk ? !udp_sk(sk)->gro_enabled: 1;
|
||||
|
||||
if ((sk && udp_sk(sk)->gro_enabled) || NAPI_GRO_CB(skb)->is_flist) {
|
||||
if ((!sk && (skb->dev->features & NETIF_F_GRO_UDP_FWD)) ||
|
||||
(sk && udp_sk(sk)->gro_enabled) || NAPI_GRO_CB(skb)->is_flist) {
|
||||
pp = call_gro_receive(udp_gro_receive_segment, head, skb);
|
||||
return pp;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user