mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-29 17:22:07 +00:00
tcp_metrics: add netlink protocol spec in YAML
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>
This commit is contained in:
parent
7c8110057b
commit
85674625e0
169
Documentation/netlink/specs/tcp_metrics.yaml
Normal file
169
Documentation/netlink/specs/tcp_metrics.yaml
Normal file
@ -0,0 +1,169 @@
|
||||
# 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
|
@ -27,6 +27,22 @@ enum tcp_metric_index {
|
||||
|
||||
#define TCP_METRIC_MAX (__TCP_METRIC_MAX - 1)
|
||||
|
||||
/* Re-define enum tcp_metric_index, again, using the values carried
|
||||
* as netlink attribute types.
|
||||
*/
|
||||
enum {
|
||||
TCP_METRICS_A_METRICS_RTT = 1,
|
||||
TCP_METRICS_A_METRICS_RTTVAR,
|
||||
TCP_METRICS_A_METRICS_SSTHRESH,
|
||||
TCP_METRICS_A_METRICS_CWND,
|
||||
TCP_METRICS_A_METRICS_REODERING,
|
||||
TCP_METRICS_A_METRICS_RTT_US,
|
||||
TCP_METRICS_A_METRICS_RTTVAR_US,
|
||||
|
||||
__TCP_METRICS_A_METRICS_MAX
|
||||
};
|
||||
#define TCP_METRICS_A_METRICS_MAX (__TCP_METRICS_A_METRICS_MAX - 1)
|
||||
|
||||
enum {
|
||||
TCP_METRICS_ATTR_UNSPEC,
|
||||
TCP_METRICS_ATTR_ADDR_IPV4, /* u32 */
|
||||
|
@ -26,3 +26,4 @@ CFLAGS_nfsd:=$(call get_hdr_inc,_LINUX_NFSD_NETLINK_H,nfsd_netlink.h)
|
||||
CFLAGS_ovs_datapath:=$(call get_hdr_inc,__LINUX_OPENVSWITCH_H,openvswitch.h)
|
||||
CFLAGS_ovs_flow:=$(call get_hdr_inc,__LINUX_OPENVSWITCH_H,openvswitch.h)
|
||||
CFLAGS_ovs_vport:=$(call get_hdr_inc,__LINUX_OPENVSWITCH_H,openvswitch.h)
|
||||
CFLAGS_tcp_metrics:=$(call get_hdr_inc,_LINUX_TCP_METRICS_H,tcp_metrics.h)
|
||||
|
Loading…
Reference in New Issue
Block a user