Support for link slave info
lights0123 opened this issue · comments
Currently, slave links are just returned as raw bytes:
netlink/netlink-sys/src/packet/rtnl/link/nlas/link_infos.rs
Lines 35 to 36 in 5c1efa5
These should be decoded just like master links. The bridge slave info can be printed currently with:
if let Nla::Info(info) = nla {
if let Some(Info::SlaveKind(name)) = info.get(0) {
if name == b"bridge\0" {
if let Some(Info::SlaveData(data)) = info.get(1) {
let iter = NlasIterator::new(data);
for i in iter {
let i = i.unwrap();
match i.kind() {
0 => println!("IFLA_BRPORT_UNSPEC: {:?}", i.value()),
1 => println!("IFLA_BRPORT_STATE: {:?}", i.value()),
2 => println!("IFLA_BRPORT_PRIORITY: {:?}", i.value()),
3 => println!("IFLA_BRPORT_COST: {:?}", i.value()),
4 => println!("IFLA_BRPORT_MODE: {:?}", i.value()),
5 => println!("IFLA_BRPORT_GUARD: {:?}", i.value()),
6 => println!("IFLA_BRPORT_PROTECT: {:?}", i.value()),
7 => println!("IFLA_BRPORT_FAST_LEAVE: {:?}", i.value()),
8 => println!("IFLA_BRPORT_LEARNING: {:?}", i.value()),
9 => println!("IFLA_BRPORT_UNICAST_FLOOD: {:?}", i.value()),
10 => println!("IFLA_BRPORT_PROXYARP: {:?}", i.value()),
11 => println!("IFLA_BRPORT_LEARNING_SYNC: {:?}", i.value()),
12 => println!("IFLA_BRPORT_PROXYARP_WIFI: {:?}", i.value()),
13 => println!("IFLA_BRPORT_ROOT_ID: {:?}", i.value()),
14 => println!("IFLA_BRPORT_BRIDGE_ID: {:?}", i.value()),
15 => println!("IFLA_BRPORT_DESIGNATED_PORT: {:?}", i.value()),
16 => println!("IFLA_BRPORT_DESIGNATED_COST: {:?}", i.value()),
17 => println!("IFLA_BRPORT_ID: {:?}", i.value()),
18 => println!("IFLA_BRPORT_NO: {:?}", i.value()),
19 => {
println!("IFLA_BRPORT_TOPOLOGY_CHANGE_ACK: {:?}", i.value())
}
20 => println!("IFLA_BRPORT_CONFIG_PENDING: {:?}", i.value()),
21 => {
println!("IFLA_BRPORT_MESSAGE_AGE_TIMER: {:?}", i.value())
}
22 => {
println!("IFLA_BRPORT_FORWARD_DELAY_TIMER: {:?}", i.value())
}
23 => println!("IFLA_BRPORT_HOLD_TIMER: {:?}", i.value()),
24 => println!("IFLA_BRPORT_FLUSH: {:?}", i.value()),
25 => println!("IFLA_BRPORT_MULTICAST_ROUTER: {:?}", i.value()),
26 => println!("IFLA_BRPORT_PAD: {:?}", i.value()),
27 => println!("IFLA_BRPORT_MCAST_FLOOD: {:?}", i.value()),
28 => println!("IFLA_BRPORT_MCAST_TO_UCAST: {:?}", i.value()),
29 => println!("IFLA_BRPORT_VLAN_TUNNEL: {:?}", i.value()),
30 => println!("IFLA_BRPORT_BCAST_FLOOD: {:?}", i.value()),
31 => println!("IFLA_BRPORT_GROUP_FWD_MASK: {:?}", i.value()),
32 => println!("IFLA_BRPORT_NEIGH_SUPPRESS: {:?}", i.value()),
_ => {}
}
}
}
}
}
}
An example of the data it produces:
IFLA_BRPORT_STATE: [3]
IFLA_BRPORT_PRIORITY: [32, 0]
IFLA_BRPORT_COST: [4, 0, 0, 0]
IFLA_BRPORT_MODE: [0]
IFLA_BRPORT_GUARD: [0]
IFLA_BRPORT_PROTECT: [0]
IFLA_BRPORT_FAST_LEAVE: [0]
IFLA_BRPORT_MCAST_TO_UCAST: [0]
IFLA_BRPORT_LEARNING: [1]
IFLA_BRPORT_UNICAST_FLOOD: [1]
IFLA_BRPORT_MCAST_FLOOD: [1]
IFLA_BRPORT_BCAST_FLOOD: [1]
IFLA_BRPORT_PROXYARP: [0]
IFLA_BRPORT_PROXYARP_WIFI: [0]
IFLA_BRPORT_ROOT_ID: [128, 0, 120, 208, 4, 44, 61, 251]
IFLA_BRPORT_BRIDGE_ID: [128, 0, 120, 208, 4, 44, 61, 251]
IFLA_BRPORT_DESIGNATED_PORT: [1, 128]
IFLA_BRPORT_DESIGNATED_COST: [0, 0]
IFLA_BRPORT_ID: [1, 128]
IFLA_BRPORT_NO: [1, 0]
IFLA_BRPORT_TOPOLOGY_CHANGE_ACK: [0]
IFLA_BRPORT_CONFIG_PENDING: [0]
IFLA_BRPORT_VLAN_TUNNEL: [0]
IFLA_BRPORT_GROUP_FWD_MASK: [0, 0]
IFLA_BRPORT_NEIGH_SUPPRESS: [0]
IFLA_BRPORT_MESSAGE_AGE_TIMER: [0, 0, 0, 0, 0, 0, 0, 0]
IFLA_BRPORT_FORWARD_DELAY_TIMER: [0, 0, 0, 0, 0, 0, 0, 0]
IFLA_BRPORT_HOLD_TIMER: [0, 0, 0, 0, 0, 0, 0, 0]
IFLA_BRPORT_MULTICAST_ROUTER: [1]
These constants can be uncommented here:
netlink/netlink-packet-route/src/rtnl/constants.rs
Lines 832 to 864 in 8d3db04
It appears from the iproute2 source code that only bonds and bridges have slave devices.