Skip to content

Commit 2899529

Browse files
authored
Merge pull request #3480 from devnexen/tcp_info_linux
adding tcp_info struct to linux musl/glibc.
2 parents 79f96a7 + ee0bf57 commit 2899529

File tree

5 files changed

+114
-1
lines changed

5 files changed

+114
-1
lines changed

libc-test/build.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4443,7 +4443,13 @@ fn test_linux(target: &str) {
44434443
// the `ifr_ifrn` field is an anonymous union
44444444
(struct_ == "iwreq" && field == "ifr_ifrn") ||
44454445
// the `key` field is a zero-sized array
4446-
(struct_ == "iw_encode_ext" && field == "key")
4446+
(struct_ == "iw_encode_ext" && field == "key") ||
4447+
// the `tcpi_snd_rcv_wscale` map two bitfield fields stored in a u8
4448+
(struct_ == "tcp_info" && field == "tcpi_snd_rcv_wscale") ||
4449+
// the `tcpi_delivery_rate_app_limited` field is a bitfield on musl
4450+
(musl && struct_ == "tcp_info" && field == "tcpi_delivery_rate_app_limited") ||
4451+
// the `tcpi_fast_open_client_fail` field is a bitfield on musl
4452+
(musl && struct_ == "tcp_info" && field == "tcpi_fast_open_client_fail")
44474453
});
44484454

44494455
cfg.skip_roundtrip(move |s| match s {

libc-test/semver/linux-gnu.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,3 +713,4 @@ putgrent
713713
execveat
714714
close_range
715715
epoll_pwait2
716+
tcp_info

libc-test/semver/linux-musl.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,5 @@ pwritev2
9191
pwritev64
9292
reallocarray
9393
setutxent
94+
tcp_info
9495
timex

src/unix/linux_like/linux/gnu/mod.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,44 @@ s! {
453453
pub aio_flags: ::__u32,
454454
pub aio_resfd: ::__u32,
455455
}
456+
457+
// netinet/tcp.h
458+
459+
pub struct tcp_info {
460+
pub tcpi_state: u8,
461+
pub tcpi_ca_state: u8,
462+
pub tcpi_retransmits: u8,
463+
pub tcpi_probes: u8,
464+
pub tcpi_backoff: u8,
465+
pub tcpi_options: u8,
466+
/// This contains the bitfields `tcpi_snd_wscale` and `tcpi_rcv_wscale`.
467+
/// Each is 4 bits.
468+
pub tcpi_snd_rcv_wscale: u8,
469+
pub tcpi_rto: u32,
470+
pub tcpi_ato: u32,
471+
pub tcpi_snd_mss: u32,
472+
pub tcpi_rcv_mss: u32,
473+
pub tcpi_unacked: u32,
474+
pub tcpi_sacked: u32,
475+
pub tcpi_lost: u32,
476+
pub tcpi_retrans: u32,
477+
pub tcpi_fackets: u32,
478+
pub tcpi_last_data_sent: u32,
479+
pub tcpi_last_ack_sent: u32,
480+
pub tcpi_last_data_recv: u32,
481+
pub tcpi_last_ack_recv: u32,
482+
pub tcpi_pmtu: u32,
483+
pub tcpi_rcv_ssthresh: u32,
484+
pub tcpi_rtt: u32,
485+
pub tcpi_rttvar: u32,
486+
pub tcpi_snd_ssthresh: u32,
487+
pub tcpi_snd_cwnd: u32,
488+
pub tcpi_advmss: u32,
489+
pub tcpi_reordering: u32,
490+
pub tcpi_rcv_rtt: u32,
491+
pub tcpi_rcv_space: u32,
492+
pub tcpi_total_retrans: u32,
493+
}
456494
}
457495

458496
impl siginfo_t {

src/unix/linux_like/linux/musl/mod.rs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,73 @@ s! {
344344
pub len: ::__u32,
345345
pub options: ::__u32,
346346
}
347+
348+
// netinet/tcp.h
349+
350+
pub struct tcp_info {
351+
pub tcpi_state: u8,
352+
pub tcpi_ca_state: u8,
353+
pub tcpi_retransmits: u8,
354+
pub tcpi_probes: u8,
355+
pub tcpi_backoff: u8,
356+
pub tcpi_options: u8,
357+
/*
358+
* FIXME(musl): when musl headers are more up to date
359+
/// This contains the bitfields `tcpi_snd_wscale` and `tcpi_rcv_wscale`.
360+
/// Each is 4 bits.
361+
pub tcpi_snd_rcv_wscale: u8,
362+
/// This contains the bitfields `tcpi_delivery_rate_app_limited` (1 bit) and
363+
/// `tcpi_fastopen_client_fail` (2 bits).
364+
pub tcpi_delivery_fastopen_bitfields: u8,
365+
*/
366+
pub tcpi_rto: u32,
367+
pub tcpi_ato: u32,
368+
pub tcpi_snd_mss: u32,
369+
pub tcpi_rcv_mss: u32,
370+
pub tcpi_unacked: u32,
371+
pub tcpi_sacked: u32,
372+
pub tcpi_lost: u32,
373+
pub tcpi_retrans: u32,
374+
pub tcpi_fackets: u32,
375+
pub tcpi_last_data_sent: u32,
376+
pub tcpi_last_ack_sent: u32,
377+
pub tcpi_last_data_recv: u32,
378+
pub tcpi_last_ack_recv: u32,
379+
pub tcpi_pmtu: u32,
380+
pub tcpi_rcv_ssthresh: u32,
381+
pub tcpi_rtt: u32,
382+
pub tcpi_rttvar: u32,
383+
pub tcpi_snd_ssthresh: u32,
384+
pub tcpi_snd_cwnd: u32,
385+
pub tcpi_advmss: u32,
386+
pub tcpi_reordering: u32,
387+
pub tcpi_rcv_rtt: u32,
388+
pub tcpi_rcv_space: u32,
389+
pub tcpi_total_retrans: u32,
390+
pub tcpi_pacing_rate: u64,
391+
pub tcpi_max_pacing_rate: u64,
392+
pub tcpi_bytes_acked: u64,
393+
pub tcpi_bytes_received: u64,
394+
pub tcpi_segs_out: u32,
395+
pub tcpi_segs_in: u32,
396+
pub tcpi_notsent_bytes: u32,
397+
pub tcpi_min_rtt: u32,
398+
pub tcpi_data_segs_in: u32,
399+
pub tcpi_data_segs_out: u32,
400+
pub tcpi_delivery_rate: u64,
401+
pub tcpi_busy_time: u64,
402+
pub tcpi_rwnd_limited: u64,
403+
pub tcpi_sndbuf_limited: u64,
404+
pub tcpi_delivered: u32,
405+
pub tcpi_delivered_ce: u32,
406+
pub tcpi_bytes_sent: u64,
407+
pub tcpi_bytes_retrans: u64,
408+
pub tcpi_dsack_dups: u32,
409+
pub tcpi_reord_seen: u32,
410+
// FIXME(musl): to uncomment once CI musl is updated
411+
//pub tcpi_rcv_ooopack: u32,
412+
//pub tcpi_snd_wnd: u32,
413+
}
347414
}
348415

349416
s_no_extra_traits! {

0 commit comments

Comments
 (0)