Re: [PATCH v2 net-next 2/2] net: bonding, dummy, ifb, team: advertise NETIF_F_GSO_SOFTWARE

From: Willem de Bruijn
Date: Mon Nov 02 2020 - 11:31:05 EST


On Sun, Nov 1, 2020 at 8:17 AM Alexander Lobakin <alobakin@xxxxx> wrote:
>
> Virtual netdevs should use NETIF_F_GSO_SOFTWARE to forward GSO skbs
> as-is and let the final drivers deal with them when supported.
> Also remove NETIF_F_GSO_UDP_L4 from bonding and team drivers as it's
> now included in the "software" list.

The rationale is that it is okay to advertise these features with
software fallback as bonding/teaming "hardware" features, because
there will always be a downstream device for which they will be
implemented, possibly in the software fallback, correct?

That does not apply to dummy or IFB. I guess dummy is fine, because
xmit is a black hole, and IFB because ingress can safely handle these
packets? How did you arrive at the choice of changing these two, of
all virtual devices?

>
> Suggested-by: Willem de Bruijn <willemb@xxxxxxxxxx>
> Signed-off-by: Alexander Lobakin <alobakin@xxxxx>
> ---
> drivers/net/bonding/bond_main.c | 11 +++++------
> drivers/net/dummy.c | 2 +-
> drivers/net/ifb.c | 3 +--
> drivers/net/team/team.c | 9 ++++-----
> 4 files changed, 11 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
> index 84ecbc6fa0ff..71c9677d135f 100644
> --- a/drivers/net/bonding/bond_main.c
> +++ b/drivers/net/bonding/bond_main.c
> @@ -1228,14 +1228,14 @@ static netdev_features_t bond_fix_features(struct net_device *dev,
> }
>
> #define BOND_VLAN_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \
> - NETIF_F_FRAGLIST | NETIF_F_ALL_TSO | \
> + NETIF_F_FRAGLIST | NETIF_F_GSO_SOFTWARE | \
> NETIF_F_HIGHDMA | NETIF_F_LRO)
>
> #define BOND_ENC_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \
> - NETIF_F_RXCSUM | NETIF_F_ALL_TSO)
> + NETIF_F_RXCSUM | NETIF_F_GSO_SOFTWARE)
>
> #define BOND_MPLS_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \
> - NETIF_F_ALL_TSO)
> + NETIF_F_GSO_SOFTWARE)
>
>
> static void bond_compute_features(struct bonding *bond)
> @@ -1291,8 +1291,7 @@ static void bond_compute_features(struct bonding *bond)
> bond_dev->vlan_features = vlan_features;
> bond_dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL |
> NETIF_F_HW_VLAN_CTAG_TX |
> - NETIF_F_HW_VLAN_STAG_TX |
> - NETIF_F_GSO_UDP_L4;
> + NETIF_F_HW_VLAN_STAG_TX;
> #ifdef CONFIG_XFRM_OFFLOAD
> bond_dev->hw_enc_features |= xfrm_features;
> #endif /* CONFIG_XFRM_OFFLOAD */
> @@ -4721,7 +4720,7 @@ void bond_setup(struct net_device *bond_dev)
> NETIF_F_HW_VLAN_CTAG_RX |
> NETIF_F_HW_VLAN_CTAG_FILTER;
>
> - bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL | NETIF_F_GSO_UDP_L4;
> + bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL;
> #ifdef CONFIG_XFRM_OFFLOAD
> bond_dev->hw_features |= BOND_XFRM_FEATURES;
> #endif /* CONFIG_XFRM_OFFLOAD */
> diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
> index bab3a9bb5e6f..f82ad7419508 100644
> --- a/drivers/net/dummy.c
> +++ b/drivers/net/dummy.c
> @@ -124,7 +124,7 @@ static void dummy_setup(struct net_device *dev)
> dev->flags &= ~IFF_MULTICAST;
> dev->priv_flags |= IFF_LIVE_ADDR_CHANGE | IFF_NO_QUEUE;
> dev->features |= NETIF_F_SG | NETIF_F_FRAGLIST;
> - dev->features |= NETIF_F_ALL_TSO;
> + dev->features |= NETIF_F_GSO_SOFTWARE;
> dev->features |= NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_LLTX;
> dev->features |= NETIF_F_GSO_ENCAP_ALL;
> dev->hw_features |= dev->features;
> diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
> index 7fe306e76281..fa63d4dee0ba 100644
> --- a/drivers/net/ifb.c
> +++ b/drivers/net/ifb.c
> @@ -187,8 +187,7 @@ static const struct net_device_ops ifb_netdev_ops = {
> };
>
> #define IFB_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | NETIF_F_FRAGLIST | \
> - NETIF_F_TSO_ECN | NETIF_F_TSO | NETIF_F_TSO6 | \
> - NETIF_F_GSO_ENCAP_ALL | \
> + NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ENCAP_ALL | \
> NETIF_F_HIGHDMA | NETIF_F_HW_VLAN_CTAG_TX | \
> NETIF_F_HW_VLAN_STAG_TX)
>
> diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
> index 07f1f3933927..b4092127a92c 100644
> --- a/drivers/net/team/team.c
> +++ b/drivers/net/team/team.c
> @@ -975,11 +975,11 @@ static void team_port_disable(struct team *team,
> }
>
> #define TEAM_VLAN_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \
> - NETIF_F_FRAGLIST | NETIF_F_ALL_TSO | \
> + NETIF_F_FRAGLIST | NETIF_F_GSO_SOFTWARE | \
> NETIF_F_HIGHDMA | NETIF_F_LRO)
>
> #define TEAM_ENC_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \
> - NETIF_F_RXCSUM | NETIF_F_ALL_TSO)
> + NETIF_F_RXCSUM | NETIF_F_GSO_SOFTWARE)
>
> static void __team_compute_features(struct team *team)
> {
> @@ -1009,8 +1009,7 @@ static void __team_compute_features(struct team *team)
> team->dev->vlan_features = vlan_features;
> team->dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL |
> NETIF_F_HW_VLAN_CTAG_TX |
> - NETIF_F_HW_VLAN_STAG_TX |
> - NETIF_F_GSO_UDP_L4;
> + NETIF_F_HW_VLAN_STAG_TX;
> team->dev->hard_header_len = max_hard_header_len;
>
> team->dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
> @@ -2175,7 +2174,7 @@ static void team_setup(struct net_device *dev)
> NETIF_F_HW_VLAN_CTAG_RX |
> NETIF_F_HW_VLAN_CTAG_FILTER;
>
> - dev->hw_features |= NETIF_F_GSO_ENCAP_ALL | NETIF_F_GSO_UDP_L4;
> + dev->hw_features |= NETIF_F_GSO_ENCAP_ALL;
> dev->features |= dev->hw_features;
> dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX;
> }
> --
> 2.29.2
>
>