# Operation "newlink"
## Do (request)
```rust
PushOpNewlinkDoRequest::new(&mut vec)
.push_ifname(val) // &CStr
.push_ifname_bytes(val) // &[u8]
.push_net_ns_pid(val) // u32
.push_net_ns_fd(val) // u32
.push_target_netnsid(val) // i32
.push_link_netnsid(val) // i32
.nested_linkinfo()
.push_kind(val) // &CStr
.push_kind_bytes(val) // &[u8]
.nested_data_bond()
.push_mode(val) // u8
.push_active_slave(val) // u32
.push_miimon(val) // u32
.push_updelay(val) // u32
.push_downdelay(val) // u32
.push_use_carrier(val) // u8
.push_arp_interval(val) // u32
.array_arp_ip_target()
.entry(val) // Ipv4Addr
.end_array()
.push_arp_validate(val) // u32
.push_arp_all_targets(val) // u32
.push_primary(val) // u32
.push_primary_reselect(val) // u8
.push_fail_over_mac(val) // u8
.push_xmit_hash_policy(val) // u8
.push_resend_igmp(val) // u32
.push_num_peer_notif(val) // u8
.push_all_slaves_active(val) // u8
.push_min_links(val) // u32
.push_lp_interval(val) // u32
.push_packets_per_slave(val) // u32
.push_ad_lacp_rate(val) // u8
.push_ad_select(val) // u8
.nested_ad_info()
.push_aggregator(val) // u16
.push_num_ports(val) // u16
.push_actor_key(val) // u16
.push_partner_key(val) // u16
.push_partner_mac(val) // &[u8]
.end_nested()
.push_ad_actor_sys_prio(val) // u16
.push_ad_user_port_key(val) // u16
.push_ad_actor_system(val) // &[u8]
.push_tlb_dynamic_lb(val) // u8
.push_peer_notif_delay(val) // u32
.push_ad_lacp_active(val) // u8
.push_missed_max(val) // u8
.array_ns_ip6_target()
.entry(val) // &[u8]
.end_array()
.push_coupled_control(val) // u8
.end_nested()
.nested_data_bridge()
.push_forward_delay(val) // u32
.push_hello_time(val) // u32
.push_max_age(val) // u32
.push_ageing_time(val) // u32
.push_stp_state(val) // u32
.push_priority(val) // u16
.push_vlan_filtering(val) // u8
.push_vlan_protocol(val) // u16
.push_group_fwd_mask(val) // u16
.push_root_id(val) // PushIflaBridgeId
.push_bridge_id(val) // PushIflaBridgeId
.push_root_port(val) // u16
.push_root_path_cost(val) // u32
.push_topology_change(val) // u8
.push_topology_change_detected(val) // u8
.push_hello_timer(val) // u64
.push_tcn_timer(val) // u64
.push_topology_change_timer(val) // u64
.push_gc_timer(val) // u64
.push_group_addr(val) // &[u8]
.push_fdb_flush(val) // &[u8]
.push_mcast_router(val) // u8
.push_mcast_snooping(val) // u8
.push_mcast_query_use_ifaddr(val) // u8
.push_mcast_querier(val) // u8
.push_mcast_hash_elasticity(val) // u32
.push_mcast_hash_max(val) // u32
.push_mcast_last_member_cnt(val) // u32
.push_mcast_startup_query_cnt(val) // u32
.push_mcast_last_member_intvl(val) // u64
.push_mcast_membership_intvl(val) // u64
.push_mcast_querier_intvl(val) // u64
.push_mcast_query_intvl(val) // u64
.push_mcast_query_response_intvl(val) // u64
.push_mcast_startup_query_intvl(val) // u64
.push_nf_call_iptables(val) // u8
.push_nf_call_ip6tables(val) // u8
.push_nf_call_arptables(val) // u8
.push_vlan_default_pvid(val) // u16
.push_pad(val) // &[u8]
.push_vlan_stats_enabled(val) // u8
.push_mcast_stats_enabled(val) // u8
.push_mcast_igmp_version(val) // u8
.push_mcast_mld_version(val) // u8
.push_vlan_stats_per_port(val) // u8
.push_multi_boolopt(val) // PushBrBooloptMulti
.push_mcast_querier_state(val) // &[u8]
.push_fdb_n_learned(val) // u32
.push_fdb_max_learned(val) // u32
.end_nested()
.nested_data_erspan()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_gre()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_gretap()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_ip6gre()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_geneve()
.push_id(val) // u32
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_port(val) // u16
.push_collect_metadata(val) // ()
.push_remote6(val) // &[u8]
.push_udp_csum(val) // u8
.push_udp_zero_csum6_tx(val) // u8
.push_udp_zero_csum6_rx(val) // u8
.push_label(val) // u32
.push_ttl_inherit(val) // u8
.push_df(val) // u8
.push_inner_proto_inherit(val) // ()
.push_port_range(val) // PushIflaGenevePortRange
.end_nested()
.nested_data_ipip()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u16
.push_proto(val) // u8
.push_pmtudisc(val) // u8
.push_6rd_prefix(val) // &[u8]
.push_6rd_relay_prefix(val) // &[u8]
.push_6rd_prefixlen(val) // u16
.push_6rd_relay_prefixlen(val) // u16
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_ip6tnl()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_proto(val) // u8
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_sit()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u16
.push_proto(val) // u8
.push_pmtudisc(val) // u8
.push_6rd_prefix(val) // &[u8]
.push_6rd_relay_prefix(val) // &[u8]
.push_6rd_prefixlen(val) // u16
.push_6rd_relay_prefixlen(val) // u16
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_tun()
.push_owner(val) // u32
.push_group(val) // u32
.push_type(val) // u8
.push_pi(val) // u8
.push_vnet_hdr(val) // u8
.push_persist(val) // u8
.push_multi_queue(val) // u8
.push_num_queues(val) // u32
.push_num_disabled_queues(val) // u32
.end_nested()
.nested_data_vlan()
.push_id(val) // u16
.push_flags(val) // PushIflaVlanFlags
.nested_egress_qos()
// Attribute may repeat multiple times (treat it as array)
.push_mapping(val) // PushIflaVlanQosMapping
.end_nested()
.nested_ingress_qos()
// Attribute may repeat multiple times (treat it as array)
.push_mapping(val) // PushIflaVlanQosMapping
.end_nested()
// Associated type: "VlanProtocols" (enum)
.push_protocol(val) // u16
.end_nested()
.nested_data_vrf()
.push_table(val) // u32
.end_nested()
.nested_data_vti()
.push_link(val) // u32
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_fwmark(val) // u32
.end_nested()
.nested_data_vti6()
.push_link(val) // u32
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_fwmark(val) // u32
.end_nested()
.nested_data_netkit()
.push_peer_info(val) // &[u8]
.push_primary(val) // u8
// Associated type: "NetkitPolicy" (enum)
.push_policy(val) // u32
// Associated type: "NetkitPolicy" (enum)
.push_peer_policy(val) // u32
// Associated type: "NetkitMode" (enum)
.push_mode(val) // u32
// Associated type: "NetkitScrub" (enum)
.push_scrub(val) // u32
// Associated type: "NetkitScrub" (enum)
.push_peer_scrub(val) // u32
.push_headroom(val) // u16
.push_tailroom(val) // u16
.end_nested()
.nested_data_ovpn()
// Associated type: "OvpnMode" (enum)
.push_mode(val) // u8
.end_nested()
.push_xstats(val) // &[u8]
.push_slave_kind(val) // &CStr
.push_slave_kind_bytes(val) // &[u8]
.nested_slave_data_bridge()
.push_state(val) // u8
.push_priority(val) // u16
.push_cost(val) // u32
.push_mode(val) // ()
.push_guard(val) // ()
.push_protect(val) // ()
.push_fast_leave(val) // ()
.push_learning(val) // ()
.push_unicast_flood(val) // ()
.push_proxyarp(val) // ()
.push_learning_sync(val) // ()
.push_proxyarp_wifi(val) // ()
.push_root_id(val) // PushIflaBridgeId
.push_bridge_id(val) // PushIflaBridgeId
.push_designated_port(val) // u16
.push_designated_cost(val) // u16
.push_id(val) // u16
.push_no(val) // u16
.push_topology_change_ack(val) // u8
.push_config_pending(val) // u8
.push_message_age_timer(val) // u64
.push_forward_delay_timer(val) // u64
.push_hold_timer(val) // u64
.push_flush(val) // ()
.push_multicast_router(val) // u8
.push_pad(val) // &[u8]
.push_mcast_flood(val) // ()
.push_mcast_to_ucast(val) // ()
.push_vlan_tunnel(val) // ()
.push_bcast_flood(val) // ()
.push_group_fwd_mask(val) // u16
.push_neigh_suppress(val) // ()
.push_isolated(val) // ()
.push_backup_port(val) // u32
.push_mrp_ring_open(val) // ()
.push_mrp_in_open(val) // ()
.push_mcast_eht_hosts_limit(val) // u32
.push_mcast_eht_hosts_cnt(val) // u32
.push_locked(val) // ()
.push_mab(val) // ()
.push_mcast_n_groups(val) // u32
.push_mcast_max_groups(val) // u32
.push_neigh_vlan_suppress(val) // ()
.push_backup_nhid(val) // u32
.end_nested()
.nested_slave_data_bond()
.push_state(val) // u8
.push_mii_status(val) // u8
.push_link_failure_count(val) // u32
.push_perm_hwaddr(val) // &[u8]
.push_queue_id(val) // u16
.push_ad_aggregator_id(val) // u16
.push_ad_actor_oper_port_state(val) // u8
.push_ad_partner_oper_port_state(val) // u16
.push_prio(val) // u32
.end_nested()
.end_nested()
.push_group(val) // u32
.push_num_tx_queues(val) // u32
.push_num_rx_queues(val) // u32
.push_address(val) // &[u8]
.push_broadcast(val) // &[u8]
.push_mtu(val) // u32
.push_txqlen(val) // u32
.push_operstate(val) // u8
.push_linkmode(val) // u8
.push_gso_max_size(val) // u32
.push_gso_max_segs(val) // u32
.push_gro_max_size(val) // u32
.push_gso_ipv4_max_size(val) // u32
.push_gro_ipv4_max_size(val) // u32
.nested_af_spec()
.nested_inet()
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
.push_conf(val) // &[u8]
.end_nested()
.nested_inet6()
.push_flags(val) // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
.push_conf(val) // &[u8]
.push_stats(val) // &[u8]
.push_mcast(val) // &[u8]
.push_cacheinfo(val) // PushIflaCacheinfo
.push_icmp6stats(val) // &[u8]
.push_token(val) // &[u8]
.push_addr_gen_mode(val) // u8
.push_ra_mtu(val) // u32
.end_nested()
.nested_mctp()
.push_net(val) // u32
.push_phys_binding(val) // u8
.end_nested()
.end_nested()
;
```
```rust
let attrs = OpNewlinkDoReply::new(buf);
// No attributes
```
### Do (reply)
```rust
PushOpNewlinkDoReply::new(&mut vec)
;
```
```rust
let attrs = OpNewlinkDoReply::new(buf);
// No attributes
```
## Low-level decoding
### Do (request)
```rust
let iter = OpNewlinkDoRequest::new(buf);
for attr in iter {
match attr {
Ifname(val) => {}, // &CStr
NetNsPid(val) => {}, // u32
NetNsFd(val) => {}, // u32
TargetNetnsid(val) => {}, // i32
LinkNetnsid(val) => {}, // i32
Linkinfo(iter) => {
for attr in iter {
match attr {
Kind(val) => {}, // &CStr
Data(val) => {}, // submessage
Xstats(val) => {}, // &[u8]
SlaveKind(val) => {}, // &CStr
SlaveData(val) => {}, // submessage
}
}
},
Group(val) => {}, // u32
NumTxQueues(val) => {}, // u32
NumRxQueues(val) => {}, // u32
Address(val) => {}, // &[u8]
Broadcast(val) => {}, // &[u8]
Mtu(val) => {}, // u32
Txqlen(val) => {}, // u32
Operstate(val) => {}, // u8
Linkmode(val) => {}, // u8
GsoMaxSize(val) => {}, // u32
GsoMaxSegs(val) => {}, // u32
GroMaxSize(val) => {}, // u32
GsoIpv4MaxSize(val) => {}, // u32
GroIpv4MaxSize(val) => {}, // u32
AfSpec(iter) => {
for attr in iter {
match attr {
Inet(iter) => {
for attr in iter {
match attr {
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
Conf(val) => {}, // &[u8]
}
}
},
Inet6(iter) => {
for attr in iter {
match attr {
Flags(val) => {}, // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
Conf(val) => {}, // &[u8]
Stats(val) => {}, // &[u8]
Mcast(val) => {}, // &[u8]
Cacheinfo(val) => {}, // PushIflaCacheinfo
Icmp6stats(val) => {}, // &[u8]
Token(val) => {}, // &[u8]
AddrGenMode(val) => {}, // u8
RaMtu(val) => {}, // u32
}
}
},
Mctp(iter) => {
for attr in iter {
match attr {
Net(val) => {}, // u32
PhysBinding(val) => {}, // u8
}
}
},
}
}
},
}
}
```
### Do (reply)
```rust
let iter = OpNewlinkDoReply::new(buf);
// No attributes
```
# Operation "dellink"
## Do (request)
```rust
PushOpDellinkDoRequest::new(&mut vec)
.push_ifname(val) // &CStr
.push_ifname_bytes(val) // &[u8]
;
```
```rust
let attrs = OpDellinkDoReply::new(buf);
// No attributes
```
### Do (reply)
```rust
PushOpDellinkDoReply::new(&mut vec)
;
```
```rust
let attrs = OpDellinkDoReply::new(buf);
// No attributes
```
## Low-level decoding
### Do (request)
```rust
let iter = OpDellinkDoRequest::new(buf);
for attr in iter {
match attr {
Ifname(val) => {}, // &CStr
}
}
```
### Do (reply)
```rust
let iter = OpDellinkDoReply::new(buf);
// No attributes
```
# Operation "getlink"
## Do (request)
```rust
PushOpGetlinkDoRequest::new(&mut vec)
.push_ifname(val) // &CStr
.push_ifname_bytes(val) // &[u8]
.push_alt_ifname(val) // &CStr
.push_alt_ifname_bytes(val) // &[u8]
// Associated type: "RtextFilter" (1 bit per enumeration)
.push_ext_mask(val) // u32
.push_target_netnsid(val) // i32
;
```
```rust
let attrs = OpGetlinkDoReply::new(buf);
attrs.get_address(); // &[u8]
attrs.get_broadcast(); // &[u8]
attrs.get_ifname(); // &CStr
attrs.get_mtu(); // u32
attrs.get_link(); // u32
attrs.get_qdisc(); // &CStr
attrs.get_stats(); // PushRtnlLinkStats
attrs.get_cost(); // &CStr
attrs.get_priority(); // &CStr
attrs.get_master(); // u32
attrs.get_wireless(); // &CStr
attrs.get_protinfo(); // &CStr
attrs.get_txqlen(); // u32
attrs.get_map(); // PushRtnlLinkIfmap
attrs.get_weight(); // u32
attrs.get_operstate(); // u8
attrs.get_linkmode(); // u8
{ // Nested Linkinfo
let attrs = attrs.get_linkinfo();
attrs.get_kind(); // &CStr
attrs.get_data(); // submessage
attrs.get_xstats(); // &[u8]
attrs.get_slave_kind(); // &CStr
attrs.get_slave_data(); // submessage
}
attrs.get_net_ns_pid(); // u32
attrs.get_ifalias(); // &CStr
attrs.get_num_vf(); // u32
{ // Nested VfinfoList
let attrs = attrs.get_vfinfo_list();
{ // Nested Info
// Attribute may repeat multiple times (treat it as array)
for entry in attrs.get_info() {
entry.get_mac(); // PushIflaVfMac
entry.get_vlan(); // PushIflaVfVlan
entry.get_tx_rate(); // PushIflaVfTxRate
entry.get_spoofchk(); // PushIflaVfSpoofchk
entry.get_link_state(); // PushIflaVfLinkState
entry.get_rate(); // PushIflaVfRate
entry.get_rss_query_en(); // PushIflaVfRssQueryEn
{ // Nested Stats
let attrs = entry.get_stats();
attrs.get_rx_packets(); // u64
attrs.get_tx_packets(); // u64
attrs.get_rx_bytes(); // u64
attrs.get_tx_bytes(); // u64
attrs.get_broadcast(); // u64
attrs.get_multicast(); // u64
attrs.get_pad(); // &[u8]
attrs.get_rx_dropped(); // u64
attrs.get_tx_dropped(); // u64
}
entry.get_trust(); // PushIflaVfTrust
entry.get_ib_node_guid(); // PushIflaVfGuid
entry.get_ib_port_guid(); // PushIflaVfGuid
{ // Nested VlanList
let attrs = entry.get_vlan_list();
// Attribute may repeat multiple times (treat it as array)
for entry in attrs.get_info() {
entry; // PushIflaVfVlanInfo
}
}
entry.get_broadcast(); // &[u8]
}
}
}
attrs.get_stats64(); // PushRtnlLinkStats64
{ // Nested VfPorts
let attrs = attrs.get_vf_ports();
}
{ // Nested PortSelf
let attrs = attrs.get_port_self();
}
{ // Nested AfSpec
let attrs = attrs.get_af_spec();
{ // Nested Inet
let attrs = attrs.get_inet();
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
attrs.get_conf(); // &[u8]
}
{ // Nested Inet6
let attrs = attrs.get_inet6();
attrs.get_flags(); // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
attrs.get_conf(); // &[u8]
attrs.get_stats(); // &[u8]
attrs.get_mcast(); // &[u8]
attrs.get_cacheinfo(); // PushIflaCacheinfo
attrs.get_icmp6stats(); // &[u8]
attrs.get_token(); // &[u8]
attrs.get_addr_gen_mode(); // u8
attrs.get_ra_mtu(); // u32
}
{ // Nested Mctp
let attrs = attrs.get_mctp();
attrs.get_net(); // u32
attrs.get_phys_binding(); // u8
}
}
attrs.get_group(); // u32
attrs.get_net_ns_fd(); // u32
// Associated type: "RtextFilter" (1 bit per enumeration)
attrs.get_ext_mask(); // u32
attrs.get_promiscuity(); // u32
attrs.get_num_tx_queues(); // u32
attrs.get_num_rx_queues(); // u32
attrs.get_carrier(); // u8
attrs.get_phys_port_id(); // &[u8]
attrs.get_carrier_changes(); // u32
attrs.get_phys_switch_id(); // &[u8]
attrs.get_link_netnsid(); // i32
attrs.get_phys_port_name(); // &CStr
attrs.get_proto_down(); // u8
attrs.get_gso_max_segs(); // u32
attrs.get_gso_max_size(); // u32
attrs.get_pad(); // &[u8]
{ // Nested Xdp
let attrs = attrs.get_xdp();
attrs.get_fd(); // i32
attrs.get_attached(); // u8
attrs.get_flags(); // u32
attrs.get_prog_id(); // u32
attrs.get_drv_prog_id(); // u32
attrs.get_skb_prog_id(); // u32
attrs.get_hw_prog_id(); // u32
attrs.get_expected_fd(); // i32
}
attrs.get_event(); // u32
attrs.get_new_netnsid(); // i32
attrs.get_target_netnsid(); // i32
attrs.get_carrier_up_count(); // u32
attrs.get_carrier_down_count(); // u32
attrs.get_new_ifindex(); // i32
attrs.get_min_mtu(); // u32
attrs.get_max_mtu(); // u32
{ // Nested PropList
let attrs = attrs.get_prop_list();
attrs.get_alt_ifname(); // &CStr
}
attrs.get_perm_address(); // &[u8]
attrs.get_proto_down_reason(); // &CStr
attrs.get_parent_dev_name(); // &CStr
attrs.get_parent_dev_bus_name(); // &CStr
attrs.get_gro_max_size(); // u32
attrs.get_tso_max_size(); // u32
attrs.get_tso_max_segs(); // u32
attrs.get_allmulti(); // u32
attrs.get_devlink_port(); // &[u8]
attrs.get_gso_ipv4_max_size(); // u32
attrs.get_gro_ipv4_max_size(); // u32
{ // Nested DpllPin
let attrs = attrs.get_dpll_pin();
attrs.get_id(); // u32
}
// EDT offload horizon supported by the device (in nsec).
attrs.get_max_pacing_offload_horizon(); // u32
attrs.get_netns_immutable(); // u8
```
### Do (reply)
```rust
PushOpGetlinkDoReply::new(&mut vec)
.push_address(val) // &[u8]
.push_broadcast(val) // &[u8]
.push_ifname(val) // &CStr
.push_ifname_bytes(val) // &[u8]
.push_mtu(val) // u32
.push_link(val) // u32
.push_qdisc(val) // &CStr
.push_qdisc_bytes(val) // &[u8]
.push_stats(val) // PushRtnlLinkStats
.push_cost(val) // &CStr
.push_cost_bytes(val) // &[u8]
.push_priority(val) // &CStr
.push_priority_bytes(val) // &[u8]
.push_master(val) // u32
.push_wireless(val) // &CStr
.push_wireless_bytes(val) // &[u8]
.push_protinfo(val) // &CStr
.push_protinfo_bytes(val) // &[u8]
.push_txqlen(val) // u32
.push_map(val) // PushRtnlLinkIfmap
.push_weight(val) // u32
.push_operstate(val) // u8
.push_linkmode(val) // u8
.nested_linkinfo()
.push_kind(val) // &CStr
.push_kind_bytes(val) // &[u8]
.nested_data_bond()
.push_mode(val) // u8
.push_active_slave(val) // u32
.push_miimon(val) // u32
.push_updelay(val) // u32
.push_downdelay(val) // u32
.push_use_carrier(val) // u8
.push_arp_interval(val) // u32
.array_arp_ip_target()
.entry(val) // Ipv4Addr
.end_array()
.push_arp_validate(val) // u32
.push_arp_all_targets(val) // u32
.push_primary(val) // u32
.push_primary_reselect(val) // u8
.push_fail_over_mac(val) // u8
.push_xmit_hash_policy(val) // u8
.push_resend_igmp(val) // u32
.push_num_peer_notif(val) // u8
.push_all_slaves_active(val) // u8
.push_min_links(val) // u32
.push_lp_interval(val) // u32
.push_packets_per_slave(val) // u32
.push_ad_lacp_rate(val) // u8
.push_ad_select(val) // u8
.nested_ad_info()
.push_aggregator(val) // u16
.push_num_ports(val) // u16
.push_actor_key(val) // u16
.push_partner_key(val) // u16
.push_partner_mac(val) // &[u8]
.end_nested()
.push_ad_actor_sys_prio(val) // u16
.push_ad_user_port_key(val) // u16
.push_ad_actor_system(val) // &[u8]
.push_tlb_dynamic_lb(val) // u8
.push_peer_notif_delay(val) // u32
.push_ad_lacp_active(val) // u8
.push_missed_max(val) // u8
.array_ns_ip6_target()
.entry(val) // &[u8]
.end_array()
.push_coupled_control(val) // u8
.end_nested()
.nested_data_bridge()
.push_forward_delay(val) // u32
.push_hello_time(val) // u32
.push_max_age(val) // u32
.push_ageing_time(val) // u32
.push_stp_state(val) // u32
.push_priority(val) // u16
.push_vlan_filtering(val) // u8
.push_vlan_protocol(val) // u16
.push_group_fwd_mask(val) // u16
.push_root_id(val) // PushIflaBridgeId
.push_bridge_id(val) // PushIflaBridgeId
.push_root_port(val) // u16
.push_root_path_cost(val) // u32
.push_topology_change(val) // u8
.push_topology_change_detected(val) // u8
.push_hello_timer(val) // u64
.push_tcn_timer(val) // u64
.push_topology_change_timer(val) // u64
.push_gc_timer(val) // u64
.push_group_addr(val) // &[u8]
.push_fdb_flush(val) // &[u8]
.push_mcast_router(val) // u8
.push_mcast_snooping(val) // u8
.push_mcast_query_use_ifaddr(val) // u8
.push_mcast_querier(val) // u8
.push_mcast_hash_elasticity(val) // u32
.push_mcast_hash_max(val) // u32
.push_mcast_last_member_cnt(val) // u32
.push_mcast_startup_query_cnt(val) // u32
.push_mcast_last_member_intvl(val) // u64
.push_mcast_membership_intvl(val) // u64
.push_mcast_querier_intvl(val) // u64
.push_mcast_query_intvl(val) // u64
.push_mcast_query_response_intvl(val) // u64
.push_mcast_startup_query_intvl(val) // u64
.push_nf_call_iptables(val) // u8
.push_nf_call_ip6tables(val) // u8
.push_nf_call_arptables(val) // u8
.push_vlan_default_pvid(val) // u16
.push_pad(val) // &[u8]
.push_vlan_stats_enabled(val) // u8
.push_mcast_stats_enabled(val) // u8
.push_mcast_igmp_version(val) // u8
.push_mcast_mld_version(val) // u8
.push_vlan_stats_per_port(val) // u8
.push_multi_boolopt(val) // PushBrBooloptMulti
.push_mcast_querier_state(val) // &[u8]
.push_fdb_n_learned(val) // u32
.push_fdb_max_learned(val) // u32
.end_nested()
.nested_data_erspan()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_gre()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_gretap()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_ip6gre()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_geneve()
.push_id(val) // u32
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_port(val) // u16
.push_collect_metadata(val) // ()
.push_remote6(val) // &[u8]
.push_udp_csum(val) // u8
.push_udp_zero_csum6_tx(val) // u8
.push_udp_zero_csum6_rx(val) // u8
.push_label(val) // u32
.push_ttl_inherit(val) // u8
.push_df(val) // u8
.push_inner_proto_inherit(val) // ()
.push_port_range(val) // PushIflaGenevePortRange
.end_nested()
.nested_data_ipip()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u16
.push_proto(val) // u8
.push_pmtudisc(val) // u8
.push_6rd_prefix(val) // &[u8]
.push_6rd_relay_prefix(val) // &[u8]
.push_6rd_prefixlen(val) // u16
.push_6rd_relay_prefixlen(val) // u16
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_ip6tnl()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_proto(val) // u8
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_sit()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u16
.push_proto(val) // u8
.push_pmtudisc(val) // u8
.push_6rd_prefix(val) // &[u8]
.push_6rd_relay_prefix(val) // &[u8]
.push_6rd_prefixlen(val) // u16
.push_6rd_relay_prefixlen(val) // u16
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_tun()
.push_owner(val) // u32
.push_group(val) // u32
.push_type(val) // u8
.push_pi(val) // u8
.push_vnet_hdr(val) // u8
.push_persist(val) // u8
.push_multi_queue(val) // u8
.push_num_queues(val) // u32
.push_num_disabled_queues(val) // u32
.end_nested()
.nested_data_vlan()
.push_id(val) // u16
.push_flags(val) // PushIflaVlanFlags
.nested_egress_qos()
// Attribute may repeat multiple times (treat it as array)
.push_mapping(val) // PushIflaVlanQosMapping
.end_nested()
.nested_ingress_qos()
// Attribute may repeat multiple times (treat it as array)
.push_mapping(val) // PushIflaVlanQosMapping
.end_nested()
// Associated type: "VlanProtocols" (enum)
.push_protocol(val) // u16
.end_nested()
.nested_data_vrf()
.push_table(val) // u32
.end_nested()
.nested_data_vti()
.push_link(val) // u32
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_fwmark(val) // u32
.end_nested()
.nested_data_vti6()
.push_link(val) // u32
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_fwmark(val) // u32
.end_nested()
.nested_data_netkit()
.push_peer_info(val) // &[u8]
.push_primary(val) // u8
// Associated type: "NetkitPolicy" (enum)
.push_policy(val) // u32
// Associated type: "NetkitPolicy" (enum)
.push_peer_policy(val) // u32
// Associated type: "NetkitMode" (enum)
.push_mode(val) // u32
// Associated type: "NetkitScrub" (enum)
.push_scrub(val) // u32
// Associated type: "NetkitScrub" (enum)
.push_peer_scrub(val) // u32
.push_headroom(val) // u16
.push_tailroom(val) // u16
.end_nested()
.nested_data_ovpn()
// Associated type: "OvpnMode" (enum)
.push_mode(val) // u8
.end_nested()
.push_xstats(val) // &[u8]
.push_slave_kind(val) // &CStr
.push_slave_kind_bytes(val) // &[u8]
.nested_slave_data_bridge()
.push_state(val) // u8
.push_priority(val) // u16
.push_cost(val) // u32
.push_mode(val) // ()
.push_guard(val) // ()
.push_protect(val) // ()
.push_fast_leave(val) // ()
.push_learning(val) // ()
.push_unicast_flood(val) // ()
.push_proxyarp(val) // ()
.push_learning_sync(val) // ()
.push_proxyarp_wifi(val) // ()
.push_root_id(val) // PushIflaBridgeId
.push_bridge_id(val) // PushIflaBridgeId
.push_designated_port(val) // u16
.push_designated_cost(val) // u16
.push_id(val) // u16
.push_no(val) // u16
.push_topology_change_ack(val) // u8
.push_config_pending(val) // u8
.push_message_age_timer(val) // u64
.push_forward_delay_timer(val) // u64
.push_hold_timer(val) // u64
.push_flush(val) // ()
.push_multicast_router(val) // u8
.push_pad(val) // &[u8]
.push_mcast_flood(val) // ()
.push_mcast_to_ucast(val) // ()
.push_vlan_tunnel(val) // ()
.push_bcast_flood(val) // ()
.push_group_fwd_mask(val) // u16
.push_neigh_suppress(val) // ()
.push_isolated(val) // ()
.push_backup_port(val) // u32
.push_mrp_ring_open(val) // ()
.push_mrp_in_open(val) // ()
.push_mcast_eht_hosts_limit(val) // u32
.push_mcast_eht_hosts_cnt(val) // u32
.push_locked(val) // ()
.push_mab(val) // ()
.push_mcast_n_groups(val) // u32
.push_mcast_max_groups(val) // u32
.push_neigh_vlan_suppress(val) // ()
.push_backup_nhid(val) // u32
.end_nested()
.nested_slave_data_bond()
.push_state(val) // u8
.push_mii_status(val) // u8
.push_link_failure_count(val) // u32
.push_perm_hwaddr(val) // &[u8]
.push_queue_id(val) // u16
.push_ad_aggregator_id(val) // u16
.push_ad_actor_oper_port_state(val) // u8
.push_ad_partner_oper_port_state(val) // u16
.push_prio(val) // u32
.end_nested()
.end_nested()
.push_net_ns_pid(val) // u32
.push_ifalias(val) // &CStr
.push_ifalias_bytes(val) // &[u8]
.push_num_vf(val) // u32
.nested_vfinfo_list()
// Attribute may repeat multiple times (treat it as array)
.nested_info()
.push_mac(val) // PushIflaVfMac
.push_vlan(val) // PushIflaVfVlan
.push_tx_rate(val) // PushIflaVfTxRate
.push_spoofchk(val) // PushIflaVfSpoofchk
.push_link_state(val) // PushIflaVfLinkState
.push_rate(val) // PushIflaVfRate
.push_rss_query_en(val) // PushIflaVfRssQueryEn
.nested_stats()
.push_rx_packets(val) // u64
.push_tx_packets(val) // u64
.push_rx_bytes(val) // u64
.push_tx_bytes(val) // u64
.push_broadcast(val) // u64
.push_multicast(val) // u64
.push_pad(val) // &[u8]
.push_rx_dropped(val) // u64
.push_tx_dropped(val) // u64
.end_nested()
.push_trust(val) // PushIflaVfTrust
.push_ib_node_guid(val) // PushIflaVfGuid
.push_ib_port_guid(val) // PushIflaVfGuid
.nested_vlan_list()
// Attribute may repeat multiple times (treat it as array)
.push_info(val) // PushIflaVfVlanInfo
.end_nested()
.push_broadcast(val) // &[u8]
.end_nested()
.end_nested()
.push_stats64(val) // PushRtnlLinkStats64
.nested_vf_ports()
.end_nested()
.nested_port_self()
.end_nested()
.nested_af_spec()
.nested_inet()
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
.push_conf(val) // &[u8]
.end_nested()
.nested_inet6()
.push_flags(val) // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
.push_conf(val) // &[u8]
.push_stats(val) // &[u8]
.push_mcast(val) // &[u8]
.push_cacheinfo(val) // PushIflaCacheinfo
.push_icmp6stats(val) // &[u8]
.push_token(val) // &[u8]
.push_addr_gen_mode(val) // u8
.push_ra_mtu(val) // u32
.end_nested()
.nested_mctp()
.push_net(val) // u32
.push_phys_binding(val) // u8
.end_nested()
.end_nested()
.push_group(val) // u32
.push_net_ns_fd(val) // u32
// Associated type: "RtextFilter" (1 bit per enumeration)
.push_ext_mask(val) // u32
.push_promiscuity(val) // u32
.push_num_tx_queues(val) // u32
.push_num_rx_queues(val) // u32
.push_carrier(val) // u8
.push_phys_port_id(val) // &[u8]
.push_carrier_changes(val) // u32
.push_phys_switch_id(val) // &[u8]
.push_link_netnsid(val) // i32
.push_phys_port_name(val) // &CStr
.push_phys_port_name_bytes(val) // &[u8]
.push_proto_down(val) // u8
.push_gso_max_segs(val) // u32
.push_gso_max_size(val) // u32
.push_pad(val) // &[u8]
.nested_xdp()
.push_fd(val) // i32
.push_attached(val) // u8
.push_flags(val) // u32
.push_prog_id(val) // u32
.push_drv_prog_id(val) // u32
.push_skb_prog_id(val) // u32
.push_hw_prog_id(val) // u32
.push_expected_fd(val) // i32
.end_nested()
.push_event(val) // u32
.push_new_netnsid(val) // i32
.push_target_netnsid(val) // i32
.push_carrier_up_count(val) // u32
.push_carrier_down_count(val) // u32
.push_new_ifindex(val) // i32
.push_min_mtu(val) // u32
.push_max_mtu(val) // u32
.nested_prop_list()
.push_alt_ifname(val) // &CStr
.push_alt_ifname_bytes(val) // &[u8]
.end_nested()
.push_perm_address(val) // &[u8]
.push_proto_down_reason(val) // &CStr
.push_proto_down_reason_bytes(val) // &[u8]
.push_parent_dev_name(val) // &CStr
.push_parent_dev_name_bytes(val) // &[u8]
.push_parent_dev_bus_name(val) // &CStr
.push_parent_dev_bus_name_bytes(val) // &[u8]
.push_gro_max_size(val) // u32
.push_tso_max_size(val) // u32
.push_tso_max_segs(val) // u32
.push_allmulti(val) // u32
.push_devlink_port(val) // &[u8]
.push_gso_ipv4_max_size(val) // u32
.push_gro_ipv4_max_size(val) // u32
.nested_dpll_pin()
.push_id(val) // u32
.end_nested()
// EDT offload horizon supported by the device (in nsec).
.push_max_pacing_offload_horizon(val) // u32
.push_netns_immutable(val) // u8
;
```
```rust
let attrs = OpGetlinkDoReply::new(buf);
attrs.get_address(); // &[u8]
attrs.get_broadcast(); // &[u8]
attrs.get_ifname(); // &CStr
attrs.get_mtu(); // u32
attrs.get_link(); // u32
attrs.get_qdisc(); // &CStr
attrs.get_stats(); // PushRtnlLinkStats
attrs.get_cost(); // &CStr
attrs.get_priority(); // &CStr
attrs.get_master(); // u32
attrs.get_wireless(); // &CStr
attrs.get_protinfo(); // &CStr
attrs.get_txqlen(); // u32
attrs.get_map(); // PushRtnlLinkIfmap
attrs.get_weight(); // u32
attrs.get_operstate(); // u8
attrs.get_linkmode(); // u8
{ // Nested Linkinfo
let attrs = attrs.get_linkinfo();
attrs.get_kind(); // &CStr
attrs.get_data(); // submessage
attrs.get_xstats(); // &[u8]
attrs.get_slave_kind(); // &CStr
attrs.get_slave_data(); // submessage
}
attrs.get_net_ns_pid(); // u32
attrs.get_ifalias(); // &CStr
attrs.get_num_vf(); // u32
{ // Nested VfinfoList
let attrs = attrs.get_vfinfo_list();
{ // Nested Info
// Attribute may repeat multiple times (treat it as array)
for entry in attrs.get_info() {
entry.get_mac(); // PushIflaVfMac
entry.get_vlan(); // PushIflaVfVlan
entry.get_tx_rate(); // PushIflaVfTxRate
entry.get_spoofchk(); // PushIflaVfSpoofchk
entry.get_link_state(); // PushIflaVfLinkState
entry.get_rate(); // PushIflaVfRate
entry.get_rss_query_en(); // PushIflaVfRssQueryEn
{ // Nested Stats
let attrs = entry.get_stats();
attrs.get_rx_packets(); // u64
attrs.get_tx_packets(); // u64
attrs.get_rx_bytes(); // u64
attrs.get_tx_bytes(); // u64
attrs.get_broadcast(); // u64
attrs.get_multicast(); // u64
attrs.get_pad(); // &[u8]
attrs.get_rx_dropped(); // u64
attrs.get_tx_dropped(); // u64
}
entry.get_trust(); // PushIflaVfTrust
entry.get_ib_node_guid(); // PushIflaVfGuid
entry.get_ib_port_guid(); // PushIflaVfGuid
{ // Nested VlanList
let attrs = entry.get_vlan_list();
// Attribute may repeat multiple times (treat it as array)
for entry in attrs.get_info() {
entry; // PushIflaVfVlanInfo
}
}
entry.get_broadcast(); // &[u8]
}
}
}
attrs.get_stats64(); // PushRtnlLinkStats64
{ // Nested VfPorts
let attrs = attrs.get_vf_ports();
}
{ // Nested PortSelf
let attrs = attrs.get_port_self();
}
{ // Nested AfSpec
let attrs = attrs.get_af_spec();
{ // Nested Inet
let attrs = attrs.get_inet();
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
attrs.get_conf(); // &[u8]
}
{ // Nested Inet6
let attrs = attrs.get_inet6();
attrs.get_flags(); // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
attrs.get_conf(); // &[u8]
attrs.get_stats(); // &[u8]
attrs.get_mcast(); // &[u8]
attrs.get_cacheinfo(); // PushIflaCacheinfo
attrs.get_icmp6stats(); // &[u8]
attrs.get_token(); // &[u8]
attrs.get_addr_gen_mode(); // u8
attrs.get_ra_mtu(); // u32
}
{ // Nested Mctp
let attrs = attrs.get_mctp();
attrs.get_net(); // u32
attrs.get_phys_binding(); // u8
}
}
attrs.get_group(); // u32
attrs.get_net_ns_fd(); // u32
// Associated type: "RtextFilter" (1 bit per enumeration)
attrs.get_ext_mask(); // u32
attrs.get_promiscuity(); // u32
attrs.get_num_tx_queues(); // u32
attrs.get_num_rx_queues(); // u32
attrs.get_carrier(); // u8
attrs.get_phys_port_id(); // &[u8]
attrs.get_carrier_changes(); // u32
attrs.get_phys_switch_id(); // &[u8]
attrs.get_link_netnsid(); // i32
attrs.get_phys_port_name(); // &CStr
attrs.get_proto_down(); // u8
attrs.get_gso_max_segs(); // u32
attrs.get_gso_max_size(); // u32
attrs.get_pad(); // &[u8]
{ // Nested Xdp
let attrs = attrs.get_xdp();
attrs.get_fd(); // i32
attrs.get_attached(); // u8
attrs.get_flags(); // u32
attrs.get_prog_id(); // u32
attrs.get_drv_prog_id(); // u32
attrs.get_skb_prog_id(); // u32
attrs.get_hw_prog_id(); // u32
attrs.get_expected_fd(); // i32
}
attrs.get_event(); // u32
attrs.get_new_netnsid(); // i32
attrs.get_target_netnsid(); // i32
attrs.get_carrier_up_count(); // u32
attrs.get_carrier_down_count(); // u32
attrs.get_new_ifindex(); // i32
attrs.get_min_mtu(); // u32
attrs.get_max_mtu(); // u32
{ // Nested PropList
let attrs = attrs.get_prop_list();
attrs.get_alt_ifname(); // &CStr
}
attrs.get_perm_address(); // &[u8]
attrs.get_proto_down_reason(); // &CStr
attrs.get_parent_dev_name(); // &CStr
attrs.get_parent_dev_bus_name(); // &CStr
attrs.get_gro_max_size(); // u32
attrs.get_tso_max_size(); // u32
attrs.get_tso_max_segs(); // u32
attrs.get_allmulti(); // u32
attrs.get_devlink_port(); // &[u8]
attrs.get_gso_ipv4_max_size(); // u32
attrs.get_gro_ipv4_max_size(); // u32
{ // Nested DpllPin
let attrs = attrs.get_dpll_pin();
attrs.get_id(); // u32
}
// EDT offload horizon supported by the device (in nsec).
attrs.get_max_pacing_offload_horizon(); // u32
attrs.get_netns_immutable(); // u8
```
## Low-level decoding
### Do (request)
```rust
let iter = OpGetlinkDoRequest::new(buf);
for attr in iter {
match attr {
Ifname(val) => {}, // &CStr
AltIfname(val) => {}, // &CStr
// Associated type: "RtextFilter" (1 bit per enumeration)
ExtMask(val) => {}, // u32
TargetNetnsid(val) => {}, // i32
}
}
```
### Do (reply)
```rust
let iter = OpGetlinkDoReply::new(buf);
for attr in iter {
match attr {
Address(val) => {}, // &[u8]
Broadcast(val) => {}, // &[u8]
Ifname(val) => {}, // &CStr
Mtu(val) => {}, // u32
Link(val) => {}, // u32
Qdisc(val) => {}, // &CStr
Stats(val) => {}, // PushRtnlLinkStats
Cost(val) => {}, // &CStr
Priority(val) => {}, // &CStr
Master(val) => {}, // u32
Wireless(val) => {}, // &CStr
Protinfo(val) => {}, // &CStr
Txqlen(val) => {}, // u32
Map(val) => {}, // PushRtnlLinkIfmap
Weight(val) => {}, // u32
Operstate(val) => {}, // u8
Linkmode(val) => {}, // u8
Linkinfo(iter) => {
for attr in iter {
match attr {
Kind(val) => {}, // &CStr
Data(val) => {}, // submessage
Xstats(val) => {}, // &[u8]
SlaveKind(val) => {}, // &CStr
SlaveData(val) => {}, // submessage
}
}
},
NetNsPid(val) => {}, // u32
Ifalias(val) => {}, // &CStr
NumVf(val) => {}, // u32
VfinfoList(iter) => {
for attr in iter {
match attr {
// Attribute may repeat multiple times (treat it as array)
Info(iter) => {
for attr in iter {
match attr {
Mac(val) => {}, // PushIflaVfMac
Vlan(val) => {}, // PushIflaVfVlan
TxRate(val) => {}, // PushIflaVfTxRate
Spoofchk(val) => {}, // PushIflaVfSpoofchk
LinkState(val) => {}, // PushIflaVfLinkState
Rate(val) => {}, // PushIflaVfRate
RssQueryEn(val) => {}, // PushIflaVfRssQueryEn
Stats(iter) => {
for attr in iter {
match attr {
RxPackets(val) => {}, // u64
TxPackets(val) => {}, // u64
RxBytes(val) => {}, // u64
TxBytes(val) => {}, // u64
Broadcast(val) => {}, // u64
Multicast(val) => {}, // u64
Pad(val) => {}, // &[u8]
RxDropped(val) => {}, // u64
TxDropped(val) => {}, // u64
}
}
},
Trust(val) => {}, // PushIflaVfTrust
IbNodeGuid(val) => {}, // PushIflaVfGuid
IbPortGuid(val) => {}, // PushIflaVfGuid
VlanList(iter) => {
for attr in iter {
match attr {
// Attribute may repeat multiple times (treat it as array)
Info(val) => {}, // PushIflaVfVlanInfo
}
}
},
Broadcast(val) => {}, // &[u8]
}
}
},
}
}
},
Stats64(val) => {}, // PushRtnlLinkStats64
VfPorts(iter) => {
for attr in iter {
match attr {
}
}
},
PortSelf(iter) => {
for attr in iter {
match attr {
}
}
},
AfSpec(iter) => {
for attr in iter {
match attr {
Inet(iter) => {
for attr in iter {
match attr {
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
Conf(val) => {}, // &[u8]
}
}
},
Inet6(iter) => {
for attr in iter {
match attr {
Flags(val) => {}, // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
Conf(val) => {}, // &[u8]
Stats(val) => {}, // &[u8]
Mcast(val) => {}, // &[u8]
Cacheinfo(val) => {}, // PushIflaCacheinfo
Icmp6stats(val) => {}, // &[u8]
Token(val) => {}, // &[u8]
AddrGenMode(val) => {}, // u8
RaMtu(val) => {}, // u32
}
}
},
Mctp(iter) => {
for attr in iter {
match attr {
Net(val) => {}, // u32
PhysBinding(val) => {}, // u8
}
}
},
}
}
},
Group(val) => {}, // u32
NetNsFd(val) => {}, // u32
// Associated type: "RtextFilter" (1 bit per enumeration)
ExtMask(val) => {}, // u32
Promiscuity(val) => {}, // u32
NumTxQueues(val) => {}, // u32
NumRxQueues(val) => {}, // u32
Carrier(val) => {}, // u8
PhysPortId(val) => {}, // &[u8]
CarrierChanges(val) => {}, // u32
PhysSwitchId(val) => {}, // &[u8]
LinkNetnsid(val) => {}, // i32
PhysPortName(val) => {}, // &CStr
ProtoDown(val) => {}, // u8
GsoMaxSegs(val) => {}, // u32
GsoMaxSize(val) => {}, // u32
Pad(val) => {}, // &[u8]
Xdp(iter) => {
for attr in iter {
match attr {
Fd(val) => {}, // i32
Attached(val) => {}, // u8
Flags(val) => {}, // u32
ProgId(val) => {}, // u32
DrvProgId(val) => {}, // u32
SkbProgId(val) => {}, // u32
HwProgId(val) => {}, // u32
ExpectedFd(val) => {}, // i32
}
}
},
Event(val) => {}, // u32
NewNetnsid(val) => {}, // i32
TargetNetnsid(val) => {}, // i32
CarrierUpCount(val) => {}, // u32
CarrierDownCount(val) => {}, // u32
NewIfindex(val) => {}, // i32
MinMtu(val) => {}, // u32
MaxMtu(val) => {}, // u32
PropList(iter) => {
for attr in iter {
match attr {
AltIfname(val) => {}, // &CStr
}
}
},
PermAddress(val) => {}, // &[u8]
ProtoDownReason(val) => {}, // &CStr
ParentDevName(val) => {}, // &CStr
ParentDevBusName(val) => {}, // &CStr
GroMaxSize(val) => {}, // u32
TsoMaxSize(val) => {}, // u32
TsoMaxSegs(val) => {}, // u32
Allmulti(val) => {}, // u32
DevlinkPort(val) => {}, // &[u8]
GsoIpv4MaxSize(val) => {}, // u32
GroIpv4MaxSize(val) => {}, // u32
DpllPin(iter) => {
for attr in iter {
match attr {
Id(val) => {}, // u32
}
}
},
// EDT offload horizon supported by the device (in nsec).
MaxPacingOffloadHorizon(val) => {}, // u32
NetnsImmutable(val) => {}, // u8
}
}
```
## Dump (request)
```rust
PushOpGetlinkDumpRequest::new(&mut vec)
.push_target_netnsid(val) // i32
// Associated type: "RtextFilter" (1 bit per enumeration)
.push_ext_mask(val) // u32
.push_master(val) // u32
.nested_linkinfo()
.push_kind(val) // &CStr
.push_kind_bytes(val) // &[u8]
.nested_data_bond()
.push_mode(val) // u8
.push_active_slave(val) // u32
.push_miimon(val) // u32
.push_updelay(val) // u32
.push_downdelay(val) // u32
.push_use_carrier(val) // u8
.push_arp_interval(val) // u32
.array_arp_ip_target()
.entry(val) // Ipv4Addr
.end_array()
.push_arp_validate(val) // u32
.push_arp_all_targets(val) // u32
.push_primary(val) // u32
.push_primary_reselect(val) // u8
.push_fail_over_mac(val) // u8
.push_xmit_hash_policy(val) // u8
.push_resend_igmp(val) // u32
.push_num_peer_notif(val) // u8
.push_all_slaves_active(val) // u8
.push_min_links(val) // u32
.push_lp_interval(val) // u32
.push_packets_per_slave(val) // u32
.push_ad_lacp_rate(val) // u8
.push_ad_select(val) // u8
.nested_ad_info()
.push_aggregator(val) // u16
.push_num_ports(val) // u16
.push_actor_key(val) // u16
.push_partner_key(val) // u16
.push_partner_mac(val) // &[u8]
.end_nested()
.push_ad_actor_sys_prio(val) // u16
.push_ad_user_port_key(val) // u16
.push_ad_actor_system(val) // &[u8]
.push_tlb_dynamic_lb(val) // u8
.push_peer_notif_delay(val) // u32
.push_ad_lacp_active(val) // u8
.push_missed_max(val) // u8
.array_ns_ip6_target()
.entry(val) // &[u8]
.end_array()
.push_coupled_control(val) // u8
.end_nested()
.nested_data_bridge()
.push_forward_delay(val) // u32
.push_hello_time(val) // u32
.push_max_age(val) // u32
.push_ageing_time(val) // u32
.push_stp_state(val) // u32
.push_priority(val) // u16
.push_vlan_filtering(val) // u8
.push_vlan_protocol(val) // u16
.push_group_fwd_mask(val) // u16
.push_root_id(val) // PushIflaBridgeId
.push_bridge_id(val) // PushIflaBridgeId
.push_root_port(val) // u16
.push_root_path_cost(val) // u32
.push_topology_change(val) // u8
.push_topology_change_detected(val) // u8
.push_hello_timer(val) // u64
.push_tcn_timer(val) // u64
.push_topology_change_timer(val) // u64
.push_gc_timer(val) // u64
.push_group_addr(val) // &[u8]
.push_fdb_flush(val) // &[u8]
.push_mcast_router(val) // u8
.push_mcast_snooping(val) // u8
.push_mcast_query_use_ifaddr(val) // u8
.push_mcast_querier(val) // u8
.push_mcast_hash_elasticity(val) // u32
.push_mcast_hash_max(val) // u32
.push_mcast_last_member_cnt(val) // u32
.push_mcast_startup_query_cnt(val) // u32
.push_mcast_last_member_intvl(val) // u64
.push_mcast_membership_intvl(val) // u64
.push_mcast_querier_intvl(val) // u64
.push_mcast_query_intvl(val) // u64
.push_mcast_query_response_intvl(val) // u64
.push_mcast_startup_query_intvl(val) // u64
.push_nf_call_iptables(val) // u8
.push_nf_call_ip6tables(val) // u8
.push_nf_call_arptables(val) // u8
.push_vlan_default_pvid(val) // u16
.push_pad(val) // &[u8]
.push_vlan_stats_enabled(val) // u8
.push_mcast_stats_enabled(val) // u8
.push_mcast_igmp_version(val) // u8
.push_mcast_mld_version(val) // u8
.push_vlan_stats_per_port(val) // u8
.push_multi_boolopt(val) // PushBrBooloptMulti
.push_mcast_querier_state(val) // &[u8]
.push_fdb_n_learned(val) // u32
.push_fdb_max_learned(val) // u32
.end_nested()
.nested_data_erspan()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_gre()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_gretap()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_ip6gre()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_geneve()
.push_id(val) // u32
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_port(val) // u16
.push_collect_metadata(val) // ()
.push_remote6(val) // &[u8]
.push_udp_csum(val) // u8
.push_udp_zero_csum6_tx(val) // u8
.push_udp_zero_csum6_rx(val) // u8
.push_label(val) // u32
.push_ttl_inherit(val) // u8
.push_df(val) // u8
.push_inner_proto_inherit(val) // ()
.push_port_range(val) // PushIflaGenevePortRange
.end_nested()
.nested_data_ipip()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u16
.push_proto(val) // u8
.push_pmtudisc(val) // u8
.push_6rd_prefix(val) // &[u8]
.push_6rd_relay_prefix(val) // &[u8]
.push_6rd_prefixlen(val) // u16
.push_6rd_relay_prefixlen(val) // u16
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_ip6tnl()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_proto(val) // u8
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_sit()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u16
.push_proto(val) // u8
.push_pmtudisc(val) // u8
.push_6rd_prefix(val) // &[u8]
.push_6rd_relay_prefix(val) // &[u8]
.push_6rd_prefixlen(val) // u16
.push_6rd_relay_prefixlen(val) // u16
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_tun()
.push_owner(val) // u32
.push_group(val) // u32
.push_type(val) // u8
.push_pi(val) // u8
.push_vnet_hdr(val) // u8
.push_persist(val) // u8
.push_multi_queue(val) // u8
.push_num_queues(val) // u32
.push_num_disabled_queues(val) // u32
.end_nested()
.nested_data_vlan()
.push_id(val) // u16
.push_flags(val) // PushIflaVlanFlags
.nested_egress_qos()
// Attribute may repeat multiple times (treat it as array)
.push_mapping(val) // PushIflaVlanQosMapping
.end_nested()
.nested_ingress_qos()
// Attribute may repeat multiple times (treat it as array)
.push_mapping(val) // PushIflaVlanQosMapping
.end_nested()
// Associated type: "VlanProtocols" (enum)
.push_protocol(val) // u16
.end_nested()
.nested_data_vrf()
.push_table(val) // u32
.end_nested()
.nested_data_vti()
.push_link(val) // u32
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_fwmark(val) // u32
.end_nested()
.nested_data_vti6()
.push_link(val) // u32
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_fwmark(val) // u32
.end_nested()
.nested_data_netkit()
.push_peer_info(val) // &[u8]
.push_primary(val) // u8
// Associated type: "NetkitPolicy" (enum)
.push_policy(val) // u32
// Associated type: "NetkitPolicy" (enum)
.push_peer_policy(val) // u32
// Associated type: "NetkitMode" (enum)
.push_mode(val) // u32
// Associated type: "NetkitScrub" (enum)
.push_scrub(val) // u32
// Associated type: "NetkitScrub" (enum)
.push_peer_scrub(val) // u32
.push_headroom(val) // u16
.push_tailroom(val) // u16
.end_nested()
.nested_data_ovpn()
// Associated type: "OvpnMode" (enum)
.push_mode(val) // u8
.end_nested()
.push_xstats(val) // &[u8]
.push_slave_kind(val) // &CStr
.push_slave_kind_bytes(val) // &[u8]
.nested_slave_data_bridge()
.push_state(val) // u8
.push_priority(val) // u16
.push_cost(val) // u32
.push_mode(val) // ()
.push_guard(val) // ()
.push_protect(val) // ()
.push_fast_leave(val) // ()
.push_learning(val) // ()
.push_unicast_flood(val) // ()
.push_proxyarp(val) // ()
.push_learning_sync(val) // ()
.push_proxyarp_wifi(val) // ()
.push_root_id(val) // PushIflaBridgeId
.push_bridge_id(val) // PushIflaBridgeId
.push_designated_port(val) // u16
.push_designated_cost(val) // u16
.push_id(val) // u16
.push_no(val) // u16
.push_topology_change_ack(val) // u8
.push_config_pending(val) // u8
.push_message_age_timer(val) // u64
.push_forward_delay_timer(val) // u64
.push_hold_timer(val) // u64
.push_flush(val) // ()
.push_multicast_router(val) // u8
.push_pad(val) // &[u8]
.push_mcast_flood(val) // ()
.push_mcast_to_ucast(val) // ()
.push_vlan_tunnel(val) // ()
.push_bcast_flood(val) // ()
.push_group_fwd_mask(val) // u16
.push_neigh_suppress(val) // ()
.push_isolated(val) // ()
.push_backup_port(val) // u32
.push_mrp_ring_open(val) // ()
.push_mrp_in_open(val) // ()
.push_mcast_eht_hosts_limit(val) // u32
.push_mcast_eht_hosts_cnt(val) // u32
.push_locked(val) // ()
.push_mab(val) // ()
.push_mcast_n_groups(val) // u32
.push_mcast_max_groups(val) // u32
.push_neigh_vlan_suppress(val) // ()
.push_backup_nhid(val) // u32
.end_nested()
.nested_slave_data_bond()
.push_state(val) // u8
.push_mii_status(val) // u8
.push_link_failure_count(val) // u32
.push_perm_hwaddr(val) // &[u8]
.push_queue_id(val) // u16
.push_ad_aggregator_id(val) // u16
.push_ad_actor_oper_port_state(val) // u8
.push_ad_partner_oper_port_state(val) // u16
.push_prio(val) // u32
.end_nested()
.end_nested()
;
```
```rust
let attrs = OpGetlinkDumpReply::new(buf);
attrs.get_address(); // &[u8]
attrs.get_broadcast(); // &[u8]
attrs.get_ifname(); // &CStr
attrs.get_mtu(); // u32
attrs.get_link(); // u32
attrs.get_qdisc(); // &CStr
attrs.get_stats(); // PushRtnlLinkStats
attrs.get_cost(); // &CStr
attrs.get_priority(); // &CStr
attrs.get_master(); // u32
attrs.get_wireless(); // &CStr
attrs.get_protinfo(); // &CStr
attrs.get_txqlen(); // u32
attrs.get_map(); // PushRtnlLinkIfmap
attrs.get_weight(); // u32
attrs.get_operstate(); // u8
attrs.get_linkmode(); // u8
{ // Nested Linkinfo
let attrs = attrs.get_linkinfo();
attrs.get_kind(); // &CStr
attrs.get_data(); // submessage
attrs.get_xstats(); // &[u8]
attrs.get_slave_kind(); // &CStr
attrs.get_slave_data(); // submessage
}
attrs.get_net_ns_pid(); // u32
attrs.get_ifalias(); // &CStr
attrs.get_num_vf(); // u32
{ // Nested VfinfoList
let attrs = attrs.get_vfinfo_list();
{ // Nested Info
// Attribute may repeat multiple times (treat it as array)
for entry in attrs.get_info() {
entry.get_mac(); // PushIflaVfMac
entry.get_vlan(); // PushIflaVfVlan
entry.get_tx_rate(); // PushIflaVfTxRate
entry.get_spoofchk(); // PushIflaVfSpoofchk
entry.get_link_state(); // PushIflaVfLinkState
entry.get_rate(); // PushIflaVfRate
entry.get_rss_query_en(); // PushIflaVfRssQueryEn
{ // Nested Stats
let attrs = entry.get_stats();
attrs.get_rx_packets(); // u64
attrs.get_tx_packets(); // u64
attrs.get_rx_bytes(); // u64
attrs.get_tx_bytes(); // u64
attrs.get_broadcast(); // u64
attrs.get_multicast(); // u64
attrs.get_pad(); // &[u8]
attrs.get_rx_dropped(); // u64
attrs.get_tx_dropped(); // u64
}
entry.get_trust(); // PushIflaVfTrust
entry.get_ib_node_guid(); // PushIflaVfGuid
entry.get_ib_port_guid(); // PushIflaVfGuid
{ // Nested VlanList
let attrs = entry.get_vlan_list();
// Attribute may repeat multiple times (treat it as array)
for entry in attrs.get_info() {
entry; // PushIflaVfVlanInfo
}
}
entry.get_broadcast(); // &[u8]
}
}
}
attrs.get_stats64(); // PushRtnlLinkStats64
{ // Nested VfPorts
let attrs = attrs.get_vf_ports();
}
{ // Nested PortSelf
let attrs = attrs.get_port_self();
}
{ // Nested AfSpec
let attrs = attrs.get_af_spec();
{ // Nested Inet
let attrs = attrs.get_inet();
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
attrs.get_conf(); // &[u8]
}
{ // Nested Inet6
let attrs = attrs.get_inet6();
attrs.get_flags(); // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
attrs.get_conf(); // &[u8]
attrs.get_stats(); // &[u8]
attrs.get_mcast(); // &[u8]
attrs.get_cacheinfo(); // PushIflaCacheinfo
attrs.get_icmp6stats(); // &[u8]
attrs.get_token(); // &[u8]
attrs.get_addr_gen_mode(); // u8
attrs.get_ra_mtu(); // u32
}
{ // Nested Mctp
let attrs = attrs.get_mctp();
attrs.get_net(); // u32
attrs.get_phys_binding(); // u8
}
}
attrs.get_group(); // u32
attrs.get_net_ns_fd(); // u32
// Associated type: "RtextFilter" (1 bit per enumeration)
attrs.get_ext_mask(); // u32
attrs.get_promiscuity(); // u32
attrs.get_num_tx_queues(); // u32
attrs.get_num_rx_queues(); // u32
attrs.get_carrier(); // u8
attrs.get_phys_port_id(); // &[u8]
attrs.get_carrier_changes(); // u32
attrs.get_phys_switch_id(); // &[u8]
attrs.get_link_netnsid(); // i32
attrs.get_phys_port_name(); // &CStr
attrs.get_proto_down(); // u8
attrs.get_gso_max_segs(); // u32
attrs.get_gso_max_size(); // u32
attrs.get_pad(); // &[u8]
{ // Nested Xdp
let attrs = attrs.get_xdp();
attrs.get_fd(); // i32
attrs.get_attached(); // u8
attrs.get_flags(); // u32
attrs.get_prog_id(); // u32
attrs.get_drv_prog_id(); // u32
attrs.get_skb_prog_id(); // u32
attrs.get_hw_prog_id(); // u32
attrs.get_expected_fd(); // i32
}
attrs.get_event(); // u32
attrs.get_new_netnsid(); // i32
attrs.get_target_netnsid(); // i32
attrs.get_carrier_up_count(); // u32
attrs.get_carrier_down_count(); // u32
attrs.get_new_ifindex(); // i32
attrs.get_min_mtu(); // u32
attrs.get_max_mtu(); // u32
{ // Nested PropList
let attrs = attrs.get_prop_list();
attrs.get_alt_ifname(); // &CStr
}
attrs.get_perm_address(); // &[u8]
attrs.get_proto_down_reason(); // &CStr
attrs.get_parent_dev_name(); // &CStr
attrs.get_parent_dev_bus_name(); // &CStr
attrs.get_gro_max_size(); // u32
attrs.get_tso_max_size(); // u32
attrs.get_tso_max_segs(); // u32
attrs.get_allmulti(); // u32
attrs.get_devlink_port(); // &[u8]
attrs.get_gso_ipv4_max_size(); // u32
attrs.get_gro_ipv4_max_size(); // u32
{ // Nested DpllPin
let attrs = attrs.get_dpll_pin();
attrs.get_id(); // u32
}
// EDT offload horizon supported by the device (in nsec).
attrs.get_max_pacing_offload_horizon(); // u32
attrs.get_netns_immutable(); // u8
```
### Dump (reply)
```rust
PushOpGetlinkDumpReply::new(&mut vec)
.push_address(val) // &[u8]
.push_broadcast(val) // &[u8]
.push_ifname(val) // &CStr
.push_ifname_bytes(val) // &[u8]
.push_mtu(val) // u32
.push_link(val) // u32
.push_qdisc(val) // &CStr
.push_qdisc_bytes(val) // &[u8]
.push_stats(val) // PushRtnlLinkStats
.push_cost(val) // &CStr
.push_cost_bytes(val) // &[u8]
.push_priority(val) // &CStr
.push_priority_bytes(val) // &[u8]
.push_master(val) // u32
.push_wireless(val) // &CStr
.push_wireless_bytes(val) // &[u8]
.push_protinfo(val) // &CStr
.push_protinfo_bytes(val) // &[u8]
.push_txqlen(val) // u32
.push_map(val) // PushRtnlLinkIfmap
.push_weight(val) // u32
.push_operstate(val) // u8
.push_linkmode(val) // u8
.nested_linkinfo()
.push_kind(val) // &CStr
.push_kind_bytes(val) // &[u8]
.nested_data_bond()
.push_mode(val) // u8
.push_active_slave(val) // u32
.push_miimon(val) // u32
.push_updelay(val) // u32
.push_downdelay(val) // u32
.push_use_carrier(val) // u8
.push_arp_interval(val) // u32
.array_arp_ip_target()
.entry(val) // Ipv4Addr
.end_array()
.push_arp_validate(val) // u32
.push_arp_all_targets(val) // u32
.push_primary(val) // u32
.push_primary_reselect(val) // u8
.push_fail_over_mac(val) // u8
.push_xmit_hash_policy(val) // u8
.push_resend_igmp(val) // u32
.push_num_peer_notif(val) // u8
.push_all_slaves_active(val) // u8
.push_min_links(val) // u32
.push_lp_interval(val) // u32
.push_packets_per_slave(val) // u32
.push_ad_lacp_rate(val) // u8
.push_ad_select(val) // u8
.nested_ad_info()
.push_aggregator(val) // u16
.push_num_ports(val) // u16
.push_actor_key(val) // u16
.push_partner_key(val) // u16
.push_partner_mac(val) // &[u8]
.end_nested()
.push_ad_actor_sys_prio(val) // u16
.push_ad_user_port_key(val) // u16
.push_ad_actor_system(val) // &[u8]
.push_tlb_dynamic_lb(val) // u8
.push_peer_notif_delay(val) // u32
.push_ad_lacp_active(val) // u8
.push_missed_max(val) // u8
.array_ns_ip6_target()
.entry(val) // &[u8]
.end_array()
.push_coupled_control(val) // u8
.end_nested()
.nested_data_bridge()
.push_forward_delay(val) // u32
.push_hello_time(val) // u32
.push_max_age(val) // u32
.push_ageing_time(val) // u32
.push_stp_state(val) // u32
.push_priority(val) // u16
.push_vlan_filtering(val) // u8
.push_vlan_protocol(val) // u16
.push_group_fwd_mask(val) // u16
.push_root_id(val) // PushIflaBridgeId
.push_bridge_id(val) // PushIflaBridgeId
.push_root_port(val) // u16
.push_root_path_cost(val) // u32
.push_topology_change(val) // u8
.push_topology_change_detected(val) // u8
.push_hello_timer(val) // u64
.push_tcn_timer(val) // u64
.push_topology_change_timer(val) // u64
.push_gc_timer(val) // u64
.push_group_addr(val) // &[u8]
.push_fdb_flush(val) // &[u8]
.push_mcast_router(val) // u8
.push_mcast_snooping(val) // u8
.push_mcast_query_use_ifaddr(val) // u8
.push_mcast_querier(val) // u8
.push_mcast_hash_elasticity(val) // u32
.push_mcast_hash_max(val) // u32
.push_mcast_last_member_cnt(val) // u32
.push_mcast_startup_query_cnt(val) // u32
.push_mcast_last_member_intvl(val) // u64
.push_mcast_membership_intvl(val) // u64
.push_mcast_querier_intvl(val) // u64
.push_mcast_query_intvl(val) // u64
.push_mcast_query_response_intvl(val) // u64
.push_mcast_startup_query_intvl(val) // u64
.push_nf_call_iptables(val) // u8
.push_nf_call_ip6tables(val) // u8
.push_nf_call_arptables(val) // u8
.push_vlan_default_pvid(val) // u16
.push_pad(val) // &[u8]
.push_vlan_stats_enabled(val) // u8
.push_mcast_stats_enabled(val) // u8
.push_mcast_igmp_version(val) // u8
.push_mcast_mld_version(val) // u8
.push_vlan_stats_per_port(val) // u8
.push_multi_boolopt(val) // PushBrBooloptMulti
.push_mcast_querier_state(val) // &[u8]
.push_fdb_n_learned(val) // u32
.push_fdb_max_learned(val) // u32
.end_nested()
.nested_data_erspan()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_gre()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_gretap()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_ip6gre()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_geneve()
.push_id(val) // u32
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_port(val) // u16
.push_collect_metadata(val) // ()
.push_remote6(val) // &[u8]
.push_udp_csum(val) // u8
.push_udp_zero_csum6_tx(val) // u8
.push_udp_zero_csum6_rx(val) // u8
.push_label(val) // u32
.push_ttl_inherit(val) // u8
.push_df(val) // u8
.push_inner_proto_inherit(val) // ()
.push_port_range(val) // PushIflaGenevePortRange
.end_nested()
.nested_data_ipip()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u16
.push_proto(val) // u8
.push_pmtudisc(val) // u8
.push_6rd_prefix(val) // &[u8]
.push_6rd_relay_prefix(val) // &[u8]
.push_6rd_prefixlen(val) // u16
.push_6rd_relay_prefixlen(val) // u16
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_ip6tnl()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_proto(val) // u8
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_sit()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u16
.push_proto(val) // u8
.push_pmtudisc(val) // u8
.push_6rd_prefix(val) // &[u8]
.push_6rd_relay_prefix(val) // &[u8]
.push_6rd_prefixlen(val) // u16
.push_6rd_relay_prefixlen(val) // u16
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_tun()
.push_owner(val) // u32
.push_group(val) // u32
.push_type(val) // u8
.push_pi(val) // u8
.push_vnet_hdr(val) // u8
.push_persist(val) // u8
.push_multi_queue(val) // u8
.push_num_queues(val) // u32
.push_num_disabled_queues(val) // u32
.end_nested()
.nested_data_vlan()
.push_id(val) // u16
.push_flags(val) // PushIflaVlanFlags
.nested_egress_qos()
// Attribute may repeat multiple times (treat it as array)
.push_mapping(val) // PushIflaVlanQosMapping
.end_nested()
.nested_ingress_qos()
// Attribute may repeat multiple times (treat it as array)
.push_mapping(val) // PushIflaVlanQosMapping
.end_nested()
// Associated type: "VlanProtocols" (enum)
.push_protocol(val) // u16
.end_nested()
.nested_data_vrf()
.push_table(val) // u32
.end_nested()
.nested_data_vti()
.push_link(val) // u32
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_fwmark(val) // u32
.end_nested()
.nested_data_vti6()
.push_link(val) // u32
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_fwmark(val) // u32
.end_nested()
.nested_data_netkit()
.push_peer_info(val) // &[u8]
.push_primary(val) // u8
// Associated type: "NetkitPolicy" (enum)
.push_policy(val) // u32
// Associated type: "NetkitPolicy" (enum)
.push_peer_policy(val) // u32
// Associated type: "NetkitMode" (enum)
.push_mode(val) // u32
// Associated type: "NetkitScrub" (enum)
.push_scrub(val) // u32
// Associated type: "NetkitScrub" (enum)
.push_peer_scrub(val) // u32
.push_headroom(val) // u16
.push_tailroom(val) // u16
.end_nested()
.nested_data_ovpn()
// Associated type: "OvpnMode" (enum)
.push_mode(val) // u8
.end_nested()
.push_xstats(val) // &[u8]
.push_slave_kind(val) // &CStr
.push_slave_kind_bytes(val) // &[u8]
.nested_slave_data_bridge()
.push_state(val) // u8
.push_priority(val) // u16
.push_cost(val) // u32
.push_mode(val) // ()
.push_guard(val) // ()
.push_protect(val) // ()
.push_fast_leave(val) // ()
.push_learning(val) // ()
.push_unicast_flood(val) // ()
.push_proxyarp(val) // ()
.push_learning_sync(val) // ()
.push_proxyarp_wifi(val) // ()
.push_root_id(val) // PushIflaBridgeId
.push_bridge_id(val) // PushIflaBridgeId
.push_designated_port(val) // u16
.push_designated_cost(val) // u16
.push_id(val) // u16
.push_no(val) // u16
.push_topology_change_ack(val) // u8
.push_config_pending(val) // u8
.push_message_age_timer(val) // u64
.push_forward_delay_timer(val) // u64
.push_hold_timer(val) // u64
.push_flush(val) // ()
.push_multicast_router(val) // u8
.push_pad(val) // &[u8]
.push_mcast_flood(val) // ()
.push_mcast_to_ucast(val) // ()
.push_vlan_tunnel(val) // ()
.push_bcast_flood(val) // ()
.push_group_fwd_mask(val) // u16
.push_neigh_suppress(val) // ()
.push_isolated(val) // ()
.push_backup_port(val) // u32
.push_mrp_ring_open(val) // ()
.push_mrp_in_open(val) // ()
.push_mcast_eht_hosts_limit(val) // u32
.push_mcast_eht_hosts_cnt(val) // u32
.push_locked(val) // ()
.push_mab(val) // ()
.push_mcast_n_groups(val) // u32
.push_mcast_max_groups(val) // u32
.push_neigh_vlan_suppress(val) // ()
.push_backup_nhid(val) // u32
.end_nested()
.nested_slave_data_bond()
.push_state(val) // u8
.push_mii_status(val) // u8
.push_link_failure_count(val) // u32
.push_perm_hwaddr(val) // &[u8]
.push_queue_id(val) // u16
.push_ad_aggregator_id(val) // u16
.push_ad_actor_oper_port_state(val) // u8
.push_ad_partner_oper_port_state(val) // u16
.push_prio(val) // u32
.end_nested()
.end_nested()
.push_net_ns_pid(val) // u32
.push_ifalias(val) // &CStr
.push_ifalias_bytes(val) // &[u8]
.push_num_vf(val) // u32
.nested_vfinfo_list()
// Attribute may repeat multiple times (treat it as array)
.nested_info()
.push_mac(val) // PushIflaVfMac
.push_vlan(val) // PushIflaVfVlan
.push_tx_rate(val) // PushIflaVfTxRate
.push_spoofchk(val) // PushIflaVfSpoofchk
.push_link_state(val) // PushIflaVfLinkState
.push_rate(val) // PushIflaVfRate
.push_rss_query_en(val) // PushIflaVfRssQueryEn
.nested_stats()
.push_rx_packets(val) // u64
.push_tx_packets(val) // u64
.push_rx_bytes(val) // u64
.push_tx_bytes(val) // u64
.push_broadcast(val) // u64
.push_multicast(val) // u64
.push_pad(val) // &[u8]
.push_rx_dropped(val) // u64
.push_tx_dropped(val) // u64
.end_nested()
.push_trust(val) // PushIflaVfTrust
.push_ib_node_guid(val) // PushIflaVfGuid
.push_ib_port_guid(val) // PushIflaVfGuid
.nested_vlan_list()
// Attribute may repeat multiple times (treat it as array)
.push_info(val) // PushIflaVfVlanInfo
.end_nested()
.push_broadcast(val) // &[u8]
.end_nested()
.end_nested()
.push_stats64(val) // PushRtnlLinkStats64
.nested_vf_ports()
.end_nested()
.nested_port_self()
.end_nested()
.nested_af_spec()
.nested_inet()
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
.push_conf(val) // &[u8]
.end_nested()
.nested_inet6()
.push_flags(val) // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
.push_conf(val) // &[u8]
.push_stats(val) // &[u8]
.push_mcast(val) // &[u8]
.push_cacheinfo(val) // PushIflaCacheinfo
.push_icmp6stats(val) // &[u8]
.push_token(val) // &[u8]
.push_addr_gen_mode(val) // u8
.push_ra_mtu(val) // u32
.end_nested()
.nested_mctp()
.push_net(val) // u32
.push_phys_binding(val) // u8
.end_nested()
.end_nested()
.push_group(val) // u32
.push_net_ns_fd(val) // u32
// Associated type: "RtextFilter" (1 bit per enumeration)
.push_ext_mask(val) // u32
.push_promiscuity(val) // u32
.push_num_tx_queues(val) // u32
.push_num_rx_queues(val) // u32
.push_carrier(val) // u8
.push_phys_port_id(val) // &[u8]
.push_carrier_changes(val) // u32
.push_phys_switch_id(val) // &[u8]
.push_link_netnsid(val) // i32
.push_phys_port_name(val) // &CStr
.push_phys_port_name_bytes(val) // &[u8]
.push_proto_down(val) // u8
.push_gso_max_segs(val) // u32
.push_gso_max_size(val) // u32
.push_pad(val) // &[u8]
.nested_xdp()
.push_fd(val) // i32
.push_attached(val) // u8
.push_flags(val) // u32
.push_prog_id(val) // u32
.push_drv_prog_id(val) // u32
.push_skb_prog_id(val) // u32
.push_hw_prog_id(val) // u32
.push_expected_fd(val) // i32
.end_nested()
.push_event(val) // u32
.push_new_netnsid(val) // i32
.push_target_netnsid(val) // i32
.push_carrier_up_count(val) // u32
.push_carrier_down_count(val) // u32
.push_new_ifindex(val) // i32
.push_min_mtu(val) // u32
.push_max_mtu(val) // u32
.nested_prop_list()
.push_alt_ifname(val) // &CStr
.push_alt_ifname_bytes(val) // &[u8]
.end_nested()
.push_perm_address(val) // &[u8]
.push_proto_down_reason(val) // &CStr
.push_proto_down_reason_bytes(val) // &[u8]
.push_parent_dev_name(val) // &CStr
.push_parent_dev_name_bytes(val) // &[u8]
.push_parent_dev_bus_name(val) // &CStr
.push_parent_dev_bus_name_bytes(val) // &[u8]
.push_gro_max_size(val) // u32
.push_tso_max_size(val) // u32
.push_tso_max_segs(val) // u32
.push_allmulti(val) // u32
.push_devlink_port(val) // &[u8]
.push_gso_ipv4_max_size(val) // u32
.push_gro_ipv4_max_size(val) // u32
.nested_dpll_pin()
.push_id(val) // u32
.end_nested()
// EDT offload horizon supported by the device (in nsec).
.push_max_pacing_offload_horizon(val) // u32
.push_netns_immutable(val) // u8
;
```
```rust
let attrs = OpGetlinkDumpReply::new(buf);
attrs.get_address(); // &[u8]
attrs.get_broadcast(); // &[u8]
attrs.get_ifname(); // &CStr
attrs.get_mtu(); // u32
attrs.get_link(); // u32
attrs.get_qdisc(); // &CStr
attrs.get_stats(); // PushRtnlLinkStats
attrs.get_cost(); // &CStr
attrs.get_priority(); // &CStr
attrs.get_master(); // u32
attrs.get_wireless(); // &CStr
attrs.get_protinfo(); // &CStr
attrs.get_txqlen(); // u32
attrs.get_map(); // PushRtnlLinkIfmap
attrs.get_weight(); // u32
attrs.get_operstate(); // u8
attrs.get_linkmode(); // u8
{ // Nested Linkinfo
let attrs = attrs.get_linkinfo();
attrs.get_kind(); // &CStr
attrs.get_data(); // submessage
attrs.get_xstats(); // &[u8]
attrs.get_slave_kind(); // &CStr
attrs.get_slave_data(); // submessage
}
attrs.get_net_ns_pid(); // u32
attrs.get_ifalias(); // &CStr
attrs.get_num_vf(); // u32
{ // Nested VfinfoList
let attrs = attrs.get_vfinfo_list();
{ // Nested Info
// Attribute may repeat multiple times (treat it as array)
for entry in attrs.get_info() {
entry.get_mac(); // PushIflaVfMac
entry.get_vlan(); // PushIflaVfVlan
entry.get_tx_rate(); // PushIflaVfTxRate
entry.get_spoofchk(); // PushIflaVfSpoofchk
entry.get_link_state(); // PushIflaVfLinkState
entry.get_rate(); // PushIflaVfRate
entry.get_rss_query_en(); // PushIflaVfRssQueryEn
{ // Nested Stats
let attrs = entry.get_stats();
attrs.get_rx_packets(); // u64
attrs.get_tx_packets(); // u64
attrs.get_rx_bytes(); // u64
attrs.get_tx_bytes(); // u64
attrs.get_broadcast(); // u64
attrs.get_multicast(); // u64
attrs.get_pad(); // &[u8]
attrs.get_rx_dropped(); // u64
attrs.get_tx_dropped(); // u64
}
entry.get_trust(); // PushIflaVfTrust
entry.get_ib_node_guid(); // PushIflaVfGuid
entry.get_ib_port_guid(); // PushIflaVfGuid
{ // Nested VlanList
let attrs = entry.get_vlan_list();
// Attribute may repeat multiple times (treat it as array)
for entry in attrs.get_info() {
entry; // PushIflaVfVlanInfo
}
}
entry.get_broadcast(); // &[u8]
}
}
}
attrs.get_stats64(); // PushRtnlLinkStats64
{ // Nested VfPorts
let attrs = attrs.get_vf_ports();
}
{ // Nested PortSelf
let attrs = attrs.get_port_self();
}
{ // Nested AfSpec
let attrs = attrs.get_af_spec();
{ // Nested Inet
let attrs = attrs.get_inet();
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
attrs.get_conf(); // &[u8]
}
{ // Nested Inet6
let attrs = attrs.get_inet6();
attrs.get_flags(); // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
attrs.get_conf(); // &[u8]
attrs.get_stats(); // &[u8]
attrs.get_mcast(); // &[u8]
attrs.get_cacheinfo(); // PushIflaCacheinfo
attrs.get_icmp6stats(); // &[u8]
attrs.get_token(); // &[u8]
attrs.get_addr_gen_mode(); // u8
attrs.get_ra_mtu(); // u32
}
{ // Nested Mctp
let attrs = attrs.get_mctp();
attrs.get_net(); // u32
attrs.get_phys_binding(); // u8
}
}
attrs.get_group(); // u32
attrs.get_net_ns_fd(); // u32
// Associated type: "RtextFilter" (1 bit per enumeration)
attrs.get_ext_mask(); // u32
attrs.get_promiscuity(); // u32
attrs.get_num_tx_queues(); // u32
attrs.get_num_rx_queues(); // u32
attrs.get_carrier(); // u8
attrs.get_phys_port_id(); // &[u8]
attrs.get_carrier_changes(); // u32
attrs.get_phys_switch_id(); // &[u8]
attrs.get_link_netnsid(); // i32
attrs.get_phys_port_name(); // &CStr
attrs.get_proto_down(); // u8
attrs.get_gso_max_segs(); // u32
attrs.get_gso_max_size(); // u32
attrs.get_pad(); // &[u8]
{ // Nested Xdp
let attrs = attrs.get_xdp();
attrs.get_fd(); // i32
attrs.get_attached(); // u8
attrs.get_flags(); // u32
attrs.get_prog_id(); // u32
attrs.get_drv_prog_id(); // u32
attrs.get_skb_prog_id(); // u32
attrs.get_hw_prog_id(); // u32
attrs.get_expected_fd(); // i32
}
attrs.get_event(); // u32
attrs.get_new_netnsid(); // i32
attrs.get_target_netnsid(); // i32
attrs.get_carrier_up_count(); // u32
attrs.get_carrier_down_count(); // u32
attrs.get_new_ifindex(); // i32
attrs.get_min_mtu(); // u32
attrs.get_max_mtu(); // u32
{ // Nested PropList
let attrs = attrs.get_prop_list();
attrs.get_alt_ifname(); // &CStr
}
attrs.get_perm_address(); // &[u8]
attrs.get_proto_down_reason(); // &CStr
attrs.get_parent_dev_name(); // &CStr
attrs.get_parent_dev_bus_name(); // &CStr
attrs.get_gro_max_size(); // u32
attrs.get_tso_max_size(); // u32
attrs.get_tso_max_segs(); // u32
attrs.get_allmulti(); // u32
attrs.get_devlink_port(); // &[u8]
attrs.get_gso_ipv4_max_size(); // u32
attrs.get_gro_ipv4_max_size(); // u32
{ // Nested DpllPin
let attrs = attrs.get_dpll_pin();
attrs.get_id(); // u32
}
// EDT offload horizon supported by the device (in nsec).
attrs.get_max_pacing_offload_horizon(); // u32
attrs.get_netns_immutable(); // u8
```
## Low-level decoding
### Dump (request)
```rust
let iter = OpGetlinkDumpRequest::new(buf);
for attr in iter {
match attr {
TargetNetnsid(val) => {}, // i32
// Associated type: "RtextFilter" (1 bit per enumeration)
ExtMask(val) => {}, // u32
Master(val) => {}, // u32
Linkinfo(iter) => {
for attr in iter {
match attr {
Kind(val) => {}, // &CStr
Data(val) => {}, // submessage
Xstats(val) => {}, // &[u8]
SlaveKind(val) => {}, // &CStr
SlaveData(val) => {}, // submessage
}
}
},
}
}
```
### Dump (reply)
```rust
let iter = OpGetlinkDumpReply::new(buf);
for attr in iter {
match attr {
Address(val) => {}, // &[u8]
Broadcast(val) => {}, // &[u8]
Ifname(val) => {}, // &CStr
Mtu(val) => {}, // u32
Link(val) => {}, // u32
Qdisc(val) => {}, // &CStr
Stats(val) => {}, // PushRtnlLinkStats
Cost(val) => {}, // &CStr
Priority(val) => {}, // &CStr
Master(val) => {}, // u32
Wireless(val) => {}, // &CStr
Protinfo(val) => {}, // &CStr
Txqlen(val) => {}, // u32
Map(val) => {}, // PushRtnlLinkIfmap
Weight(val) => {}, // u32
Operstate(val) => {}, // u8
Linkmode(val) => {}, // u8
Linkinfo(iter) => {
for attr in iter {
match attr {
Kind(val) => {}, // &CStr
Data(val) => {}, // submessage
Xstats(val) => {}, // &[u8]
SlaveKind(val) => {}, // &CStr
SlaveData(val) => {}, // submessage
}
}
},
NetNsPid(val) => {}, // u32
Ifalias(val) => {}, // &CStr
NumVf(val) => {}, // u32
VfinfoList(iter) => {
for attr in iter {
match attr {
// Attribute may repeat multiple times (treat it as array)
Info(iter) => {
for attr in iter {
match attr {
Mac(val) => {}, // PushIflaVfMac
Vlan(val) => {}, // PushIflaVfVlan
TxRate(val) => {}, // PushIflaVfTxRate
Spoofchk(val) => {}, // PushIflaVfSpoofchk
LinkState(val) => {}, // PushIflaVfLinkState
Rate(val) => {}, // PushIflaVfRate
RssQueryEn(val) => {}, // PushIflaVfRssQueryEn
Stats(iter) => {
for attr in iter {
match attr {
RxPackets(val) => {}, // u64
TxPackets(val) => {}, // u64
RxBytes(val) => {}, // u64
TxBytes(val) => {}, // u64
Broadcast(val) => {}, // u64
Multicast(val) => {}, // u64
Pad(val) => {}, // &[u8]
RxDropped(val) => {}, // u64
TxDropped(val) => {}, // u64
}
}
},
Trust(val) => {}, // PushIflaVfTrust
IbNodeGuid(val) => {}, // PushIflaVfGuid
IbPortGuid(val) => {}, // PushIflaVfGuid
VlanList(iter) => {
for attr in iter {
match attr {
// Attribute may repeat multiple times (treat it as array)
Info(val) => {}, // PushIflaVfVlanInfo
}
}
},
Broadcast(val) => {}, // &[u8]
}
}
},
}
}
},
Stats64(val) => {}, // PushRtnlLinkStats64
VfPorts(iter) => {
for attr in iter {
match attr {
}
}
},
PortSelf(iter) => {
for attr in iter {
match attr {
}
}
},
AfSpec(iter) => {
for attr in iter {
match attr {
Inet(iter) => {
for attr in iter {
match attr {
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
Conf(val) => {}, // &[u8]
}
}
},
Inet6(iter) => {
for attr in iter {
match attr {
Flags(val) => {}, // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
Conf(val) => {}, // &[u8]
Stats(val) => {}, // &[u8]
Mcast(val) => {}, // &[u8]
Cacheinfo(val) => {}, // PushIflaCacheinfo
Icmp6stats(val) => {}, // &[u8]
Token(val) => {}, // &[u8]
AddrGenMode(val) => {}, // u8
RaMtu(val) => {}, // u32
}
}
},
Mctp(iter) => {
for attr in iter {
match attr {
Net(val) => {}, // u32
PhysBinding(val) => {}, // u8
}
}
},
}
}
},
Group(val) => {}, // u32
NetNsFd(val) => {}, // u32
// Associated type: "RtextFilter" (1 bit per enumeration)
ExtMask(val) => {}, // u32
Promiscuity(val) => {}, // u32
NumTxQueues(val) => {}, // u32
NumRxQueues(val) => {}, // u32
Carrier(val) => {}, // u8
PhysPortId(val) => {}, // &[u8]
CarrierChanges(val) => {}, // u32
PhysSwitchId(val) => {}, // &[u8]
LinkNetnsid(val) => {}, // i32
PhysPortName(val) => {}, // &CStr
ProtoDown(val) => {}, // u8
GsoMaxSegs(val) => {}, // u32
GsoMaxSize(val) => {}, // u32
Pad(val) => {}, // &[u8]
Xdp(iter) => {
for attr in iter {
match attr {
Fd(val) => {}, // i32
Attached(val) => {}, // u8
Flags(val) => {}, // u32
ProgId(val) => {}, // u32
DrvProgId(val) => {}, // u32
SkbProgId(val) => {}, // u32
HwProgId(val) => {}, // u32
ExpectedFd(val) => {}, // i32
}
}
},
Event(val) => {}, // u32
NewNetnsid(val) => {}, // i32
TargetNetnsid(val) => {}, // i32
CarrierUpCount(val) => {}, // u32
CarrierDownCount(val) => {}, // u32
NewIfindex(val) => {}, // i32
MinMtu(val) => {}, // u32
MaxMtu(val) => {}, // u32
PropList(iter) => {
for attr in iter {
match attr {
AltIfname(val) => {}, // &CStr
}
}
},
PermAddress(val) => {}, // &[u8]
ProtoDownReason(val) => {}, // &CStr
ParentDevName(val) => {}, // &CStr
ParentDevBusName(val) => {}, // &CStr
GroMaxSize(val) => {}, // u32
TsoMaxSize(val) => {}, // u32
TsoMaxSegs(val) => {}, // u32
Allmulti(val) => {}, // u32
DevlinkPort(val) => {}, // &[u8]
GsoIpv4MaxSize(val) => {}, // u32
GroIpv4MaxSize(val) => {}, // u32
DpllPin(iter) => {
for attr in iter {
match attr {
Id(val) => {}, // u32
}
}
},
// EDT offload horizon supported by the device (in nsec).
MaxPacingOffloadHorizon(val) => {}, // u32
NetnsImmutable(val) => {}, // u8
}
}
```
# Operation "setlink"
## Do (request)
```rust
PushOpSetlinkDoRequest::new(&mut vec)
.push_address(val) // &[u8]
.push_broadcast(val) // &[u8]
.push_ifname(val) // &CStr
.push_ifname_bytes(val) // &[u8]
.push_mtu(val) // u32
.push_link(val) // u32
.push_qdisc(val) // &CStr
.push_qdisc_bytes(val) // &[u8]
.push_stats(val) // PushRtnlLinkStats
.push_cost(val) // &CStr
.push_cost_bytes(val) // &[u8]
.push_priority(val) // &CStr
.push_priority_bytes(val) // &[u8]
.push_master(val) // u32
.push_wireless(val) // &CStr
.push_wireless_bytes(val) // &[u8]
.push_protinfo(val) // &CStr
.push_protinfo_bytes(val) // &[u8]
.push_txqlen(val) // u32
.push_map(val) // PushRtnlLinkIfmap
.push_weight(val) // u32
.push_operstate(val) // u8
.push_linkmode(val) // u8
.nested_linkinfo()
.push_kind(val) // &CStr
.push_kind_bytes(val) // &[u8]
.nested_data_bond()
.push_mode(val) // u8
.push_active_slave(val) // u32
.push_miimon(val) // u32
.push_updelay(val) // u32
.push_downdelay(val) // u32
.push_use_carrier(val) // u8
.push_arp_interval(val) // u32
.array_arp_ip_target()
.entry(val) // Ipv4Addr
.end_array()
.push_arp_validate(val) // u32
.push_arp_all_targets(val) // u32
.push_primary(val) // u32
.push_primary_reselect(val) // u8
.push_fail_over_mac(val) // u8
.push_xmit_hash_policy(val) // u8
.push_resend_igmp(val) // u32
.push_num_peer_notif(val) // u8
.push_all_slaves_active(val) // u8
.push_min_links(val) // u32
.push_lp_interval(val) // u32
.push_packets_per_slave(val) // u32
.push_ad_lacp_rate(val) // u8
.push_ad_select(val) // u8
.nested_ad_info()
.push_aggregator(val) // u16
.push_num_ports(val) // u16
.push_actor_key(val) // u16
.push_partner_key(val) // u16
.push_partner_mac(val) // &[u8]
.end_nested()
.push_ad_actor_sys_prio(val) // u16
.push_ad_user_port_key(val) // u16
.push_ad_actor_system(val) // &[u8]
.push_tlb_dynamic_lb(val) // u8
.push_peer_notif_delay(val) // u32
.push_ad_lacp_active(val) // u8
.push_missed_max(val) // u8
.array_ns_ip6_target()
.entry(val) // &[u8]
.end_array()
.push_coupled_control(val) // u8
.end_nested()
.nested_data_bridge()
.push_forward_delay(val) // u32
.push_hello_time(val) // u32
.push_max_age(val) // u32
.push_ageing_time(val) // u32
.push_stp_state(val) // u32
.push_priority(val) // u16
.push_vlan_filtering(val) // u8
.push_vlan_protocol(val) // u16
.push_group_fwd_mask(val) // u16
.push_root_id(val) // PushIflaBridgeId
.push_bridge_id(val) // PushIflaBridgeId
.push_root_port(val) // u16
.push_root_path_cost(val) // u32
.push_topology_change(val) // u8
.push_topology_change_detected(val) // u8
.push_hello_timer(val) // u64
.push_tcn_timer(val) // u64
.push_topology_change_timer(val) // u64
.push_gc_timer(val) // u64
.push_group_addr(val) // &[u8]
.push_fdb_flush(val) // &[u8]
.push_mcast_router(val) // u8
.push_mcast_snooping(val) // u8
.push_mcast_query_use_ifaddr(val) // u8
.push_mcast_querier(val) // u8
.push_mcast_hash_elasticity(val) // u32
.push_mcast_hash_max(val) // u32
.push_mcast_last_member_cnt(val) // u32
.push_mcast_startup_query_cnt(val) // u32
.push_mcast_last_member_intvl(val) // u64
.push_mcast_membership_intvl(val) // u64
.push_mcast_querier_intvl(val) // u64
.push_mcast_query_intvl(val) // u64
.push_mcast_query_response_intvl(val) // u64
.push_mcast_startup_query_intvl(val) // u64
.push_nf_call_iptables(val) // u8
.push_nf_call_ip6tables(val) // u8
.push_nf_call_arptables(val) // u8
.push_vlan_default_pvid(val) // u16
.push_pad(val) // &[u8]
.push_vlan_stats_enabled(val) // u8
.push_mcast_stats_enabled(val) // u8
.push_mcast_igmp_version(val) // u8
.push_mcast_mld_version(val) // u8
.push_vlan_stats_per_port(val) // u8
.push_multi_boolopt(val) // PushBrBooloptMulti
.push_mcast_querier_state(val) // &[u8]
.push_fdb_n_learned(val) // u32
.push_fdb_max_learned(val) // u32
.end_nested()
.nested_data_erspan()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_gre()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_gretap()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_pmtudisc(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_ignore_df(val) // u8
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_ip6gre()
.push_link(val) // u32
.push_iflags(val) // u16
.push_oflags(val) // u16
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.push_erspan_index(val) // u32
.push_erspan_ver(val) // u8
.push_erspan_dir(val) // u8
.push_erspan_hwid(val) // u16
.end_nested()
.nested_data_geneve()
.push_id(val) // u32
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_port(val) // u16
.push_collect_metadata(val) // ()
.push_remote6(val) // &[u8]
.push_udp_csum(val) // u8
.push_udp_zero_csum6_tx(val) // u8
.push_udp_zero_csum6_rx(val) // u8
.push_label(val) // u32
.push_ttl_inherit(val) // u8
.push_df(val) // u8
.push_inner_proto_inherit(val) // ()
.push_port_range(val) // PushIflaGenevePortRange
.end_nested()
.nested_data_ipip()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u16
.push_proto(val) // u8
.push_pmtudisc(val) // u8
.push_6rd_prefix(val) // &[u8]
.push_6rd_relay_prefix(val) // &[u8]
.push_6rd_prefixlen(val) // u16
.push_6rd_relay_prefixlen(val) // u16
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_ip6tnl()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u32
.push_proto(val) // u8
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_sit()
.push_link(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_ttl(val) // u8
.push_tos(val) // u8
.push_encap_limit(val) // u8
.push_flowinfo(val) // u32
.push_flags(val) // u16
.push_proto(val) // u8
.push_pmtudisc(val) // u8
.push_6rd_prefix(val) // &[u8]
.push_6rd_relay_prefix(val) // &[u8]
.push_6rd_prefixlen(val) // u16
.push_6rd_relay_prefixlen(val) // u16
.push_encap_type(val) // u16
.push_encap_flags(val) // u16
.push_encap_sport(val) // u16
.push_encap_dport(val) // u16
.push_collect_metadata(val) // ()
.push_fwmark(val) // u32
.end_nested()
.nested_data_tun()
.push_owner(val) // u32
.push_group(val) // u32
.push_type(val) // u8
.push_pi(val) // u8
.push_vnet_hdr(val) // u8
.push_persist(val) // u8
.push_multi_queue(val) // u8
.push_num_queues(val) // u32
.push_num_disabled_queues(val) // u32
.end_nested()
.nested_data_vlan()
.push_id(val) // u16
.push_flags(val) // PushIflaVlanFlags
.nested_egress_qos()
// Attribute may repeat multiple times (treat it as array)
.push_mapping(val) // PushIflaVlanQosMapping
.end_nested()
.nested_ingress_qos()
// Attribute may repeat multiple times (treat it as array)
.push_mapping(val) // PushIflaVlanQosMapping
.end_nested()
// Associated type: "VlanProtocols" (enum)
.push_protocol(val) // u16
.end_nested()
.nested_data_vrf()
.push_table(val) // u32
.end_nested()
.nested_data_vti()
.push_link(val) // u32
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_fwmark(val) // u32
.end_nested()
.nested_data_vti6()
.push_link(val) // u32
.push_ikey(val) // u32
.push_okey(val) // u32
.push_local(val) // &[u8]
.push_remote(val) // &[u8]
.push_fwmark(val) // u32
.end_nested()
.nested_data_netkit()
.push_peer_info(val) // &[u8]
.push_primary(val) // u8
// Associated type: "NetkitPolicy" (enum)
.push_policy(val) // u32
// Associated type: "NetkitPolicy" (enum)
.push_peer_policy(val) // u32
// Associated type: "NetkitMode" (enum)
.push_mode(val) // u32
// Associated type: "NetkitScrub" (enum)
.push_scrub(val) // u32
// Associated type: "NetkitScrub" (enum)
.push_peer_scrub(val) // u32
.push_headroom(val) // u16
.push_tailroom(val) // u16
.end_nested()
.nested_data_ovpn()
// Associated type: "OvpnMode" (enum)
.push_mode(val) // u8
.end_nested()
.push_xstats(val) // &[u8]
.push_slave_kind(val) // &CStr
.push_slave_kind_bytes(val) // &[u8]
.nested_slave_data_bridge()
.push_state(val) // u8
.push_priority(val) // u16
.push_cost(val) // u32
.push_mode(val) // ()
.push_guard(val) // ()
.push_protect(val) // ()
.push_fast_leave(val) // ()
.push_learning(val) // ()
.push_unicast_flood(val) // ()
.push_proxyarp(val) // ()
.push_learning_sync(val) // ()
.push_proxyarp_wifi(val) // ()
.push_root_id(val) // PushIflaBridgeId
.push_bridge_id(val) // PushIflaBridgeId
.push_designated_port(val) // u16
.push_designated_cost(val) // u16
.push_id(val) // u16
.push_no(val) // u16
.push_topology_change_ack(val) // u8
.push_config_pending(val) // u8
.push_message_age_timer(val) // u64
.push_forward_delay_timer(val) // u64
.push_hold_timer(val) // u64
.push_flush(val) // ()
.push_multicast_router(val) // u8
.push_pad(val) // &[u8]
.push_mcast_flood(val) // ()
.push_mcast_to_ucast(val) // ()
.push_vlan_tunnel(val) // ()
.push_bcast_flood(val) // ()
.push_group_fwd_mask(val) // u16
.push_neigh_suppress(val) // ()
.push_isolated(val) // ()
.push_backup_port(val) // u32
.push_mrp_ring_open(val) // ()
.push_mrp_in_open(val) // ()
.push_mcast_eht_hosts_limit(val) // u32
.push_mcast_eht_hosts_cnt(val) // u32
.push_locked(val) // ()
.push_mab(val) // ()
.push_mcast_n_groups(val) // u32
.push_mcast_max_groups(val) // u32
.push_neigh_vlan_suppress(val) // ()
.push_backup_nhid(val) // u32
.end_nested()
.nested_slave_data_bond()
.push_state(val) // u8
.push_mii_status(val) // u8
.push_link_failure_count(val) // u32
.push_perm_hwaddr(val) // &[u8]
.push_queue_id(val) // u16
.push_ad_aggregator_id(val) // u16
.push_ad_actor_oper_port_state(val) // u8
.push_ad_partner_oper_port_state(val) // u16
.push_prio(val) // u32
.end_nested()
.end_nested()
.push_net_ns_pid(val) // u32
.push_ifalias(val) // &CStr
.push_ifalias_bytes(val) // &[u8]
.push_num_vf(val) // u32
.nested_vfinfo_list()
// Attribute may repeat multiple times (treat it as array)
.nested_info()
.push_mac(val) // PushIflaVfMac
.push_vlan(val) // PushIflaVfVlan
.push_tx_rate(val) // PushIflaVfTxRate
.push_spoofchk(val) // PushIflaVfSpoofchk
.push_link_state(val) // PushIflaVfLinkState
.push_rate(val) // PushIflaVfRate
.push_rss_query_en(val) // PushIflaVfRssQueryEn
.nested_stats()
.push_rx_packets(val) // u64
.push_tx_packets(val) // u64
.push_rx_bytes(val) // u64
.push_tx_bytes(val) // u64
.push_broadcast(val) // u64
.push_multicast(val) // u64
.push_pad(val) // &[u8]
.push_rx_dropped(val) // u64
.push_tx_dropped(val) // u64
.end_nested()
.push_trust(val) // PushIflaVfTrust
.push_ib_node_guid(val) // PushIflaVfGuid
.push_ib_port_guid(val) // PushIflaVfGuid
.nested_vlan_list()
// Attribute may repeat multiple times (treat it as array)
.push_info(val) // PushIflaVfVlanInfo
.end_nested()
.push_broadcast(val) // &[u8]
.end_nested()
.end_nested()
.push_stats64(val) // PushRtnlLinkStats64
.nested_vf_ports()
.end_nested()
.nested_port_self()
.end_nested()
.nested_af_spec()
.nested_inet()
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
.push_conf(val) // &[u8]
.end_nested()
.nested_inet6()
.push_flags(val) // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
.push_conf(val) // &[u8]
.push_stats(val) // &[u8]
.push_mcast(val) // &[u8]
.push_cacheinfo(val) // PushIflaCacheinfo
.push_icmp6stats(val) // &[u8]
.push_token(val) // &[u8]
.push_addr_gen_mode(val) // u8
.push_ra_mtu(val) // u32
.end_nested()
.nested_mctp()
.push_net(val) // u32
.push_phys_binding(val) // u8
.end_nested()
.end_nested()
.push_group(val) // u32
.push_net_ns_fd(val) // u32
// Associated type: "RtextFilter" (1 bit per enumeration)
.push_ext_mask(val) // u32
.push_promiscuity(val) // u32
.push_num_tx_queues(val) // u32
.push_num_rx_queues(val) // u32
.push_carrier(val) // u8
.push_phys_port_id(val) // &[u8]
.push_carrier_changes(val) // u32
.push_phys_switch_id(val) // &[u8]
.push_link_netnsid(val) // i32
.push_phys_port_name(val) // &CStr
.push_phys_port_name_bytes(val) // &[u8]
.push_proto_down(val) // u8
.push_gso_max_segs(val) // u32
.push_gso_max_size(val) // u32
.push_pad(val) // &[u8]
.nested_xdp()
.push_fd(val) // i32
.push_attached(val) // u8
.push_flags(val) // u32
.push_prog_id(val) // u32
.push_drv_prog_id(val) // u32
.push_skb_prog_id(val) // u32
.push_hw_prog_id(val) // u32
.push_expected_fd(val) // i32
.end_nested()
.push_event(val) // u32
.push_new_netnsid(val) // i32
.push_target_netnsid(val) // i32
.push_carrier_up_count(val) // u32
.push_carrier_down_count(val) // u32
.push_new_ifindex(val) // i32
.push_min_mtu(val) // u32
.push_max_mtu(val) // u32
.nested_prop_list()
.push_alt_ifname(val) // &CStr
.push_alt_ifname_bytes(val) // &[u8]
.end_nested()
.push_perm_address(val) // &[u8]
.push_proto_down_reason(val) // &CStr
.push_proto_down_reason_bytes(val) // &[u8]
.push_parent_dev_name(val) // &CStr
.push_parent_dev_name_bytes(val) // &[u8]
.push_parent_dev_bus_name(val) // &CStr
.push_parent_dev_bus_name_bytes(val) // &[u8]
.push_gro_max_size(val) // u32
.push_tso_max_size(val) // u32
.push_tso_max_segs(val) // u32
.push_allmulti(val) // u32
.push_devlink_port(val) // &[u8]
.push_gso_ipv4_max_size(val) // u32
.push_gro_ipv4_max_size(val) // u32
.nested_dpll_pin()
.push_id(val) // u32
.end_nested()
// EDT offload horizon supported by the device (in nsec).
.push_max_pacing_offload_horizon(val) // u32
.push_netns_immutable(val) // u8
;
```
```rust
let attrs = OpSetlinkDoReply::new(buf);
// No attributes
```
### Do (reply)
```rust
PushOpSetlinkDoReply::new(&mut vec)
;
```
```rust
let attrs = OpSetlinkDoReply::new(buf);
// No attributes
```
## Low-level decoding
### Do (request)
```rust
let iter = OpSetlinkDoRequest::new(buf);
for attr in iter {
match attr {
Address(val) => {}, // &[u8]
Broadcast(val) => {}, // &[u8]
Ifname(val) => {}, // &CStr
Mtu(val) => {}, // u32
Link(val) => {}, // u32
Qdisc(val) => {}, // &CStr
Stats(val) => {}, // PushRtnlLinkStats
Cost(val) => {}, // &CStr
Priority(val) => {}, // &CStr
Master(val) => {}, // u32
Wireless(val) => {}, // &CStr
Protinfo(val) => {}, // &CStr
Txqlen(val) => {}, // u32
Map(val) => {}, // PushRtnlLinkIfmap
Weight(val) => {}, // u32
Operstate(val) => {}, // u8
Linkmode(val) => {}, // u8
Linkinfo(iter) => {
for attr in iter {
match attr {
Kind(val) => {}, // &CStr
Data(val) => {}, // submessage
Xstats(val) => {}, // &[u8]
SlaveKind(val) => {}, // &CStr
SlaveData(val) => {}, // submessage
}
}
},
NetNsPid(val) => {}, // u32
Ifalias(val) => {}, // &CStr
NumVf(val) => {}, // u32
VfinfoList(iter) => {
for attr in iter {
match attr {
// Attribute may repeat multiple times (treat it as array)
Info(iter) => {
for attr in iter {
match attr {
Mac(val) => {}, // PushIflaVfMac
Vlan(val) => {}, // PushIflaVfVlan
TxRate(val) => {}, // PushIflaVfTxRate
Spoofchk(val) => {}, // PushIflaVfSpoofchk
LinkState(val) => {}, // PushIflaVfLinkState
Rate(val) => {}, // PushIflaVfRate
RssQueryEn(val) => {}, // PushIflaVfRssQueryEn
Stats(iter) => {
for attr in iter {
match attr {
RxPackets(val) => {}, // u64
TxPackets(val) => {}, // u64
RxBytes(val) => {}, // u64
TxBytes(val) => {}, // u64
Broadcast(val) => {}, // u64
Multicast(val) => {}, // u64
Pad(val) => {}, // &[u8]
RxDropped(val) => {}, // u64
TxDropped(val) => {}, // u64
}
}
},
Trust(val) => {}, // PushIflaVfTrust
IbNodeGuid(val) => {}, // PushIflaVfGuid
IbPortGuid(val) => {}, // PushIflaVfGuid
VlanList(iter) => {
for attr in iter {
match attr {
// Attribute may repeat multiple times (treat it as array)
Info(val) => {}, // PushIflaVfVlanInfo
}
}
},
Broadcast(val) => {}, // &[u8]
}
}
},
}
}
},
Stats64(val) => {}, // PushRtnlLinkStats64
VfPorts(iter) => {
for attr in iter {
match attr {
}
}
},
PortSelf(iter) => {
for attr in iter {
match attr {
}
}
},
AfSpec(iter) => {
for attr in iter {
match attr {
Inet(iter) => {
for attr in iter {
match attr {
// u32 indexed by ipv4-devconf - 1 on output, on input it's a nest
Conf(val) => {}, // &[u8]
}
}
},
Inet6(iter) => {
for attr in iter {
match attr {
Flags(val) => {}, // u32
// u32 indexed by ipv6-devconf - 1 on output, on input it's a nest
Conf(val) => {}, // &[u8]
Stats(val) => {}, // &[u8]
Mcast(val) => {}, // &[u8]
Cacheinfo(val) => {}, // PushIflaCacheinfo
Icmp6stats(val) => {}, // &[u8]
Token(val) => {}, // &[u8]
AddrGenMode(val) => {}, // u8
RaMtu(val) => {}, // u32
}
}
},
Mctp(iter) => {
for attr in iter {
match attr {
Net(val) => {}, // u32
PhysBinding(val) => {}, // u8
}
}
},
}
}
},
Group(val) => {}, // u32
NetNsFd(val) => {}, // u32
// Associated type: "RtextFilter" (1 bit per enumeration)
ExtMask(val) => {}, // u32
Promiscuity(val) => {}, // u32
NumTxQueues(val) => {}, // u32
NumRxQueues(val) => {}, // u32
Carrier(val) => {}, // u8
PhysPortId(val) => {}, // &[u8]
CarrierChanges(val) => {}, // u32
PhysSwitchId(val) => {}, // &[u8]
LinkNetnsid(val) => {}, // i32
PhysPortName(val) => {}, // &CStr
ProtoDown(val) => {}, // u8
GsoMaxSegs(val) => {}, // u32
GsoMaxSize(val) => {}, // u32
Pad(val) => {}, // &[u8]
Xdp(iter) => {
for attr in iter {
match attr {
Fd(val) => {}, // i32
Attached(val) => {}, // u8
Flags(val) => {}, // u32
ProgId(val) => {}, // u32
DrvProgId(val) => {}, // u32
SkbProgId(val) => {}, // u32
HwProgId(val) => {}, // u32
ExpectedFd(val) => {}, // i32
}
}
},
Event(val) => {}, // u32
NewNetnsid(val) => {}, // i32
TargetNetnsid(val) => {}, // i32
CarrierUpCount(val) => {}, // u32
CarrierDownCount(val) => {}, // u32
NewIfindex(val) => {}, // i32
MinMtu(val) => {}, // u32
MaxMtu(val) => {}, // u32
PropList(iter) => {
for attr in iter {
match attr {
AltIfname(val) => {}, // &CStr
}
}
},
PermAddress(val) => {}, // &[u8]
ProtoDownReason(val) => {}, // &CStr
ParentDevName(val) => {}, // &CStr
ParentDevBusName(val) => {}, // &CStr
GroMaxSize(val) => {}, // u32
TsoMaxSize(val) => {}, // u32
TsoMaxSegs(val) => {}, // u32
Allmulti(val) => {}, // u32
DevlinkPort(val) => {}, // &[u8]
GsoIpv4MaxSize(val) => {}, // u32
GroIpv4MaxSize(val) => {}, // u32
DpllPin(iter) => {
for attr in iter {
match attr {
Id(val) => {}, // u32
}
}
},
// EDT offload horizon supported by the device (in nsec).
MaxPacingOffloadHorizon(val) => {}, // u32
NetnsImmutable(val) => {}, // u8
}
}
```
### Do (reply)
```rust
let iter = OpSetlinkDoReply::new(buf);
// No attributes
```
# Operation "getstats"
## Do (request)
```rust
PushOpGetstatsDoRequest::new(&mut vec)
;
```
```rust
let attrs = OpGetstatsDoReply::new(buf);
attrs.get_link_64(); // PushRtnlLinkStats64
attrs.get_link_xstats(); // &[u8]
attrs.get_link_xstats_slave(); // &[u8]
{ // Nested LinkOffloadXstats
let attrs = attrs.get_link_offload_xstats();
attrs.get_cpu_hit(); // &[u8]
for entry in attrs.get_hw_s_info() {
entry.get_request(); // u8
entry.get_used(); // u8
}
attrs.get_l3_stats(); // &[u8]
}
attrs.get_af_spec(); // &[u8]
```
### Do (reply)
```rust
PushOpGetstatsDoReply::new(&mut vec)
.push_link_64(val) // PushRtnlLinkStats64
.push_link_xstats(val) // &[u8]
.push_link_xstats_slave(val) // &[u8]
.nested_link_offload_xstats()
.push_cpu_hit(val) // &[u8]
.array_hw_s_info()
.entry_nested()
.push_request(val) // u8
.push_used(val) // u8
.end_nested()
.end_array()
.push_l3_stats(val) // &[u8]
.end_nested()
.push_af_spec(val) // &[u8]
;
```
```rust
let attrs = OpGetstatsDoReply::new(buf);
attrs.get_link_64(); // PushRtnlLinkStats64
attrs.get_link_xstats(); // &[u8]
attrs.get_link_xstats_slave(); // &[u8]
{ // Nested LinkOffloadXstats
let attrs = attrs.get_link_offload_xstats();
attrs.get_cpu_hit(); // &[u8]
for entry in attrs.get_hw_s_info() {
entry.get_request(); // u8
entry.get_used(); // u8
}
attrs.get_l3_stats(); // &[u8]
}
attrs.get_af_spec(); // &[u8]
```
## Low-level decoding
### Do (request)
```rust
let iter = OpGetstatsDoRequest::new(buf);
// No attributes
```
### Do (reply)
```rust
let iter = OpGetstatsDoReply::new(buf);
for attr in iter {
match attr {
Link64(val) => {}, // PushRtnlLinkStats64
LinkXstats(val) => {}, // &[u8]
LinkXstatsSlave(val) => {}, // &[u8]
LinkOffloadXstats(iter) => {
for attr in iter {
match attr {
CpuHit(val) => {}, // &[u8]
HwSInfo(iter) => {
for entry in iter {
for attr in entry {
match attr {
Request(val) => {}, // u8
Used(val) => {}, // u8
}
}
}
},
L3Stats(val) => {}, // &[u8]
}
}
},
AfSpec(val) => {}, // &[u8]
}
}
```
## Dump (request)
```rust
PushOpGetstatsDumpRequest::new(&mut vec)
;
```
```rust
let attrs = OpGetstatsDumpReply::new(buf);
attrs.get_link_64(); // PushRtnlLinkStats64
attrs.get_link_xstats(); // &[u8]
attrs.get_link_xstats_slave(); // &[u8]
{ // Nested LinkOffloadXstats
let attrs = attrs.get_link_offload_xstats();
attrs.get_cpu_hit(); // &[u8]
for entry in attrs.get_hw_s_info() {
entry.get_request(); // u8
entry.get_used(); // u8
}
attrs.get_l3_stats(); // &[u8]
}
attrs.get_af_spec(); // &[u8]
```
### Dump (reply)
```rust
PushOpGetstatsDumpReply::new(&mut vec)
.push_link_64(val) // PushRtnlLinkStats64
.push_link_xstats(val) // &[u8]
.push_link_xstats_slave(val) // &[u8]
.nested_link_offload_xstats()
.push_cpu_hit(val) // &[u8]
.array_hw_s_info()
.entry_nested()
.push_request(val) // u8
.push_used(val) // u8
.end_nested()
.end_array()
.push_l3_stats(val) // &[u8]
.end_nested()
.push_af_spec(val) // &[u8]
;
```
```rust
let attrs = OpGetstatsDumpReply::new(buf);
attrs.get_link_64(); // PushRtnlLinkStats64
attrs.get_link_xstats(); // &[u8]
attrs.get_link_xstats_slave(); // &[u8]
{ // Nested LinkOffloadXstats
let attrs = attrs.get_link_offload_xstats();
attrs.get_cpu_hit(); // &[u8]
for entry in attrs.get_hw_s_info() {
entry.get_request(); // u8
entry.get_used(); // u8
}
attrs.get_l3_stats(); // &[u8]
}
attrs.get_af_spec(); // &[u8]
```
## Low-level decoding
### Dump (request)
```rust
let iter = OpGetstatsDumpRequest::new(buf);
// No attributes
```
### Dump (reply)
```rust
let iter = OpGetstatsDumpReply::new(buf);
for attr in iter {
match attr {
Link64(val) => {}, // PushRtnlLinkStats64
LinkXstats(val) => {}, // &[u8]
LinkXstatsSlave(val) => {}, // &[u8]
LinkOffloadXstats(iter) => {
for attr in iter {
match attr {
CpuHit(val) => {}, // &[u8]
HwSInfo(iter) => {
for entry in iter {
for attr in entry {
match attr {
Request(val) => {}, // u8
Used(val) => {}, // u8
}
}
}
},
L3Stats(val) => {}, // &[u8]
}
}
},
AfSpec(val) => {}, // &[u8]
}
}
```