mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 06:02:05 +00:00
xfrm: gso partial offload support
This patch introduces support for gso partial ESP offload. Signed-off-by: Boris Pismenny <borisp@mellanox.com> Signed-off-by: Raed Salem <raeds@mellanox.com> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
parent
e6d1407013
commit
65fd2c2afa
@ -138,9 +138,11 @@ static struct sk_buff *esp4_gso_segment(struct sk_buff *skb,
|
||||
|
||||
skb->encap_hdr_csum = 1;
|
||||
|
||||
if (!(features & NETIF_F_HW_ESP) || x->xso.dev != skb->dev)
|
||||
if ((!(skb->dev->gso_partial_features & NETIF_F_HW_ESP) &&
|
||||
!(features & NETIF_F_HW_ESP)) || x->xso.dev != skb->dev)
|
||||
esp_features = features & ~(NETIF_F_SG | NETIF_F_CSUM_MASK);
|
||||
else if (!(features & NETIF_F_HW_ESP_TX_CSUM))
|
||||
else if (!(features & NETIF_F_HW_ESP_TX_CSUM) &&
|
||||
!(skb->dev->gso_partial_features & NETIF_F_HW_ESP_TX_CSUM))
|
||||
esp_features = features & ~NETIF_F_CSUM_MASK;
|
||||
|
||||
xo->flags |= XFRM_GSO_SEGMENT;
|
||||
@ -181,7 +183,9 @@ static int esp_xmit(struct xfrm_state *x, struct sk_buff *skb, netdev_features_
|
||||
if (!xo)
|
||||
return -EINVAL;
|
||||
|
||||
if (!(features & NETIF_F_HW_ESP) || x->xso.dev != skb->dev) {
|
||||
if ((!(features & NETIF_F_HW_ESP) &&
|
||||
!(skb->dev->gso_partial_features & NETIF_F_HW_ESP)) ||
|
||||
x->xso.dev != skb->dev) {
|
||||
xo->flags |= CRYPTO_FALLBACK;
|
||||
hw_offload = false;
|
||||
}
|
||||
|
@ -78,6 +78,7 @@ struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t featur
|
||||
}
|
||||
|
||||
if (!skb->next) {
|
||||
esp_features |= skb->dev->gso_partial_features;
|
||||
x->outer_mode->xmit(x, skb);
|
||||
|
||||
xo->flags |= XFRM_DEV_RESUME;
|
||||
@ -101,6 +102,8 @@ struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t featur
|
||||
|
||||
do {
|
||||
struct sk_buff *nskb = skb2->next;
|
||||
|
||||
esp_features |= skb->dev->gso_partial_features;
|
||||
skb_mark_not_on_list(skb2);
|
||||
|
||||
xo = xfrm_offload(skb2);
|
||||
|
Loading…
Reference in New Issue
Block a user