xref: /linux/tools/testing/selftests/bpf/progs/bpf_tracing_net.h (revision 5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500)
1 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
2 #ifndef __BPF_TRACING_NET_H__
3 #define __BPF_TRACING_NET_H__
4 
5 #include <vmlinux.h>
6 #include <bpf/bpf_core_read.h>
7 
8 #define AF_INET			2
9 #define AF_INET6		10
10 
11 /* include/linux/net.h */
12 #define SOCK_TYPE_MASK		0xf
13 
14 #define SOL_SOCKET		1
15 #define SO_REUSEADDR		2
16 #define SO_SNDBUF		7
17 #define SO_RCVBUF		8
18 #define SO_KEEPALIVE		9
19 #define SO_PRIORITY		12
20 #define SO_REUSEPORT		15
21 #if defined(__TARGET_ARCH_powerpc)
22 #define SO_RCVLOWAT		16
23 #else
24 #define SO_RCVLOWAT		18
25 #endif
26 #define SO_BINDTODEVICE		25
27 #define SO_MARK			36
28 #define SO_MAX_PACING_RATE	47
29 #define SO_BINDTOIFINDEX	62
30 #define SO_TXREHASH		74
31 #define __SO_ACCEPTCON		(1 << 16)
32 
33 #define IP_TOS			1
34 #define IP_TRANSPARENT		19
35 
36 #define SOL_IPV6		41
37 #define IPV6_TCLASS		67
38 #define IPV6_AUTOFLOWLABEL	70
39 #define IPV6_TRANSPARENT	75
40 
41 #define TC_ACT_UNSPEC		(-1)
42 #define TC_ACT_OK		0
43 #define TC_ACT_SHOT		2
44 
45 #define SOL_TCP			6
46 #define TCP_NODELAY		1
47 #define TCP_MAXSEG		2
48 #define TCP_KEEPIDLE		4
49 #define TCP_KEEPINTVL		5
50 #define TCP_KEEPCNT		6
51 #define TCP_SYNCNT		7
52 #define TCP_WINDOW_CLAMP	10
53 #define TCP_CONGESTION		13
54 #define TCP_THIN_LINEAR_TIMEOUTS	16
55 #define TCP_USER_TIMEOUT	18
56 #define TCP_NOTSENT_LOWAT	25
57 #define TCP_SAVE_SYN		27
58 #define TCP_SAVED_SYN		28
59 #define TCP_CA_NAME_MAX		16
60 #define TCP_NAGLE_OFF		1
61 #define TCP_RTO_MAX_MS		44
62 
63 #define TCP_ECN_OK              1
64 #define TCP_ECN_QUEUE_CWR       2
65 #define TCP_ECN_DEMAND_CWR      4
66 #define TCP_ECN_SEEN            8
67 
68 #define TCP_CONG_NEEDS_ECN     0x2
69 
70 #define ICSK_TIME_RETRANS	1
71 #define ICSK_TIME_PROBE0	3
72 #define ICSK_TIME_LOSS_PROBE	5
73 #define ICSK_TIME_REO_TIMEOUT	6
74 
75 #define ETH_ALEN		6
76 #define ETH_HLEN		14
77 #define ETH_P_IP		0x0800
78 #define ETH_P_IPV6		0x86DD
79 
80 #define NEXTHDR_TCP		6
81 
82 #define TCPOPT_NOP		1
83 #define TCPOPT_EOL		0
84 #define TCPOPT_MSS		2
85 #define TCPOPT_WINDOW		3
86 #define TCPOPT_TIMESTAMP	8
87 #define TCPOPT_SACK_PERM	4
88 
89 #define TCPOLEN_MSS		4
90 #define TCPOLEN_WINDOW		3
91 #define TCPOLEN_TIMESTAMP	10
92 #define TCPOLEN_SACK_PERM	2
93 
94 #define CHECKSUM_NONE		0
95 #define CHECKSUM_PARTIAL	3
96 
97 #define IFNAMSIZ		16
98 
99 #define RTF_GATEWAY		0x0002
100 
101 #define TCP_INFINITE_SSTHRESH	0x7fffffff
102 #define TCP_PINGPONG_THRESH	3
103 
104 #define FLAG_DATA_ACKED 0x04 /* This ACK acknowledged new data.		*/
105 #define FLAG_SYN_ACKED 0x10 /* This ACK acknowledged SYN.		*/
106 #define FLAG_DATA_SACKED 0x20 /* New SACK.				*/
107 #define FLAG_SND_UNA_ADVANCED \
108 	0x400 /* Snd_una was changed (!= FLAG_DATA_ACKED) */
109 #define FLAG_ACKED (FLAG_DATA_ACKED | FLAG_SYN_ACKED)
110 #define FLAG_FORWARD_PROGRESS (FLAG_ACKED | FLAG_DATA_SACKED)
111 
112 #define fib_nh_dev		nh_common.nhc_dev
113 #define fib_nh_gw_family	nh_common.nhc_gw_family
114 #define fib_nh_gw6		nh_common.nhc_gw.ipv6
115 
116 #define inet_daddr		sk.__sk_common.skc_daddr
117 #define inet_rcv_saddr		sk.__sk_common.skc_rcv_saddr
118 #define inet_dport		sk.__sk_common.skc_dport
119 
120 #define udp_portaddr_hash	inet.sk.__sk_common.skc_u16hashes[1]
121 
122 #define ir_loc_addr		req.__req_common.skc_rcv_saddr
123 #define ir_num			req.__req_common.skc_num
124 #define ir_rmt_addr		req.__req_common.skc_daddr
125 #define ir_rmt_port		req.__req_common.skc_dport
126 #define ir_v6_rmt_addr		req.__req_common.skc_v6_daddr
127 #define ir_v6_loc_addr		req.__req_common.skc_v6_rcv_saddr
128 
129 #define sk_num			__sk_common.skc_num
130 #define sk_dport		__sk_common.skc_dport
131 #define sk_family		__sk_common.skc_family
132 #define sk_rmem_alloc		sk_backlog.rmem_alloc
133 #define sk_refcnt		__sk_common.skc_refcnt
134 #define sk_state		__sk_common.skc_state
135 #define sk_net			__sk_common.skc_net
136 #define sk_rcv_saddr		__sk_common.skc_rcv_saddr
137 #define sk_v6_daddr		__sk_common.skc_v6_daddr
138 #define sk_v6_rcv_saddr		__sk_common.skc_v6_rcv_saddr
139 #define sk_flags		__sk_common.skc_flags
140 #define sk_reuse		__sk_common.skc_reuse
141 #define sk_cookie		__sk_common.skc_cookie
142 
143 #define s6_addr32		in6_u.u6_addr32
144 
145 #define tw_daddr		__tw_common.skc_daddr
146 #define tw_rcv_saddr		__tw_common.skc_rcv_saddr
147 #define tw_dport		__tw_common.skc_dport
148 #define tw_refcnt		__tw_common.skc_refcnt
149 #define tw_v6_daddr		__tw_common.skc_v6_daddr
150 #define tw_v6_rcv_saddr		__tw_common.skc_v6_rcv_saddr
151 
152 #define tcp_jiffies32 ((__u32)bpf_jiffies64())
153 
154 #ifndef min
155 #define min(a, b) ((a) < (b) ? (a) : (b))
156 #endif
157 #ifndef max
158 #define max(a, b) ((a) > (b) ? (a) : (b))
159 #endif
160 
before(__u32 seq1,__u32 seq2)161 static inline bool before(__u32 seq1, __u32 seq2)
162 {
163 	return (__s32)(seq1 - seq2) < 0;
164 }
165 
166 #define after(seq2, seq1) before(seq1, seq2)
167 
inet_csk(const struct sock * sk)168 static inline struct inet_connection_sock *inet_csk(const struct sock *sk)
169 {
170 	return (struct inet_connection_sock *)sk;
171 }
172 
inet_csk_ca(const struct sock * sk)173 static inline void *inet_csk_ca(const struct sock *sk)
174 {
175 	return (void *)inet_csk(sk)->icsk_ca_priv;
176 }
177 
tcp_sk(const struct sock * sk)178 static inline struct tcp_sock *tcp_sk(const struct sock *sk)
179 {
180 	return (struct tcp_sock *)sk;
181 }
182 
tcp_in_slow_start(const struct tcp_sock * tp)183 static inline bool tcp_in_slow_start(const struct tcp_sock *tp)
184 {
185 	return tp->snd_cwnd < tp->snd_ssthresh;
186 }
187 
tcp_is_cwnd_limited(const struct sock * sk)188 static inline bool tcp_is_cwnd_limited(const struct sock *sk)
189 {
190 	const struct tcp_sock *tp = tcp_sk(sk);
191 
192 	/* If in slow start, ensure cwnd grows to twice what was ACKed. */
193 	if (tcp_in_slow_start(tp))
194 		return tp->snd_cwnd < 2 * tp->max_packets_out;
195 
196 	return !!BPF_CORE_READ_BITFIELD(tp, is_cwnd_limited);
197 }
198 
199 #endif
200