History

bpf: add mrtt and srtt as BPF_SOCK_OPS_RTT_CB args

Two important arguments in RTT estimation, mrtt and srtt, are passed to tcp_bpf_rtt(), so that bpf programs get more information about RTT computation in BPF_SOCK_OPS_RTT_CB. The difference between bpf_sock_ops->srtt_us and the srtt here is: the former is an old rtt before update, while srtt passed by tcp_bpf_rtt() is that after update.

Philo Lu committed 2 years ago

Commit 48e2cd31 parent a311c3f4 files · +8 −4Browse files

Unified · Split

4 files
  1. include/net/tcp.h +2 −2
  2. include/uapi/linux/bpf.h +2 −0
  3. net/ipv4/tcp_input.c +2 −2
  4. tools/include/uapi/linux/bpf.h +2 −0
include/net/tcp.h+2−2
@@ -2706,10 +2706,10 @@ static inline bool tcp_bpf_ca_needs_ecn(struct sock *sk) · 2705 unmodified lines
27062706 return (tcp_call_bpf(sk, BPF_SOCK_OPS_NEEDS_ECN, 0, NULL) == 1);
27072707 }
27082708
2709−static inline void tcp_bpf_rtt(struct sock *sk)
2709+static inline void tcp_bpf_rtt(struct sock *sk, long mrtt, u32 srtt)
27102710 {
27112711 if (BPF_SOCK_OPS_TEST_FLAG(tcp_sk(sk), BPF_SOCK_OPS_RTT_CB_FLAG))
2712− tcp_call_bpf(sk, BPF_SOCK_OPS_RTT_CB, 0, NULL);
2712+ tcp_call_bpf_2arg(sk, BPF_SOCK_OPS_RTT_CB, mrtt, srtt);
27132713 }
27142714
27152715 #if IS_ENABLED(CONFIG_SMC)
include/uapi/linux/bpf.h+2−0
@@ -6947,6 +6947,8 @@ enum { · 6946 unmodified lines
69476947 * socket transition to LISTEN state.
69486948 */
69496949 BPF_SOCK_OPS_RTT_CB, /* Called on every RTT.
6950+ * Arg1: measured RTT input (mrtt)
6951+ * Arg2: updated srtt
69506952 */
69516953 BPF_SOCK_OPS_PARSE_HDR_OPT_CB, /* Parse the header option.
69526954 * It will be called to handle
net/ipv4/tcp_input.c+2−2
@@ -911,7 +911,7 @@ static void tcp_rtt_estimator(struct sock *sk, long mrtt_us) · 910 unmodified lines
911911 tp->rtt_seq = tp->snd_nxt;
912912 tp->mdev_max_us = tcp_rto_min_us(sk);
913913
914− tcp_bpf_rtt(sk);
914+ tcp_bpf_rtt(sk, mrtt_us, srtt);
915915 }
916916 } else {
917917 /* no previous measure. */
@@ -921,7 +921,7 @@ static void tcp_rtt_estimator(struct sock *sk, long mrtt_us) · 3 unmodified lines
921921 tp->mdev_max_us = tp->rttvar_us;
922922 tp->rtt_seq = tp->snd_nxt;
923923
924− tcp_bpf_rtt(sk);
924+ tcp_bpf_rtt(sk, mrtt_us, srtt);
925925 }
926926 tp->srtt_us = max(1U, srtt);
927927 }
tools/include/uapi/linux/bpf.h+2−0
@@ -6947,6 +6947,8 @@ enum { · 6946 unmodified lines
69476947 * socket transition to LISTEN state.
69486948 */
69496949 BPF_SOCK_OPS_RTT_CB, /* Called on every RTT.
6950+ * Arg1: measured RTT input (mrtt)
6951+ * Arg2: updated srtt
69506952 */
69516953 BPF_SOCK_OPS_PARSE_HDR_OPT_CB, /* Parse the header option.
69526954 * It will be called to handle