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