Skip to content

Commit cbaec46

Browse files
Martin KaFai LauAlexei Starovoitov
authored andcommitted
selftests/bpf: Add a few tcp helper functions and macros to bpf_tracing_net.h
This patch adds a few tcp related helper functions to bpf_tracing_net.h. They will be useful for both tcp-cc and network tracing related bpf progs. They have already been in the bpf_tcp_helpers.h. This change is needed to retire the bpf_tcp_helpers.h and consolidate all tests to vmlinux.h (i.e. bpf_tracing_net.h). Some of the helpers (tcp_sk and inet_csk) are also defined in bpf_cc_cubic.c and they are removed. While at it, remove the vmlinux.h from bpf_cc_cubic.c. bpf_tracing_net.h (which has vmlinux.h after this patch) is enough and will be consistent with the other tcp-cc tests in the later patches. The other TCP_* macro additions will be needed for the bpf_dctcp changes in the later patch. Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org> Link: https://lore.kernel.org/r/20240509175026.3423614-3-martin.lau@linux.dev Signed-off-by: Alexei Starovoitov <ast@kernel.org>
1 parent c0338e6 commit cbaec46

2 files changed

Lines changed: 42 additions & 13 deletions

File tree

tools/testing/selftests/bpf/progs/bpf_cc_cubic.c

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,9 @@
1313
* kernel functions.
1414
*/
1515

16-
#include "vmlinux.h"
17-
16+
#include "bpf_tracing_net.h"
1817
#include <bpf/bpf_helpers.h>
1918
#include <bpf/bpf_tracing.h>
20-
#include "bpf_tracing_net.h"
2119

2220
#define BPF_STRUCT_OPS(name, args...) \
2321
SEC("struct_ops/"#name) \
@@ -40,16 +38,6 @@ extern __u32 tcp_reno_undo_cwnd(struct sock *sk) __ksym;
4038
extern void cubictcp_acked(struct sock *sk, const struct ack_sample *sample) __ksym;
4139
extern void cubictcp_cong_avoid(struct sock *sk, __u32 ack, __u32 acked) __ksym;
4240

43-
static struct inet_connection_sock *inet_csk(const struct sock *sk)
44-
{
45-
return (struct inet_connection_sock *)sk;
46-
}
47-
48-
static struct tcp_sock *tcp_sk(const struct sock *sk)
49-
{
50-
return (struct tcp_sock *)sk;
51-
}
52-
5341
static bool before(__u32 seq1, __u32 seq2)
5442
{
5543
return (__s32)(seq1-seq2) < 0;

tools/testing/selftests/bpf/progs/bpf_tracing_net.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
#ifndef __BPF_TRACING_NET_H__
33
#define __BPF_TRACING_NET_H__
44

5+
#include <vmlinux.h>
6+
#include <bpf/bpf_core_read.h>
7+
58
#define AF_INET 2
69
#define AF_INET6 10
710

@@ -46,6 +49,13 @@
4649
#define TCP_CA_NAME_MAX 16
4750
#define TCP_NAGLE_OFF 1
4851

52+
#define TCP_ECN_OK 1
53+
#define TCP_ECN_QUEUE_CWR 2
54+
#define TCP_ECN_DEMAND_CWR 4
55+
#define TCP_ECN_SEEN 8
56+
57+
#define TCP_CONG_NEEDS_ECN 0x2
58+
4959
#define ICSK_TIME_RETRANS 1
5060
#define ICSK_TIME_PROBE0 3
5161
#define ICSK_TIME_LOSS_PROBE 5
@@ -129,4 +139,35 @@
129139

130140
#define tcp_jiffies32 ((__u32)bpf_jiffies64())
131141

142+
static inline struct inet_connection_sock *inet_csk(const struct sock *sk)
143+
{
144+
return (struct inet_connection_sock *)sk;
145+
}
146+
147+
static inline void *inet_csk_ca(const struct sock *sk)
148+
{
149+
return (void *)inet_csk(sk)->icsk_ca_priv;
150+
}
151+
152+
static inline struct tcp_sock *tcp_sk(const struct sock *sk)
153+
{
154+
return (struct tcp_sock *)sk;
155+
}
156+
157+
static inline bool tcp_in_slow_start(const struct tcp_sock *tp)
158+
{
159+
return tp->snd_cwnd < tp->snd_ssthresh;
160+
}
161+
162+
static inline bool tcp_is_cwnd_limited(const struct sock *sk)
163+
{
164+
const struct tcp_sock *tp = tcp_sk(sk);
165+
166+
/* If in slow start, ensure cwnd grows to twice what was ACKed. */
167+
if (tcp_in_slow_start(tp))
168+
return tp->snd_cwnd < 2 * tp->max_packets_out;
169+
170+
return !!BPF_CORE_READ_BITFIELD(tp, is_cwnd_limited);
171+
}
172+
132173
#endif

0 commit comments

Comments
 (0)