summaryrefslogtreecommitdiff
path: root/Documentation/netlink/specs/netdev.yaml
blob: 11a32373365ab0e2b70999bdd64a351a6e53560d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)

name: netdev

doc:
  netdev configuration over generic netlink.

definitions:
  -
    type: flags
    name: xdp-act
    render-max: true
    entries:
      -
        name: basic
        doc:
          XDP features set supported by all drivers
          (XDP_ABORTED, XDP_DROP, XDP_PASS, XDP_TX)
      -
        name: redirect
        doc:
          The netdev supports XDP_REDIRECT
      -
        name: ndo-xmit
        doc:
          This feature informs if netdev implements ndo_xdp_xmit callback.
      -
        name: xsk-zerocopy
        doc:
          This feature informs if netdev supports AF_XDP in zero copy mode.
      -
        name: hw-offload
        doc:
         This feature informs if netdev supports XDP hw offloading.
      -
        name: rx-sg
        doc:
          This feature informs if netdev implements non-linear XDP buffer
          support in the driver napi callback.
      -
        name: ndo-xmit-sg
        doc:
          This feature informs if netdev implements non-linear XDP buffer
          support in ndo_xdp_xmit callback.
  -
    type: flags
    name: xdp-rx-metadata
    entries:
      -
        name: timestamp
        doc:
          Device is capable of exposing receive HW timestamp via bpf_xdp_metadata_rx_timestamp().
      -
        name: hash
        doc:
          Device is capable of exposing receive packet hash via bpf_xdp_metadata_rx_hash().
      -
        name: vlan-tag
        doc:
          Device is capable of exposing receive packet VLAN tag via bpf_xdp_metadata_rx_vlan_tag().
  -
    type: flags
    name: xsk-flags
    entries:
      -
        name: tx-timestamp
        doc:
          HW timestamping egress packets is supported by the driver.
      -
        name: tx-checksum
        doc:
          L3 checksum HW offload is supported by the driver.
  -
    name: queue-type
    type: enum
    entries: [ rx, tx ]
  -
    name: qstats-scope
    type: flags
    entries: [ queue ]

attribute-sets:
  -
    name: dev
    attributes:
      -
        name: ifindex
        doc: netdev ifindex
        type: u32
        checks:
          min: 1
      -
        name: pad
        type: pad
      -
        name: xdp-features
        doc: Bitmask of enabled xdp-features.
        type: u64
        enum: xdp-act
      -
        name: xdp-zc-max-segs
        doc: max fragment count supported by ZC driver
        type: u32
        checks:
          min: 1
      -
        name: xdp-rx-metadata-features
        doc: Bitmask of supported XDP receive metadata features.
             See Documentation/networking/xdp-rx-metadata.rst for more details.
        type: u64
        enum: xdp-rx-metadata
      -
        name: xsk-features
        doc: Bitmask of enabled AF_XDP features.
        type: u64
        enum: xsk-flags
  -
    name: page-pool
    attributes:
      -
        name: id
        doc: Unique ID of a Page Pool instance.
        type: uint
        checks:
          min: 1
          max: u32-max
      -
        name: ifindex
        doc: |
          ifindex of the netdev to which the pool belongs.
          May be reported as 0 if the page pool was allocated for a netdev
          which got destroyed already (page pools may outlast their netdevs
          because they wait for all memory to be returned).
        type: u32
        checks:
          min: 1
          max: s32-max
      -
        name: napi-id
        doc: Id of NAPI using this Page Pool instance.
        type: uint
        checks:
          min: 1
          max: u32-max
      -
        name: inflight
        type: uint
        doc: |
          Number of outstanding references to this page pool (allocated
          but yet to be freed pages). Allocated pages may be held in
          socket receive queues, driver receive ring, page pool recycling
          ring, the page pool cache, etc.
      -
        name: inflight-mem
        type: uint
        doc: |
          Amount of memory held by inflight pages.
      -
        name: detach-time
        type: uint
        doc: |
          Seconds in CLOCK_BOOTTIME of when Page Pool was detached by
          the driver. Once detached Page Pool can no longer be used to
          allocate memory.
          Page Pools wait for all the memory allocated from them to be freed
          before truly disappearing. "Detached" Page Pools cannot be
          "re-attached", they are just waiting to disappear.
          Attribute is absent if Page Pool has not been detached, and
          can still be used to allocate new memory.
  -
    name: page-pool-info
    subset-of: page-pool
    attributes:
      -
        name: id
      -
        name: ifindex
  -
    name: page-pool-stats
    doc: |
      Page pool statistics, see docs for struct page_pool_stats
      for information about individual statistics.
    attributes:
      -
        name: info
        doc: Page pool identifying information.
        type: nest
        nested-attributes: page-pool-info
      -
        name: alloc-fast
        type: uint
        value: 8 # reserve some attr ids in case we need more metadata later
      -
        name: alloc-slow
        type: uint
      -
        name: alloc-slow-high-order
        type: uint
      -
        name: alloc-empty
        type: uint
      -
        name: alloc-refill
        type: uint
      -
        name: alloc-waive
        type: uint
      -
        name: recycle-cached
        type: uint
      -
        name: recycle-cache-full
        type: uint
      -
        name: recycle-ring
        type: uint
      -
        name: recycle-ring-full
        type: uint
      -
        name: recycle-released-refcnt
        type: uint

  -
    name: napi
    attributes:
      -
        name: ifindex
        doc: ifindex of the netdevice to which NAPI instance belongs.
        type: u32
        checks:
          min: 1
      -
        name: id
        doc: ID of the NAPI instance.
        type: u32
      -
        name: irq
        doc: The associated interrupt vector number for the napi
        type: u32
      -
        name: pid
        doc: PID of the napi thread, if NAPI is configured to operate in
             threaded mode. If NAPI is not in threaded mode (i.e. uses normal
             softirq context), the attribute will be absent.
        type: u32
  -
    name: queue
    attributes:
      -
        name: id
        doc: Queue index; most queue types are indexed like a C array, with
             indexes starting at 0 and ending at queue count - 1. Queue indexes
             are scoped to an interface and queue type.
        type: u32
      -
        name: ifindex
        doc: ifindex of the netdevice to which the queue belongs.
        type: u32
        checks:
          min: 1
      -
        name: type
        doc: Queue type as rx, tx. Each queue type defines a separate ID space.
        type: u32
        enum: queue-type
      -
        name: napi-id
        doc: ID of the NAPI instance which services this queue.
        type: u32

  -
    name: qstats
    doc: |
      Get device statistics, scoped to a device or a queue.
      These statistics extend (and partially duplicate) statistics available
      in struct rtnl_link_stats64.
      Value of the `scope` attribute determines how statistics are
      aggregated. When aggregated for the entire device the statistics
      represent the total number of events since last explicit reset of
      the device (i.e. not a reconfiguration like changing queue count).
      When reported per-queue, however, the statistics may not add
      up to the total number of events, will only be reported for currently
      active objects, and will likely report the number of events since last
      reconfiguration.
    attributes:
      -
        name: ifindex
        doc: ifindex of the netdevice to which stats belong.
        type: u32
        checks:
          min: 1
      -
        name: queue-type
        doc: Queue type as rx, tx, for queue-id.
        type: u32
        enum: queue-type
      -
        name: queue-id
        doc: Queue ID, if stats are scoped to a single queue instance.
        type: u32
      -
        name: scope
        doc: |
          What object type should be used to iterate over the stats.
        type: uint
        enum: qstats-scope
      -
        name: rx-packets
        doc: |
          Number of wire packets successfully received and passed to the stack.
          For drivers supporting XDP, XDP is considered the first layer
          of the stack, so packets consumed by XDP are still counted here.
        type: uint
        value: 8 # reserve some attr ids in case we need more metadata later
      -
        name: rx-bytes
        doc: Successfully received bytes, see `rx-packets`.
        type: uint
      -
        name: tx-packets
        doc: |
          Number of wire packets successfully sent. Packet is considered to be
          successfully sent once it is in device memory (usually this means
          the device has issued a DMA completion for the packet).
        type: uint
      -
        name: tx-bytes
        doc: Successfully sent bytes, see `tx-packets`.
        type: uint
      -
        name: rx-alloc-fail
        doc: |
          Number of times skb or buffer allocation failed on the Rx datapath.
          Allocation failure may, or may not result in a packet drop, depending
          on driver implementation and whether system recovers quickly.
        type: uint
      -
        name: rx-hw-drops
        doc: |
          Number of all packets which entered the device, but never left it,
          including but not limited to: packets dropped due to lack of buffer
          space, processing errors, explicit or implicit policies and packet
          filters.
        type: uint
      -
        name: rx-hw-drop-overruns
        doc: |
          Number of packets dropped due to transient lack of resources, such as
          buffer space, host descriptors etc.
        type: uint
      -
        name: rx-csum-unnecessary
        doc: Number of packets that were marked as CHECKSUM_UNNECESSARY.
        type: uint
      -
        name: rx-csum-none
        doc: Number of packets that were not checksummed by device.
        type: uint
      -
        name: rx-csum-bad
        doc: |
          Number of packets with bad checksum. The packets are not discarded,
          but still delivered to the stack.
        type: uint
      -
        name: rx-hw-gro-packets
        doc: |
          Number of packets that were coalesced from smaller packets by the device.
          Counts only packets coalesced with the HW-GRO netdevice feature,
          LRO-coalesced packets are not counted.
        type: uint
      -
        name: rx-hw-gro-bytes
        doc: See `rx-hw-gro-packets`.
        type: uint
      -
        name: rx-hw-gro-wire-packets
        doc: |
          Number of packets that were coalesced to bigger packetss with the HW-GRO
          netdevice feature. LRO-coalesced packets are not counted.
        type: uint
      -
        name: rx-hw-gro-wire-bytes
        doc: See `rx-hw-gro-wire-packets`.
        type: uint
      -
        name: rx-hw-drop-ratelimits
        doc: |
          Number of the packets dropped by the device due to the received
          packets bitrate exceeding the device rate limit.
        type: uint
      -
        name: tx-hw-drops
        doc: |
          Number of packets that arrived at the device but never left it,
          encompassing packets dropped for reasons such as processing errors, as
          well as those affected by explicitly defined policies and packet
          filtering criteria.
        type: uint
      -
        name: tx-hw-drop-errors
        doc: Number of packets dropped because they were invalid or malformed.
        type: uint
      -
        name: tx-csum-none
        doc: |
          Number of packets that did not require the device to calculate the
          checksum.
        type: uint
      -
        name: tx-needs-csum
        doc: |
          Number of packets that required the device to calculate the checksum.
        type: uint
      -
        name: tx-hw-gso-packets
        doc: |
          Number of packets that necessitated segmentation into smaller packets
          by the device.
        type: uint
      -
        name: tx-hw-gso-bytes
        doc: See `tx-hw-gso-packets`.
        type: uint
      -
        name: tx-hw-gso-wire-packets
        doc: |
          Number of wire-sized packets generated by processing
          `tx-hw-gso-packets`
        type: uint
      -
        name: tx-hw-gso-wire-bytes
        doc: See `tx-hw-gso-wire-packets`.
        type: uint
      -
        name: tx-hw-drop-ratelimits
        doc: |
          Number of the packets dropped by the device due to the transmit
          packets bitrate exceeding the device rate limit.
        type: uint
      -
        name: tx-stop
        doc: |
          Number of times driver paused accepting new tx packets
          from the stack to this queue, because the queue was full.
          Note that if BQL is supported and enabled on the device
          the networking stack will avoid queuing a lot of data at once.
        type: uint
      -
        name: tx-wake
        doc: |
          Number of times driver re-started accepting send
          requests to this queue from the stack.
        type: uint

operations:
  list:
    -
      name: dev-get
      doc: Get / dump information about a netdev.
      attribute-set: dev
      do:
        request:
          attributes:
            - ifindex
        reply: &dev-all
          attributes:
            - ifindex
            - xdp-features
            - xdp-zc-max-segs
            - xdp-rx-metadata-features
            - xsk-features
      dump:
        reply: *dev-all
    -
      name: dev-add-ntf
      doc: Notification about device appearing.
      notify: dev-get
      mcgrp: mgmt
    -
      name: dev-del-ntf
      doc: Notification about device disappearing.
      notify: dev-get
      mcgrp: mgmt
    -
      name: dev-change-ntf
      doc: Notification about device configuration being changed.
      notify: dev-get
      mcgrp: mgmt
    -
      name: page-pool-get
      doc: |
        Get / dump information about Page Pools.
        (Only Page Pools associated with a net_device can be listed.)
      attribute-set: page-pool
      do:
        request:
          attributes:
            - id
        reply: &pp-reply
          attributes:
            - id
            - ifindex
            - napi-id
            - inflight
            - inflight-mem
            - detach-time
      dump:
        reply: *pp-reply
      config-cond: page-pool
    -
      name: page-pool-add-ntf
      doc: Notification about page pool appearing.
      notify: page-pool-get
      mcgrp: page-pool
      config-cond: page-pool
    -
      name: page-pool-del-ntf
      doc: Notification about page pool disappearing.
      notify: page-pool-get
      mcgrp: page-pool
      config-cond: page-pool
    -
      name: page-pool-change-ntf
      doc: Notification about page pool configuration being changed.
      notify: page-pool-get
      mcgrp: page-pool
      config-cond: page-pool
    -
      name: page-pool-stats-get
      doc: Get page pool statistics.
      attribute-set: page-pool-stats
      do:
        request:
          attributes:
            - info
        reply: &pp-stats-reply
          attributes:
            - info
            - alloc-fast
            - alloc-slow
            - alloc-slow-high-order
            - alloc-empty
            - alloc-refill
            - alloc-waive
            - recycle-cached
            - recycle-cache-full
            - recycle-ring
            - recycle-ring-full
            - recycle-released-refcnt
      dump:
        reply: *pp-stats-reply
      config-cond: page-pool-stats
    -
      name: queue-get
      doc: Get queue information from the kernel.
           Only configured queues will be reported (as opposed to all available
           hardware queues).
      attribute-set: queue
      do:
        request:
          attributes:
            - ifindex
            - type
            - id
        reply: &queue-get-op
          attributes:
            - id
            - type
            - napi-id
            - ifindex
      dump:
        request:
          attributes:
            - ifindex
        reply: *queue-get-op
    -
      name: napi-get
      doc: Get information about NAPI instances configured on the system.
      attribute-set: napi
      do:
        request:
          attributes:
            - id
        reply: &napi-get-op
          attributes:
            - id
            - ifindex
            - irq
            - pid
      dump:
        request:
          attributes:
            - ifindex
        reply: *napi-get-op
    -
      name: qstats-get
      doc: |
        Get / dump fine grained statistics. Which statistics are reported
        depends on the device and the driver, and whether the driver stores
        software counters per-queue.
      attribute-set: qstats
      dump:
        request:
          attributes:
            - ifindex
            - scope
        reply:
          attributes:
            - ifindex
            - queue-type
            - queue-id
            - rx-packets
            - rx-bytes
            - tx-packets
            - tx-bytes

mcast-groups:
  list:
    -
      name: mgmt
    -
      name: page-pool