All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net/core: Make bpf_skb_adjust_room BPF helper available for packets with non IPv4 or IPv6 payload
@ 2022-05-05 22:06 Wille Kuutti
  2022-05-09 20:24 ` Martin KaFai Lau
  0 siblings, 1 reply; 2+ messages in thread
From: Wille Kuutti @ 2022-05-05 22:06 UTC (permalink / raw)
  To: 'Alexei Starovoitov', 'Daniel Borkmann',
	'Andrii Nakryiko', 'Martin KaFai Lau',
	'Song Liu', 'Yonghong Song',
	'John Fastabend', 'KP Singh',
	'David S. Miller', 'Eric Dumazet',
	'Jakub Kicinski', 'Paolo Abeni',
	netdev, bpf, linux-kernel

Network traffic is not limited to only IPv4 and IPv6 protocols, but several
other L3 networking protocols are in common use in several
applications and deployment scenarios which also could utilize BPF. This
change enables the bpf_skb_adjust_room BPF helper to adjust the
room after the MAC header using BPF_ADJ_ROOM_MAC option for packets with any
L3 payload. For BPF_ADJ_ROOM_NET option only IPv4 and IPv6 are
still supported as each L3 protocol would need it's own logic to determine
the length of the L3 header to enable adjustment after the L3
headers.

Signed-off-by: Wille Kuutti <wille.kuutti@kuutti.com>
---
net/core/filter.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/net/core/filter.c b/net/core/filter.c
index 64470a727ef7..c6790a763c9b 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -3362,7 +3362,7 @@ static u32 bpf_skb_net_base_len(const struct sk_buff
*skb)
        case htons(ETH_P_IPV6):
                return sizeof(struct ipv6hdr);
        default:
-               return ~0U;
+               return 0U;
        }
}

@@ -3582,7 +3582,8 @@ BPF_CALL_4(bpf_skb_adjust_room, struct sk_buff *, skb,
s32, len_diff,
        if (unlikely(len_diff_abs > 0xfffU))
                return -EFAULT;
        if (unlikely(proto != htons(ETH_P_IP) &&
-                    proto != htons(ETH_P_IPV6)))
+                       proto != htons(ETH_P_IPV6) &&
+                       mode != BPF_ADJ_ROOM_MAC))
                return -ENOTSUPP;

        off = skb_mac_header_len(skb);
--
2.32.0



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] net/core: Make bpf_skb_adjust_room BPF helper available for packets with non IPv4 or IPv6 payload
  2022-05-05 22:06 [PATCH] net/core: Make bpf_skb_adjust_room BPF helper available for packets with non IPv4 or IPv6 payload Wille Kuutti
@ 2022-05-09 20:24 ` Martin KaFai Lau
  0 siblings, 0 replies; 2+ messages in thread
From: Martin KaFai Lau @ 2022-05-09 20:24 UTC (permalink / raw)
  To: Wille Kuutti
  Cc: 'Alexei Starovoitov', 'Daniel Borkmann',
	'Andrii Nakryiko', 'Song Liu',
	'Yonghong Song', 'John Fastabend',
	'KP Singh', 'David S. Miller',
	'Eric Dumazet', 'Jakub Kicinski',
	'Paolo Abeni',
	netdev, bpf, linux-kernel

On Fri, May 06, 2022 at 01:06:20AM +0300, Wille Kuutti wrote:
> Network traffic is not limited to only IPv4 and IPv6 protocols, but several
> other L3 networking protocols are in common use in several
> applications and deployment scenarios which also could utilize BPF. This
> change enables the bpf_skb_adjust_room BPF helper to adjust the
> room after the MAC header using BPF_ADJ_ROOM_MAC option for packets with any
> L3 payload. For BPF_ADJ_ROOM_NET option only IPv4 and IPv6 are
> still supported as each L3 protocol would need it's own logic to determine
> the length of the L3 header to enable adjustment after the L3
> headers.
What are the non IPv4/6 use cases ? selftests are required for at least
some of these use cases.

Please tag the 'Subject' with bpf-next.

> Signed-off-by: Wille Kuutti <wille.kuutti@kuutti.com>
> ---
> net/core/filter.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/net/core/filter.c b/net/core/filter.c
> index 64470a727ef7..c6790a763c9b 100644
> --- a/net/core/filter.c
> +++ b/net/core/filter.c
> @@ -3362,7 +3362,7 @@ static u32 bpf_skb_net_base_len(const struct sk_buff
> *skb)
>         case htons(ETH_P_IPV6):
>                 return sizeof(struct ipv6hdr);
>         default:
> -               return ~0U;
> +               return 0U;
Does it affect the len_min test in bpf_skb_adjust_room ?

>         }
> }
> 
> @@ -3582,7 +3582,8 @@ BPF_CALL_4(bpf_skb_adjust_room, struct sk_buff *, skb,
> s32, len_diff,
>         if (unlikely(len_diff_abs > 0xfffU))
>                 return -EFAULT;
>         if (unlikely(proto != htons(ETH_P_IP) &&
> -                    proto != htons(ETH_P_IPV6)))
> +                       proto != htons(ETH_P_IPV6) &&
> +                       mode != BPF_ADJ_ROOM_MAC))
>                 return -ENOTSUPP;
> 
>         off = skb_mac_header_len(skb);
> --
> 2.32.0
> 
> 

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-05-09 20:30 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-05 22:06 [PATCH] net/core: Make bpf_skb_adjust_room BPF helper available for packets with non IPv4 or IPv6 payload Wille Kuutti
2022-05-09 20:24 ` Martin KaFai Lau

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.