Skip to content

Commit

Permalink
Merge branch 'tcp_metrics-netlink-specs' into main
Browse files Browse the repository at this point in the history
Jakub Kicinski says:

====================
tcp_metrics: add netlink protocol spec in YAML

Add a netlink protocol spec for the tcp_metrics generic netlink family.
First patch adjusts the uAPI header guards to make it easier to build
tools/ with non-system headers.

v1: https://lore.kernel.org/all/[email protected]
====================

Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
davem330 committed Jul 1, 2024
2 parents 1778480 + 8567462 commit a051091
Show file tree
Hide file tree
Showing 3 changed files with 189 additions and 3 deletions.
169 changes: 169 additions & 0 deletions Documentation/netlink/specs/tcp_metrics.yaml
Original file line number Diff line number Diff line change
@@ -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
22 changes: 19 additions & 3 deletions include/uapi/linux/tcp_metrics.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/* tcp_metrics.h - TCP Metrics Interface */

#ifndef _LINUX_TCP_METRICS_H
#define _LINUX_TCP_METRICS_H
#ifndef _UAPI_LINUX_TCP_METRICS_H
#define _UAPI_LINUX_TCP_METRICS_H

#include <linux/types.h>

Expand All @@ -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 */
Expand Down Expand Up @@ -58,4 +74,4 @@ enum {

#define TCP_METRICS_CMD_MAX (__TCP_METRICS_CMD_MAX - 1)

#endif /* _LINUX_TCP_METRICS_H */
#endif /* _UAPI_LINUX_TCP_METRICS_H */
1 change: 1 addition & 0 deletions tools/net/ynl/Makefile.deps
Original file line number Diff line number Diff line change
Expand Up @@ -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)

0 comments on commit a051091

Please sign in to comment.