Skip to content
Open
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: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,3 @@ tokio = { version = "1.30", features = ["rt", "net", "time", "macros"] }

[dev-dependencies]
pretty_assertions = "1.4.1"
ctor = "0.5.0"
30 changes: 29 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,32 @@
check:
tests_setup:
sudo ip netns list | grep -qw iproute-rs-test && sudo ip netns del iproute-rs-test || true
sudo ip netns add iproute-rs-test

# Create veth pair and move one end into the test netns
sudo ip link add veth0 type veth peer name veth1
sudo ip link set veth1 netns iproute-rs-test
sudo ip addr add 192.0.2.1/24 dev veth0
sudo ip link set veth0 up
sudo ip -n iproute-rs-test addr add 192.0.2.2/24 dev veth1
sudo ip -n iproute-rs-test link set veth1 up
sudo ip -n iproute-rs-test link set lo up

# create dummy, altname, bridge and vlan inside the test netns
sudo ip -n iproute-rs-test link add dummy0 type dummy
sudo ip -n iproute-rs-test link property add dev dummy0 altname dmmy-zero
sudo ip -n iproute-rs-test link add br0 type bridge
sudo ip -n iproute-rs-test link add link dummy0 name dummy0.1 type vlan id 1
sudo ip -n iproute-rs-test link set dev dummy0.1 master br0

sudo ip -n iproute-rs-test link set dummy0 up
sudo ip -n iproute-rs-test link set dummy0.1 up
sudo ip -n iproute-rs-test link set br0 up

echo "setup network namespace for tests finished"
sudo ip -n iproute-rs-test -c -d link show

check: tests_setup
cargo build;
env CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER="sudo" \
cargo test -- --test-threads=1 --show-output $(WHAT) ;
sudo ip netns del iproute-rs-test
1 change: 1 addition & 0 deletions src/ip/link/flags.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ pub fn link_flags_to_string(mut flags: LinkFlags) -> Vec<String> {
// Compatible with iproute2, but we still append `CONTROLLER`
// after iproute2 flags.
ret.push("MASTER".into());
flags.remove(flag)
} else if flag == LinkFlags::LowerUp {
ret.push("LOWER_UP".into());
flags.remove(flag)
Expand Down
29 changes: 6 additions & 23 deletions src/ip/link/link_details.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// SPDX-License-Identifier: MIT

use std::ffi::CStr;

use rtnetlink::packet_core::DefaultNla;
Expand Down Expand Up @@ -31,7 +33,7 @@ impl std::fmt::Display for CliLinkInfoCombined {
if let Some(slave_kind) = &self.info_slave_kind {
write!(f, "\n {}_slave ", slave_kind)?;
if let Some(slave_data) = &self.info_slave_data {
write!(f, "{slave_data} ")?;
write!(f, "{slave_data}")?;
}
}
Ok(())
Expand All @@ -45,8 +47,6 @@ const IFLA_GRO_MAX_SIZE: u16 = 58;
const IFLA_TSO_MAX_SIZE: u16 = 59;
const IFLA_TSO_MAX_SEGS: u16 = 60;
const IFLA_ALLMULTI: u16 = 61;
const IFLA_GSO_IPV4_MAX_SIZE: u16 = 63;
const IFLA_GRO_IPV4_MAX_SIZE: u16 = 64;

fn get_addr_gen_mode(af_spec_unspec: &[AfSpecUnspec]) -> String {
af_spec_unspec
Expand Down Expand Up @@ -97,8 +97,6 @@ pub(crate) struct CliLinkInfoDetails {
tso_max_size: u32,
tso_max_segs: u32,
gro_max_size: u32,
gso_ipv4_max_size: u32,
gro_ipv4_max_size: u32,
#[serde(skip_serializing_if = "String::is_empty")]
parentbus: String,
#[serde(skip_serializing_if = "String::is_empty")]
Expand All @@ -119,8 +117,6 @@ impl CliLinkInfoDetails {
let mut tso_max_size = 0;
let mut tso_max_segs = 0;
let mut gro_max_size = 0;
let mut gso_ipv4_max_size = 0;
let mut gro_ipv4_max_size = 0;
let mut inet6_addr_gen_mode = String::new();
let mut parentbus = String::new();
let mut parentdev = String::new();
Expand Down Expand Up @@ -164,16 +160,6 @@ impl CliLinkInfoDetails {
default_nla.emit_value(&mut val);
allmulti = u32::from_ne_bytes(val);
}
IFLA_GSO_IPV4_MAX_SIZE => {
let mut val = [0u8; 4];
default_nla.emit_value(&mut val);
gso_ipv4_max_size = u32::from_ne_bytes(val);
}
IFLA_GRO_IPV4_MAX_SIZE => {
let mut val = [0u8; 4];
default_nla.emit_value(&mut val);
gro_ipv4_max_size = u32::from_ne_bytes(val);
}
_ => { /* println!("Remains {:?}", default_nla); */ }
},
LinkAttribute::LinkInfo(info) => {
Expand Down Expand Up @@ -217,8 +203,6 @@ impl CliLinkInfoDetails {
tso_max_size,
tso_max_segs,
gro_max_size,
gso_ipv4_max_size,
gro_ipv4_max_size,
parentbus,
parentdev,
}
Expand All @@ -229,7 +213,7 @@ impl std::fmt::Display for CliLinkInfoDetails {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
" promiscuity {} allmulti {} minmtu {} maxmtu {} ",
" promiscuity {} allmulti {} minmtu {} maxmtu {} ",
self.promiscuity, self.allmulti, self.min_mtu, self.max_mtu,
)?;

Expand All @@ -239,7 +223,8 @@ impl std::fmt::Display for CliLinkInfoDetails {

write!(
f,
"addrgenmode {} numtxqueues {} numrxqueues {} gso_max_size {} gso_max_segs {} tso_max_size {} tso_max_segs {} gro_max_size {} gso_ipv4_max_size {} gro_ipv4_max_size {} ",
"addrgenmode {} numtxqueues {} numrxqueues {} gso_max_size {} \
gso_max_segs {} tso_max_size {} tso_max_segs {} gro_max_size {} ",
self.inet6_addr_gen_mode,
self.num_tx_queues,
self.num_rx_queues,
Expand All @@ -248,8 +233,6 @@ impl std::fmt::Display for CliLinkInfoDetails {
self.tso_max_size,
self.tso_max_segs,
self.gro_max_size,
self.gso_ipv4_max_size,
self.gro_ipv4_max_size,
)?;

if !self.parentbus.is_empty() {
Expand Down
Loading