Merge branch 'netlink-specs-rt_addr-fix-problems-revealed-by-c-codegen'

Jakub Kicinski says:

====================
netlink: specs: rt_addr: fix problems revealed by C codegen

I put together basic YNL C support for classic netlink. This revealed
a few problems in the rt_addr spec.

v1: https://lore.kernel.org/20250401012939.2116915-1-kuba@kernel.org
====================

Link: https://patch.msgid.link/20250403013706.2828322-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jakub Kicinski 2025-04-04 07:36:11 -07:00
commit af6610ef2e
3 changed files with 115 additions and 111 deletions

View File

@ -78,45 +78,46 @@ definitions:
attribute-sets:
-
name: addr-attrs
name-prefix: ifa-
attributes:
-
name: ifa-address
name: address
type: binary
display-hint: ipv4
-
name: ifa-local
name: local
type: binary
display-hint: ipv4
-
name: ifa-label
name: label
type: string
-
name: ifa-broadcast
name: broadcast
type: binary
display-hint: ipv4
-
name: ifa-anycast
name: anycast
type: binary
-
name: ifa-cacheinfo
name: cacheinfo
type: binary
struct: ifa-cacheinfo
-
name: ifa-multicast
name: multicast
type: binary
-
name: ifa-flags
name: flags
type: u32
enum: ifa-flags
enum-as-flags: true
-
name: ifa-rt-priority
name: rt-priority
type: u32
-
name: ifa-target-netnsid
name: target-netnsid
type: binary
-
name: ifa-proto
name: proto
type: u8
@ -137,10 +138,10 @@ operations:
- ifa-prefixlen
- ifa-scope
- ifa-index
- ifa-address
- ifa-label
- ifa-local
- ifa-cacheinfo
- address
- label
- local
- cacheinfo
-
name: deladdr
doc: Remove address
@ -154,8 +155,8 @@ operations:
- ifa-prefixlen
- ifa-scope
- ifa-index
- ifa-address
- ifa-local
- address
- local
-
name: getaddr
doc: Dump address information.
@ -169,7 +170,7 @@ operations:
value: 20
attributes: *ifaddr-all
-
name: getmaddrs
name: getmulticast
doc: Get / dump IPv4/IPv6 multicast addresses.
attribute-set: addr-attrs
fixed-header: ifaddrmsg
@ -182,11 +183,12 @@ operations:
reply:
value: 58
attributes: &mcaddr-attrs
- ifa-multicast
- ifa-cacheinfo
- multicast
- cacheinfo
dump:
request:
value: 58
attributes:
- ifa-family
reply:
value: 58

View File

@ -80,165 +80,167 @@ definitions:
attribute-sets:
-
name: route-attrs
name-prefix: rta-
attributes:
-
name: rta-dst
name: dst
type: binary
display-hint: ipv4
-
name: rta-src
name: src
type: binary
display-hint: ipv4
-
name: rta-iif
name: iif
type: u32
-
name: rta-oif
name: oif
type: u32
-
name: rta-gateway
name: gateway
type: binary
display-hint: ipv4
-
name: rta-priority
name: priority
type: u32
-
name: rta-prefsrc
name: prefsrc
type: binary
display-hint: ipv4
-
name: rta-metrics
name: metrics
type: nest
nested-attributes: rta-metrics
nested-attributes: metrics
-
name: rta-multipath
name: multipath
type: binary
-
name: rta-protoinfo # not used
name: protoinfo # not used
type: binary
-
name: rta-flow
name: flow
type: u32
-
name: rta-cacheinfo
name: cacheinfo
type: binary
struct: rta-cacheinfo
-
name: rta-session # not used
name: session # not used
type: binary
-
name: rta-mp-algo # not used
name: mp-algo # not used
type: binary
-
name: rta-table
name: table
type: u32
-
name: rta-mark
name: mark
type: u32
-
name: rta-mfc-stats
name: mfc-stats
type: binary
-
name: rta-via
name: via
type: binary
-
name: rta-newdst
name: newdst
type: binary
-
name: rta-pref
name: pref
type: u8
-
name: rta-encap-type
name: encap-type
type: u16
-
name: rta-encap
name: encap
type: binary # tunnel specific nest
-
name: rta-expires
name: expires
type: u32
-
name: rta-pad
name: pad
type: binary
-
name: rta-uid
name: uid
type: u32
-
name: rta-ttl-propagate
name: ttl-propagate
type: u8
-
name: rta-ip-proto
name: ip-proto
type: u8
-
name: rta-sport
name: sport
type: u16
-
name: rta-dport
name: dport
type: u16
-
name: rta-nh-id
name: nh-id
type: u32
-
name: rta-flowlabel
name: flowlabel
type: u32
byte-order: big-endian
display-hint: hex
-
name: rta-metrics
name: metrics
name-prefix: rtax-
attributes:
-
name: rtax-unspec
name: unspec
type: unused
value: 0
-
name: rtax-lock
name: lock
type: u32
-
name: rtax-mtu
name: mtu
type: u32
-
name: rtax-window
name: window
type: u32
-
name: rtax-rtt
name: rtt
type: u32
-
name: rtax-rttvar
name: rttvar
type: u32
-
name: rtax-ssthresh
name: ssthresh
type: u32
-
name: rtax-cwnd
name: cwnd
type: u32
-
name: rtax-advmss
name: advmss
type: u32
-
name: rtax-reordering
name: reordering
type: u32
-
name: rtax-hoplimit
name: hoplimit
type: u32
-
name: rtax-initcwnd
name: initcwnd
type: u32
-
name: rtax-features
name: features
type: u32
-
name: rtax-rto-min
name: rto-min
type: u32
-
name: rtax-initrwnd
name: initrwnd
type: u32
-
name: rtax-quickack
name: quickack
type: u32
-
name: rtax-cc-algo
name: cc-algo
type: string
-
name: rtax-fastopen-no-cookie
name: fastopen-no-cookie
type: u32
operations:
@ -254,18 +256,18 @@ operations:
value: 26
attributes:
- rtm-family
- rta-src
- src
- rtm-src-len
- rta-dst
- dst
- rtm-dst-len
- rta-iif
- rta-oif
- rta-ip-proto
- rta-sport
- rta-dport
- rta-mark
- rta-uid
- rta-flowlabel
- iif
- oif
- ip-proto
- sport
- dport
- mark
- uid
- flowlabel
reply:
value: 24
attributes: &all-route-attrs
@ -278,34 +280,34 @@ operations:
- rtm-scope
- rtm-type
- rtm-flags
- rta-dst
- rta-src
- rta-iif
- rta-oif
- rta-gateway
- rta-priority
- rta-prefsrc
- rta-metrics
- rta-multipath
- rta-flow
- rta-cacheinfo
- rta-table
- rta-mark
- rta-mfc-stats
- rta-via
- rta-newdst
- rta-pref
- rta-encap-type
- rta-encap
- rta-expires
- rta-pad
- rta-uid
- rta-ttl-propagate
- rta-ip-proto
- rta-sport
- rta-dport
- rta-nh-id
- rta-flowlabel
- dst
- src
- iif
- oif
- gateway
- priority
- prefsrc
- metrics
- multipath
- flow
- cacheinfo
- table
- mark
- mfc-stats
- via
- newdst
- pref
- encap-type
- encap
- expires
- pad
- uid
- ttl-propagate
- ip-proto
- sport
- dport
- nh-id
- flowlabel
dump:
request:
value: 26

View File

@ -12,10 +12,10 @@ def dump_mcaddr_check(rtnl: RtnlAddrFamily) -> None:
At least the loopback interface should have this address.
"""
addresses = rtnl.getmaddrs({"ifa-family": socket.AF_INET}, dump=True)
addresses = rtnl.getmulticast({"ifa-family": socket.AF_INET}, dump=True)
all_host_multicasts = [
addr for addr in addresses if addr['ifa-multicast'] == IPV4_ALL_HOSTS_MULTICAST
addr for addr in addresses if addr['multicast'] == IPV4_ALL_HOSTS_MULTICAST
]
ksft_ge(len(all_host_multicasts), 1,