Skip to content

Commit

Permalink
adding tcp_info struct to linux musl/glibc.
Browse files Browse the repository at this point in the history
(backport <rust-lang#3480>)
(cherry picked from commit ee0bf57)
  • Loading branch information
devnexen authored and tgross35 committed Oct 15, 2024
1 parent 42d1000 commit a5adc5f
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 1 deletion.
12 changes: 11 additions & 1 deletion libc-test/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4480,7 +4480,17 @@ fn test_linux(target: &str) {
// the `ifc_ifcu` field is an anonymous union
(struct_ == "ifconf" && field == "ifc_ifcu") ||
// glibc uses a single array `uregs` instead of individual fields.
(struct_ == "user_regs" && arm)
(struct_ == "user_regs" && arm) ||
// the `ifr_ifrn` field is an anonymous union
(struct_ == "iwreq" && field == "ifr_ifrn") ||
// the `key` field is a zero-sized array
(struct_ == "iw_encode_ext" && field == "key") ||
// the `tcpi_snd_rcv_wscale` map two bitfield fields stored in a u8
(struct_ == "tcp_info" && field == "tcpi_snd_rcv_wscale") ||
// the `tcpi_delivery_rate_app_limited` field is a bitfield on musl
(musl && struct_ == "tcp_info" && field == "tcpi_delivery_rate_app_limited") ||
// the `tcpi_fast_open_client_fail` field is a bitfield on musl
(musl && struct_ == "tcp_info" && field == "tcpi_fast_open_client_fail")
});

cfg.skip_roundtrip(move |s| match s {
Expand Down
1 change: 1 addition & 0 deletions libc-test/semver/linux-gnu.txt
Original file line number Diff line number Diff line change
Expand Up @@ -712,3 +712,4 @@ putgrent
execveat
close_range
epoll_pwait2
tcp_info
2 changes: 2 additions & 0 deletions libc-test/semver/linux-musl.txt
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ process_vm_writev
pwritev2
pwritev64
reallocarray
setutxent
tcp_info
timex
euidaccess
eaccess
Expand Down
38 changes: 38 additions & 0 deletions src/unix/linux_like/linux/gnu/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,44 @@ s! {
pub aio_flags: ::__u32,
pub aio_resfd: ::__u32,
}

// netinet/tcp.h

pub struct tcp_info {
pub tcpi_state: u8,
pub tcpi_ca_state: u8,
pub tcpi_retransmits: u8,
pub tcpi_probes: u8,
pub tcpi_backoff: u8,
pub tcpi_options: u8,
/// This contains the bitfields `tcpi_snd_wscale` and `tcpi_rcv_wscale`.
/// Each is 4 bits.
pub tcpi_snd_rcv_wscale: u8,
pub tcpi_rto: u32,
pub tcpi_ato: u32,
pub tcpi_snd_mss: u32,
pub tcpi_rcv_mss: u32,
pub tcpi_unacked: u32,
pub tcpi_sacked: u32,
pub tcpi_lost: u32,
pub tcpi_retrans: u32,
pub tcpi_fackets: u32,
pub tcpi_last_data_sent: u32,
pub tcpi_last_ack_sent: u32,
pub tcpi_last_data_recv: u32,
pub tcpi_last_ack_recv: u32,
pub tcpi_pmtu: u32,
pub tcpi_rcv_ssthresh: u32,
pub tcpi_rtt: u32,
pub tcpi_rttvar: u32,
pub tcpi_snd_ssthresh: u32,
pub tcpi_snd_cwnd: u32,
pub tcpi_advmss: u32,
pub tcpi_reordering: u32,
pub tcpi_rcv_rtt: u32,
pub tcpi_rcv_space: u32,
pub tcpi_total_retrans: u32,
}
}

impl siginfo_t {
Expand Down
67 changes: 67 additions & 0 deletions src/unix/linux_like/linux/musl/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,73 @@ s! {
pub len: ::__u32,
pub options: ::__u32,
}

// netinet/tcp.h

pub struct tcp_info {
pub tcpi_state: u8,
pub tcpi_ca_state: u8,
pub tcpi_retransmits: u8,
pub tcpi_probes: u8,
pub tcpi_backoff: u8,
pub tcpi_options: u8,
/*
* FIXME(musl): when musl headers are more up to date
/// This contains the bitfields `tcpi_snd_wscale` and `tcpi_rcv_wscale`.
/// Each is 4 bits.
pub tcpi_snd_rcv_wscale: u8,
/// This contains the bitfields `tcpi_delivery_rate_app_limited` (1 bit) and
/// `tcpi_fastopen_client_fail` (2 bits).
pub tcpi_delivery_fastopen_bitfields: u8,
*/
pub tcpi_rto: u32,
pub tcpi_ato: u32,
pub tcpi_snd_mss: u32,
pub tcpi_rcv_mss: u32,
pub tcpi_unacked: u32,
pub tcpi_sacked: u32,
pub tcpi_lost: u32,
pub tcpi_retrans: u32,
pub tcpi_fackets: u32,
pub tcpi_last_data_sent: u32,
pub tcpi_last_ack_sent: u32,
pub tcpi_last_data_recv: u32,
pub tcpi_last_ack_recv: u32,
pub tcpi_pmtu: u32,
pub tcpi_rcv_ssthresh: u32,
pub tcpi_rtt: u32,
pub tcpi_rttvar: u32,
pub tcpi_snd_ssthresh: u32,
pub tcpi_snd_cwnd: u32,
pub tcpi_advmss: u32,
pub tcpi_reordering: u32,
pub tcpi_rcv_rtt: u32,
pub tcpi_rcv_space: u32,
pub tcpi_total_retrans: u32,
pub tcpi_pacing_rate: u64,
pub tcpi_max_pacing_rate: u64,
pub tcpi_bytes_acked: u64,
pub tcpi_bytes_received: u64,
pub tcpi_segs_out: u32,
pub tcpi_segs_in: u32,
pub tcpi_notsent_bytes: u32,
pub tcpi_min_rtt: u32,
pub tcpi_data_segs_in: u32,
pub tcpi_data_segs_out: u32,
pub tcpi_delivery_rate: u64,
pub tcpi_busy_time: u64,
pub tcpi_rwnd_limited: u64,
pub tcpi_sndbuf_limited: u64,
pub tcpi_delivered: u32,
pub tcpi_delivered_ce: u32,
pub tcpi_bytes_sent: u64,
pub tcpi_bytes_retrans: u64,
pub tcpi_dsack_dups: u32,
pub tcpi_reord_seen: u32,
// FIXME(musl): to uncomment once CI musl is updated
//pub tcpi_rcv_ooopack: u32,
//pub tcpi_snd_wnd: u32,
}
}

s_no_extra_traits! {
Expand Down

0 comments on commit a5adc5f

Please sign in to comment.