Subject: [PATCH net-next v2 1/6] net/tcp: Use static_branch_tcp_{md5,ao} to drop ifdefs

From: Dmitry Safonov <[email protected]>

It's possible to clean-up some ifdefs by hiding that
tcp_{md5,ao}_needed static branch is defined and compiled only
under related configs, since commit 4c8530dc7d7d ("net/tcp: Only produce
AO/MD5 logs if there are any keys").

Signed-off-by: Dmitry Safonov <[email protected]>
---
include/net/tcp.h | 14 ++++----------
net/ipv4/tcp_ipv4.c | 8 ++------
2 files changed, 6 insertions(+), 16 deletions(-)

diff --git a/include/net/tcp.h b/include/net/tcp.h
index 08c3b99501cf..f6dd035e0fa9 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -2386,21 +2386,15 @@ static inline void tcp_get_current_key(const struct sock *sk,

static inline bool tcp_key_is_md5(const struct tcp_key *key)
{
-#ifdef CONFIG_TCP_MD5SIG
- if (static_branch_unlikely(&tcp_md5_needed.key) &&
- key->type == TCP_KEY_MD5)
- return true;
-#endif
+ if (static_branch_tcp_md5())
+ return key->type == TCP_KEY_MD5;
return false;
}

static inline bool tcp_key_is_ao(const struct tcp_key *key)
{
-#ifdef CONFIG_TCP_AO
- if (static_branch_unlikely(&tcp_ao_needed.key) &&
- key->type == TCP_KEY_AO)
- return true;
-#endif
+ if (static_branch_tcp_ao())
+ return key->type == TCP_KEY_AO;
return false;
}

diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 04044605cadf..59c252b90b55 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -1052,12 +1052,10 @@ static void tcp_v4_timewait_ack(struct sock *sk, struct sk_buff *skb)
#else
if (0) {
#endif
-#ifdef CONFIG_TCP_MD5SIG
- } else if (static_branch_unlikely(&tcp_md5_needed.key)) {
+ } else if (static_branch_tcp_md5()) {
key.md5_key = tcp_twsk_md5_key(tcptw);
if (key.md5_key)
key.type = TCP_KEY_MD5;
-#endif
}

tcp_v4_send_ack(sk, skb,
@@ -1126,8 +1124,7 @@ static void tcp_v4_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
#else
if (0) {
#endif
-#ifdef CONFIG_TCP_MD5SIG
- } else if (static_branch_unlikely(&tcp_md5_needed.key)) {
+ } else if (static_branch_tcp_md5()) {
const union tcp_md5_addr *addr;
int l3index;

@@ -1136,7 +1133,6 @@ static void tcp_v4_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
key.md5_key = tcp_md5_do_lookup(sk, l3index, addr, AF_INET);
if (key.md5_key)
key.type = TCP_KEY_MD5;
-#endif
}

tcp_v4_send_ack(sk, skb, seq,

--
2.42.0




2024-06-05 04:51:22

by Ratheesh Kannoth

[permalink] [raw]
Subject: Re: [PATCH net-next v2 1/6] net/tcp: Use static_branch_tcp_{md5,ao} to drop ifdefs

On 2024-06-05 at 07:50:02, Dmitry Safonov via B4 Relay ([email protected]) wrote:
> From: Dmitry Safonov <[email protected]>
>
> It's possible to clean-up some ifdefs by hiding that
> tcp_{md5,ao}_needed static branch is defined and compiled only
> under related configs, since commit 4c8530dc7d7d ("net/tcp: Only produce
> AO/MD5 logs if there are any keys").
>
> Signed-off-by: Dmitry Safonov <[email protected]>
> ---
> include/net/tcp.h | 14 ++++----------
> net/ipv4/tcp_ipv4.c | 8 ++------
> 2 files changed, 6 insertions(+), 16 deletions(-)
>
> diff --git a/include/net/tcp.h b/include/net/tcp.h
> index 08c3b99501cf..f6dd035e0fa9 100644
> --- a/include/net/tcp.h
> +++ b/include/net/tcp.h
> @@ -2386,21 +2386,15 @@ static inline void tcp_get_current_key(const struct sock *sk,
>
> static inline bool tcp_key_is_md5(const struct tcp_key *key)
> {
> -#ifdef CONFIG_TCP_MD5SIG
> - if (static_branch_unlikely(&tcp_md5_needed.key) &&
> - key->type == TCP_KEY_MD5)
> - return true;
> -#endif
> + if (static_branch_tcp_md5())
Seems that we lost unlikely hint. Dont we add that as well-> unlikely()
> + return key->type == TCP_KEY_MD5;
> return false;
> }
>
>
>

2024-06-05 07:51:32

by Eric Dumazet

[permalink] [raw]
Subject: Re: [PATCH net-next v2 1/6] net/tcp: Use static_branch_tcp_{md5,ao} to drop ifdefs

On Wed, Jun 5, 2024 at 4:20 AM Dmitry Safonov via B4 Relay
<[email protected]> wrote:
>
> From: Dmitry Safonov <[email protected]>
>
> It's possible to clean-up some ifdefs by hiding that
> tcp_{md5,ao}_needed static branch is defined and compiled only
> under related configs, since commit 4c8530dc7d7d ("net/tcp: Only produce
> AO/MD5 logs if there are any keys").
>
> Signed-off-by: Dmitry Safonov <[email protected]>

Reviewed-by: Eric Dumazet <[email protected]>

2024-06-05 17:30:23

by Dmitry Safonov

[permalink] [raw]
Subject: Re: [PATCH net-next v2 1/6] net/tcp: Use static_branch_tcp_{md5,ao} to drop ifdefs

On Wed, 5 Jun 2024 at 05:50, Ratheesh Kannoth <[email protected]> wrote:
>
> On 2024-06-05 at 07:50:02, Dmitry Safonov via B4 Relay ([email protected]) wrote:
> > From: Dmitry Safonov <[email protected]>
> >
> > It's possible to clean-up some ifdefs by hiding that
> > tcp_{md5,ao}_needed static branch is defined and compiled only
> > under related configs, since commit 4c8530dc7d7d ("net/tcp: Only produce
> > AO/MD5 logs if there are any keys").
> >
> > Signed-off-by: Dmitry Safonov <[email protected]>
> > ---
> > include/net/tcp.h | 14 ++++----------
> > net/ipv4/tcp_ipv4.c | 8 ++------
> > 2 files changed, 6 insertions(+), 16 deletions(-)
> >
> > diff --git a/include/net/tcp.h b/include/net/tcp.h
> > index 08c3b99501cf..f6dd035e0fa9 100644
> > --- a/include/net/tcp.h
> > +++ b/include/net/tcp.h
> > @@ -2386,21 +2386,15 @@ static inline void tcp_get_current_key(const struct sock *sk,
> >
> > static inline bool tcp_key_is_md5(const struct tcp_key *key)
> > {
> > -#ifdef CONFIG_TCP_MD5SIG
> > - if (static_branch_unlikely(&tcp_md5_needed.key) &&
> > - key->type == TCP_KEY_MD5)
> > - return true;
> > -#endif
> > + if (static_branch_tcp_md5())
> Seems that we lost unlikely hint. Dont we add that as well-> unlikely()

Please, check the definition of static_branch_tcp_md5().
This doesn't have any functional changes but hides ifdefs in
the definition.

Thanks,
Dmitry