diff --git a/src/link/af_spec/inet6_icmp.rs b/src/link/af_spec/inet6_icmp.rs index dc2918eb..bb8af5ab 100644 --- a/src/link/af_spec/inet6_icmp.rs +++ b/src/link/af_spec/inet6_icmp.rs @@ -5,7 +5,9 @@ use netlink_packet_utils::{ DecodeError, }; -pub(crate) const ICMP6_STATS_LEN: usize = 48; +pub(crate) const ICMP6_STATS_LEN: usize = 56; + +// Reference: https://github.com/torvalds/linux/blob/master/include/uapi/linux/snmp.h#L106 #[derive(Clone, Copy, Eq, PartialEq, Debug, Default)] #[non_exhaustive] @@ -16,6 +18,7 @@ pub struct Icmp6Stats { pub out_msgs: i64, pub out_errors: i64, pub csum_errors: i64, + pub out_ratelimit_host: i64, } buffer!(Icmp6StatsBuffer(ICMP6_STATS_LEN) { @@ -25,6 +28,7 @@ buffer!(Icmp6StatsBuffer(ICMP6_STATS_LEN) { out_msgs: (i64, 24..32), out_errors: (i64, 32..40), csum_errors: (i64, 40..48), + out_ratelimit_host: (i64, 48..56), }); impl> Parseable> for Icmp6Stats { @@ -36,6 +40,7 @@ impl> Parseable> for Icmp6Stats { out_msgs: buf.out_msgs(), out_errors: buf.out_errors(), csum_errors: buf.csum_errors(), + out_ratelimit_host: buf.out_ratelimit_host(), }) } } @@ -53,5 +58,6 @@ impl Emitable for Icmp6Stats { buffer.set_out_msgs(self.out_msgs); buffer.set_out_errors(self.out_errors); buffer.set_csum_errors(self.csum_errors); + buffer.set_out_ratelimit_host(self.out_ratelimit_host); } } diff --git a/src/link/tests/statistics.rs b/src/link/tests/statistics.rs index f58ccca2..b67e9a9e 100644 --- a/src/link/tests/statistics.rs +++ b/src/link/tests/statistics.rs @@ -380,6 +380,7 @@ fn test_parsing_link_statistics_on_kernel_4_18() { out_msgs: 6, out_errors: 0, csum_errors: 0, + out_ratelimit_host: 0, }), AfSpecInet6::Token(std::net::Ipv6Addr::UNSPECIFIED), AfSpecInet6::AddrGenMode(1),