xref: /linux/Documentation/netlink/specs/netdev.yaml (revision ea518afc992032f7570c0a89ac9240b387dc0faf)
1# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
2
3name: netdev
4
5doc:
6  netdev configuration over generic netlink.
7
8definitions:
9  -
10    type: flags
11    name: xdp-act
12    render-max: true
13    entries:
14      -
15        name: basic
16        doc:
17          XDP features set supported by all drivers
18          (XDP_ABORTED, XDP_DROP, XDP_PASS, XDP_TX)
19      -
20        name: redirect
21        doc:
22          The netdev supports XDP_REDIRECT
23      -
24        name: ndo-xmit
25        doc:
26          This feature informs if netdev implements ndo_xdp_xmit callback.
27      -
28        name: xsk-zerocopy
29        doc:
30          This feature informs if netdev supports AF_XDP in zero copy mode.
31      -
32        name: hw-offload
33        doc:
34         This feature informs if netdev supports XDP hw offloading.
35      -
36        name: rx-sg
37        doc:
38          This feature informs if netdev implements non-linear XDP buffer
39          support in the driver napi callback.
40      -
41        name: ndo-xmit-sg
42        doc:
43          This feature informs if netdev implements non-linear XDP buffer
44          support in ndo_xdp_xmit callback.
45  -
46    type: flags
47    name: xdp-rx-metadata
48    entries:
49      -
50        name: timestamp
51        doc:
52          Device is capable of exposing receive HW timestamp via bpf_xdp_metadata_rx_timestamp().
53      -
54        name: hash
55        doc:
56          Device is capable of exposing receive packet hash via bpf_xdp_metadata_rx_hash().
57      -
58        name: vlan-tag
59        doc:
60          Device is capable of exposing receive packet VLAN tag via bpf_xdp_metadata_rx_vlan_tag().
61  -
62    type: flags
63    name: xsk-flags
64    entries:
65      -
66        name: tx-timestamp
67        doc:
68          HW timestamping egress packets is supported by the driver.
69      -
70        name: tx-checksum
71        doc:
72          L3 checksum HW offload is supported by the driver.
73  -
74    name: queue-type
75    type: enum
76    entries: [ rx, tx ]
77
78attribute-sets:
79  -
80    name: dev
81    attributes:
82      -
83        name: ifindex
84        doc: netdev ifindex
85        type: u32
86        checks:
87          min: 1
88      -
89        name: pad
90        type: pad
91      -
92        name: xdp-features
93        doc: Bitmask of enabled xdp-features.
94        type: u64
95        enum: xdp-act
96      -
97        name: xdp-zc-max-segs
98        doc: max fragment count supported by ZC driver
99        type: u32
100        checks:
101          min: 1
102      -
103        name: xdp-rx-metadata-features
104        doc: Bitmask of supported XDP receive metadata features.
105             See Documentation/networking/xdp-rx-metadata.rst for more details.
106        type: u64
107        enum: xdp-rx-metadata
108      -
109        name: xsk-features
110        doc: Bitmask of enabled AF_XDP features.
111        type: u64
112        enum: xsk-flags
113  -
114    name: page-pool
115    attributes:
116      -
117        name: id
118        doc: Unique ID of a Page Pool instance.
119        type: uint
120        checks:
121          min: 1
122          max: u32-max
123      -
124        name: ifindex
125        doc: |
126          ifindex of the netdev to which the pool belongs.
127          May be reported as 0 if the page pool was allocated for a netdev
128          which got destroyed already (page pools may outlast their netdevs
129          because they wait for all memory to be returned).
130        type: u32
131        checks:
132          min: 1
133          max: s32-max
134      -
135        name: napi-id
136        doc: Id of NAPI using this Page Pool instance.
137        type: uint
138        checks:
139          min: 1
140          max: u32-max
141      -
142        name: inflight
143        type: uint
144        doc: |
145          Number of outstanding references to this page pool (allocated
146          but yet to be freed pages). Allocated pages may be held in
147          socket receive queues, driver receive ring, page pool recycling
148          ring, the page pool cache, etc.
149      -
150        name: inflight-mem
151        type: uint
152        doc: |
153          Amount of memory held by inflight pages.
154      -
155        name: detach-time
156        type: uint
157        doc: |
158          Seconds in CLOCK_BOOTTIME of when Page Pool was detached by
159          the driver. Once detached Page Pool can no longer be used to
160          allocate memory.
161          Page Pools wait for all the memory allocated from them to be freed
162          before truly disappearing. "Detached" Page Pools cannot be
163          "re-attached", they are just waiting to disappear.
164          Attribute is absent if Page Pool has not been detached, and
165          can still be used to allocate new memory.
166  -
167    name: page-pool-info
168    subset-of: page-pool
169    attributes:
170      -
171        name: id
172      -
173        name: ifindex
174  -
175    name: page-pool-stats
176    doc: |
177      Page pool statistics, see docs for struct page_pool_stats
178      for information about individual statistics.
179    attributes:
180      -
181        name: info
182        doc: Page pool identifying information.
183        type: nest
184        nested-attributes: page-pool-info
185      -
186        name: alloc-fast
187        type: uint
188        value: 8 # reserve some attr ids in case we need more metadata later
189      -
190        name: alloc-slow
191        type: uint
192      -
193        name: alloc-slow-high-order
194        type: uint
195      -
196        name: alloc-empty
197        type: uint
198      -
199        name: alloc-refill
200        type: uint
201      -
202        name: alloc-waive
203        type: uint
204      -
205        name: recycle-cached
206        type: uint
207      -
208        name: recycle-cache-full
209        type: uint
210      -
211        name: recycle-ring
212        type: uint
213      -
214        name: recycle-ring-full
215        type: uint
216      -
217        name: recycle-released-refcnt
218        type: uint
219
220  -
221    name: napi
222    attributes:
223      -
224        name: ifindex
225        doc: ifindex of the netdevice to which NAPI instance belongs.
226        type: u32
227        checks:
228          min: 1
229      -
230        name: id
231        doc: ID of the NAPI instance.
232        type: u32
233      -
234        name: irq
235        doc: The associated interrupt vector number for the napi
236        type: u32
237      -
238        name: pid
239        doc: PID of the napi thread, if NAPI is configured to operate in
240             threaded mode. If NAPI is not in threaded mode (i.e. uses normal
241             softirq context), the attribute will be absent.
242        type: u32
243  -
244    name: queue
245    attributes:
246      -
247        name: id
248        doc: Queue index; most queue types are indexed like a C array, with
249             indexes starting at 0 and ending at queue count - 1. Queue indexes
250             are scoped to an interface and queue type.
251        type: u32
252      -
253        name: ifindex
254        doc: ifindex of the netdevice to which the queue belongs.
255        type: u32
256        checks:
257          min: 1
258      -
259        name: type
260        doc: Queue type as rx, tx. Each queue type defines a separate ID space.
261        type: u32
262        enum: queue-type
263      -
264        name: napi-id
265        doc: ID of the NAPI instance which services this queue.
266        type: u32
267
268operations:
269  list:
270    -
271      name: dev-get
272      doc: Get / dump information about a netdev.
273      attribute-set: dev
274      do:
275        request:
276          attributes:
277            - ifindex
278        reply: &dev-all
279          attributes:
280            - ifindex
281            - xdp-features
282            - xdp-zc-max-segs
283            - xdp-rx-metadata-features
284            - xsk-features
285      dump:
286        reply: *dev-all
287    -
288      name: dev-add-ntf
289      doc: Notification about device appearing.
290      notify: dev-get
291      mcgrp: mgmt
292    -
293      name: dev-del-ntf
294      doc: Notification about device disappearing.
295      notify: dev-get
296      mcgrp: mgmt
297    -
298      name: dev-change-ntf
299      doc: Notification about device configuration being changed.
300      notify: dev-get
301      mcgrp: mgmt
302    -
303      name: page-pool-get
304      doc: |
305        Get / dump information about Page Pools.
306        (Only Page Pools associated with a net_device can be listed.)
307      attribute-set: page-pool
308      do:
309        request:
310          attributes:
311            - id
312        reply: &pp-reply
313          attributes:
314            - id
315            - ifindex
316            - napi-id
317            - inflight
318            - inflight-mem
319            - detach-time
320      dump:
321        reply: *pp-reply
322      config-cond: page-pool
323    -
324      name: page-pool-add-ntf
325      doc: Notification about page pool appearing.
326      notify: page-pool-get
327      mcgrp: page-pool
328      config-cond: page-pool
329    -
330      name: page-pool-del-ntf
331      doc: Notification about page pool disappearing.
332      notify: page-pool-get
333      mcgrp: page-pool
334      config-cond: page-pool
335    -
336      name: page-pool-change-ntf
337      doc: Notification about page pool configuration being changed.
338      notify: page-pool-get
339      mcgrp: page-pool
340      config-cond: page-pool
341    -
342      name: page-pool-stats-get
343      doc: Get page pool statistics.
344      attribute-set: page-pool-stats
345      do:
346        request:
347          attributes:
348            - info
349        reply: &pp-stats-reply
350          attributes:
351            - info
352            - alloc-fast
353            - alloc-slow
354            - alloc-slow-high-order
355            - alloc-empty
356            - alloc-refill
357            - alloc-waive
358            - recycle-cached
359            - recycle-cache-full
360            - recycle-ring
361            - recycle-ring-full
362            - recycle-released-refcnt
363      dump:
364        reply: *pp-stats-reply
365      config-cond: page-pool-stats
366    -
367      name: queue-get
368      doc: Get queue information from the kernel.
369           Only configured queues will be reported (as opposed to all available
370           hardware queues).
371      attribute-set: queue
372      do:
373        request:
374          attributes:
375            - ifindex
376            - type
377            - id
378        reply: &queue-get-op
379          attributes:
380            - id
381            - type
382            - napi-id
383            - ifindex
384      dump:
385        request:
386          attributes:
387            - ifindex
388        reply: *queue-get-op
389    -
390      name: napi-get
391      doc: Get information about NAPI instances configured on the system.
392      attribute-set: napi
393      do:
394        request:
395          attributes:
396            - id
397        reply: &napi-get-op
398          attributes:
399            - id
400            - ifindex
401            - irq
402            - pid
403      dump:
404        request:
405          attributes:
406            - ifindex
407        reply: *napi-get-op
408
409mcast-groups:
410  list:
411    -
412      name: mgmt
413    -
414      name: page-pool
415