mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-06 13:23:18 +00:00
85674625e0
Add a protocol spec for tcp_metrics, so that it's accessible via YNL. Useful at the very least for testing fixes. In this episode of "10,000 ways to complicate netlink" the metric nest has defines which are off by 1. iproute2 does: struct rtattr *m[TCP_METRIC_MAX + 1 + 1]; parse_rtattr_nested(m, TCP_METRIC_MAX + 1, a); for (i = 0; i < TCP_METRIC_MAX + 1; i++) { // ... attr = m[i + 1]; This is too weird to support in YNL, add a new set of defines with _correct_ values to the official kernel header. Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Donald Hunter <donald.hunter@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
170 lines
3.6 KiB
YAML
170 lines
3.6 KiB
YAML
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
|
|
|
name: tcp_metrics
|
|
|
|
protocol: genetlink-legacy
|
|
|
|
doc: |
|
|
Management interface for TCP metrics.
|
|
|
|
c-family-name: tcp-metrics-genl-name
|
|
c-version-name: tcp-metrics-genl-version
|
|
max-by-define: true
|
|
kernel-policy: global
|
|
|
|
definitions:
|
|
-
|
|
name: tcp-fastopen-cookie-max
|
|
type: const
|
|
value: 16
|
|
|
|
attribute-sets:
|
|
-
|
|
name: tcp-metrics
|
|
name-prefix: tcp-metrics-attr-
|
|
attributes:
|
|
-
|
|
name: addr-ipv4
|
|
type: u32
|
|
byte-order: big-endian
|
|
display-hint: ipv4
|
|
-
|
|
name: addr-ipv6
|
|
type: binary
|
|
checks:
|
|
min-len: 16
|
|
byte-order: big-endian
|
|
display-hint: ipv6
|
|
-
|
|
name: age
|
|
type: u64
|
|
-
|
|
name: tw-tsval
|
|
type: u32
|
|
doc: unused
|
|
-
|
|
name: tw-ts-stamp
|
|
type: s32
|
|
doc: unused
|
|
-
|
|
name: vals
|
|
type: nest
|
|
nested-attributes: metrics
|
|
-
|
|
name: fopen-mss
|
|
type: u16
|
|
-
|
|
name: fopen-syn-drops
|
|
type: u16
|
|
-
|
|
name: fopen-syn-drop-ts
|
|
type: u64
|
|
-
|
|
name: fopen-cookie
|
|
type: binary
|
|
checks:
|
|
min-len: tcp-fastopen-cookie-max
|
|
-
|
|
name: saddr-ipv4
|
|
type: u32
|
|
byte-order: big-endian
|
|
display-hint: ipv4
|
|
-
|
|
name: saddr-ipv6
|
|
type: binary
|
|
checks:
|
|
min-len: 16
|
|
byte-order: big-endian
|
|
display-hint: ipv6
|
|
-
|
|
name: pad
|
|
type: pad
|
|
|
|
-
|
|
name: metrics
|
|
# Intentionally don't define the name-prefix, see below.
|
|
doc: |
|
|
Attributes with metrics. Note that the values here do not match
|
|
the TCP_METRIC_* defines in the kernel, because kernel defines
|
|
are off-by one (e.g. rtt is defined as enum 0, while netlink carries
|
|
attribute type 1).
|
|
attributes:
|
|
-
|
|
name: rtt
|
|
type: u32
|
|
doc: |
|
|
Round Trip Time (RTT), in msecs with 3 bits fractional
|
|
(left-shift by 3 to get the msec value).
|
|
-
|
|
name: rttvar
|
|
type: u32
|
|
doc: |
|
|
Round Trip Time VARiance (RTT), in msecs with 2 bits fractional
|
|
(left-shift by 2 to get the msec value).
|
|
-
|
|
name: ssthresh
|
|
type: u32
|
|
doc: Slow Start THRESHold.
|
|
-
|
|
name: cwnd
|
|
type: u32
|
|
doc: Congestion Window.
|
|
-
|
|
name: reodering
|
|
type: u32
|
|
doc: Reodering metric.
|
|
-
|
|
name: rtt-us
|
|
type: u32
|
|
doc: |
|
|
Round Trip Time (RTT), in usecs, with 3 bits fractional
|
|
(left-shift by 3 to get the msec value).
|
|
-
|
|
name: rttvar-us
|
|
type: u32
|
|
doc: |
|
|
Round Trip Time (RTT), in usecs, with 2 bits fractional
|
|
(left-shift by 3 to get the msec value).
|
|
|
|
operations:
|
|
list:
|
|
-
|
|
name: get
|
|
doc: Retrieve metrics.
|
|
attribute-set: tcp-metrics
|
|
|
|
dont-validate: [ strict, dump ]
|
|
|
|
do:
|
|
request: &sel_attrs
|
|
attributes:
|
|
- addr-ipv4
|
|
- addr-ipv6
|
|
- saddr-ipv4
|
|
- saddr-ipv6
|
|
reply: &all_attrs
|
|
attributes:
|
|
- addr-ipv4
|
|
- addr-ipv6
|
|
- saddr-ipv4
|
|
- saddr-ipv6
|
|
- age
|
|
- vals
|
|
- fopen-mss
|
|
- fopen-syn-drops
|
|
- fopen-syn-drop-ts
|
|
- fopen-cookie
|
|
dump:
|
|
reply: *all_attrs
|
|
|
|
-
|
|
name: del
|
|
doc: Delete metrics.
|
|
attribute-set: tcp-metrics
|
|
|
|
dont-validate: [ strict, dump ]
|
|
flags: [ admin-perm ]
|
|
|
|
do:
|
|
request: *sel_attrs
|