Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Documentation: net: add flow control guide and document ethtool API

Introduce a new document, flow_control.rst, to provide a comprehensive
guide on Ethernet Flow Control in Linux. The guide explains how flow
control works, how autonegotiation resolves pause capabilities, and how
to configure it using ethtool and Netlink.

In parallel, document the pause and pause-stat attributes in the
ethtool.yaml netlink spec. This enables the ynl tool to generate
kernel-doc comments for the corresponding enums in the UAPI header,
making the C interface self-documenting.

Finally, replace the legacy flow control section in phy.rst with a
reference to the new document and add pointers in the relevant C source
files.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://patch.msgid.link/20250924120241.724850-1-o.rempel@pengutronix.de
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

Oleksij Rempel and committed by
Paolo Abeni
7bd80ed8 c5cb31c9

+453 -15
+27
Documentation/netlink/specs/ethtool.yaml
··· 864 864 865 865 - 866 866 name: pause-stat 867 + doc: Statistics counters for link-wide PAUSE frames (IEEE 802.3 Annex 31B). 867 868 attr-cnt-name: __ethtool-a-pause-stat-cnt 869 + enum-name: ethtool-a-pause-stat 868 870 attributes: 869 871 - 870 872 name: unspec ··· 877 875 type: pad 878 876 - 879 877 name: tx-frames 878 + doc: Number of PAUSE frames transmitted. 880 879 type: u64 881 880 - 882 881 name: rx-frames 882 + doc: Number of PAUSE frames received. 883 883 type: u64 884 884 - 885 885 name: pause 886 + doc: Parameters for link-wide PAUSE (IEEE 802.3 Annex 31B). 886 887 attr-cnt-name: __ethtool-a-pause-cnt 888 + enum-name: ethtool-a-pause 887 889 attributes: 888 890 - 889 891 name: unspec ··· 899 893 nested-attributes: header 900 894 - 901 895 name: autoneg 896 + doc: | 897 + Acts as a mode selector for the driver. 898 + On GET: indicates the driver's behavior. If true, the driver will 899 + respect the negotiated outcome; if false, the driver will use a 900 + forced configuration. 901 + On SET: if true, the driver configures the PHY's advertisement based 902 + on the rx and tx attributes. If false, the driver forces the MAC 903 + into the state defined by the rx and tx attributes. 902 904 type: u8 903 905 - 904 906 name: rx 907 + doc: | 908 + Enable receiving PAUSE frames (pausing local TX). 909 + On GET: reflects the currently preferred configuration state. 905 910 type: u8 906 911 - 907 912 name: tx 913 + doc: | 914 + Enable transmitting PAUSE frames (pausing peer TX). 915 + On GET: reflects the currently preferred configuration state. 908 916 type: u8 909 917 - 910 918 name: stats 919 + doc: | 920 + Contains the pause statistics counters. The source of these 921 + statistics is determined by stats-src. 911 922 type: nest 912 923 nested-attributes: pause-stat 913 924 - 914 925 name: stats-src 926 + doc: | 927 + Selects the source of the MAC statistics, values from 928 + enum ethtool_mac_stats_src. This allows requesting statistics 929 + from the individual components of the MAC Merge layer. 915 930 type: u32 916 931 - 917 932 name: eee
+373
Documentation/networking/flow_control.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + 3 + .. _ethernet-flow-control: 4 + 5 + ===================== 6 + Ethernet Flow Control 7 + ===================== 8 + 9 + This document is a practical guide to Ethernet Flow Control in Linux, covering 10 + what it is, how it works, and how to configure it. 11 + 12 + What is Flow Control? 13 + ===================== 14 + 15 + Flow control is a mechanism to prevent a fast sender from overwhelming a 16 + slow receiver with data, which would cause buffer overruns and dropped packets. 17 + The receiver can signal the sender to temporarily stop transmitting, giving it 18 + time to process its backlog. 19 + 20 + Standards references 21 + ==================== 22 + 23 + Ethernet flow control mechanisms are specified across consolidated IEEE base 24 + standards; some originated as amendments: 25 + 26 + - Collision-based flow control is part of CSMA/CD in **IEEE 802.3** 27 + (half-duplex). 28 + - Link-wide PAUSE is defined in **IEEE 802.3 Annex 31B** 29 + (originally **802.3x**). 30 + - Priority-based Flow Control (PFC) is defined in **IEEE 802.1Q Clause 36** 31 + (originally **802.1Qbb**). 32 + 33 + In the remainder of this document, the consolidated clause numbers are used. 34 + 35 + How It Works: The Mechanisms 36 + ============================ 37 + 38 + The method used for flow control depends on the link's duplex mode. 39 + 40 + .. note:: 41 + The user-visible ``ethtool`` pause API described in this document controls 42 + **link-wide PAUSE** (IEEE 802.3 Annex 31B) only. It does not control the 43 + collision-based behavior that exists on half-duplex links. 44 + 45 + 1. Half-Duplex: Collision-Based Flow Control 46 + -------------------------------------------- 47 + On half-duplex links, a device cannot send and receive simultaneously, so PAUSE 48 + frames are not used. Flow control is achieved by leveraging the CSMA/CD 49 + (Carrier Sense Multiple Access with Collision Detection) protocol itself. 50 + 51 + * **How it works**: To inhibit incoming data, a receiving device can force a 52 + collision on the line. When the sending station detects this collision, it 53 + terminates its transmission, sends a "jam" signal, and then executes the 54 + "Collision backoff and retransmission" procedure as defined in IEEE 802.3, 55 + Section 4.2.3.2.5. This algorithm makes the sender wait for a random 56 + period before attempting to retransmit. By repeatedly forcing collisions, 57 + the receiver can effectively throttle the sender's transmission rate. 58 + 59 + .. note:: 60 + While this mechanism is part of the IEEE standard, there is currently no 61 + generic kernel API to configure or control it. Drivers should not enable 62 + this feature until a standardized interface is available. 63 + 64 + .. warning:: 65 + On shared-medium networks (e.g. 10BASE2, or twisted-pair networks using a 66 + hub rather than a switch) forcing collisions inhibits traffic **across the 67 + entire shared segment**, not just a single point-to-point link. Enabling 68 + such behavior is generally undesirable. 69 + 70 + 2. Full-Duplex: Link-wide PAUSE (IEEE 802.3 Annex 31B) 71 + ------------------------------------------------------ 72 + On full-duplex links, devices can send and receive at the same time. Flow 73 + control is achieved by sending a special **PAUSE frame**, defined by IEEE 74 + 802.3 Annex 31B. This mechanism pauses all traffic on the link and is therefore 75 + called *link-wide PAUSE*. 76 + 77 + * **What it is**: A standard Ethernet frame with a globally reserved 78 + destination MAC address (``01-80-C2-00-00-01``). This address is in a range 79 + that standard IEEE 802.1D-compliant bridges do not forward. However, some 80 + unmanaged or misconfigured bridges have been reported to forward these 81 + frames, which can disrupt flow control across a network. 82 + 83 + * **How it works**: The frame contains a MAC Control opcode for PAUSE 84 + (``0x0001``) and a ``pause_time`` value, telling the sender how long to 85 + wait before sending more data frames. This time is specified in units of 86 + "pause quantum", where one quantum is the time it takes to transmit 512 bits. 87 + For example, one pause quantum is 51.2 microseconds on a 10 Mbit/s link, 88 + and 512 nanoseconds on a 1 Gbit/s link. A ``pause_time`` of zero indicates 89 + that the transmitter can resume transmission, even if a previous non-zero 90 + pause time has not yet elapsed. 91 + 92 + * **Who uses it**: Any full-duplex link, from 10 Mbit/s to multi-gigabit speeds. 93 + 94 + 3. Full-Duplex: Priority-based Flow Control (PFC) (IEEE 802.1Q Clause 36) 95 + ------------------------------------------------------------------------- 96 + Priority-based Flow Control is an enhancement to the standard PAUSE mechanism 97 + that allows flow control to be applied independently to different classes of 98 + traffic, identified by their priority level. 99 + 100 + * **What it is**: PFC allows a receiver to pause traffic for one or more of the 101 + 8 standard priority levels without stopping traffic for other priorities. 102 + This is critical in data center environments for protocols that cannot 103 + tolerate packet loss due to congestion (e.g., Fibre Channel over Ethernet 104 + or RoCE). 105 + 106 + * **How it works**: PFC uses a specific PAUSE frame format. It shares the same 107 + globally reserved destination MAC address (``01-80-C2-00-00-01``) as legacy 108 + PAUSE frames but uses a unique opcode (``0x0101``). The frame payload 109 + contains two key fields: 110 + 111 + - **``priority_enable_vector``**: An 8-bit mask where each bit corresponds to 112 + one of the 8 priorities. If a bit is set to 1, it means the pause time 113 + for that priority is active. 114 + - **``time_vector``**: A list of eight 2-octet fields, one for each priority. 115 + Each field specifies the ``pause_time`` for its corresponding priority, 116 + measured in units of ``pause_quanta`` (the time to transmit 512 bits). 117 + 118 + .. note:: 119 + When PFC is enabled for at least one priority on a port, the standard 120 + **link-wide PAUSE** (IEEE 802.3 Annex 31B) must be disabled for that port. 121 + The two mechanisms are mutually exclusive (IEEE 802.1Q Clause 36). 122 + 123 + Configuring Flow Control 124 + ======================== 125 + 126 + Link-wide PAUSE and Priority-based Flow Control are configured with different 127 + tools. 128 + 129 + Configuring Link-wide PAUSE with ``ethtool`` (IEEE 802.3 Annex 31B) 130 + ------------------------------------------------------------------- 131 + Use ``ethtool -a <interface>`` to view and ``ethtool -A <interface>`` to change 132 + the link-wide PAUSE settings. 133 + 134 + .. code-block:: bash 135 + 136 + # View current link-wide PAUSE settings 137 + ethtool -a eth0 138 + 139 + # Enable RX and TX pause, with autonegotiation 140 + ethtool -A eth0 autoneg on rx on tx on 141 + 142 + **Key Configuration Concepts**: 143 + 144 + * **Pause Autoneg vs Generic Autoneg**: ``ethtool -A ... autoneg {on,off}`` 145 + controls **Pause Autoneg** (Annex 31B) only. It is independent from the 146 + **Generic link autonegotiation** configured with ``ethtool -s``. A device can 147 + have Generic autoneg **on** while Pause Autoneg is **off**, and vice versa. 148 + 149 + * **If Pause Autoneg is off** (``-A ... autoneg off``): the device will **not** 150 + advertise pause in the PHY. The MAC PAUSE state is **forced** according to 151 + ``rx``/``tx`` and does not depend on partner capabilities or resolution. 152 + Ensure the peer is configured complementarily for PAUSE to be effective. 153 + 154 + * **If generic autoneg is off** but **Pause Autoneg is on**, the pause policy 155 + is **remembered** by the kernel and applied later when Generic autoneg is 156 + enabled again. 157 + 158 + * **Autonegotiation Mode**: The PHY will *advertise* the ``rx`` and ``tx`` 159 + capabilities. The final active state is determined by what both sides of the 160 + link agree on. See the "PHY (Physical Layer Transceiver)" section below, 161 + especially the *Resolution* subsection, for details of the negotiation rules. 162 + 163 + * **Forced Mode**: This mode is necessary when autonegotiation is not used or 164 + not possible. This includes links where one or both partners have 165 + autonegotiation disabled, or in setups without a PHY (e.g., direct 166 + MAC-to-MAC connections). The driver bypasses PHY advertisement and 167 + directly forces the MAC into the specified ``rx``/``tx`` state. The 168 + configuration on both sides of the link must be complementary. For 169 + example, if one side is set to ``tx on`` ``rx off``, the link partner must be 170 + set to ``tx off`` ``rx on`` for flow control to function correctly. 171 + 172 + Configuring PFC with ``dcb`` (IEEE 802.1Q Clause 36) 173 + ---------------------------------------------------- 174 + PFC is part of the Data Center Bridging (DCB) subsystem and is managed with the 175 + ``dcb`` tool (iproute2). Some deployments use ``dcbtool`` (lldpad) instead; this 176 + document shows ``dcb(8)`` examples. 177 + 178 + **Viewing PFC Settings**: 179 + 180 + .. code-block:: text 181 + 182 + $ dcb pfc show dev eth0 183 + pfc-cap 8 macsec-bypass off delay 4096 184 + prio-pfc 0:off 1:off 2:off 3:off 4:off 5:off 6:on 7:on 185 + 186 + This shows the PFC state (on/off) for each priority (0-7). 187 + 188 + **Changing PFC Settings**: 189 + 190 + .. code-block:: bash 191 + 192 + # Enable PFC on priorities 6 and 7, leaving others as they are 193 + $ dcb pfc set dev eth0 prio-pfc 6:on 7:on 194 + 195 + # Disable PFC for all priorities except 6 and 7 196 + $ dcb pfc set dev eth0 prio-pfc all:off 6:on 7:on 197 + 198 + Monitoring Flow Control 199 + ======================= 200 + 201 + The standard way to check if flow control is actively being used is to view the 202 + pause-related statistics. 203 + 204 + **Monitoring Link-wide PAUSE**: 205 + Use ``ethtool --include-statistics -a <interface>``. 206 + 207 + .. code-block:: text 208 + 209 + $ ethtool --include-statistics -a eth0 210 + Pause parameters for eth0: 211 + ... 212 + Statistics: 213 + tx_pause_frames: 0 214 + rx_pause_frames: 0 215 + 216 + **Monitoring PFC**: 217 + PFC statistics (sent and received frames per priority) are available 218 + through the ``dcb`` tool. 219 + 220 + .. code-block:: text 221 + 222 + $ dcb pfc show dev eth0 requests indications 223 + requests 0:0 1:0 2:0 3:1024 4:2048 5:0 6:0 7:0 224 + indications 0:0 1:0 2:0 3:512 4:4096 5:0 6:0 7:0 225 + 226 + The ``requests`` counters track transmitted PFC frames (TX), and the 227 + ``indications`` counters track received PFC frames (RX). 228 + 229 + Link-wide PAUSE Autonegotiation Details 230 + ======================================= 231 + 232 + The autonegotiation process for link-wide PAUSE is managed by the PHY and 233 + involves advertising capabilities and resolving the outcome. 234 + 235 + * Terminology (link-wide PAUSE): 236 + 237 + - **Symmetric pause**: both directions are paused when requested (TX+RX 238 + enabled). 239 + - **Asymmetric pause**: only one direction is paused (e.g., RX-only or 240 + TX-only). 241 + 242 + In IEEE 802.3 advertisement/resolution, symmetric/asymmetric are encoded 243 + using two bits (Pause/Asym) and resolved per the standard truth tables 244 + below. 245 + 246 + * **Advertisement**: The PHY advertises the MAC's flow control capabilities. 247 + This is done using two bits in the advertisement register: "Symmetric 248 + Pause" (Pause) and "Asymmetric Pause" (Asym). These bits should be 249 + interpreted as a combined value, not as independent flags. The kernel 250 + converts the user's ``rx`` and ``tx`` settings into this two-bit value as 251 + follows: 252 + 253 + .. code-block:: text 254 + 255 + tx rx | Pause Asym 256 + -------+------------- 257 + 0 0 | 0 0 258 + 0 1 | 1 1 259 + 1 0 | 0 1 260 + 1 1 | 1 0 261 + 262 + * **Resolution**: After negotiation, the PHY reports the link partner's 263 + advertised Pause and Asym bits. The final flow control mode is determined 264 + by the combination of the local and partner advertisements, according to 265 + the IEEE 802.3 standard: 266 + 267 + .. code-block:: text 268 + 269 + Local Device | Link Partner | Result 270 + Pause Asym | Pause Asym | 271 + -------------------+--------------------+--------- 272 + 0 X | 0 X | Disabled 273 + 0 1 | 1 0 | Disabled 274 + 0 1 | 1 1 | TX only 275 + 1 0 | 0 X | Disabled 276 + 1 X | 1 X | TX + RX 277 + 1 1 | 0 1 | RX only 278 + 279 + It is important to note that the advertised bits reflect the *current 280 + configuration* of the MAC, which may not represent its full hardware 281 + capabilities. 282 + 283 + Kernel Policy: "Set and Trust" 284 + ============================== 285 + 286 + The ethtool pause API is defined as a **wish policy** for 287 + IEEE 802.3 link-wide PAUSE only. A user request is always accepted 288 + as the preferred configuration, but it may not be possible to apply 289 + it in all link states. 290 + 291 + Key constraints: 292 + 293 + - Link-wide PAUSE is not valid on half-duplex links. 294 + - Link-wide PAUSE cannot be used together with Priority-based Flow Control 295 + (PFC, IEEE 802.1Q Clause 36). 296 + - If autonegotiation is active and the link is currently down, the future 297 + mode is not yet known. 298 + 299 + Because of these constraints, the kernel stores the requested setting 300 + and applies it only when the link is in a compatible state. 301 + 302 + Implications for userspace: 303 + 304 + 1. Set once (the "wish"): the requested Rx/Tx PAUSE policy is 305 + remembered even if it cannot be applied immediately. 306 + 2. Applied conditionally: when the link comes up, the kernel enables 307 + PAUSE only if the active mode allows it. 308 + 309 + Component Roles in Flow Control 310 + =============================== 311 + 312 + The configuration of flow control involves several components, each with a 313 + distinct role. 314 + 315 + The MAC (Media Access Controller) 316 + --------------------------------- 317 + The MAC is the hardware component that actually sends and receives PAUSE 318 + frames. Its capabilities define the upper limit of what the driver can support. 319 + For link-wide PAUSE, MACs can vary in their support for symmetric (both 320 + directions) or asymmetric (independent TX/RX) flow control. 321 + 322 + For PFC, the MAC must be capable of generating and interpreting the 323 + priority-based PAUSE frames and managing separate pause states for each 324 + traffic class. 325 + 326 + Many MACs also implement automatic PAUSE frame transmission based on the fill 327 + level of their internal RX FIFO. This is typically configured with two 328 + thresholds: 329 + 330 + * **FLOW_ON (High Water Mark)**: When the RX FIFO usage reaches this 331 + threshold, the MAC automatically transmits a PAUSE frame to stop the sender. 332 + 333 + * **FLOW_OFF (Low Water Mark)**: When the RX FIFO usage drops below this 334 + threshold, the MAC transmits a PAUSE frame with a quantum of zero to tell 335 + the sender it can resume transmission. 336 + 337 + The PHY (Physical Layer Transceiver) 338 + ------------------------------------ 339 + The PHY's role is distinct for each flow control mechanism: 340 + 341 + * **Link-wide PAUSE**: During the autonegotiation process, the PHY is 342 + responsible for advertising the device's flow control capabilities. See the 343 + "Link-wide PAUSE Autonegotiation Details" section for more information. 344 + 345 + * **Half-Duplex Collision-Based Flow Control**: The PHY is fundamental to the 346 + CSMA/CD process. It performs carrier sensing (checking if the line is idle) 347 + and collision detection, which is the mechanism leveraged to throttle the 348 + sender. 349 + 350 + * **Priority-based Flow Control (PFC)**: The PHY is not directly involved in 351 + negotiating PFC capabilities. Its role is to establish the physical link. 352 + PFC negotiation happens at a higher layer via the Data Center Bridging 353 + Capability Exchange Protocol (DCBX). 354 + 355 + User Space Interface 356 + ==================== 357 + The primary user space tools are ``ethtool`` for link-wide PAUSE and ``dcb`` for 358 + PFC. They communicate with the kernel to configure the network device driver 359 + and underlying hardware. 360 + 361 + **Link-wide PAUSE Netlink Interface (``ethtool``)** 362 + 363 + See the ethtool Netlink spec (``Documentation/netlink/specs/ethtool.yaml``) 364 + for the authoritative definition of the Pause control and Pause statistics 365 + attributes. The generated UAPI is in 366 + ``include/uapi/linux/ethtool_netlink_generated.h``. 367 + 368 + **PFC Netlink Interface (``dcb``)** 369 + 370 + The authoritative definitions for DCB/PFC netlink attributes and commands are in 371 + ``include/uapi/linux/dcbnl.h``. See also the ``dcb(8)`` manual page and the DCB 372 + subsystem documentation for userspace configuration details. 373 +
+1
Documentation/networking/index.rst
··· 55 55 eql 56 56 fib_trie 57 57 filter 58 + flow_control 58 59 generic-hdlc 59 60 generic_netlink 60 61 ../netlink/specs/index
+2 -10
Documentation/networking/phy.rst
··· 343 343 Pause frames / flow control 344 344 =========================== 345 345 346 - The PHY does not participate directly in flow control/pause frames except by 347 - making sure that the SUPPORTED_Pause and SUPPORTED_AsymPause bits are set in 348 - MII_ADVERTISE to indicate towards the link partner that the Ethernet MAC 349 - controller supports such a thing. Since flow control/pause frames generation 350 - involves the Ethernet MAC driver, it is recommended that this driver takes care 351 - of properly indicating advertisement and support for such features by setting 352 - the SUPPORTED_Pause and SUPPORTED_AsymPause bits accordingly. This can be done 353 - either before or after phy_connect() and/or as a result of implementing the 354 - ethtool::set_pauseparam feature. 355 - 346 + For detailed link-wide PAUSE and PFC behavior and configuration, see 347 + flow_control.rst. 356 348 357 349 Keeping Close Tabs on the PAL 358 350 =============================
+42 -3
include/linux/ethtool.h
··· 953 953 * @get_pause_stats: Report pause frame statistics. Drivers must not zero 954 954 * statistics which they don't report. The stats structure is initialized 955 955 * to ETHTOOL_STAT_NOT_SET indicating driver does not report statistics. 956 - * @get_pauseparam: Report pause parameters 957 - * @set_pauseparam: Set pause parameters. Returns a negative error code 958 - * or zero. 956 + * 957 + * @get_pauseparam: Report the configured policy for link-wide PAUSE 958 + * (IEEE 802.3 Annex 31B). Drivers must fill struct ethtool_pauseparam 959 + * such that: 960 + * @autoneg: 961 + * This refers to **Pause Autoneg** (IEEE 802.3 Annex 31B) only 962 + * and is independent of generic link autonegotiation configured 963 + * via ethtool -s. 964 + * true -> the device follows the negotiated result of pause 965 + * autonegotiation (Pause/Asym); 966 + * false -> the device uses a forced MAC state independent of 967 + * negotiation. 968 + * @rx_pause/@tx_pause: 969 + * represent the desired policy (preferred configuration). 970 + * In autoneg mode they describe what is to be advertised; 971 + * in forced mode they describe the MAC state to apply. 972 + * 973 + * Drivers (and/or frameworks) should persist this policy across link 974 + * changes and reapply appropriate MAC programming when link parameters 975 + * change. 976 + * 977 + * @set_pauseparam: Apply a policy for link-wide PAUSE (IEEE 802.3 Annex 31B). 978 + * If @autoneg is true: 979 + * Arrange for pause advertisement (Pause/Asym) based on 980 + * @rx_pause/@tx_pause and program the MAC to follow the 981 + * negotiated result (which may be symmetric, asymmetric, or off 982 + * depending on the link partner). 983 + * If @autoneg is false: 984 + * Do not rely on autonegotiation; force the MAC RX/TX pause 985 + * state directly per @rx_pause/@tx_pause. 986 + * 987 + * Implementations that integrate with PHYLIB/PHYLINK should cooperate 988 + * with those frameworks for advertisement and resolution; MAC drivers are 989 + * still responsible for applying the required MAC state. 990 + * 991 + * Return: 0 on success or a negative errno. Return -EOPNOTSUPP if 992 + * link-wide PAUSE is unsupported. If only symmetric pause is supported, 993 + * reject unsupported asymmetric requests with -EINVAL (or document any 994 + * coercion policy). 995 + * 996 + * See also: Documentation/networking/flow_control.rst 997 + * 959 998 * @self_test: Run specified self-tests 960 999 * @get_strings: Return a set of strings that describe the requested objects 961 1000 * @set_phys_id: Identify the physical devices, e.g. by flashing an LED
+2
net/dcb/dcbnl.c
··· 27 27 * 28 28 * Priority-based Flow Control (PFC) - provides a flow control mechanism which 29 29 * can work independently for each 802.1p priority. 30 + * See Documentation/networking/flow_control.rst for a high level description 31 + * of the user space interface for Priority-based Flow Control (PFC). 30 32 * 31 33 * Congestion Notification - provides a mechanism for end-to-end congestion 32 34 * control for protocols which do not have built-in congestion management.
+4
net/ethtool/pause.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0-only 2 2 3 + /* See Documentation/networking/flow_control.rst for a high level description of 4 + * the userspace interface. 5 + */ 6 + 3 7 #include "netlink.h" 4 8 #include "common.h" 5 9