175 lines · c
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 29#define AF_INET6 1010 11#define SOL_SOCKET 112#define SO_REUSEADDR 213#define SO_SNDBUF 714#define SO_RCVBUF 815#define SO_KEEPALIVE 916#define SO_PRIORITY 1217#define SO_REUSEPORT 1518#define SO_RCVLOWAT 1819#define SO_BINDTODEVICE 2520#define SO_MARK 3621#define SO_MAX_PACING_RATE 4722#define SO_BINDTOIFINDEX 6223#define SO_TXREHASH 7424#define __SO_ACCEPTCON (1 << 16)25 26#define IP_TOS 127 28#define SOL_IPV6 4129#define IPV6_TCLASS 6730#define IPV6_AUTOFLOWLABEL 7031 32#define TC_ACT_UNSPEC (-1)33#define TC_ACT_OK 034#define TC_ACT_SHOT 235 36#define SOL_TCP 637#define TCP_NODELAY 138#define TCP_MAXSEG 239#define TCP_KEEPIDLE 440#define TCP_KEEPINTVL 541#define TCP_KEEPCNT 642#define TCP_SYNCNT 743#define TCP_WINDOW_CLAMP 1044#define TCP_CONGESTION 1345#define TCP_THIN_LINEAR_TIMEOUTS 1646#define TCP_USER_TIMEOUT 1847#define TCP_NOTSENT_LOWAT 2548#define TCP_SAVE_SYN 2749#define TCP_SAVED_SYN 2850#define TCP_CA_NAME_MAX 1651#define TCP_NAGLE_OFF 152 53#define TCP_ECN_OK 154#define TCP_ECN_QUEUE_CWR 255#define TCP_ECN_DEMAND_CWR 456#define TCP_ECN_SEEN 857 58#define TCP_CONG_NEEDS_ECN 0x259 60#define ICSK_TIME_RETRANS 161#define ICSK_TIME_PROBE0 362#define ICSK_TIME_LOSS_PROBE 563#define ICSK_TIME_REO_TIMEOUT 664 65#define ETH_ALEN 666#define ETH_HLEN 1467#define ETH_P_IP 0x080068#define ETH_P_IPV6 0x86DD69 70#define NEXTHDR_TCP 671 72#define TCPOPT_NOP 173#define TCPOPT_EOL 074#define TCPOPT_MSS 275#define TCPOPT_WINDOW 376#define TCPOPT_TIMESTAMP 877#define TCPOPT_SACK_PERM 478 79#define TCPOLEN_MSS 480#define TCPOLEN_WINDOW 381#define TCPOLEN_TIMESTAMP 1082#define TCPOLEN_SACK_PERM 283 84#define CHECKSUM_NONE 085#define CHECKSUM_PARTIAL 386 87#define IFNAMSIZ 1688 89#define RTF_GATEWAY 0x000290 91#define TCP_INFINITE_SSTHRESH 0x7fffffff92#define TCP_PINGPONG_THRESH 393 94#define FLAG_DATA_ACKED 0x04 /* This ACK acknowledged new data. */95#define FLAG_SYN_ACKED 0x10 /* This ACK acknowledged SYN. */96#define FLAG_DATA_SACKED 0x20 /* New SACK. */97#define FLAG_SND_UNA_ADVANCED \98 0x400 /* Snd_una was changed (!= FLAG_DATA_ACKED) */99#define FLAG_ACKED (FLAG_DATA_ACKED | FLAG_SYN_ACKED)100#define FLAG_FORWARD_PROGRESS (FLAG_ACKED | FLAG_DATA_SACKED)101 102#define fib_nh_dev nh_common.nhc_dev103#define fib_nh_gw_family nh_common.nhc_gw_family104#define fib_nh_gw6 nh_common.nhc_gw.ipv6105 106#define inet_daddr sk.__sk_common.skc_daddr107#define inet_rcv_saddr sk.__sk_common.skc_rcv_saddr108#define inet_dport sk.__sk_common.skc_dport109 110#define udp_portaddr_hash inet.sk.__sk_common.skc_u16hashes[1]111 112#define ir_loc_addr req.__req_common.skc_rcv_saddr113#define ir_num req.__req_common.skc_num114#define ir_rmt_addr req.__req_common.skc_daddr115#define ir_rmt_port req.__req_common.skc_dport116#define ir_v6_rmt_addr req.__req_common.skc_v6_daddr117#define ir_v6_loc_addr req.__req_common.skc_v6_rcv_saddr118 119#define sk_num __sk_common.skc_num120#define sk_dport __sk_common.skc_dport121#define sk_family __sk_common.skc_family122#define sk_rmem_alloc sk_backlog.rmem_alloc123#define sk_refcnt __sk_common.skc_refcnt124#define sk_state __sk_common.skc_state125#define sk_net __sk_common.skc_net126#define sk_v6_daddr __sk_common.skc_v6_daddr127#define sk_v6_rcv_saddr __sk_common.skc_v6_rcv_saddr128#define sk_flags __sk_common.skc_flags129#define sk_reuse __sk_common.skc_reuse130#define sk_cookie __sk_common.skc_cookie131 132#define s6_addr32 in6_u.u6_addr32133 134#define tw_daddr __tw_common.skc_daddr135#define tw_rcv_saddr __tw_common.skc_rcv_saddr136#define tw_dport __tw_common.skc_dport137#define tw_refcnt __tw_common.skc_refcnt138#define tw_v6_daddr __tw_common.skc_v6_daddr139#define tw_v6_rcv_saddr __tw_common.skc_v6_rcv_saddr140 141#define tcp_jiffies32 ((__u32)bpf_jiffies64())142 143static inline struct inet_connection_sock *inet_csk(const struct sock *sk)144{145 return (struct inet_connection_sock *)sk;146}147 148static inline void *inet_csk_ca(const struct sock *sk)149{150 return (void *)inet_csk(sk)->icsk_ca_priv;151}152 153static inline struct tcp_sock *tcp_sk(const struct sock *sk)154{155 return (struct tcp_sock *)sk;156}157 158static inline bool tcp_in_slow_start(const struct tcp_sock *tp)159{160 return tp->snd_cwnd < tp->snd_ssthresh;161}162 163static inline bool tcp_is_cwnd_limited(const struct sock *sk)164{165 const struct tcp_sock *tp = tcp_sk(sk);166 167 /* If in slow start, ensure cwnd grows to twice what was ACKed. */168 if (tcp_in_slow_start(tp))169 return tp->snd_cwnd < 2 * tp->max_packets_out;170 171 return !!BPF_CORE_READ_BITFIELD(tp, is_cwnd_limited);172}173 174#endif175