Commit af6610ef authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

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: default avatarJakub Kicinski <kuba@kernel.org>
parents d84366bc 1a1eba0e
Loading
Loading
Loading
Loading
+22 −20
Original line number Diff line number Diff line
@@ -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
+91 −89
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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,