summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2021-12-09 20:23:12 +0100
committerEugene Syromyatnikov <evgsyr@gmail.com>2022-07-21 11:29:23 +0200
commit87e582c5d558b15c98368acd971b3185b89b1ca2 (patch)
tree6db4a4d48b1b863ada5e0cdb7f49f7b8417e19eb
parent0077a33889f30fc410b64474e7f4ef3c3d938d4a (diff)
downloadstrace-87e582c5d558b15c98368acd971b3185b89b1ca2.tar.gz
netlink_inet_diag: factor out struct tcp{vegas,_dctcp,_bbr}_info printing
* src/defs.h (struct tcpvegas_info, struct tcp_dctcp_info, struct tcp_bbr_info): New type declarations. (print_tcpvegas_info, print_tcp_dctcp_info, print_tcp_bbr_info): New function declarations. * src/netlink_inet_diag.c (print_tcpvegas_info): Factor out the printing code out of decode_tcpvegas_info. (decode_tcpvegas_info): Call print_tcpvegas_info for printing the retrieved structure. (print_tcp_dctcp_info): Factor out the printing code out of decode_tcp_dctcp_info. (decode_tcp_dctcp_info): Call print_tcp_dctcp_info for printing the retrieved structure. (print_tcp_bbr_info): Factor out the printing code out of decode_tcp_bbe_info. (decode_tcp_bbr_info): Call print_tcp_bbr_info for printing the retrieved structure.
-rw-r--r--src/defs.h12
-rw-r--r--src/netlink_inet_diag.c83
2 files changed, 64 insertions, 31 deletions
diff --git a/src/defs.h b/src/defs.h
index 0b438c0c5..d50a61521 100644
--- a/src/defs.h
+++ b/src/defs.h
@@ -1338,6 +1338,18 @@ print_perf_event_attr(struct tcb *const tcp, const kernel_ulong_t addr);
extern const char *get_ifname(const unsigned int ifindex);
extern void print_ifindex(unsigned int);
+struct tcpvegas_info;
+extern void print_tcpvegas_info(struct tcb *tcp,
+ const struct tcpvegas_info *vegas,
+ unsigned int len);
+struct tcp_dctcp_info;
+extern void print_tcp_dctcp_info(struct tcb *tcp,
+ const struct tcp_dctcp_info *dctcp,
+ unsigned int len);
+struct tcp_bbr_info;
+extern void print_tcp_bbr_info(struct tcb *tcp, const struct tcp_bbr_info *bbr,
+ unsigned int len);
+
extern void print_bpf_filter_code(const uint16_t code, bool extended);
/**
diff --git a/src/netlink_inet_diag.c b/src/netlink_inet_diag.c
index 036978978..320dde5cc 100644
--- a/src/netlink_inet_diag.c
+++ b/src/netlink_inet_diag.c
@@ -306,6 +306,21 @@ decode_inet_diag_meminfo(struct tcb *const tcp,
return true;
}
+void
+print_tcpvegas_info(struct tcb *tcp, const struct tcpvegas_info *const vegas,
+ const unsigned int len)
+{
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_begin(),
+ *vegas, tcpv_enabled, len, PRINT_FIELD_U);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ *vegas, tcpv_rttcnt, len, PRINT_FIELD_U);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ *vegas, tcpv_rtt, len, PRINT_FIELD_U);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ *vegas, tcpv_minrtt, len, PRINT_FIELD_U);
+ tprint_struct_end();
+}
+
static bool
decode_tcpvegas_info(struct tcb *const tcp,
const kernel_ulong_t addr,
@@ -319,19 +334,28 @@ decode_tcpvegas_info(struct tcb *const tcp,
if (umove_or_printaddr(tcp, addr, &vegas))
return true;
- tprint_struct_begin();
- PRINT_FIELD_U(vegas, tcpv_enabled);
- tprint_struct_next();
- PRINT_FIELD_U(vegas, tcpv_rttcnt);
- tprint_struct_next();
- PRINT_FIELD_U(vegas, tcpv_rtt);
- tprint_struct_next();
- PRINT_FIELD_U(vegas, tcpv_minrtt);
- tprint_struct_end();
+ print_tcpvegas_info(tcp, &vegas, len);
return true;
}
+void
+print_tcp_dctcp_info(struct tcb *tcp, const struct tcp_dctcp_info *const dctcp,
+ const unsigned int len)
+{
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_begin(),
+ *dctcp, dctcp_enabled, len, PRINT_FIELD_U);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ *dctcp, dctcp_ce_state, len, PRINT_FIELD_U);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ *dctcp, dctcp_alpha, len, PRINT_FIELD_U);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ *dctcp, dctcp_ab_ecn, len, PRINT_FIELD_U);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ *dctcp, dctcp_ab_tot, len, PRINT_FIELD_U);
+ tprint_struct_end();
+}
+
static bool
decode_tcp_dctcp_info(struct tcb *const tcp,
const kernel_ulong_t addr,
@@ -345,21 +369,28 @@ decode_tcp_dctcp_info(struct tcb *const tcp,
if (umove_or_printaddr(tcp, addr, &dctcp))
return true;
- tprint_struct_begin();
- PRINT_FIELD_U(dctcp, dctcp_enabled);
- tprint_struct_next();
- PRINT_FIELD_U(dctcp, dctcp_ce_state);
- tprint_struct_next();
- PRINT_FIELD_U(dctcp, dctcp_alpha);
- tprint_struct_next();
- PRINT_FIELD_U(dctcp, dctcp_ab_ecn);
- tprint_struct_next();
- PRINT_FIELD_U(dctcp, dctcp_ab_tot);
- tprint_struct_end();
+ print_tcp_dctcp_info(tcp, &dctcp, len);
return true;
}
+void
+print_tcp_bbr_info(struct tcb *tcp, const struct tcp_bbr_info *const bbr,
+ const unsigned int len)
+{
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_begin(),
+ *bbr, bbr_bw_lo, len, PRINT_FIELD_X);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ *bbr, bbr_bw_hi, len, PRINT_FIELD_X);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ *bbr, bbr_min_rtt, len, PRINT_FIELD_U);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ *bbr, bbr_pacing_gain, len, PRINT_FIELD_U);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ *bbr, bbr_cwnd_gain, len, PRINT_FIELD_U);
+ tprint_struct_end();
+}
+
static bool
decode_tcp_bbr_info(struct tcb *const tcp,
const kernel_ulong_t addr,
@@ -373,17 +404,7 @@ decode_tcp_bbr_info(struct tcb *const tcp,
if (umove_or_printaddr(tcp, addr, &bbr))
return true;
- tprint_struct_begin();
- PRINT_FIELD_X(bbr, bbr_bw_lo);
- tprint_struct_next();
- PRINT_FIELD_X(bbr, bbr_bw_hi);
- tprint_struct_next();
- PRINT_FIELD_U(bbr, bbr_min_rtt);
- tprint_struct_next();
- PRINT_FIELD_U(bbr, bbr_pacing_gain);
- tprint_struct_next();
- PRINT_FIELD_U(bbr, bbr_cwnd_gain);
- tprint_struct_end();
+ print_tcp_bbr_info(tcp, &bbr, len);
return true;
}