Commit a051091c authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'tcp_metrics-netlink-specs' into main

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/20240626201133.2572487-1-kuba@kernel.org


====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 17784801 85674625
Loading
Loading
Loading
Loading
+169 −0
Original line number Diff line number Diff line
# 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
+19 −3
Original line number Diff line number Diff line
/* 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>

@@ -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 */
@@ -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 −0
Original line number Diff line number Diff line
@@ -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)