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