Skip to content

Commit 89df119

Browse files
committed
adding tcp_info struct to linux musl/glibc.
1 parent 103c18e commit 89df119

File tree

5 files changed

+115
-1
lines changed

5 files changed

+115
-1
lines changed

libc-test/build.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -4246,7 +4246,15 @@ fn test_linux(target: &str) {
42464246
// the `ifc_ifcu` field is an anonymous union
42474247
(struct_ == "ifconf" && field == "ifc_ifcu") ||
42484248
// glibc uses a single array `uregs` instead of individual fields.
4249-
(struct_ == "user_regs" && arm)
4249+
(struct_ == "user_regs" && arm) ||
4250+
// the `tcpi_snd_wscale` field is a bitfield
4251+
(struct_ == "tcp_info" && field == "tcpi_snd_wscale") ||
4252+
// the `tcpi_snd_wscale` field is a bitfield
4253+
(struct_ == "tcp_info" && field == "tcpi_rcv_wscale") ||
4254+
// the `tcpi_delivery_rate_app_limited` field is a bitfield on musl
4255+
(musl && struct_ == "tcp_info" && field == "tcpi_delivery_rate_app_limited") ||
4256+
// the `tcpi_fast_open_client_fail` field is a bitfield on musl
4257+
(musl && struct_ == "tcp_info" && field == "tcpi_fast_open_client_fail")
42504258
});
42514259

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

libc-test/semver/linux-gnu.txt

+1
Original file line numberDiff line numberDiff line change
@@ -700,3 +700,4 @@ putpwent
700700
putgrent
701701
execveat
702702
close_range
703+
tcp_info

libc-test/semver/linux-musl.txt

+1
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,4 @@ strftime
8181
strptime
8282
dirname
8383
basename
84+
tcp_info

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

+39
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,45 @@ s! {
432432
pub len: ::__u32,
433433
pub options: ::__u32,
434434
}
435+
436+
// netinet/tcp.h
437+
438+
pub struct tcp_info {
439+
pub tcpi_state: u8,
440+
pub tcpi_ca_state: u8,
441+
pub tcpi_retransmits: u8,
442+
pub tcpi_probes: u8,
443+
pub tcpi_backoff: u8,
444+
pub tcpi_options: u8,
445+
// bitfields 4
446+
pub tcpi_snd_wscale: u8,
447+
// bitfields 4
448+
pub tcpi_rcv_wscale: u8,
449+
pub tcpi_rto: u32,
450+
pub tcpi_ato: u32,
451+
pub tcpi_snd_mss: u32,
452+
pub tcpi_rcv_mss: u32,
453+
pub tcpi_unacked: u32,
454+
pub tcpi_sacked: u32,
455+
pub tcpi_lost: u32,
456+
pub tcpi_retrans: u32,
457+
pub tcpi_fackets: u32,
458+
pub tcpi_last_data_sent: u32,
459+
pub tcpi_last_ack_sent: u32,
460+
pub tcpi_last_data_recv: u32,
461+
pub tcpi_last_ack_recv: u32,
462+
pub tcpi_pmtu: u32,
463+
pub tcpi_rcv_ssthresh: u32,
464+
pub tcpi_rtt: u32,
465+
pub tcpi_rttvar: u32,
466+
pub tcpi_snd_ssthresh: u32,
467+
pub tcpi_snd_cwnd: u32,
468+
pub tcpi_advmss: u32,
469+
pub tcpi_reordering: u32,
470+
pub tcpi_rcv_rtt: u32,
471+
pub tcpi_rcv_space: u32,
472+
pub tcpi_total_retrans: u32,
473+
}
435474
}
436475

437476
impl siginfo_t {

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

+65
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,71 @@ s! {
348348
pub len: ::__u32,
349349
pub options: ::__u32,
350350
}
351+
352+
// netinet/tcp.h
353+
354+
pub struct tcp_info {
355+
pub tcpi_state: u8,
356+
pub tcpi_ca_state: u8,
357+
pub tcpi_retransmits: u8,
358+
pub tcpi_probes: u8,
359+
pub tcpi_backoff: u8,
360+
pub tcpi_options: u8,
361+
// bitfields 4
362+
pub tcpi_snd_wscale: u8,
363+
// bitfields 4
364+
pub tcpi_rcv_wscale: u8,
365+
// bitfields 1
366+
pub tcpi_delivery_rate_app_limited: u8,
367+
// bitfields 2
368+
pub tcpi_fastopen_client_fail: u8,
369+
pub tcpi_rto: u32,
370+
pub tcpi_ato: u32,
371+
pub tcpi_snd_mss: u32,
372+
pub tcpi_rcv_mss: u32,
373+
pub tcpi_unacked: u32,
374+
pub tcpi_sacked: u32,
375+
pub tcpi_lost: u32,
376+
pub tcpi_retrans: u32,
377+
pub tcpi_fackets: u32,
378+
pub tcpi_last_data_sent: u32,
379+
pub tcpi_last_ack_sent: u32,
380+
pub tcpi_last_data_recv: u32,
381+
pub tcpi_last_ack_recv: u32,
382+
pub tcpi_pmtu: u32,
383+
pub tcpi_rcv_ssthresh: u32,
384+
pub tcpi_rtt: u32,
385+
pub tcpi_rttvar: u32,
386+
pub tcpi_snd_ssthresh: u32,
387+
pub tcpi_snd_cwnd: u32,
388+
pub tcpi_advmss: u32,
389+
pub tcpi_reordering: u32,
390+
pub tcpi_rcv_rtt: u32,
391+
pub tcpi_rcv_space: u32,
392+
pub tcpi_total_retrans: u32,
393+
pub tcpi_pacing_rate: u64,
394+
pub tcpi_max_pacing_rate: u64,
395+
pub tcpi_bytes_acked: u64,
396+
pub tcpi_bytes_received: u64,
397+
pub tcpi_segs_out: u32,
398+
pub tcpi_segs_in: u32,
399+
pub tcpi_notsent_bytes: u32,
400+
pub tcpi_min_rtt: u32,
401+
pub tcpi_data_segs_in: u32,
402+
pub tcpi_data_segs_out: u32,
403+
pub tcpi_delivery_rate: u64,
404+
pub tcpi_busy_time: u64,
405+
pub tcpi_rwnd_limited: u64,
406+
pub tcpi_sndbuf_limited: u64,
407+
pub tcpi_delivered: u32,
408+
pub tcpi_delivered_ce: u32,
409+
pub tcpi_bytes_sent: u64,
410+
pub tcpi_bytes_retrans: u64,
411+
pub tcpi_dsack_dups: u32,
412+
pub tcpi_reord_seen: u32,
413+
pub tcpi_rcv_ooopack: u32,
414+
pub tcpi_snd_wnd: u32,
415+
}
351416
}
352417

353418
s_no_extra_traits! {

0 commit comments

Comments
 (0)