* [PATCH bpf-next 0/2] Add support to set window_clamp from bpf setsockops @ 2020-12-01 0:03 Prankur gupta 2020-12-01 0:03 ` [PATCH bpf-next 1/2] bpf: Adds support for setting window clamp Prankur gupta 2020-12-01 0:03 ` [PATCH bpf-next 2/2] selftests/bpf: Add Userspace tests for TCP_WINDOW_CLAMP Prankur gupta 0 siblings, 2 replies; 8+ messages in thread From: Prankur gupta @ 2020-12-01 0:03 UTC (permalink / raw) To: bpf; +Cc: kernel-team, netdev This patch contains support to set tcp window_field field from bpf setsockops. Prankur gupta (2): bpf: Adds support for setting window clamp selftests/bpf: Add Userspace tests for TCP_WINDOW_CLAMP net/core/filter.c | 8 +++++ tools/testing/selftests/bpf/bpf_tcp_helpers.h | 1 + .../selftests/bpf/prog_tests/tcpbpf_user.c | 4 +++ .../selftests/bpf/progs/test_tcpbpf_kern.c | 33 +++++++++++++++++++ tools/testing/selftests/bpf/test_tcpbpf.h | 2 ++ 5 files changed, 48 insertions(+) -- 2.24.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH bpf-next 1/2] bpf: Adds support for setting window clamp 2020-12-01 0:03 [PATCH bpf-next 0/2] Add support to set window_clamp from bpf setsockops Prankur gupta @ 2020-12-01 0:03 ` Prankur gupta 2020-12-01 1:34 ` Alexei Starovoitov 2020-12-01 0:03 ` [PATCH bpf-next 2/2] selftests/bpf: Add Userspace tests for TCP_WINDOW_CLAMP Prankur gupta 1 sibling, 1 reply; 8+ messages in thread From: Prankur gupta @ 2020-12-01 0:03 UTC (permalink / raw) To: bpf; +Cc: kernel-team, netdev Adds a new bpf_setsockopt for TCP sockets, TCP_BPF_WINDOW_CLAMP, which sets the maximum receiver window size. It will be useful for limiting receiver window based on RTT. Signed-off-by: Prankur gupta <prankgup@fb.com> --- net/core/filter.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/net/core/filter.c b/net/core/filter.c index 2ca5eecebacf..cb006962b677 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4910,6 +4910,14 @@ static int _bpf_setsockopt(struct sock *sk, int level, int optname, tp->notsent_lowat = val; sk->sk_write_space(sk); break; + case TCP_WINDOW_CLAMP: + if (val <= 0) + ret = -EINVAL; + else + tp->window_clamp = + max_t(int, val, + SOCK_MIN_RCVBUF / 2); + break; default: ret = -EINVAL; } -- 2.24.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH bpf-next 1/2] bpf: Adds support for setting window clamp 2020-12-01 0:03 ` [PATCH bpf-next 1/2] bpf: Adds support for setting window clamp Prankur gupta @ 2020-12-01 1:34 ` Alexei Starovoitov 2020-12-01 20:22 ` [PATCH bpf-next 0/2] Add support to set window_clamp from bpf setsockops Prankur gupta 0 siblings, 1 reply; 8+ messages in thread From: Alexei Starovoitov @ 2020-12-01 1:34 UTC (permalink / raw) To: Prankur gupta; +Cc: bpf, Kernel Team, Network Development On Mon, Nov 30, 2020 at 4:07 PM Prankur gupta <prankgup@fb.com> wrote: > > Adds a new bpf_setsockopt for TCP sockets, TCP_BPF_WINDOW_CLAMP, > which sets the maximum receiver window size. It will be useful for > limiting receiver window based on RTT. > > Signed-off-by: Prankur gupta <prankgup@fb.com> > --- > net/core/filter.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/net/core/filter.c b/net/core/filter.c > index 2ca5eecebacf..cb006962b677 100644 > --- a/net/core/filter.c > +++ b/net/core/filter.c > @@ -4910,6 +4910,14 @@ static int _bpf_setsockopt(struct sock *sk, int level, int optname, > tp->notsent_lowat = val; > sk->sk_write_space(sk); > break; > + case TCP_WINDOW_CLAMP: > + if (val <= 0) > + ret = -EINVAL; Why zero is not allowed? Normal setsockopt() allows it. > + else > + tp->window_clamp = > + max_t(int, val, > + SOCK_MIN_RCVBUF / 2); > + break; > default: > ret = -EINVAL; > } > -- > 2.24.1 > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH bpf-next 0/2] Add support to set window_clamp from bpf setsockops 2020-12-01 1:34 ` Alexei Starovoitov @ 2020-12-01 20:22 ` Prankur gupta 2020-12-02 1:30 ` Andrii Nakryiko 0 siblings, 1 reply; 8+ messages in thread From: Prankur gupta @ 2020-12-01 20:22 UTC (permalink / raw) To: alexei.starovoitov; +Cc: bpf, kernel-team, netdev, prankgup From: Prankur Gupta <prankgup@fb.com> No reason in particular. Updated the code (patch v2) to have logic as tcp setsockopt for tCP_WINDOW_CLAMP. PS: First time trying git send-em,ail, pleas elet me know if this is not the right way to reply. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH bpf-next 0/2] Add support to set window_clamp from bpf setsockops 2020-12-01 20:22 ` [PATCH bpf-next 0/2] Add support to set window_clamp from bpf setsockops Prankur gupta @ 2020-12-02 1:30 ` Andrii Nakryiko 0 siblings, 0 replies; 8+ messages in thread From: Andrii Nakryiko @ 2020-12-02 1:30 UTC (permalink / raw) To: Prankur gupta; +Cc: Alexei Starovoitov, bpf, Kernel Team, Networking On Tue, Dec 1, 2020 at 12:24 PM Prankur gupta <prankgup@fb.com> wrote: > > From: Prankur Gupta <prankgup@fb.com> > > No reason in particular. > Updated the code (patch v2) to have logic as tcp setsockopt for tCP_WINDOW_CLAMP. > > PS: First time trying git send-em,ail, pleas elet me know if this is not the right way to reply. I use send-email for sending patches only, I reply from Gmail or Thunderbird (from work account). The latter has a plain text mode, while Outlook doesn't. But also, you need to add v2 to each patch, not just cover letter. You can do that when using `git format-patch --subject-prefix='PATCH v2 bpf-next' ...`. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH bpf-next 2/2] selftests/bpf: Add Userspace tests for TCP_WINDOW_CLAMP 2020-12-01 0:03 [PATCH bpf-next 0/2] Add support to set window_clamp from bpf setsockops Prankur gupta 2020-12-01 0:03 ` [PATCH bpf-next 1/2] bpf: Adds support for setting window clamp Prankur gupta @ 2020-12-01 0:03 ` Prankur gupta 1 sibling, 0 replies; 8+ messages in thread From: Prankur gupta @ 2020-12-01 0:03 UTC (permalink / raw) To: bpf; +Cc: kernel-team, netdev Adding selftests for new added functionality to set TCP_WINDOW_CLAMP from bpf setsockopt. Signed-off-by: Prankur gupta <prankgup@fb.com> --- tools/testing/selftests/bpf/bpf_tcp_helpers.h | 1 + .../selftests/bpf/prog_tests/tcpbpf_user.c | 4 +++ .../selftests/bpf/progs/test_tcpbpf_kern.c | 33 +++++++++++++++++++ tools/testing/selftests/bpf/test_tcpbpf.h | 2 ++ 4 files changed, 40 insertions(+) diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/selftests/bpf/bpf_tcp_helpers.h index 2915664c335d..6a9053162cf2 100644 --- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h +++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h @@ -56,6 +56,7 @@ struct tcp_sock { __u32 rcv_nxt; __u32 snd_nxt; __u32 snd_una; + __u32 window_clamp; __u8 ecn_flags; __u32 delivered; __u32 delivered_ce; diff --git a/tools/testing/selftests/bpf/prog_tests/tcpbpf_user.c b/tools/testing/selftests/bpf/prog_tests/tcpbpf_user.c index ab5281475f44..87923d2865b7 100644 --- a/tools/testing/selftests/bpf/prog_tests/tcpbpf_user.c +++ b/tools/testing/selftests/bpf/prog_tests/tcpbpf_user.c @@ -42,6 +42,10 @@ static void verify_result(struct tcpbpf_globals *result) /* check getsockopt for SAVED_SYN */ ASSERT_EQ(result->tcp_saved_syn, 1, "tcp_saved_syn"); + + /* check getsockopt for window_clamp */ + ASSERT_EQ(result->window_clamp_client, 9216, "window_clamp_client"); + ASSERT_EQ(result->window_clamp_server, 9216, "window_clamp_server"); } static void run_test(struct tcpbpf_globals *result) diff --git a/tools/testing/selftests/bpf/progs/test_tcpbpf_kern.c b/tools/testing/selftests/bpf/progs/test_tcpbpf_kern.c index e85e49deba70..94f50f7e94d6 100644 --- a/tools/testing/selftests/bpf/progs/test_tcpbpf_kern.c +++ b/tools/testing/selftests/bpf/progs/test_tcpbpf_kern.c @@ -12,17 +12,41 @@ #include <linux/tcp.h> #include <bpf/bpf_helpers.h> #include <bpf/bpf_endian.h> +#include "bpf_tcp_helpers.h" #include "test_tcpbpf.h" struct tcpbpf_globals global = {}; int _version SEC("version") = 1; +/** + * SOL_TCP is defined in <netinet/tcp.h> while + * TCP_SAVED_SYN is defined in already included <linux/tcp.h> + */ +#ifndef SOL_TCP +#define SOL_TCP 6 +#endif + +static __always_inline int get_tp_window_clamp(struct bpf_sock_ops *skops) +{ + struct bpf_sock *sk; + struct tcp_sock *tp; + + sk = skops->sk; + if (!sk) + return -1; + tp = bpf_skc_to_tcp_sock(sk); + if (!tp) + return -1; + return tp->window_clamp; +} + SEC("sockops") int bpf_testcb(struct bpf_sock_ops *skops) { char header[sizeof(struct ipv6hdr) + sizeof(struct tcphdr)]; struct bpf_sock_ops *reuse = skops; struct tcphdr *thdr; + int window_clamp = 9216; int good_call_rv = 0; int bad_call_rv = 0; int save_syn = 1; @@ -75,6 +99,11 @@ int bpf_testcb(struct bpf_sock_ops *skops) global.event_map |= (1 << op); switch (op) { + case BPF_SOCK_OPS_TCP_CONNECT_CB: + rv = bpf_setsockopt(skops, SOL_TCP, TCP_WINDOW_CLAMP, + &window_clamp, sizeof(window_clamp)); + global.window_clamp_client = get_tp_window_clamp(skops); + break; case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB: /* Test failure to set largest cb flag (assumes not defined) */ global.bad_cb_test_rv = bpf_sock_ops_cb_flags_set(skops, 0x80); @@ -100,6 +129,10 @@ int bpf_testcb(struct bpf_sock_ops *skops) global.tcp_saved_syn = v; } } + rv = bpf_setsockopt(skops, SOL_TCP, TCP_WINDOW_CLAMP, + &window_clamp, sizeof(window_clamp)); + + global.window_clamp_server = get_tp_window_clamp(skops); break; case BPF_SOCK_OPS_RTO_CB: break; diff --git a/tools/testing/selftests/bpf/test_tcpbpf.h b/tools/testing/selftests/bpf/test_tcpbpf.h index 0ed33521cbbb..9dd9b5590f9d 100644 --- a/tools/testing/selftests/bpf/test_tcpbpf.h +++ b/tools/testing/selftests/bpf/test_tcpbpf.h @@ -16,5 +16,7 @@ struct tcpbpf_globals { __u32 num_close_events; __u32 tcp_save_syn; __u32 tcp_saved_syn; + __u32 window_clamp_client; + __u32 window_clamp_server; }; #endif -- 2.24.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 bpf-next 0/2] Add support to set window_clamp from bpf setsockops @ 2020-12-01 16:43 Prankur gupta 2020-12-01 16:43 ` [PATCH bpf-next 1/2] bpf: Adds support for setting window clamp Prankur gupta 0 siblings, 1 reply; 8+ messages in thread From: Prankur gupta @ 2020-12-01 16:43 UTC (permalink / raw) To: bpf; +Cc: kernel-team, netdev This patch contains support to set tcp window_field field from bpf setsockops. v2: Used TCP_WINDOW_CLAMP setsockopt logic for bpf_setsockopt (review comment addressed) Prankur gupta (2): bpf: Adds support for setting window clamp selftests/bpf: Add Userspace tests for TCP_WINDOW_CLAMP net/core/filter.c | 13 ++++++++ tools/testing/selftests/bpf/bpf_tcp_helpers.h | 1 + .../selftests/bpf/prog_tests/tcpbpf_user.c | 4 +++ .../selftests/bpf/progs/test_tcpbpf_kern.c | 33 +++++++++++++++++++ tools/testing/selftests/bpf/test_tcpbpf.h | 2 ++ 5 files changed, 53 insertions(+) -- 2.24.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH bpf-next 1/2] bpf: Adds support for setting window clamp 2020-12-01 16:43 [PATCH v2 bpf-next 0/2] Add support to set window_clamp from bpf setsockops Prankur gupta @ 2020-12-01 16:43 ` Prankur gupta 2020-12-02 2:14 ` Alexei Starovoitov 0 siblings, 1 reply; 8+ messages in thread From: Prankur gupta @ 2020-12-01 16:43 UTC (permalink / raw) To: bpf; +Cc: kernel-team, netdev Adds a new bpf_setsockopt for TCP sockets, TCP_BPF_WINDOW_CLAMP, which sets the maximum receiver window size. It will be useful for limiting receiver window based on RTT. Signed-off-by: Prankur gupta <prankgup@fb.com> --- net/core/filter.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/net/core/filter.c b/net/core/filter.c index 2ca5eecebacf..8c52ffae7b0c 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4910,6 +4910,19 @@ static int _bpf_setsockopt(struct sock *sk, int level, int optname, tp->notsent_lowat = val; sk->sk_write_space(sk); break; + case TCP_WINDOW_CLAMP: + if (!val) { + if (sk->sk_state != TCP_CLOSE) { + ret = -EINVAL; + break; + } + tp->window_clamp = 0; + } else { + tp->window_clamp = + val < SOCK_MIN_RCVBUF / 2 ? + SOCK_MIN_RCVBUF / 2 : val; + } + break; default: ret = -EINVAL; } -- 2.24.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH bpf-next 1/2] bpf: Adds support for setting window clamp 2020-12-01 16:43 ` [PATCH bpf-next 1/2] bpf: Adds support for setting window clamp Prankur gupta @ 2020-12-02 2:14 ` Alexei Starovoitov 0 siblings, 0 replies; 8+ messages in thread From: Alexei Starovoitov @ 2020-12-02 2:14 UTC (permalink / raw) To: Prankur gupta; +Cc: bpf, kernel-team, netdev On Tue, Dec 01, 2020 at 08:43:56AM -0800, Prankur gupta wrote: > Adds a new bpf_setsockopt for TCP sockets, TCP_BPF_WINDOW_CLAMP, > which sets the maximum receiver window size. It will be useful for > limiting receiver window based on RTT. > > Signed-off-by: Prankur gupta <prankgup@fb.com> > --- > net/core/filter.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/net/core/filter.c b/net/core/filter.c > index 2ca5eecebacf..8c52ffae7b0c 100644 > --- a/net/core/filter.c > +++ b/net/core/filter.c > @@ -4910,6 +4910,19 @@ static int _bpf_setsockopt(struct sock *sk, int level, int optname, > tp->notsent_lowat = val; > sk->sk_write_space(sk); > break; > + case TCP_WINDOW_CLAMP: > + if (!val) { > + if (sk->sk_state != TCP_CLOSE) { > + ret = -EINVAL; > + break; > + } > + tp->window_clamp = 0; > + } else { > + tp->window_clamp = > + val < SOCK_MIN_RCVBUF / 2 ? > + SOCK_MIN_RCVBUF / 2 : val; > + } May be extract this logic into a helper instead of copy-paste? ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-12-02 2:15 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-12-01 0:03 [PATCH bpf-next 0/2] Add support to set window_clamp from bpf setsockops Prankur gupta 2020-12-01 0:03 ` [PATCH bpf-next 1/2] bpf: Adds support for setting window clamp Prankur gupta 2020-12-01 1:34 ` Alexei Starovoitov 2020-12-01 20:22 ` [PATCH bpf-next 0/2] Add support to set window_clamp from bpf setsockops Prankur gupta 2020-12-02 1:30 ` Andrii Nakryiko 2020-12-01 0:03 ` [PATCH bpf-next 2/2] selftests/bpf: Add Userspace tests for TCP_WINDOW_CLAMP Prankur gupta 2020-12-01 16:43 [PATCH v2 bpf-next 0/2] Add support to set window_clamp from bpf setsockops Prankur gupta 2020-12-01 16:43 ` [PATCH bpf-next 1/2] bpf: Adds support for setting window clamp Prankur gupta 2020-12-02 2:14 ` Alexei Starovoitov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).