Commit 4592de83 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'netlink-specs-add-neigh-and-rule-ynl-specs'

Donald Hunter says:

====================
netlink: specs: Add neigh and rule YNL specs

Add YNL specs for the FDB neighbour tables and FIB rules from the
rtnelink families.

Example usage:

./tools/net/ynl/cli.py \
    --spec Documentation/netlink/specs/rt_neigh.yaml \
    --dump getneigh
[{'cacheinfo': {'confirmed': 122664055,
                'refcnt': 0,
                'updated': 122658055,
                'used': 122658055},
  'dst': '0.0.0.0',
  'family': 2,
  'flags': set(),
  'ifindex': 5,
  'lladr': '',
  'probes': 0,
  'state': {'noarp'},
  'type': 'broadcast'},
  ...]

./tools/net/ynl/cli.py \
    --spec Documentation/netlink/specs/rt_rule.yaml \
    --dump getrule --json '{"family": 2}'

[{'action': 'to-tbl',
  'dst-len': 0,
  'family': 2,
  'flags': 0,
  'protocol': 2,
  'src-len': 0,
  'suppress-prefixlen': '0xffffffff',
  'table': 255,
  'tos': 0},
  ... ]
====================

Link: https://patch.msgid.link/20241106090718.64713-1-donald.hunter@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 38a1f50a a852e3c3
Loading
Loading
Loading
Loading
+442 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)

name: rt-neigh
protocol: netlink-raw
protonum: 0

doc:
  IP neighbour management over rtnetlink.

definitions:
  -
    name: ndmsg
    type: struct
    members:
      -
        name: family
        type: u8
      -
        name: pad
        type: pad
        len: 3
      -
        name: ifindex
        type: s32
      -
        name: state
        type: u16
        enum: nud-state
      -
        name: flags
        type: u8
        enum: ntf-flags
      -
        name: type
        type: u8
        enum: rtm-type
  -
    name: ndtmsg
    type: struct
    members:
      -
        name: family
        type: u8
      -
        name: pad
        type: pad
        len: 3
  -
    name: nud-state
    type: flags
    entries:
      - incomplete
      - reachable
      - stale
      - delay
      - probe
      - failed
      - noarp
      - permanent
  -
    name: ntf-flags
    type: flags
    entries:
      - use
      - self
      - master
      - proxy
      - ext-learned
      - offloaded
      - sticky
      - router
  -
    name: ntf-ext-flags
    type: flags
    entries:
      - managed
      - locked
  -
    name: rtm-type
    type: enum
    entries:
      - unspec
      - unicast
      - local
      - broadcast
      - anycast
      - multicast
      - blackhole
      - unreachable
      - prohibit
      - throw
      - nat
      - xresolve
  -
    name: nda-cacheinfo
    type: struct
    members:
      -
        name: confirmed
        type: u32
      -
        name: used
        type: u32
      -
        name: updated
        type: u32
      -
        name: refcnt
        type: u32
  -
    name: ndt-config
    type: struct
    members:
      -
        name: key-len
        type: u16
      -
        name: entry-size
        type: u16
      -
        name: entries
        type: u32
      -
        name: last-flush
        type: u32
      -
        name: last-rand
        type: u32
      -
        name: hash-rnd
        type: u32
      -
        name: hash-mask
        type: u32
      -
        name: hash-chain-gc
        type: u32
      -
        name: proxy-qlen
        type: u32
  -
    name: ndt-stats
    type: struct
    members:
      -
        name: allocs
        type: u64
      -
        name: destroys
        type: u64
      -
        name: hash-grows
        type: u64
      -
        name: res-failed
        type: u64
      -
        name: lookups
        type: u64
      -
        name: hits
        type: u64
      -
        name: rcv-probes-mcast
        type: u64
      -
        name: rcv-probes-ucast
        type: u64
      -
        name: periodic-gc-runs
        type: u64
      -
        name: forced-gc-runs
        type: u64
      -
        name: table-fulls
        type: u64

attribute-sets:
  -
    name: neighbour-attrs
    attributes:
      -
        name: unspec
        type: binary
        value: 0
      -
        name: dst
        type: binary
        display-hint: ipv4
      -
        name: lladr
        type: binary
        display-hint: mac
      -
        name: cacheinfo
        type: binary
        struct: nda-cacheinfo
      -
        name: probes
        type: u32
      -
        name: vlan
        type: u16
      -
        name: port
        type: u16
      -
        name: vni
        type: u32
      -
        name: ifindex
        type: u32
      -
        name: master
        type: u32
      -
        name: link-netnsid
        type: s32
      -
        name: src-vni
        type: u32
      -
        name: protocol
        type: u8
      -
        name: nh-id
        type: u32
      -
        name: fdb-ext-attrs
        type: binary
      -
        name: flags-ext
        type: u32
        enum: ntf-ext-flags
      -
        name: ndm-state-mask
        type: u16
      -
        name: ndm-flags-mask
        type: u8
  -
    name: ndt-attrs
    attributes:
      -
        name: name
        type: string
      -
        name: thresh1
        type: u32
      -
        name: thresh2
        type: u32
      -
        name: thresh3
        type: u32
      -
        name: config
        type: binary
        struct: ndt-config
      -
        name: parms
        type: nest
        nested-attributes: ndtpa-attrs
      -
        name: stats
        type: binary
        struct: ndt-stats
      -
        name: gc-interval
        type: u64
      -
        name: pad
        type: pad
  -
    name: ndtpa-attrs
    attributes:
      -
        name: ifindex
        type: u32
      -
        name: refcnt
        type: u32
      -
        name: reachable-time
        type: u64
      -
        name: base-reachable-time
        type: u64
      -
        name: retrans-time
        type: u64
      -
        name: gc-staletime
        type: u64
      -
        name: delay-probe-time
        type: u64
      -
        name: queue-len
        type: u32
      -
        name: app-probes
        type: u32
      -
        name: ucast-probes
        type: u32
      -
        name: mcast-probes
        type: u32
      -
        name: anycast-delay
        type: u64
      -
        name: proxy-delay
        type: u64
      -
        name: proxy-qlen
        type: u32
      -
        name: locktime
        type: u64
      -
        name: queue-lenbytes
        type: u32
      -
        name: mcast-reprobes
        type: u32
      -
        name: pad
        type: pad
      -
        name: interval-probe-time-ms
        type: u64

operations:
  enum-model: directional
  list:
    -
      name: newneigh
      doc: Add new neighbour entry
      fixed-header: ndmsg
      attribute-set: neighbour-attrs
      do:
        request:
          value: 28
          attributes: &neighbour-all
            - dst
            - lladdr
            - probes
            - vlan
            - port
            - vni
            - ifindex
            - master
            - protocol
            - nh-id
            - flags-ext
            - fdb-ext-attrs
    -
      name: delneigh
      doc: Remove an existing neighbour entry
      fixed-header: ndmsg
      attribute-set: neighbour-attrs
      do:
        request:
          value: 29
          attributes:
            - dst
            - ifindex
    -
      name: delneigh-ntf
      doc: Notify a neighbour deletion
      value: 29
      notify: delneigh
      fixed-header: ndmsg
    -
      name: getneigh
      doc: Get or dump neighbour entries
      fixed-header: ndmsg
      attribute-set: neighbour-attrs
      do:
        request:
          value: 30
          attributes:
            - dst
        reply:
          value: 28
          attributes: *neighbour-all
      dump:
        request:
          attributes:
            - ifindex
            - master
        reply:
          attributes: *neighbour-all
    -
      name: newneigh-ntf
      doc: Notify a neighbour creation
      value: 28
      notify: getneigh
      fixed-header: ndmsg
    -
      name: getneightbl
      doc: Get or dump neighbour tables
      fixed-header: ndtmsg
      attribute-set: ndt-attrs
      dump:
        request:
          value: 66
        reply:
          value: 64
          attributes:
            - name
            - thresh1
            - thresh2
            - thresh3
            - config
            - parms
            - stats
            - gc-interval
    -
      name: setneightbl
      doc: Set neighbour tables
      fixed-header: ndtmsg
      attribute-set: ndt-attrs
      do:
        request:
          value: 67
          attributes:
            - name
            - thresh1
            - thresh2
            - thresh3
            - parms
            - gc-interval

mcast-groups:
  list:
    -
      name: rtnlgrp-neigh
      value: 3
+242 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)

name: rt-rule
protocol: netlink-raw
protonum: 0

doc:
  FIB rule management over rtnetlink.

definitions:
  -
    name: rtgenmsg
    type: struct
    members:
      -
        name: family
        type: u8
      -
        name: pad
        type: pad
        len: 3
  -
    name: fib-rule-hdr
    type: struct
    members:
      -
        name: family
        type: u8
      -
        name: dst-len
        type: u8
      -
        name: src-len
        type: u8
      -
        name: tos
        type: u8
      -
        name: table
        type: u8
      -
        name: res1
        type: pad
        len: 1
      -
        name: res2
        type: pad
        len: 1
      -
        name: action
        type: u8
        enum: fr-act
      -
        name: flags
        type: u32
  -
    name: fr-act
    type: enum
    entries:
      - unspec
      - to-tbl
      - goto
      - nop
      - res3
      - res4
      - blackhole
      - unreachable
      - prohibit
  -
    name: fib-rule-port-range
    type: struct
    members:
      -
        name: start
        type: u16
      -
        name: end
        type: u16
  -
    name: fib-rule-uid-range
    type: struct
    members:
      -
        name: start
        type: u32
      -
        name: end
        type: u32

attribute-sets:
  -
    name: fib-rule-attrs
    attributes:
      -
        name: dst
        type: u32
      -
        name: src
        type: u32
      -
        name: iifname
        type: string
      -
        name: goto
        type: u32
      -
        name: unused2
        type: pad
      -
        name: priority
        type: u32
      -
        name: unused3
        type: pad
      -
        name: unused4
        type: pad
      -
        name: unused5
        type: pad
      -
        name: fwmark
        type: u32
        display-hint: hex
      -
        name: flow
        type: u32
      -
        name: tun-id
        type: u64
      -
        name: suppress-ifgroup
        type: u32
      -
        name: suppress-prefixlen
        type: u32
        display-hint: hex
      -
        name: table
        type: u32
      -
        name: fwmask
        type: u32
        display-hint: hex
      -
        name: oifname
        type: string
      -
        name: pad
        type: pad
      -
        name: l3mdev
        type: u8
      -
        name: uid-range
        type: binary
        struct: fib-rule-uid-range
      -
        name: protocol
        type: u8
      -
        name: ip-proto
        type: u8
      -
        name: sport-range
        type: binary
        struct: fib-rule-port-range
      -
        name: dport-range
        type: binary
        struct: fib-rule-port-range
      -
        name: dscp
        type: u8

operations:
  enum-model: directional
  fixed-header: fib-rule-hdr
  list:
    -
      name: newrule
      doc: Add new FIB rule
      attribute-set: fib-rule-attrs
      do:
        request:
          value: 32
          attributes: &fib-rule-all
            - iifname
            - oifname
            - priority
            - fwmark
            - flow
            - tun-id
            - fwmask
            - table
            - suppress-prefixlen
            - suppress-ifgroup
            - goto
            - l3mdev
            - uid-range
            - protocol
            - ip-proto
            - sport-range
            - dport-range
            - dscp
    -
      name: newrule-ntf
      doc: Notify a rule creation
      value: 32
      notify: newrule
    -
      name: delrule
      doc: Remove an existing FIB rule
      attribute-set: fib-rule-attrs
      do:
        request:
          value: 33
          attributes: *fib-rule-all
    -
      name: delrule-ntf
      doc: Notify a rule deletion
      value: 33
      notify: delrule
    -
      name: getrule
      doc: Dump all FIB rules
      attribute-set: fib-rule-attrs
      dump:
        request:
          value: 34
        reply:
          value: 32
          attributes: *fib-rule-all

mcast-groups:
  list:
    -
      name: rtnlgrp-ipv4-rule
      value: 8
    -
      name: rtnlgrp-ipv6-rule
      value: 19