module ieee802-dot1ax-linkagg { yang-version 1.1; namespace "urn:ieee:std:802.1AX:yang:ieee802-dot1ax-linkagg"; prefix dot1ax; import ieee802-dot1ax-types { prefix ax; } import ieee802-types { prefix ieee; } import ietf-yang-types { prefix yang; } import ietf-interfaces { prefix if; } import iana-if-type { prefix ianaif; } organization "IEEE 802.1 Working Group"; contact "WG-URL: http://www.ieee802.org/1/ WG-Email: stds-802-1-l@ieee.org Contact: IEEE 802.1 Working Group Chair Postal: C/O IEEE 802.1 Working Group IEEE Standards Association 45 Hoes Lane Piscataway, NJ 08854 USA E-mail: stds-802-1-chairs@ieee.org"; description "This YANG module describes the configuration model for Link Aggregation, as specified in IEEE Std 802.1AX, including Link Aggregation Control Protocol (LACP) and Conversation-Sensitive Collection and Distribution. Copyright (C) IEEE (2025). This version of this YANG module is part of IEEE Std 802.1AX; see the standard itself for full legal notices."; revision 2025-09-30 { description "Published as part of IEEE Std 802.1AXdz-2025. The following reference statement identifies each referenced IEEE Standard as updated by applicable amendments."; reference "IEEE Std 802.1AX-2020 Link Aggregation: IEEE Std 802.1AXdz-2025."; } typedef key-group-ref { type leafref { path "/dot1ax:linkagg/dot1ax:key-group/dot1ax:name"; } description "This type is used by Aggregators and Aggregation Ports to reference an entry in the key-group list."; } typedef agg-system-ref { type leafref { path "/dot1ax:linkagg/dot1ax:agg-system/dot1ax:name"; } description "This type is used in the key-group list entries to reference an entry in the agg-system list."; } augment "/if:interfaces/if:interface" { when "derived-from-or-self(if:type,'ianaif:ieee8023adLag')" { description "Applies to interfaces representing a LAG."; } description "Augment Interface with Aggregator parameters."; container lag { description "Contains the configuration and status information that allows an instance of an Aggregator to be managed."; leaf key-group-name { type key-group-ref; mandatory true; description "Specifies the entry in the link-aggregation key-group list to which this Aggregator is assigned."; } leaf mac-address { type ieee:mac-address; config false; description "The MAC address assigned to the Aggregator."; reference "7.3.1.1.9 of IEEE Std 802.1AX"; } container lacp { config false; description "Contains Aggregator LACP operational data."; leaf actor-oper-key { type uint16; description "The current operational value of the Key for the Aggregator. The meaning of particular Key values is of local significance."; reference "7.3.1.1.8 of IEEE Std 802.1AX"; } leaf partner-system { type ieee:mac-address; description "The value of the MAC address portion of the System Identifier for the current protocol partner of this Aggregator. A value of zero indicates that there is no known partner. If the aggregation is manually configured, this System Identifier value is assigned by the local System."; reference "7.3.1.1.10 of IEEE Std 802.1AX"; } leaf partner-system-priority { type uint16; description "Indicates the priority value portion of the current Partner's System Identifier. If the aggregation is manually configured, this System Priority value is assigned by the local System."; reference "7.3.1.1.11 of IEEE Std 802.1AX"; } leaf partner-oper-key { type uint16; description "The current operational value of the Key for the Aggregator's current protocol Partner. If the aggregation is manually configured, this Key value is assigned by the local System."; reference "7.3.1.1.12 of IEEE Std 802.1AX"; } leaf aggregate-or-individual { type boolean; description "Indicates whether the Aggregator represents an Aggregate (TRUE) or an Individual link (FALSE)."; reference "7.3.1.1.6 of IEEE Std 802.1AX"; } } container cscd { if-feature "ax:cscd"; config false; description "Aggregator parameters obtained by the operation of LACP supporting CSCD."; leaf partner-port-algorithm { type identityref { base ax:distribution-algorithm; } description "Operational value of the distribution algorithm in use by the LACP Partner."; reference "7.3.1.1.40 of IEEE Std 802.1AX"; } leaf partner-conv-service-digest { type binary; description "The MD5 Digest of the admin-conv-service-map in use by the LACP Partner."; reference "7.3.1.1.42, 6.6.3.1 of IEEE Std 802.1AX"; } leaf partner-conv-link-digest { type binary; description "The MD5 Digest of the admin-conv-link-map in use by the LACP Partner."; reference "7.3.1.1.41, 6.6.3.1 of IEEE Std 802.1AX"; } leaf discard-wrong-conversation { type boolean; description "The operational value that determines whether an Aggregator discards a frame that is collected from an Aggregation Port that is different from the Aggregation Port to which the Aggregator would distribute a frame with the same Port Conversation ID."; reference "7.3.1.1.37, 6.6 of IEEE Std 802.1AX"; } leaf-list active-lag-links { type uint16; description "A list, possibly empty, of the operational link-number of each Aggregation Port active (i.e., Collecting) on this Aggregator."; reference "7.3.1.1.43 of IEEE Std 802.1AX"; } } } } augment "/if:interfaces/if:interface/if:statistics" { when '../dot1ax:lag' { description "Applies to Aggregators."; } description "Augment interface statistics with Aggregator statistics."; container lag-stats { config false; description "Contains the set of stats associated with the Aggregator."; leaf unknown-protocol-frames { type yang:counter64; description "A count of data frames discarded on reception by all ports that are (or have been) members of the aggregation, due to the detection of an unknown Slow Protocols PDU (7.3.3.1.5)"; reference "7.3.1.1.29 of IEEE Std 802.1AX"; } } } augment "/if:interfaces/if:interface" { description "Augment interface model with Aggregation Port configuration nodes."; container aggport { presence "When present, this interface supports Link Aggregation"; description "Contains Aggregation Port configuration related nodes, which provides the basic management controls necessary to allow an instance of an Aggregation Port to be managed, for the purposes of Link Aggregation."; leaf key-group-name { type key-group-ref; mandatory true; description "Specifies the entry in the link-aggregation key-group list to which this aggregation-port is assigned."; } leaf actor-port-number { type uint16 { range "1..65535"; } description "The port number assigned to the Aggregation Port. The port number is communicated in LACPDUs as the Actor_Port. This leaf provides the ability to administratively override the initial value provided by the system."; reference "7.3.2.1.14, 6.4.6 of IEEE Std 802.1AX"; } leaf actor-port-priority { type uint16; default "0x8000"; description "The priority value assigned to this Aggregation Port."; reference "7.3.2.1.15, 6.4.6 of IEEE Std 802.1AX"; } leaf partner-admin-key { type uint16 { range "1..65535"; } description "The current administrative value of the Key for the protocol Partner. The assigned value is used, along with the value of port-partner-admin-system-priority, partner-admin-system, partner-admin-port, and partner-admin-port-priority, in order to achieve manually configured aggregation. The default value is the initial value of actor-port- number provided by the system."; reference "7.3.2.1.10 of IEEE Std 802.1AX"; } leaf partner-admin-port { type uint16 { range "1..65535"; } description "The current administrative value of the port number for the protocol Partner. The assigned value is used, along with the value of partner-admin-system-priority, partner-admin-system, port-partner-admin-key, and partner-admin-port-priority, in order to achieve manually configured aggregation. The default value is the initial value of actor-port- number provided by the system."; reference "7.3.2.1.16 of IEEE Std 802.1AX"; } leaf partner-admin-port-priority { type uint16; default "0"; description "The current administrative value of the port priority for the protocol Partner. The assigned value is used, along with the value of partner-admin-system-priority, partner-admin-system, partner-admin-key, and partner-admin-port, in order to achieve manually configured aggregation."; reference "7.3.2.1.18 of IEEE Std 802.1AX"; } leaf partner-admin-state { type ax:lacp-state { bit lacp-activity { position 1; description "When the LACP_Activity state is set to '0', the transmission of LACPDUs is controlled by the actor-admin-state.LACP_Activity."; } bit lacp-timeout { position 2; description "When the LACP_Timeout is set to '0', LACPDUs are transmitted at the Slow_Periodic_Time."; } bit aggregation { position 3; description "When the Aggregation state is set to '0', this port cannot be aggregated with any other port."; } bit synchronization { position 4; description "When the Synchronization state is set to '0', this port cannot become active."; } } default "synchronization"; description "Provides administrative control over the partner's LACP_Activity, LACP_Timeout, Aggregation, and Synchronization state when the partner's information is unknown (i.e., no LACPDUs are received from the partner)."; reference "7.3.2.1.22, 6.4.1, 6.4.2.3, 6.4.6 of IEEE Std 802.1AX"; } leaf wtr-time { type uint16 { range "0..32767"; } default "0"; description "The wait-to-restore (WTR) period, in seconds, that needs to elapse between an Aggregation Port on a LAG coming up (Port_Operational becoming TRUE) and being permitted to become active (transmitting and receiving frames) on the LAG."; reference "7.3.2.1.30 of IEEE Std 802.1AX"; } leaf wtr-revertive { type boolean; default "true"; description "Controls revertive or non-revertive mode of operation. When TRUE, the Aggregation Port can become active as soon as the wait-to-restore timer expires regardless of the state of other links in the LAG. When FALSE, the Aggregation Port cannot become active unless there are no other links that can become active in the LAG. The default value is TRUE."; reference "7.3.2.1.31 of IEEE Std 802.1AX"; } container lacp { config false; description "Contains Aggregation Port LACP operational related nodes."; leaf actor-lacp-version { type uint8; description "The version number transmitted in LACPDUs on this Aggregation Port"; reference "7.3.2.1.33 of IEEE Std 802.1AX"; } leaf actor-oper-key { type uint16; description "The current operational value of the Key for the Aggregation Port. The meaning of particular Key values is of local significance."; reference "7.3.2.1.5 of IEEE Std 802.1AX"; } leaf actor-oper-state { type ax:lacp-state; description "The operational value of the Actor_State as transmitted in LACPDUs."; reference "7.3.2.1.21, 6.4.1, 6.4.2.3, 6.4.6 of IEEE Std 802.1AX"; } leaf partner-lacp-version { type uint8; description "The version number in the LACPDU most recently received on this Aggregation Port."; reference "7.3.2.1.34 of IEEE Std 802.1AX"; } leaf partner-oper-system-priority { type uint16; description "Indicates the operational value of priority associated with the Partners System ID. The value of this attribute can contain the manually configured value carried in partner-admin-system-priority if there is no protocol Partner."; reference "7.3.2.1.7 of IEEE Std 802.1AX"; } leaf partner-oper-system { type ieee:mac-address; description "Represents the MAC address portion of the Aggregation Port's current protocol partner's System Identifier. A value of zero indicates that there is no known protocol Partner. The value of this attribute can contain the manually configured value carried in partner-admin-system if there is no protocol Partner."; reference "7.3.2.1.9 of IEEE Std 802.1AX"; } leaf partner-oper-key { type uint16; description "The current operational value of the Key for the protocol Partner. The value of this attribute can contain the manually configured value carried in partner-admin-key if there is no protocol Partner."; reference "7.3.2.1.11 of IEEE Std 802.1AX"; } leaf partner-oper-port { type uint16; description "The operational port number assigned by the Aggregation Port's protocol Partner. The value of this attribute can contain the administratively configured value carried in partner-admin-port if there is no protocol Partner."; reference "7.3.2.1.17 of IEEE Std 802.1AX"; } leaf partner-oper-port-priority { type uint16; description "The operational priority value assigned by the Aggregation Port's protocol Partner. The value of this attribute can contain the administratively configured value carried in partner-admin-port-priority if there is no protocol Partner."; reference "7.3.2.1.19 of IEEE Std 802.1AX"; } leaf partner-oper-state { type ax:lacp-state; description "The operational value of the partner's LACP state derived from received LACPDUs or, when Defaulted is true, from the partner-admin-state."; reference "7.3.2.1.23, 6.4.1, 6.4.2.3, 6.4.6 of IEEE Std 802.1AX"; } leaf aggregate-or-individual { type boolean; description "When true indicates the Aggregation Port can join a LAG consisting of multiple Aggregation Ports. When false, indicates that the Aggregation Port can only operate as an Solitary link because the Aggregation bit is false in either actor-oper-port-state or partner-oper-port-state."; reference "7.3.2.1.24 of IEEE Std 802.1AX"; } leaf wtr-waiting { type boolean; description "Indicates the Aggregation Port is inhibited from becoming active for an interval (determined by wtr-time) after becoming operational or while non-revertive operation is being enforced by the Selection Logic."; reference "7.3.2.1.32 of IEEE Std 802.1AX"; } } container cscd { if-feature "ax:cscd"; description "Aggregation Port parameters for support of CSCD."; leaf admin-link-number { type uint16; description "The Link_Number value for the Aggregation Port, that is unique among all Aggregation Ports in the same key group. This leaf provides the ability to administratively override the initial value provided by the system. A value of 0 is allowed, but results in no frames being distributed to this Aggregation Port. The default value is the initial value of actor-port- number provided by the system."; reference "7.3.2.1.27, 6.6.3.2 of IEEE Std 802.1AX"; } leaf partner-link-number { type uint16; config false; description "The last received value of the Partner_Link_Number, or zero if the Aggregation Port is using default values for the Partner or the Partner LACP Version is 1."; reference "7.3.2.1.29 of IEEE Std 802.1AX"; } leaf link-number { type uint16; config false; description "The operational link number for this Aggregation Port. The value is either the same as the admin-link-number, or the corresponding value of the LACP partner."; reference "7.3.2.1.28 of IEEE Std 802.1AX"; } } } } augment "/if:interfaces/if:interface/if:statistics" { when '../dot1ax:aggport' { description "Applies to Aggregation Ports."; } description "Augment interface statistics with aggport statistics."; container aggport-stats { config false; description "Contains stats associated with the Aggregation Port."; leaf lacp-pdu-rx { type yang:counter64; description "The number of valid LACPDUs received on this Aggregation Port."; reference "7.3.3.1.2 of IEEE Std 802.1AX"; } leaf marker-pdu-rx { type yang:counter64; description "The number of valid Marker PDUs received on this Aggregation Port."; reference "7.3.3.1.3 of IEEE Std 802.1AX"; } leaf marker-response-pdu-rx { type yang:counter64; description "The number of valid Marker Response PDUs received on this Aggregation Port."; reference "7.3.3.1.4 of IEEE Std 802.1AX"; } leaf unknown-rx { type yang:counter64; description "The number of frames received that either: a) Carry the Slow Protocols Ethernet Type value, but contain an unknown PDU, or b) Are addressed to the Slow Protocols group MAC Address, but do not carry the Slow Protocols Ethernet Type."; reference "7.3.3.1.5 of IEEE Std 802.1AX"; } leaf illegal-rx { type yang:counter64; description "The number of frames received that carry the Slow Protocols Ethernet Type value, but contain a badly formed PDU or an illegal value of Protocol Subtype."; reference "7.3.3.1.6 of IEEE Std 802.1AX"; } leaf lacp-pdu-tx { type yang:counter64; description "The number of LACPDUs transmitted on this Aggregation Port."; reference "7.3.3.1.7 of IEEE Std 802.1AX"; } leaf marker-pdu-tx { type yang:counter64; description "The number of Marker PDUs transmitted on this Aggregation Port."; reference "7.3.3.1.8 of IEEE Std 802.1AX"; } leaf marker-response-pdu-tx { type yang:counter64; description "The number of Marker Response PDUs transmitted on this Aggregation Port."; reference "7.3.3.1.9 of IEEE Std 802.1AX"; } } } container linkagg { description "Link Aggregation System specific configuration nodes."; list agg-system { key "name"; description "List of Aggregation Systems."; leaf name { type string; description "Name for the Aggregation System."; } leaf actor-system { type ieee:mac-address; description "The part of the System Identifier that is a globally unique MAC address. This leaf provides the ability to administratively override the initial value provided by the system."; reference "7.3.1.1.4, 7.3.2.1.3 of IEEE Std 802.1AX"; } leaf actor-system-priority { type uint16; default "0x8000"; description "The part of the System Identifier that is the priority of the system."; reference "7.3.1.1.5, 7.3.2.1.2 of IEEE Std 802.1AX"; } } list key-group { key "name"; unique "actor-admin-key"; description "List of key groups. A key group is the set of Aggregators and Aggregation Ports that share the same system priority, system identifier, and aggregation key, and therefore can potentially form a Link Aggregation Group. Each entry in the key group list contains the parameters common to all Aggregation Ports and/or Aggregators in the key group."; reference "6.3.5, 6.4.12 of IEEE Std 802.1AX"; leaf name { type string; description "Name for the key group."; } leaf actor-admin-key { type uint16 { range "1..65535"; } mandatory true; description "The administrative value of the key used by the Aggregators and Aggregation Ports in this key-group."; reference "7.3.1.1.7, 7.3.2.1.4 of IEEE Std 802.1AX"; } leaf agg-system-name { type agg-system-ref; mandatory true; description "Specifies the Aggregation System for this key group."; } leaf actor-protocol-da { type ax:bridge-reserved-addresses; must ". = 'nearest-customer-bridge' or . = 'slow-protocols-multicast' or . = 'nearest-non-tpmr-bridge'" { error-message "Invalid protocol address"; } default "slow-protocols-multicast"; description "A 6-octet read-write MAC Address value specifying the DA to be used when sending Link Aggregation Control and Marker PDUs. Valid addresses are the nearest-customer-bridge, slow-protocols-multicast, and nearest-non-tpmr-bridge group addresses. The default value is the slow-protocols-multicast address."; reference "7.3.2.2.1, 6.2.10.2 of IEEE Std 802.1AX"; } leaf collector-max-delay { type uint16; description "Specifies the maximum delay, in tens of microseconds, between receiving a frame from an Aggregator Port, and either delivering the frame to the Aggregator Client or discarding the frame. A value of zero means the delay is less than the minimum increment (< 10us). This leaf provides the ability to administratively override the initial value provided by the system."; reference "7.3.1.1.32, 6.2.3.1.1, B.3 of IEEE Std 802.1AX"; } leaf actor-admin-state { type ax:lacp-state { bit lacp-activity { position 1; description "Setting the LACP_Activity state to '0' means that the transmission of LACPDUs is controlled by the value of partner-oper-state.LACP_Activity."; } bit lacp-timeout { position 2; description "Setting the LACP_Timeout to '0' means that actor uses the Long_Timeout value, allowing the partner to transmit LACPDUs at the Slow_Periodic_Time."; } bit aggregation { position 3; description "Setting the Aggregation state to '0' prevents this port from being aggregated with any other ports."; } } default "lacp-activity lacp-timeout aggregation"; description "Provides administrative control over the values of the LACP_Activity, LACP_Timeout, and Aggregation state."; reference "7.3.2.1.20, 6.4.1, 6.4.2.3, 6.4.6 of IEEE Std 802.1AX"; } leaf partner-admin-system { type ieee:mac-address; default "00-00-00-00-00-00"; description "The administrative value of the MAC address portion of the Partner's System Identifier. The assigned value is used, along with the value of port-partner-admin-system, partner-admin-key, partner-admin-port, and partner-admin-port-priority, to achieve administratively configured Link Aggregation Groups with a partner that does not run LACP."; reference "7.3.2.1.8 of IEEE Std 802.1AX"; } leaf partner-admin-system-priority { type uint16; default "0"; description "The administrative value of priority portion of the the Partner's System Identifier. The assigned value is used, along with the value of port-partner-admin-system, partner-admin-key, partner-admin-port, and partner-admin-port-priority, to achieve administratively configured Link Aggregation Groups with a partner that does not run LACP."; reference "7.3.2.1.6 of IEEE Std 802.1AX"; } leaf port-algorithm { type identityref { base ax:distribution-algorithm; } default "ax:unspecified"; description "Identifies the algorithm used by the Aggregator to assign frames to a Port Conversation ID. Default is the value for an unspecified distribution algorithm. When the identity description specifies a 4-octet value, this value will be used for CSCD purposes, and included in LACPDUs. Otherwise this leaf is used purely for local selection of a distribution algorithm, and the unspecified distribution algorithm is used for CSCD purposes."; reference "7.3.1.1.33, Table 8-1 of IEEE Std 802.1AX"; } leaf-list lags { type if:interface-ref; config false; description "A list of the if:name of Aggregators assigned to this key group."; reference "linkagg:key-group"; } leaf-list aggports { type if:interface-ref; config false; description "A list of the if:name of Aggregation Ports assigned to this key group."; reference "linkagg:key-group"; } container cscd { if-feature "ax:cscd"; description "Contains CSCD parameters that need to be consistent for all Aggregation Ports and Aggregators in the key group."; container admin-conv-service-map { if-feature "ax:sid-map"; description "Data structure to map Service Identifiers to Conversation Identifiers. Each entry consists of a Conversation ID (CID) and a list of zero or more Service Identifiers (SIDs) that map to it. An empty list of SIDs means there are no SIDs that map to this CID, and results in the same behavior as not having an entry for this CID."; reference "7.3.1.1.36, 6.6.3.1 of IEEE Std 802.1AX"; uses ax:service-map; } leaf admin-conv-service-digest { type binary; config false; description "The MD5 Digest of the admin-conv-service-map. The value is NULL (AAAAAAAAAAAAAAAAAAAAAA== in base64) when the distribution algorithm specified by agg-port-algorithm does not use the admin-conv-service-map."; reference "7.3.1.1.39, 6.6.3.1 of IEEE Std 802.1AX"; } container admin-conv-link-map { description "Data structure to map a Conversation Identifier (CID) to a Link Number. Each entry consists of a CID and a list of link numbers that can potentially be selected for that CID. An empty list of link-numbers means that no links are selected for the CID."; reference "7.3.1.1.34, 6.6.3.1 of IEEE Std 802.1AX"; uses ax:link-map; } leaf admin-conv-link-digest { type binary; config false; description "The MD5 Digest of the admin-conv-link-map. The value is NULL (AAAAAAAAAAAAAAAAAAAAAA== in base64) when the distribution algorithm specified by agg-port-algorithm does not use the admin-conv-link-map."; reference "7.3.1.1.38, 6.6.3.1 of IEEE Std 802.1AX"; } leaf admin-discard-wrong-conv { if-feature "ax:dwc"; type enumeration { enum force-true { value 1; description "Indicates that an Aggregator discards a frame that is collected from an Aggregation Port that is different from the Aggregation Port to which the Aggregator would distribute a frame with the same Port Conversation ID."; } enum force-false { value 2; description "Indicates that an Aggregator does not discard a frame that is collected from an Aggregation Port that is different from the Aggregation Port to which the Aggregator would distribute a frame with the same Port Conversation ID. This is the behavior of the Aggregator when DWC is not supported"; } enum auto { value 3; description "Indicates that the Aggregator behaves as if the value was force-true only when the actor and partner agree on the algorithms (other than unspecified) and mapping tables used to map frames to Aggregation Ports, and behaves as if the value was force-false otherwise."; } } default "force-false"; description "Indicates whether an Aggregator discards a frame that is collected from an Aggregation Port that is different from the Aggregation Port to which the Aggregator would distribute a frame with the same Port Conversation ID."; reference "7.3.1.1.35, 6.6 of IEEE Std 802.1AX"; } } } } }