netlink: specs: Add a spec for neighbor tables in rtnetlink

Add a YNL spec for neighbour tables and neighbour entries in rtnetlink.

./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'},
  ...]

Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
Link: https://patch.msgid.link/20241106090718.64713-2-donald.hunter@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Donald Hunter 2024-11-06 09:07:17 +00:00 committed by Jakub Kicinski
parent 38a1f50a5e
commit bc515ed066

View File

@ -0,0 +1,442 @@
# 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