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.
Suggested-by: Willem de Bruijn <[email protected]>
Signed-off-by: Alexander Lobakin <[email protected]>
---
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
On Sun, Nov 1, 2020 at 8:17 AM Alexander Lobakin <[email protected]> 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 <[email protected]>
> Signed-off-by: Alexander Lobakin <[email protected]>
> ---
> 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
>
>
From: Willem de Bruijn <[email protected]>
Date: Mon, 2 Nov 2020 11:30:17 -0500
Hi!
Thanks for the Ack.
> On Sun, Nov 1, 2020 at 8:17 AM Alexander Lobakin <[email protected]> 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?
Two points:
1. Exactly, dummy is just dummy, while ifb is an intermediate netdev to
share resources, so it should be as fine as with other virtual devs.
2. They both advertise NETIF_F_ALL_TSO | NETIF_F_GSO_ENCAP_ALL, which
assumes that they handle all GSO skbs just like the others (pass
them as is to the real drivers in case with ifb).
>>
>> Suggested-by: Willem de Bruijn <[email protected]>
>> Signed-off-by: Alexander Lobakin <[email protected]>
>> ---
>> 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
Al
On Mon, Nov 2, 2020 at 2:26 PM Alexander Lobakin <[email protected]> wrote:
>
> From: Willem de Bruijn <[email protected]>
> Date: Mon, 2 Nov 2020 11:30:17 -0500
>
> Hi!
> Thanks for the Ack.
>
> > On Sun, Nov 1, 2020 at 8:17 AM Alexander Lobakin <[email protected]> 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?
>
> Two points:
> 1. Exactly, dummy is just dummy, while ifb is an intermediate netdev to
> share resources, so it should be as fine as with other virtual devs.
> 2. They both advertise NETIF_F_ALL_TSO | NETIF_F_GSO_ENCAP_ALL, which
> assumes that they handle all GSO skbs just like the others (pass
> them as is to the real drivers in case with ifb).
There is no real driver in the case of ifb if it forwards to the
ingress path. But as discussed before, that can handle gso packets for
all these protocols, too.
> >>
> >> Suggested-by: Willem de Bruijn <[email protected]>
> >> Signed-off-by: Alexander Lobakin <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>