Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .rustfmt.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
max_width = 80
wrap_comments = true
reorder_imports = true
format_strings = true
edition = "2021"
13 changes: 13 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
# Changelog
## [0.23.0] - 2025-04-30
### Breaking changes
- `InfoBond::ArpAllTargets` changed to enum. (507ea73)
- `InfoBond::XmitHashPolicy` changed to enum. (b2572da)
- `InfoBond::FailOverMac` changed to enum. (3270863)

### New features
- tc: Add support of tunnel key. (f5535f3)

### Bug fixes
- Fix compile on Andriod. (d44d500)
- Fix panic of integer underflow in `RouteNextHopBuffer`. (a285aba)

## [0.22.0] - 2025-03-17
### Breaking changes
- Changed `tc::TcActionMirrorOption::Tm` from `Vec<u8>` to `Tcf`. (f3953b8)
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
authors = ["Corentin Henry <corentinhenry@gmail.com>"]
name = "netlink-packet-route"
version = "0.22.0"
version = "0.23.0"
edition = "2021"

homepage = "https://github.com/rust-netlink/netlink-packet-route"
Expand Down
2 changes: 1 addition & 1 deletion examples/dump_neighbour_tables.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ fn main() {
NetlinkPayload::InnerMessage(
RouteNetlinkMessage::NewNeighbourTable(entry),
) => {
println!("HAHA {:?}", entry);
println!("HAHA {entry:?}");
}
NetlinkPayload::Error(err) => {
eprintln!("Received a netlink error message: {err:?}");
Expand Down
27 changes: 11 additions & 16 deletions src/address/attribute.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,8 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>>
Self::Address(IpAddr::from(data))
} else {
return Err(DecodeError::from(format!(
"Invalid IFA_LOCAL, got unexpected length \
of payload {:?}",
payload
"Invalid IFA_LOCAL, got unexpected length of payload \
{payload:?}"
)));
}
}
Expand All @@ -141,9 +140,8 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>>
Self::Local(IpAddr::from(data))
} else {
return Err(DecodeError::from(format!(
"Invalid IFA_LOCAL, got unexpected length \
of payload {:?}",
payload
"Invalid IFA_LOCAL, got unexpected length of payload \
{payload:?}"
)));
}
}
Expand All @@ -157,9 +155,8 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>>
Self::Broadcast(Ipv4Addr::from(data))
} else {
return Err(DecodeError::from(format!(
"Invalid IFA_BROADCAST, got unexpected length \
of IPv4 address payload {:?}",
payload
"Invalid IFA_BROADCAST, got unexpected length of IPv4 \
address payload {payload:?}"
)));
}
}
Expand All @@ -170,15 +167,14 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>>
Self::Anycast(Ipv6Addr::from(data))
} else {
return Err(DecodeError::from(format!(
"Invalid IFA_ANYCAST, got unexpected length \
of IPv6 address payload {:?}",
payload
"Invalid IFA_ANYCAST, got unexpected length of IPv6 \
address payload {payload:?}"
)));
}
}
IFA_CACHEINFO => Self::CacheInfo(
CacheInfo::parse(&CacheInfoBuffer::new(payload))
.context(format!("Invalid IFA_CACHEINFO {:?}", payload))?,
.context(format!("Invalid IFA_CACHEINFO {payload:?}"))?,
),
IFA_MULTICAST => {
if payload.len() == IPV6_ADDR_LEN {
Expand All @@ -187,9 +183,8 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>>
Self::Multicast(Ipv6Addr::from(data))
} else {
return Err(DecodeError::from(format!(
"Invalid IFA_MULTICAST, got unexpected length \
of IPv6 address payload {:?}",
payload
"Invalid IFA_MULTICAST, got unexpected length of IPv6 \
address payload {payload:?}"
)));
}
}
Expand Down
12 changes: 6 additions & 6 deletions src/ip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ pub(crate) fn parse_ipv4_addr(raw: &[u8]) -> Result<Ipv4Addr, DecodeError> {
Ok(Ipv4Addr::new(raw[0], raw[1], raw[2], raw[3]))
} else {
Err(DecodeError::from(format!(
"Invalid u8 array length {}, expecting \
{IPV4_ADDR_LEN} for IPv4 address, got {:?}",
"Invalid u8 array length {}, expecting {IPV4_ADDR_LEN} for IPv4 \
address, got {:?}",
raw.len(),
raw,
)))
Expand All @@ -27,8 +27,8 @@ pub(crate) fn parse_ipv6_addr(raw: &[u8]) -> Result<Ipv6Addr, DecodeError> {
Ok(Ipv6Addr::from(data))
} else {
Err(DecodeError::from(format!(
"Invalid u8 array length {}, expecting {IPV6_ADDR_LEN} \
for IPv6 address, got {:?}",
"Invalid u8 array length {}, expecting {IPV6_ADDR_LEN} for IPv6 \
address, got {:?}",
raw.len(),
raw,
)))
Expand All @@ -49,8 +49,8 @@ pub(crate) fn parse_ip_addr(raw: &[u8]) -> Result<IpAddr, DecodeError> {
parse_ipv4_addr(raw).map(IpAddr::from)
} else {
Err(DecodeError::from(format!(
"Invalid u8 array length {}, expecting {IPV6_ADDR_LEN} \
for IPv6 address or {IPV4_ADDR_LEN} for IPv4 address, got {:?}",
"Invalid u8 array length {}, expecting {IPV6_ADDR_LEN} for IPv6 \
address or {IPV4_ADDR_LEN} for IPv4 address, got {:?}",
raw.len(),
raw,
)))
Expand Down
4 changes: 2 additions & 2 deletions src/link/af_spec/bridge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,8 +189,8 @@ impl TryFrom<&[u8]> for BridgeVlanInfo {
})
} else {
Err(DecodeError::from(format!(
"Invalid IFLA_BRIDGE_VLAN_INFO value, expecting [u8;4], \
but got {raw:?}"
"Invalid IFLA_BRIDGE_VLAN_INFO value, expecting [u8;4], but \
got {raw:?}"
)))
}
}
Expand Down
12 changes: 4 additions & 8 deletions src/link/af_spec/inet6.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for AfSpecInet6 {
IFLA_INET6_CACHEINFO => CacheInfo(
Inet6CacheInfo::parse(&Inet6CacheInfoBuffer::new(payload))
.context(format!(
"invalid IFLA_INET6_CACHEINFO value {:?}",
payload
"invalid IFLA_INET6_CACHEINFO value {payload:?}"
))?,
),
IFLA_INET6_CONF => DevConf(
Expand All @@ -136,8 +135,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for AfSpecInet6 {
.as_slice(),
))
.context(format!(
"invalid IFLA_INET6_CONF value {:?}",
payload
"invalid IFLA_INET6_CONF value {payload:?}"
))?,
),
IFLA_INET6_STATS => Stats(
Expand All @@ -150,8 +148,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for AfSpecInet6 {
.as_slice(),
))
.context(format!(
"invalid IFLA_INET6_STATS value {:?}",
payload
"invalid IFLA_INET6_STATS value {payload:?}"
))?,
),
IFLA_INET6_ICMP6STATS => Icmp6Stats(
Expand All @@ -164,8 +161,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for AfSpecInet6 {
.as_slice(),
))
.context(format!(
"invalid IFLA_INET6_ICMP6STATS value {:?}",
payload
"invalid IFLA_INET6_ICMP6STATS value {payload:?}"
))?,
),
IFLA_INET6_TOKEN => Token(
Expand Down
3 changes: 2 additions & 1 deletion src/link/af_spec/unspec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>>
}
kind => AfSpecUnspec::Other(DefaultNla::parse(&nla).context(
format!(
"Unknown AF_XXX type {kind} for IFLA_AF_SPEC(AF_UNSPEC)"
"Unknown AF_XXX type {kind} for \
IFLA_AF_SPEC(AF_UNSPEC)"
),
)?),
})
Expand Down
11 changes: 5 additions & 6 deletions src/link/attribute.rs
Original file line number Diff line number Diff line change
Expand Up @@ -465,8 +465,8 @@ impl<'a, T: AsRef<[u8]> + ?Sized>
),
_ => Self::ProtoInfoUnknown(
DefaultNla::parse(buf).context(format!(
"invalid IFLA_PROTINFO for \
{interface_family:?}: {payload:?}"
"invalid IFLA_PROTINFO for {interface_family:?}: \
{payload:?}"
))?,
),
}
Expand Down Expand Up @@ -614,7 +614,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized>
),
IFLA_MAP => {
let err =
|payload| format!("Invalid IFLA_MAP value {:?}", payload);
|payload| format!("Invalid IFLA_MAP value {payload:?}");
Self::Map(
super::Map::parse(
&MapBuffer::new_checked(payload)
Expand All @@ -632,7 +632,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized>
)
.as_slice(),
))
.context(format!("Invalid IFLA_STATS value {:?}", payload))?,
.context(format!("Invalid IFLA_STATS value {payload:?}"))?,
),
IFLA_STATS64 => {
let payload = expand_buffer_if_small(
Expand All @@ -645,8 +645,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized>
payload.as_slice(),
))
.context(format!(
"Invalid IFLA_STATS64 value {:?}",
payload
"Invalid IFLA_STATS64 value {payload:?}"
))?,
)
}
Expand Down
7 changes: 3 additions & 4 deletions src/link/buffer_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@ pub(crate) fn expand_buffer_if_small(
match payload.len() {
l if l > expected_size => {
log::warn!(
"Specified {nla_name} NLA attribute holds \
more(most likely new kernel) data which is unknown to \
netlink-packet-route crate, expecting \
{expected_size}, got {}",
"Specified {nla_name} NLA attribute holds more(most likely \
new kernel) data which is unknown to netlink-packet-route \
crate, expecting {expected_size}, got {}",
got.len()
);
}
Expand Down
2 changes: 1 addition & 1 deletion src/link/down_reason.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>>
}
kind => Self::Other(DefaultNla::parse(buf).context(format!(
"unknown NLA type {kind} for IFLA_PROTO_DOWN_REASON: \
{payload:?}"
{payload:?}"
))?),
})
}
Expand Down
8 changes: 4 additions & 4 deletions src/link/link_info/bridge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -624,8 +624,8 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>>
Ok(IpAddr::V4(addr)) => Ipv4Address(addr),
Ok(v) => {
return Err(DecodeError::from(format!(
"Invalid BRIDGE_QUERIER_IP_ADDRESS, \
expecting IPv4 address, but got {v}"
"Invalid BRIDGE_QUERIER_IP_ADDRESS, expecting IPv4 \
address, but got {v}"
)))
}
Err(e) => {
Expand All @@ -638,8 +638,8 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>>
Ok(IpAddr::V6(addr)) => Ipv6Address(addr),
Ok(v) => {
return Err(DecodeError::from(format!(
"Invalid BRIDGE_QUERIER_IPV6_ADDRESS, \
expecting IPv6 address, but got {v}"
"Invalid BRIDGE_QUERIER_IPV6_ADDRESS, expecting IPv6 \
address, but got {v}"
)));
}
Err(e) => {
Expand Down
Loading
Loading