Add the netlink YAML spec and auto-generated UAPI header for a unified loopback interface covering MAC, PCS, PHY, and pluggable module components.
Each loopback point is described by a nested entry attribute containing: - component where in the path (MAC, PCS, PHY, MODULE) - name subsystem label, e.g. "cmis-host" or "cmis-media" - id optional instance selector (e.g. PHY id, port id) - supported bitmask of supported directions - direction NEAR_END, FAR_END, or 0 (disabled) Signed-off-by: Björn Töpel <[email protected]> --- Documentation/netlink/specs/ethtool.yaml | 123 ++++++++++++++++++ .../uapi/linux/ethtool_netlink_generated.h | 59 +++++++++ 2 files changed, 182 insertions(+) diff --git a/Documentation/netlink/specs/ethtool.yaml b/Documentation/netlink/specs/ethtool.yaml index 4707063af3b4..8bd14a3c946a 100644 --- a/Documentation/netlink/specs/ethtool.yaml +++ b/Documentation/netlink/specs/ethtool.yaml @@ -211,6 +211,49 @@ definitions: name: discard value: 31 + - + name: loopback-component + type: enum + doc: | + Loopback component. Identifies where in the network path the + loopback is applied. + entries: + - + name: mac + doc: MAC loopback. Loops traffic at the MAC block. + - + name: pcs + doc: | + PCS loopback. Loops traffic at the PCS sublayer between the + MAC and the PHY. + - + name: phy + doc: | + Ethernet PHY loopback. This refers to the Ethernet PHY managed + by phylib, not generic PHY drivers. A Base-T SFP module + containing an Ethernet PHY driven by Linux should report + loopback under this component, not module. + - + name: module + doc: | + Pluggable module (e.g. CMIS (Q)SFP) loopback. Covers loopback + modes controlled via module firmware or EEPROM registers. When + Linux drives an Ethernet PHY inside the module via phylib, use + the phy component instead. + - + name: loopback-direction + type: flags + doc: | + Loopback direction flags. Used as a bitmask in supported, and as + a single value in direction. + entries: + - + name: near-end + doc: Near-end loopback; host-loop-host + - + name: far-end + doc: Far-end loopback; line-loop-line + attribute-sets: - name: header @@ -1903,6 +1946,58 @@ attribute-sets: name: link type: nest nested-attributes: mse-snapshot + - + name: loopback-entry + doc: Per-component loopback configuration entry. + attr-cnt-name: __ethtool-a-loopback-entry-cnt + attributes: + - + name: unspec + type: unused + value: 0 + - + name: component + type: u32 + enum: loopback-component + doc: Loopback component + - + name: id + type: u32 + doc: Optional component instance identifier. + - + name: name + type: string + doc: | + Subsystem-specific name for the loopback point within the + component. + - + name: supported + type: u8 + enum: loopback-direction + enum-as-flags: true + doc: Bitmask of supported loopback directions + - + name: direction + type: u8 + enum: loopback-direction + doc: Current loopback direction, 0 means disabled + - + name: loopback + attr-cnt-name: __ethtool-a-loopback-cnt + attributes: + - + name: unspec + type: unused + value: 0 + - + name: header + type: nest + nested-attributes: header + - + name: entry + type: nest + multi-attr: true + nested-attributes: loopback-entry operations: enum-model: directional @@ -2855,6 +2950,34 @@ operations: - worst-channel - link dump: *mse-get-op + - + name: loopback-get + doc: Get loopback configuration and capabilities. + + attribute-set: loopback + + do: &loopback-get-op + request: + attributes: + - header + reply: + attributes: &loopback + - header + - entry + dump: *loopback-get-op + - + name: loopback-set + doc: Set loopback configuration. + + attribute-set: loopback + + do: + request: + attributes: *loopback + - + name: loopback-ntf + doc: Notification for change in loopback configuration. + notify: loopback-get mcast-groups: list: diff --git a/include/uapi/linux/ethtool_netlink_generated.h b/include/uapi/linux/ethtool_netlink_generated.h index 114b83017297..d8bff056a4b1 100644 --- a/include/uapi/linux/ethtool_netlink_generated.h +++ b/include/uapi/linux/ethtool_netlink_generated.h @@ -78,6 +78,40 @@ enum ethtool_pse_event { ETHTOOL_PSE_EVENT_SW_PW_CONTROL_ERROR = 64, }; +/** + * enum ethtool_loopback_component - Loopback component. Identifies where in + * the network path the loopback is applied. + * @ETHTOOL_LOOPBACK_COMPONENT_MAC: MAC loopback. Loops traffic at the MAC + * block. + * @ETHTOOL_LOOPBACK_COMPONENT_PCS: PCS loopback. Loops traffic at the PCS + * sublayer between the MAC and the PHY. + * @ETHTOOL_LOOPBACK_COMPONENT_PHY: Ethernet PHY loopback. This refers to the + * Ethernet PHY managed by phylib, not generic PHY drivers. A Base-T SFP + * module containing an Ethernet PHY driven by Linux should report loopback + * under this component, not module. + * @ETHTOOL_LOOPBACK_COMPONENT_MODULE: Pluggable module (e.g. CMIS (Q)SFP) + * loopback. Covers loopback modes controlled via module firmware or EEPROM + * registers. When Linux drives an Ethernet PHY inside the module via phylib, + * use the phy component instead. + */ +enum ethtool_loopback_component { + ETHTOOL_LOOPBACK_COMPONENT_MAC, + ETHTOOL_LOOPBACK_COMPONENT_PCS, + ETHTOOL_LOOPBACK_COMPONENT_PHY, + ETHTOOL_LOOPBACK_COMPONENT_MODULE, +}; + +/** + * enum ethtool_loopback_direction - Loopback direction flags. Used as a + * bitmask in supported, and as a single value in direction. + * @ETHTOOL_LOOPBACK_DIRECTION_NEAR_END: Near-end loopback; host-loop-host + * @ETHTOOL_LOOPBACK_DIRECTION_FAR_END: Far-end loopback; line-loop-line + */ +enum ethtool_loopback_direction { + ETHTOOL_LOOPBACK_DIRECTION_NEAR_END = 1, + ETHTOOL_LOOPBACK_DIRECTION_FAR_END = 2, +}; + enum { ETHTOOL_A_HEADER_UNSPEC, ETHTOOL_A_HEADER_DEV_INDEX, @@ -838,6 +872,27 @@ enum { ETHTOOL_A_MSE_MAX = (__ETHTOOL_A_MSE_CNT - 1) }; +enum { + ETHTOOL_A_LOOPBACK_ENTRY_UNSPEC, + ETHTOOL_A_LOOPBACK_ENTRY_COMPONENT, + ETHTOOL_A_LOOPBACK_ENTRY_ID, + ETHTOOL_A_LOOPBACK_ENTRY_NAME, + ETHTOOL_A_LOOPBACK_ENTRY_SUPPORTED, + ETHTOOL_A_LOOPBACK_ENTRY_DIRECTION, + + __ETHTOOL_A_LOOPBACK_ENTRY_CNT, + ETHTOOL_A_LOOPBACK_ENTRY_MAX = (__ETHTOOL_A_LOOPBACK_ENTRY_CNT - 1) +}; + +enum { + ETHTOOL_A_LOOPBACK_UNSPEC, + ETHTOOL_A_LOOPBACK_HEADER, + ETHTOOL_A_LOOPBACK_ENTRY, + + __ETHTOOL_A_LOOPBACK_CNT, + ETHTOOL_A_LOOPBACK_MAX = (__ETHTOOL_A_LOOPBACK_CNT - 1) +}; + enum { ETHTOOL_MSG_USER_NONE = 0, ETHTOOL_MSG_STRSET_GET = 1, @@ -891,6 +946,8 @@ enum { ETHTOOL_MSG_RSS_CREATE_ACT, ETHTOOL_MSG_RSS_DELETE_ACT, ETHTOOL_MSG_MSE_GET, + ETHTOOL_MSG_LOOPBACK_GET, + ETHTOOL_MSG_LOOPBACK_SET, __ETHTOOL_MSG_USER_CNT, ETHTOOL_MSG_USER_MAX = (__ETHTOOL_MSG_USER_CNT - 1) @@ -952,6 +1009,8 @@ enum { ETHTOOL_MSG_RSS_CREATE_NTF, ETHTOOL_MSG_RSS_DELETE_NTF, ETHTOOL_MSG_MSE_GET_REPLY, + ETHTOOL_MSG_LOOPBACK_GET_REPLY, + ETHTOOL_MSG_LOOPBACK_NTF, __ETHTOOL_MSG_KERNEL_CNT, ETHTOOL_MSG_KERNEL_MAX = (__ETHTOOL_MSG_KERNEL_CNT - 1) -- 2.53.0

