diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md index f513804ac..dbf721420 100644 --- a/doc/ChangeLog.md +++ b/doc/ChangeLog.md @@ -10,21 +10,36 @@ All notable changes to the project are documented in this file. - Upgrade Linux kernel to 6.18.32 (LTS) - Upgrade FRR to 10.5.4 -- Add support for [Acer Connect Vero W6m][AcerConnectVero], a COTS home router, - based upon the same hardware as [Banana Pi BPI-R3][BPI-R3], but +- Add support for [Acer Connect Vero W6m][AcerConnectVero], a low-cost COTS + home router, based on the same hardware as [Banana Pi BPI-R3][BPI-R3], but with a Wi-Fi 6E (6 GHz band) chip. - Add configurable channel-width in Wi-Fi configuration. +- Upgrade `ieee802-ethernet-interface` YANG model to revision 2025-09-10 (IEEE + Std 802.3.2-2025), adding the standard `phy-type` and `pmd-type` operational + leaves. Speed is now exposed via `ietf-interfaces:speed` (bps, RFC 8343); + the now obsolete `eth:speed` is no longer returned +- Rework `show interface` summary output as layered protocol rows. When a + port has link, a physical-medium row (e.g. `1000baseT`, `10GbaseLR`) appears + above the `ethernet` row. VLAN, GRE, VXLAN and WiFi interfaces likewise get + one row per protocol layer, with type-specific data on each (`vid:`, + `remote:`, `vni:`, `station ssid:`, etc.), issue #530 ### Fixes - Fix #1493: container with a physical interface not properly removed when switching to a configuration without containers +- Fix #1506: add documentation on how to configure VLAN interfaces, + including stacked (Q-in-Q) VLAN interfaces, in a dedicated `vlan.md` +- Fix long-standing typo `auto-negotation` in `yanger`, which caused + the operational `auto-negotiation/enable` leaf to always read as + `unknown` regardless of the actual port setting - Handle unclean daemon exits better, e.g., `dbus-daemon` crashing and leaving a stale pidfile behind, causing it to refuse to be restarted - Fix occasional blank or garbled `[ OK ]` lines at startup - Disallow multicast MAC addresses in custom MAC address configuration - Fix broken Wi-Fi 6 GHz band configuration. +[BPI-R3]: https://docs.banana-pi.org/en/BPI-R3/BananaPi_BPI-R3 [AcerConnectVero]: ../board/aarch64/acer-connect-vero-w/ [v26.04.0][] - 2026-04-30 @@ -72,7 +87,6 @@ All notable changes to the project are documented in this file. - Fix [BPI-R3][] PCIe devices failing to initialize on boot due to a missing clock definition in the device tree -[BPI-R3]: https://wiki.banana-pi.org/Banana_Pi_BPI-R3 [BPI-R4]: https://docs.banana-pi.org/en/BPI-R4/BananaPi_BPI-R4 [ESPRESSObin]: https://espressobin.net/ [SAMA7G54]: https://www.microchip.com/en-us/development-tool/ev21h18a @@ -176,7 +190,7 @@ All notable changes to the project are documented in this file. - Fix CLI `copy` command problem to copy to scp/sftp destinations -[BPI-R3-MINI]: https://wiki.banana-pi.org/Banana_Pi_BPI-R3_Mini +[BPI-R3-MINI]: https://docs.banana-pi.org/en/BPI-R3_Mini/BananaPi_BPI-R3_Mini [SAMA7G54-EK]: https://www.microchip.com/en-us/development-tool/ev21h18a [v26.01.0][] - 2026-02-03 diff --git a/doc/bridging.md b/doc/bridging.md index 187cb980a..3ba38052a 100644 --- a/doc/bridging.md +++ b/doc/bridging.md @@ -73,8 +73,8 @@ admin@example:/config/interface/br0/> set bridge vlans vlan 20 tagged br0 To route or to manage via a VLAN, a VLAN interface needs to be created -on top of the bridge, see section [VLAN Interfaces](ethernet.md#vlan-interfaces) -for more on this topic. +on top of the bridge, see section [VLAN Interfaces](vlan.md) for more +on this topic. > [!NOTE] > In some use-cases only a single management VLAN on the bridge is used. diff --git a/doc/cli/introduction.md b/doc/cli/introduction.md index 4630c3562..aeb7f0652 100644 --- a/doc/cli/introduction.md +++ b/doc/cli/introduction.md @@ -164,7 +164,7 @@ interfaces { } } admin@host-12-34-56:/config/interface/eth0/> leave -admin@host-12-34-56:/> show interfaces +admin@host-12-34-56:/> show interface INTERFACE PROTOCOL STATE DATA lo loopback UNKNOWN 00:00:00:00:00:00 ipv4 127.0.0.1/8 (static) diff --git a/doc/dhcp.md b/doc/dhcp.md index c2792930d..6898ebd91 100644 --- a/doc/dhcp.md +++ b/doc/dhcp.md @@ -109,11 +109,11 @@ When configuring, e.g., `dns-server`, or `router` options with the value `auto`, the system uses the IP address from the interface matching the subnet. For example: -
admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 02:00:00:00:00:00
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet UP 02:00:00:00:00:00
ipv4 192.168.1.1/24 (static)
-eth1 ethernet UP 02:00:00:00:00:01
+eth1 ethernet UP 02:00:00:00:00:01
ipv4 192.168.2.1/24 (static)
admin@example:/config/dhcp-server/subnet/192.168.1.0/24/> edit option dns-server
diff --git a/doc/ethernet.md b/doc/ethernet.md
index 84e8cb75c..d27489e7e 100644
--- a/doc/ethernet.md
+++ b/doc/ethernet.md
@@ -1,52 +1,8 @@
# Ethernet Interfaces
-This document covers VLAN interfaces, physical Ethernet interfaces,
-and virtual Ethernet (VETH) pairs.
-
-
-## VLAN Interfaces
-
-Creating a VLAN can be done in many ways. This section assumes VLAN
-interfaces created atop another Linux interface. E.g., the VLAN
-interfaces created on top of the Ethernet interface or bridge in the
-picture below.
-
-
-
-A VLAN interface is basically a filtering abstraction. When you run
-`tcpdump` on a VLAN interface you will only see the frames matching the
-VLAN ID of the interface, compared to *all* the VLAN IDs if you run
-`tcpdump` on the lower-layer interface.
-
-admin@example:/> configure
-admin@example:/config/> edit interface eth0.20
-admin@example:/config/interface/eth0.20/> show
-type vlan;
-vlan {
- tag-type c-vlan;
- id 20;
- lower-layer-if eth0;
-}
-admin@example:/config/interface/eth0.20/> leave
-
-
-The example below assumes bridge br0 is already created, see [VLAN
-Filtering Bridge](bridging.md#vlan-filtering-bridge).
-
-admin@example:/> configure
-admin@example:/config/> edit interface vlan10
-admin@example:/config/interface/vlan10/> set vlan id 10
-admin@example:/config/interface/vlan10/> set vlan lower-layer-if br0
-admin@example:/config/interface/vlan10/> leave
-
-
-As conventions, a VLAN interface for VID 20 on top of an Ethernet
-interface *eth0* is named *eth0.20*, and a VLAN interface for VID 10 on
-top of a bridge interface *br0* is named *vlan10*.
-
-> [!NOTE]
-> If you name your VLAN interface `foo0.N` or `vlanN`, where `N` is a
-> number, the CLI infers the interface type automatically.
+This document covers physical Ethernet interfaces and virtual Ethernet
+(VETH) pairs. For VLAN interfaces stacked on top of an Ethernet port
+or bridge, see [VLAN Interfaces](vlan.md).
## Physical Ethernet Interfaces
@@ -56,44 +12,64 @@ top of a bridge interface *br0* is named *vlan10*.
Physical Ethernet interfaces provide low-level settings for speed/duplex as
well as packet status and [statistics](#ethernet-statistics).
-By default, Ethernet interfaces defaults to auto-negotiating
-speed/duplex modes, advertising all speed and duplex modes available.
-In the example below, the switch would by default auto-negotiate speed
-1 Gbit/s on port eth1 and 100 Mbit/s on port eth4, as those are the
-highest speeds supported by H1 and H2 respectively.
+By default, Ethernet interfaces defaults to auto-negotiating speed/duplex
+modes, advertising all speed and duplex modes available. In the example
+below, the switch would by default auto-negotiate speed 1 Gbps on port eth1
+and 100 Mbps on port eth4, as those are the highest speeds supported by H1 and
+H2 respectively.

-The speed and duplex status for the links can be listed as shown
-below, assuming the link operational status is 'up'.
+A quick at-a-glance view of the physical link is available in the summary
+listing. When a port is up, a physical-layer row appears above the ethernet
+row, naming the IEEE PMD type (e.g. `1000baseT`, `10GbaseLR`) in the PROTOCOL
+column and the negotiated duplex in DATA. When the link is down the row is
+omitted and the interface name falls onto the ethernet row.
+
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth1 1000baseT UP duplex: full
+ ethernet 00:53:00:06:11:01
+eth2 1000baseT UP duplex: full
+ ethernet 00:53:00:06:11:02
+eth3 ethernet DOWN 00:53:00:06:11:03
+eth4 100baseTX UP duplex: full
+ ethernet 00:53:00:06:11:04
+...
+
+
+The detail view spells everything out, including auto-negotiation
+state and the speed in Mbit/s.
admin@example:/> show interface eth1
-name : eth1
-index : 2
-mtu : 1500
-operational status : up
-auto-negotiation : on
-duplex : full
-speed : 1000
-physical address : 00:53:00:06:11:01
-ipv4 addresses :
-ipv6 addresses :
-in-octets : 75581
-out-octets : 43130
+name : eth1
+index : 2
+mtu : 1500
+operational status : up
+link mode : 1000baseT
+auto-negotiation : on
+duplex : full
+speed : 1000
+physical address : 00:53:00:06:11:01
+ipv4 addresses :
+ipv6 addresses :
+in-octets : 75581
+out-octets : 43130
...
admin@example:/> show interface eth4
-name : eth4
-index : 5
-mtu : 1500
-operational status : up
-auto-negotiation : on
-duplex : full
-speed : 100
-physical address : 00:53:00:06:11:04
-ipv4 addresses :
-ipv6 addresses :
-in-octets : 75439
-out-octets : 550704
+name : eth4
+index : 5
+mtu : 1500
+operational status : up
+link mode : 100baseTX
+auto-negotiation : on
+duplex : full
+speed : 100
+physical address : 00:53:00:06:11:04
+ipv4 addresses :
+ipv6 addresses :
+in-octets : 75439
+out-octets : 550704
...
admin@example:/>
@@ -138,29 +114,31 @@ require auto-negotiation to be enabled.
Ethernet packet statistics[^1] can be listed as shown below.
admin@example:/> show interface eth1
-name : eth1
-index : 2
-mtu : 1500
-operational status : up
-auto-negotiation : on
-duplex : full
-speed : 1000
-physical address : 00:53:00:06:11:0a
-ipv4 addresses :
-ipv6 addresses :
-in-octets : 75581
-out-octets : 43130
-
-eth-in-frames : 434
-eth-in-multicast-frames : 296
-eth-in-broadcast-frames : 138
-eth-in-error-fcs-frames : 0
-eth-in-error-oversize-frames : 0
-eth-out-frames : 310
-eth-out-multicast-frames : 310
-eth-out-broadcast-frames : 0
-eth-out-good-octets : 76821
-eth-in-good-octets : 60598
+name : eth1
+index : 2
+mtu : 1500
+operational status : up
+link mode : 1000baseT
+auto-negotiation : on
+duplex : full
+speed : 1000
+physical address : 00:53:00:06:11:0a
+ipv4 addresses :
+ipv6 addresses :
+in-octets : 75581
+out-octets : 43130
+───────────────────
+Ethernet Statistics
+in-frames : 434
+in-multicast-frames : 296
+in-broadcast-frames : 138
+in-error-fcs-frames : 0
+in-error-oversize-frames : 0
+out-frames : 310
+out-multicast-frames : 310
+out-broadcast-frames : 0
+out-good-octets : 76821
+in-good-octets : 60598
admin@example:/>
diff --git a/doc/iface.md b/doc/iface.md
index 9cecd8daa..679fe5021 100644
--- a/doc/iface.md
+++ b/doc/iface.md
@@ -61,13 +61,19 @@ admin@example:/config/interface/eth0/> leave
The operational status can be inspected to see both administrative and
actual link state:
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet DISABLED 02:00:00:00:00:00
-eth1 ethernet UP 02:00:00:00:00:01
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet DISABLED 02:00:00:00:00:00
+eth1 1000baseT UP duplex: full
+ ethernet 02:00:00:00:00:01
...
+The rows are layered bottom-up by protocol: a physical-medium row (only
+emitted when the link is up) on top, then the ethernet row carrying the
+bare MAC, then any ipv4/ipv6 sub-rows. See [Ethernet](ethernet.md) for the
+full set of summary fields.
+
## Description
@@ -84,9 +90,9 @@ The description is visible in the operational datastore and in `show`
commands:
admin@example:/> show interface eth0
-name : eth0
-description : Uplink to core switch
-index : 2
+name : eth0
+description : Uplink to core switch
+index : 2
...
diff --git a/doc/ip.md b/doc/ip.md
index a42302ff4..e53f334fd 100644
--- a/doc/ip.md
+++ b/doc/ip.md
@@ -117,11 +117,11 @@ will be ignored. For details on how to enable the NTP client, see the

-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 02:00:00:00:00:00
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet UP 02:00:00:00:00:00
ipv6 fe80::ff:fe00:0/64 (link-layer)
-lo ethernet UP 00:00:00:00:00:00
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -153,13 +153,13 @@ admin@example:/config/interface/eth0/ipv4/> diff
+ }
+}
admin@example:/config/interface/eth0/ipv4/> leave
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 02:00:00:00:00:00
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet UP 02:00:00:00:00:00
ipv4 169.254.1.3/16 (random)
ipv4 10.0.1.1/24 (static)
ipv6 fe80::ff:fe00:0/64 (link-layer)
-lo ethernet UP 00:00:00:00:00:00
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -188,12 +188,12 @@ admin@example:/config/interface/eth0/ipv4/autoconf/> leave
admin@example:/config/> edit interface eth0 ipv4
admin@example:/config/interface/eth0/ipv4/> set dhcp
admin@example:/config/interface/eth0/ipv4/> leave
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 02:00:00:00:00:00
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet UP 02:00:00:00:00:00
ipv4 10.1.2.100/24 (dhcp)
ipv6 fe80::ff:fe00:0/64 (link-layer)
-lo ethernet UP 00:00:00:00:00:00
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -235,11 +235,11 @@ admin@example:/config/> edit interface eth0 ipv6
admin@example:/config/interface/eth0/ipv6/> set dhcp
admin@example:/config/interface/eth0/ipv6/> leave
admin@example:/> show interface
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 02:00:00:00:00:00
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8::42/128 (dhcp)
ipv6 fe80::ff:fe00:0/64 (link-layer)
-lo ethernet UP 00:00:00:00:00:00
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -291,10 +291,10 @@ on the interface.
admin@example:/config/> edit interface eth0 ipv6
admin@example:/config/interface/eth0/ipv6/> set enabled false
admin@example:/config/interface/eth0/ipv6/> leave
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 02:00:00:00:00:00
-lo ethernet UP 00:00:00:00:00:00
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet UP 02:00:00:00:00:00
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -308,12 +308,12 @@ admin@example:/>
admin@example:/config/> edit interface eth0 ipv6
admin@example:/config/interface/eth0/ipv6/> set address 2001:db8::1 prefix-length 64
admin@example:/config/interface/eth0/ipv6/> leave
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 02:00:00:00:00:00
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8::1/64 (static)
ipv6 fe80::ff:fe00:0/64 (link-layer)
-lo ethernet UP 00:00:00:00:00:00
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -330,12 +330,12 @@ advertised by the router (here 2001:db8:0:1::0/64) and the interface
identifier. The resulting address is of type *link-layer*, as it is
formed based on the interface identifier ([ietf-ip.yang][2]).
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 02:00:00:00:00:00
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8:0:1:0:ff:fe00:0/64 (link-layer)
ipv6 fe80::ff:fe00:0/64 (link-layer)
-lo ethernet UP 00:00:00:00:00:00
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -348,11 +348,11 @@ below.
admin@example:/config/> edit interface eth0 ipv6
admin@example:/config/interface/eth0/ipv6/> set autoconf create-global-addresses false
admin@example:/config/interface/eth0/ipv6/> leave
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 02:00:00:00:00:00
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet UP 02:00:00:00:00:00
ipv6 fe80::ff:fe00:0/64 (link-layer)
-lo ethernet UP 00:00:00:00:00:00
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -366,12 +366,12 @@ admin@example:/>
By default, the auto-configured link-local and global IPv6 addresses
are formed from a link-identifier based on the MAC address.
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 02:00:00:00:00:00
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8:0:1:0:ff:fe00:0/64 (link-layer)
ipv6 fe80::ff:fe00:0/64 (link-layer)
-lo ethernet UP 00:00:00:00:00:00
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -385,12 +385,12 @@ possible to specify use of a random identifier ([ietf-ip.yang][2] and
admin@example:/config/> edit interface eth0 ipv6
admin@example:/config/interface/eth0/ipv6/> set autoconf create-temporary-addresses true
admin@example:/config/interface/eth0/ipv6/> leave
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 02:00:00:00:00:00
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8:0:1:b705:8374:638e:74a8/64 (random)
ipv6 fe80::ad3d:b274:885a:9ffb/64 (random)
-lo ethernet UP 00:00:00:00:00:00
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
diff --git a/doc/lag.md b/doc/lag.md
index b4c6b4f81..b6b849341 100644
--- a/doc/lag.md
+++ b/doc/lag.md
@@ -87,34 +87,34 @@ Like other interfaces, link aggregates are also available in the general
interfaces overview in the CLI admin-exec context. Here is the above
static mode aggregate:
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-lo ethernet UP 00:00:00:00:00:00
- ipv4 127.0.0.1/8 (static)
- ipv6 ::1/128 (static)
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+lo ethernet UP 00:00:00:00:00:00
+ ipv4 127.0.0.1/8 (static)
+ ipv6 ::1/128 (static)
.
.
.
-lag0 lag UP static: balance-xor, hash: layer2
-│ ethernet UP 00:a0:85:00:02:00
-├ eth7 lag ACTIVE
-└ eth8 lag ACTIVE
+lag0 lag UP static: balance-xor, hash: layer2
+│ ethernet UP 00:a0:85:00:02:00
+├ eth7 lag ACTIVE
+└ eth8 lag ACTIVE
Same aggregate, but in LACP mode:
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-lo ethernet UP 00:00:00:00:00:00
- ipv4 127.0.0.1/8 (static)
- ipv6 ::1/128 (static)
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+lo ethernet UP 00:00:00:00:00:00
+ ipv4 127.0.0.1/8 (static)
+ ipv6 ::1/128 (static)
.
.
.
-lag0 lag UP lacp: active, rate: fast (1s), hash: layer2
-│ ethernet UP 00:a0:85:00:02:00
-├ eth7 lag ACTIVE active, short_timeout, aggregating, in_sync, collecting, distributing
-└ eth8 lag ACTIVE active, short_timeout, aggregating, in_sync, collecting, distributing
+lag0 lag UP lacp: active, rate: fast (1s), hash: layer2
+│ ethernet UP 00:a0:85:00:02:00
+├ eth7 lag ACTIVE active, short_timeout, aggregating, in_sync, collecting, distributing
+└ eth8 lag ACTIVE active, short_timeout, aggregating, in_sync, collecting, distributing
@@ -124,45 +124,45 @@ In addition to basic status shown in the interface overview, detailed
LAG status can be inspected:
admin@example:/> show interface lag0
-name : lag0
-index : 25
-mtu : 1500
-operational status : up
-physical address : 00:a0:85:00:02:00
-lag mode : static
-lag type : balance-xor
-lag hash : layer2
-link debounce up : 0 msec
-link debounce down : 0 msec
-ipv4 addresses :
-ipv6 addresses :
-in-octets : 0
-out-octets : 2142
+name : lag0
+index : 25
+mtu : 1500
+operational status : up
+physical address : 00:a0:85:00:02:00
+lag mode : static
+lag type : balance-xor
+lag hash : layer2
+link debounce up : 0 msec
+link debounce down : 0 msec
+ipv4 addresses :
+ipv6 addresses :
+in-octets : 0
+out-octets : 2142
Same aggregate, but in LACP mode:
admin@example:/> show interface lag0
-name : lag0
-index : 24
-mtu : 1500
-operational status : up
-physical address : 00:a0:85:00:02:00
-lag mode : lacp
-lag hash : layer2
-lacp mode : active
-lacp rate : fast (1s)
-lacp aggregate id : 1
+name : lag0
+index : 24
+mtu : 1500
+operational status : up
+physical address : 00:a0:85:00:02:00
+lag mode : lacp
+lag hash : layer2
+lacp mode : active
+lacp rate : fast (1s)
+lacp aggregate id : 1
lacp system priority: 65535
-lacp actor key : 9
-lacp partner key : 9
-lacp partner mac : 00:a0:85:00:03:00
-link debounce up : 0 msec
-link debounce down : 0 msec
-ipv4 addresses :
-ipv6 addresses :
-in-octets : 100892
-out-octets : 111776
+lacp actor key : 9
+lacp partner key : 9
+lacp partner mac : 00:a0:85:00:03:00
+link debounce up : 0 msec
+link debounce down : 0 msec
+ipv4 addresses :
+ipv6 addresses :
+in-octets : 100892
+out-octets : 111776
Member ports provide additional status information:
@@ -184,21 +184,21 @@ Member ports provide additional status information:
Example member port status:
admin@example:/> show interface eth7
-name : eth7
-index : 8
-mtu : 1500
-operational status : up
-physical address : 00:a0:85:00:02:00
-lag member : lag0
-lag member state : active
-lacp aggregate id : 1
-lacp actor state : active, short_timeout, aggregating, in_sync, collecting, distributing
-lacp partner state : active, short_timeout, aggregating, in_sync, collecting, distributing
-link failure count : 0
-ipv4 addresses :
-ipv6 addresses :
-in-octets : 473244
-out-octets : 499037
+name : eth7
+index : 8
+mtu : 1500
+operational status : up
+physical address : 00:a0:85:00:02:00
+lag member : lag0
+lag member state : active
+lacp aggregate id : 1
+lacp actor state : active, short_timeout, aggregating, in_sync, collecting, distributing
+lacp partner state : active, short_timeout, aggregating, in_sync, collecting, distributing
+link failure count : 0
+ipv4 addresses :
+ipv6 addresses :
+in-octets : 473244
+out-octets : 499037
diff --git a/doc/management.md b/doc/management.md
index 2a75214cb..677fd9961 100644
--- a/doc/management.md
+++ b/doc/management.md
@@ -109,13 +109,13 @@ CLI can be entered from shell in the same way as for SSH.
See the 'help' command for an introduction to the system
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-lo ethernet UP 00:00:00:00:00:00
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
-e1 ethernet LOWER-DOWN 00:53:00:06:03:01
-e2 ethernet LOWER-DOWN 00:53:00:06:03:02
+e1 ethernet LOWER-DOWN 00:53:00:06:03:01
+e2 ethernet LOWER-DOWN 00:53:00:06:03:02
...
admin@example:/>
diff --git a/doc/networking.md b/doc/networking.md
index bbe10226f..cb799a9d8 100644
--- a/doc/networking.md
+++ b/doc/networking.md
@@ -47,7 +47,7 @@ other traffic would be bridged as usual.
|----------|----------------------------|--------------------------------------------------------------|
| [bridge](bridging.md) | infix-if-bridge | SW implementation of an IEEE 802.1Q bridge |
| [ip](ip.md) | ietf-ip, infix-ip | IP address to the subordinate interface |
-| [vlan](ethernet.md#vlan-interfaces) | infix-if-vlan | Capture all traffic belonging to a specific 802.1Q VID |
+| [vlan](vlan.md) | infix-if-vlan | Capture all traffic belonging to a specific 802.1Q VID |
| [lag](lag.md) | infix-if-lag | Link aggregation, static and IEEE 802.3ad (LACP) |
| lo | ietf-interfaces | Software loopback interface |
| [eth](ethernet.md#physical-ethernet-interfaces) | ieee802-ethernet-interface | Physical Ethernet device/port |
diff --git a/doc/scripting-prod.md b/doc/scripting-prod.md
index 70fd1da44..7379636ff 100644
--- a/doc/scripting-prod.md
+++ b/doc/scripting-prod.md
@@ -39,20 +39,20 @@ Starting out, we assume a configuration where all ports are network
interfaces (possibly with IPv6 enabled).
```
-admin@example:/> show interfaces
-lo ethernet UP 00:00:00:00:00:00
+admin@example:/> show interface
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
-e1 ethernet LOWER-DOWN 00:53:00:06:11:01
-e2 ethernet LOWER-DOWN 00:53:00:06:11:02
-e3 ethernet LOWER-DOWN 00:53:00:06:11:03
-e4 ethernet LOWER-DOWN 00:53:00:06:11:04
-e5 ethernet LOWER-DOWN 00:53:00:06:11:05
-e6 ethernet LOWER-DOWN 00:53:00:06:11:06
-e7 ethernet LOWER-DOWN 00:53:00:06:11:07
-e8 ethernet LOWER-DOWN 00:53:00:06:11:08
-e9 ethernet LOWER-DOWN 00:53:00:06:11:09
-e10 ethernet UP 00:53:00:06:11:0a
+e1 ethernet LOWER-DOWN 00:53:00:06:11:01
+e2 ethernet LOWER-DOWN 00:53:00:06:11:02
+e3 ethernet LOWER-DOWN 00:53:00:06:11:03
+e4 ethernet LOWER-DOWN 00:53:00:06:11:04
+e5 ethernet LOWER-DOWN 00:53:00:06:11:05
+e6 ethernet LOWER-DOWN 00:53:00:06:11:06
+e7 ethernet LOWER-DOWN 00:53:00:06:11:07
+e8 ethernet LOWER-DOWN 00:53:00:06:11:08
+e9 ethernet LOWER-DOWN 00:53:00:06:11:09
+e10 ethernet UP 00:53:00:06:11:0a
ipv6 fe80::0053:00ff:fe06:110a/64 (link-layer)
admin@example:/>
```
@@ -80,7 +80,7 @@ admin@example:/config/> set interface e10 bridge-port bridge br0
admin@example:/config/>
```
-The interface status can be viewed using `show interfaces` after leaving
+The interface status can be viewed using `show interface` after leaving
configuration context. When configuring via SSH, first assign an IP
address to `br0` *before leaving* configuration context, e.g.
@@ -95,10 +95,10 @@ setup, including [setting IP address](#set-ip-address).
```
admin@example:/config/> leave
admin@example:/>
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
br0 bridge
-│ ethernet UP 00:53:00:06:11:01
+│ ethernet UP 00:53:00:06:11:01
├ e1 bridge LOWER-DOWN
├ e2 bridge LOWER-DOWN
├ e3 bridge LOWER-DOWN
@@ -109,7 +109,7 @@ br0 bridge
├ e8 bridge LOWER-DOWN
├ e9 bridge LOWER-DOWN
└ e10 bridge FORWARDING
-lo ethernet UP 00:00:00:00:00:00
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -154,21 +154,21 @@ admin@example:/>
Interface status would now should something like the following
```
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
br0 bridge
-│ ethernet UP 00:53:00:06:11:01
-├ e1 bridge LOWER-DOWN vlan:10u pvid:10
-├ e2 bridge LOWER-DOWN vlan:10u pvid:10
-├ e3 bridge LOWER-DOWN vlan:20u pvid:20
-├ e4 bridge LOWER-DOWN vlan:20u pvid:20
-├ e5 bridge LOWER-DOWN vlan:30u pvid:30
-├ e6 bridge LOWER-DOWN vlan:30u pvid:30
-├ e7 bridge LOWER-DOWN vlan:40u pvid:40
-├ e8 bridge LOWER-DOWN vlan:40u pvid:40
-├ e9 bridge LOWER-DOWN vlan:50u pvid:50
-└ e10 bridge FORWARDING vlan:50u pvid:50
-lo ethernet UP 00:00:00:00:00:00
+│ ethernet UP 00:53:00:06:11:01
+├ e1 bridge LOWER-DOWN vlan:10u pvid: 10
+├ e2 bridge LOWER-DOWN vlan:10u pvid: 10
+├ e3 bridge LOWER-DOWN vlan:20u pvid: 20
+├ e4 bridge LOWER-DOWN vlan:20u pvid: 20
+├ e5 bridge LOWER-DOWN vlan:30u pvid: 30
+├ e6 bridge LOWER-DOWN vlan:30u pvid: 30
+├ e7 bridge LOWER-DOWN vlan:40u pvid: 40
+├ e8 bridge LOWER-DOWN vlan:40u pvid: 40
+├ e9 bridge LOWER-DOWN vlan:50u pvid: 50
+└ e10 bridge FORWARDING vlan:50u pvid: 50
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -181,21 +181,21 @@ patched according to [above](#vlan-snake). We should see link up and
*FORWARDING* on all ports in the bridge.
```
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
br0 bridge
-│ ethernet UP 00:53:00:06:11:01
-├ e1 bridge FORWARDING vlan:10u pvid:10
-├ e2 bridge FORWARDING vlan:10u pvid:10
-├ e3 bridge FORWARDING vlan:20u pvid:20
-├ e4 bridge FORWARDING vlan:20u pvid:20
-├ e5 bridge FORWARDING vlan:30u pvid:30
-├ e6 bridge FORWARDING vlan:30u pvid:30
-├ e7 bridge FORWARDING vlan:40u pvid:40
-├ e8 bridge FORWARDING vlan:40u pvid:40
-├ e9 bridge FORWARDING vlan:50u pvid:50
-└ e10 bridge FORWARDING vlan:50u pvid:50
-lo ethernet UP 00:00:00:00:00:00
+│ ethernet UP 00:53:00:06:11:01
+├ e1 bridge FORWARDING vlan:10u pvid: 10
+├ e2 bridge FORWARDING vlan:10u pvid: 10
+├ e3 bridge FORWARDING vlan:20u pvid: 20
+├ e4 bridge FORWARDING vlan:20u pvid: 20
+├ e5 bridge FORWARDING vlan:30u pvid: 30
+├ e6 bridge FORWARDING vlan:30u pvid: 30
+├ e7 bridge FORWARDING vlan:40u pvid: 40
+├ e8 bridge FORWARDING vlan:40u pvid: 40
+├ e9 bridge FORWARDING vlan:50u pvid: 50
+└ e10 bridge FORWARDING vlan:50u pvid: 50
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/>
@@ -284,26 +284,26 @@ admin@example:/>
Interface *vlan10* with an auto-configured IPv6 address should appear.
```
-admin@example:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
br0 bridge vlan:10t
-│ ethernet UP 00:53:00:06:11:01
-├ e1 bridge FORWARDING vlan:10u pvid:10
-├ e2 bridge FORWARDING vlan:10u pvid:10
-├ e3 bridge FORWARDING vlan:20u pvid:20
-├ e4 bridge FORWARDING vlan:20u pvid:20
-├ e5 bridge FORWARDING vlan:30u pvid:30
-├ e6 bridge FORWARDING vlan:30u pvid:30
-├ e7 bridge FORWARDING vlan:40u pvid:40
-├ e8 bridge FORWARDING vlan:40u pvid:40
-├ e9 bridge FORWARDING vlan:50u pvid:50
-└ e10 bridge FORWARDING vlan:50u pvid:50
-lo ethernet UP 00:00:00:00:00:00
+│ ethernet UP 00:53:00:06:11:01
+├ e1 bridge FORWARDING vlan:10u pvid: 10
+├ e2 bridge FORWARDING vlan:10u pvid: 10
+├ e3 bridge FORWARDING vlan:20u pvid: 20
+├ e4 bridge FORWARDING vlan:20u pvid: 20
+├ e5 bridge FORWARDING vlan:30u pvid: 30
+├ e6 bridge FORWARDING vlan:30u pvid: 30
+├ e7 bridge FORWARDING vlan:40u pvid: 40
+├ e8 bridge FORWARDING vlan:40u pvid: 40
+├ e9 bridge FORWARDING vlan:50u pvid: 50
+└ e10 bridge FORWARDING vlan:50u pvid: 50
+lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
-vlan10 ethernet UP 00:53:00:06:11:01
+vlan10 ethernet UP 00:53:00:06:11:01
│ ipv6 fe80::0053:00ff:fe06:1101/64 (link-layer)
-└ br0 ethernet UP 00:53:00:06:11:01
+└ br0 ethernet UP 00:53:00:06:11:01
admin@example:/>
```
diff --git a/doc/vlan.md b/doc/vlan.md
new file mode 100644
index 000000000..687ecae29
--- /dev/null
+++ b/doc/vlan.md
@@ -0,0 +1,89 @@
+# VLAN Interfaces
+
+A VLAN interface is an interface stacked on top of another Linux interface
+that filters traffic for a single 802.1Q VID. `tcpdump` on a VLAN interface
+shows only frames matching that VID, compared to *all* VIDs when listening
+on the lower-layer interface.
+
+
+
+This page covers VLAN interfaces stacked on Ethernet, on a VLAN-filtering
+bridge, and on other VLAN interfaces. For VLAN handling *inside* a bridge
+(port VIDs, tagged/untagged membership, pvid), see [VLAN Filtering
+Bridge](bridging.md#vlan-filtering-bridge).
+
+## On Top of an Ethernet Interface
+
+A VLAN interface for VID 20 on top of an Ethernet interface `eth0` is by
+convention named `eth0.20`.
+
+admin@example:/> configure
+admin@example:/config/> edit interface eth0.20
+admin@example:/config/interface/eth0.20/> show
+type vlan;
+vlan {
+ tag-type c-vlan;
+ id 20;
+ lower-layer-if eth0;
+}
+admin@example:/config/interface/eth0.20/> leave
+
+
+The `tag-type` defaults to `c-vlan` (802.1Q customer VLAN, EtherType 0x8100).
+Set to `s-vlan` (802.1ad service VLAN, EtherType 0x88A8) to terminate an outer
+S-Tag.
+
+> [!TIP]
+> If you name your VLAN interface `foo0.N` or `vlanN`, where `N` is a
+> number, the CLI infers the interface type automatically. Otherwise
+> the type must be set explicitly.
+
+## On Top of a Bridge
+
+When the lower-layer interface is a VLAN-filtering bridge, the VLAN interface
+gives the CPU an IP-addressable endpoint inside the bridged broadcast domain
+for that VID. This pattern is named `vlanN` by convention.
+
+admin@example:/> configure
+admin@example:/config/> edit interface vlan10
+admin@example:/config/interface/vlan10/> set vlan id 10
+admin@example:/config/interface/vlan10/> set vlan lower-layer-if br0
+admin@example:/config/interface/vlan10/> leave
+
+
+The bridge `br0` must have VLAN 10 configured with the bridge itself as a
+tagged member. See [VLAN Filtering Bridge](bridging.md#vlan-filtering-bridge)
+for the bridge-side configuration.
+
+## Stacked (Q-in-Q)
+
+VLAN interfaces can be stacked. A VLAN interface whose lower-layer is itself
+a VLAN interface terminates the inner tag, leaving the outer tag for the
+parent to handle.
+
+admin@example:/> configure
+admin@example:/config/> edit interface eth0.10
+admin@example:/config/interface/eth0.10/> set vlan tag-type s-vlan
+admin@example:/config/interface/eth0.10/> leave
+admin@example:/config/> edit interface eth0.10.20
+admin@example:/config/interface/eth0.10.20/> show
+type vlan;
+vlan {
+ tag-type c-vlan;
+ id 20;
+ lower-layer-if eth0.10;
+}
+admin@example:/config/interface/eth0.10.20/> leave
+
+
+The summary view shows each VLAN row pointing at its immediate parent:
+
+admin@example:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0.10 vlan UP vid: 10
+│ ipv4 10.0.10.1/24 (static)
+└ eth0
+eth0.10.20 vlan UP vid: 20
+│ ipv4 10.0.10.20/28 (static)
+└ eth0.10
+
diff --git a/doc/vpn-wireguard.md b/doc/vpn-wireguard.md
index 10255847e..a3d41b97d 100644
--- a/doc/vpn-wireguard.md
+++ b/doc/vpn-wireguard.md
@@ -345,17 +345,17 @@ tunnel endpoints use IPv4 or IPv6.
Check WireGuard interface status and peer connections:
-admin@example:/> show interfaces
+admin@example:/> show interface
wg0 wireguard UP 2 peers (1 up)
ipv4 10.0.0.1/24 (static)
ipv6 fd00::1/64 (static)
-admin@example:/> show interfaces wg0
-name : wg0
-type : wireguard
-index : 12
-operational status : up
-peers : 2
+admin@example:/> show interface wg0
+name : wg0
+type : wireguard
+index : 12
+operational status : up
+peers : 2
Peer 1:
status : UP
diff --git a/doc/wifi.md b/doc/wifi.md
index fb5f3f00e..b670803bb 100644
--- a/doc/wifi.md
+++ b/doc/wifi.md
@@ -223,22 +223,22 @@ access-point).
Use `show interface` to see discovered networks and their signal strength:
admin@example:/> show interface wifi0
-name : wifi0
-type : wifi
-index : 3
-mtu : 1500
-operational status : up
-ip forwarding : enabled
-physical address : f0:09:0d:36:5f:86
-ipv4 addresses : 192.168.1.100/24 (dhcp)
-ipv6 addresses :
-in-octets : 148388
-out-octets : 24555
-mode : station
-ssid : MyNetwork
-signal : -45 dBm (good)
-rx bitrate : 72.2 Mbps
-tx bitrate : 86.6 Mbps
+name : wifi0
+type : wifi
+index : 3
+mtu : 1500
+operational status : up
+ip forwarding : enabled
+physical address : f0:09:0d:36:5f:86
+ipv4 addresses : 192.168.1.100/24 (dhcp)
+ipv6 addresses :
+in-octets : 148388
+out-octets : 24555
+mode : station
+ssid : MyNetwork
+signal : -45 dBm (good)
+rx bitrate : 72.2 Mbps
+tx bitrate : 86.6 Mbps
──────────────────────────────────────────────────────────────────────
Available Networks
SSID BSSID SECURITY SIGNAL CHANNEL
@@ -304,13 +304,13 @@ admin@example:/config/interface/wifi0/> leave
The connection attempt will start immediately. You can verify the connection status:
admin@example:/> show interface wifi0
-name : wifi0
-type : wifi
-operational status : up
-physical address : f0:09:0d:36:5f:86
-mode : station
-ssid : MyHomeNetwork
-signal : -52 dBm (good)
+name : wifi0
+type : wifi
+operational status : up
+physical address : f0:09:0d:36:5f:86
+mode : station
+ssid : MyHomeNetwork
+signal : -52 dBm (good)
**Station configuration parameters:**
diff --git a/mkdocs.yml b/mkdocs.yml
index 9e92c10d6..11769c7d1 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -33,6 +33,7 @@ nav:
- Bridging: bridging.md
- Link Aggregation: lag.md
- Ethernet Interfaces: ethernet.md
+ - VLAN Interfaces: vlan.md
- IP Addressing: ip.md
- Routing: routing.md
- Firewall Configuration: firewall.md
diff --git a/src/bin/copy.c b/src/bin/copy.c
index 803344504..bd6a59722 100644
--- a/src/bin/copy.c
+++ b/src/bin/copy.c
@@ -283,6 +283,7 @@ static void rmtmp(const char *path)
static void sysrepo_print_error(sr_session_ctx_t *sess)
{
const sr_error_info_t *erri = NULL;
+ const char *msg;
int err;
if (!sess)
@@ -292,7 +293,10 @@ static void sysrepo_print_error(sr_session_ctx_t *sess)
if (err || !erri || !erri->err_count)
return;
- warnx("%s (%d)", erri->err->message, erri->err->err_code);
+ msg = erri->err->message;
+ if (!msg)
+ msg = sr_strerror(erri->err->err_code);
+ warnx("%s (%d)", msg, erri->err->err_code);
}
/* Connect to sysrepo and create NACM-aware session on running datastore */
diff --git a/src/bin/show/__init__.py b/src/bin/show/__init__.py
index 266e642b8..14785d9c4 100755
--- a/src/bin/show/__init__.py
+++ b/src/bin/show/__init__.py
@@ -17,17 +17,18 @@ def get_json(xpath: str, datastore: str = "operational", quiet: bool = False) ->
print("Invalid XPATH. It must be a valid string starting with '/'.")
return {}
- try:
- result = subprocess.run(["copy", datastore, "-x", shlex.quote(xpath)],
- capture_output=True, text=True, check=True)
- if not result.stdout.strip():
- return {}
- json_data = json.loads(result.stdout)
- return json_data
- except subprocess.CalledProcessError as e:
- if not quiet:
- print(f"Error running copy: {e}")
+ result = subprocess.run(["copy", datastore, "-x", shlex.quote(xpath)],
+ capture_output=True, text=True)
+ if result.returncode != 0:
+ # copy already wrote a 'failed retrieving …' message (and a
+ # sysrepo error line) to stderr; relay it verbatim.
+ if not quiet and result.stderr:
+ print(result.stderr.rstrip())
+ return {}
+ if not result.stdout.strip():
return {}
+ try:
+ return json.loads(result.stdout)
except json.JSONDecodeError as e:
if not quiet:
print(f"Error parsing JSON output: {e}")
@@ -40,15 +41,20 @@ def cli_pretty(json_data: dict, command: str, *args: str):
return
safe_args = [shlex.quote(arg) for arg in args]
-
- try:
- json_input = json.dumps(json_data) # Keep as string, not bytes
- result = subprocess.run([
- "/usr/libexec/statd/cli-pretty", command, *safe_args
- ], input=json_input, capture_output=True, text=True, check=True)
+ json_input = json.dumps(json_data)
+ result = subprocess.run([
+ "/usr/libexec/statd/cli-pretty", command, *safe_args
+ ], input=json_input, capture_output=True, text=True)
+
+ # cli-pretty prints a user-facing message on stdout before any
+ # sys.exit(1) (e.g. 'Interface "w" not found'). Relay it regardless
+ # of the exit status, and only surface the generic exec error when
+ # nothing useful was produced.
+ if result.stdout:
print(result.stdout, end="")
- except subprocess.CalledProcessError as e:
- print(f"Error running cli-pretty: {e}")
+ elif result.returncode != 0:
+ msg = result.stderr.strip() or f"exit status {result.returncode}"
+ print(f"Error running cli-pretty: {msg}")
def dhcp(args: List[str]) -> None:
diff --git a/src/confd/yang/confd.inc b/src/confd/yang/confd.inc
index d8d45592e..4cce22cd1 100644
--- a/src/confd/yang/confd.inc
+++ b/src/confd/yang/confd.inc
@@ -44,10 +44,11 @@ MODULES=(
"infix-meta@2025-12-10.yang"
"infix-system@2026-03-09.yang"
"infix-services@2026-03-20.yang"
- "ieee802-ethernet-interface@2019-06-21.yang"
- "infix-ethernet-interface@2024-02-27.yang"
+ "ieee802-ethernet-interface@2025-09-10.yang"
+ "ieee802-ethernet-phy-type@2025-09-10.yang"
+ "infix-ethernet-interface@2026-05-18.yang"
"infix-factory-default@2023-06-28.yang"
- "infix-interfaces@2026-05-13.yang -e vlan-filtering"
+ "infix-interfaces@2026-05-18.yang -e vlan-filtering"
"ietf-crypto-types -e cleartext-symmetric-keys"
"infix-crypto-types@2026-02-14.yang"
"ietf-keystore -e symmetric-keys"
diff --git a/src/confd/yang/confd/ieee802-ethernet-interface@2019-06-21.yang b/src/confd/yang/confd/ieee802-ethernet-interface@2019-06-21.yang
deleted file mode 100644
index d02ecced8..000000000
--- a/src/confd/yang/confd/ieee802-ethernet-interface@2019-06-21.yang
+++ /dev/null
@@ -1,928 +0,0 @@
-module ieee802-ethernet-interface {
- yang-version 1.1;
-
- namespace
- "urn:ieee:std:802.3:yang:ieee802-ethernet-interface";
-
- prefix ieee802-eth-if;
-
- import ietf-yang-types {
- prefix yang;
- reference "IETF RFC 6991";
- }
-
- import ietf-interfaces {
- prefix if;
- reference "IETF RFC 8343";
- }
-
- import iana-if-type {
- prefix ianaift;
- reference "http://www.iana.org/assignments/yang-parameters/
- iana-if-type@2018-07-03.yang";
- }
-
- organization
- "IEEE Std 802.3 Ethernet Working Group
- Web URL: http://www.ieee802.org/3/";
-
- contact
- "Web URL: http://www.ieee802.org/3/";
-
- description
- "This module contains YANG definitions for configuring IEEE Std
- 802.3 Ethernet Interfaces.
- In this YANG module, 'Ethernet interface' can be interpreted
- as referring to 'IEEE Std 802.3 compliant Ethernet
- interfaces'.";
-
- revision 2019-06-21{
- description "Initial revision.";
- reference "IEEE Std 802.3-2018, unless dated explicitly";
- }
-
- typedef eth-if-speed-type {
- type decimal64 {
- fraction-digits 3;
- }
- units "Gb/s";
- description
- "Used to represent the configured, negotiated, or actual speed
- of an Ethernet interface in Gigabits per second (Gb/s),
- accurate to 3 decimal places (i.e., accurate to 1 Mb/s).";
- }
-
- typedef duplex-type {
- type enumeration {
- enum full {
- description
- "Full duplex.";
- }
- enum half {
- description
- "Half duplex.";
- }
- enum unknown {
- description
- "Link is currently disconnected or initializing.";
- }
- }
- default full;
- description
- "Used to represent the configured, negotiated, or actual
- duplex mode of an Ethernet interface.";
- reference "IEEE Std 802.3, 30.3.1.1.32, aDuplexStatus";
- }
-
- typedef pause-fc-direction-type {
- type enumeration {
- enum "disabled" {
- description
- "Flow-control disabled in both ingress and egress
- directions, i.e., PAUSE frames are not transmitted and
- PAUSE frames received in the ingress direction are
- discarded without processing.";
- }
- enum "ingress-only" {
- description
- "PAUSE frame based flow control is enabled in the ingress
- direction only, i.e., PAUSE frames may be transmitted to
- reduce the ingress traffic flow, but PAUSE frames received
- in the ingress direction are discarded without reducing
- the egress traffic rate.";
- }
- enum "egress-only" {
- description
- "PAUSE frame based flow control is enabled in the egress
- direction only, i.e., PAUSE frames are not transmitted,
- but PAUSE frames received in the ingress direction are
- processed to reduce the egress traffic rate.";
- }
- enum "bi-directional" {
- description
- "PAUSE frame based flow control is enabled in both ingress
- and egress directions, i.e., PAUSE frames may be
- transmitted to reduce the ingress traffic flow, and
- PAUSE frames received on ingress are processed to reduce
- the egress traffic rate.";
- }
- enum "undefined" {
- description
- "Link is currently disconnected or initializing.";
- }
- }
- description
- "Used to represent the configured, negotiated, or actual
- PAUSE frame-based flow control setting.";
-
- reference
- "IEEE Std 802.3.1, dot3PauseAdminMode and dot3PauseOperMode";
- }
-
- feature ethernet-pfc {
- description
- "This device supports Ethernet priority flow-control.";
- }
-
- feature ethernet-pause {
- description
- "This device supports Ethernet PAUSE.";
- }
-
- augment "/if:interfaces/if:interface" {
- when "derived-from-or-self(if:type, 'ianaift:ethernetCsmacd')" {
- description
- "Applies to all P2P Ethernet interfaces.";
- }
- description
- "Augment interface model with Ethernet interface
- specific configuration nodes.";
-
- container ethernet {
- description
- "Contains all Ethernet interface related configuration.";
-
- container auto-negotiation {
- presence
- "The presence of this container indicates that
- auto-negotiation is supported on this Ethernet
- interface.";
- description
- "Contains auto-negotiation transmission parameters
-
- This container contains a data node that allows the
- advertised duplex value in the negotiation to be
- restricted.
-
- If not specified then the default behavior for the duplex
- data node is to negotiate all available values for the
- particular type of Ethernet PHY associated with the
- interface.
-
- If auto-negotiation is enabled, and PAUSE frame based flow
- control has not been explicitly configured, then the
- default PAUSE frame based flow control capabilities that
- are negotiated allow for bi-directional or egress-only
- PAUSE frame based flow control.
-
- If auto-negotiation is enabled, and PAUSE frame based flow
- control has been explicitly configured, then the
- configuration settings restrict the values that may be
- negotiated. However, it should be noted that the protocol
- does not allow only egress PAUSE frame based flow control
- to be negotiated without also allowing bi-directional
- PAUSE frame based flow control.";
- reference
- "IEEE Std 802.3, Clause 28 and Annexes 28A-D";
-
- leaf enable {
- type boolean;
- default true;
-
- description
- "Controls whether auto-negotiation is enabled or
- disabled.
- For interface types that support auto-negotiation then
- it defaults to being enabled.
-
- For interface types that do not support auto-negotiation,
- the related configuration data is ignored.";
- }
- leaf negotiation-status {
- when "../enable = 'true'";
- type enumeration {
- enum in-progress {
- description
- "The auto-negotiation protocol is running and
- negotiation is currently in-progress.";
- }
- enum complete {
- description
- "The auto-negotiation protocol has completed
- successfully.";
- }
- enum failed {
- description
- "The auto-negotiation protocol has failed.";
- }
- enum unknown {
- description
- "The auto-negotiation status is not currently known,
- this could be because it is still negotiating or the
- protocol cannot run (e.g., if no medium is present).";
- }
- enum no-negotiation {
- description
- "No auto-negotiation is executed.
- The auto-negotation function is either not supported
- on this interface or has not been enabled.";
- }
- }
- config false;
- description
- "The status of the auto-negotiation protocol.";
- reference
- "IEEE 802.3, 30.6.1.1.4, aAutoNegAutoConfig";
- }
-
- }
-
- leaf duplex {
- type duplex-type;
- description
- "Operational duplex mode of the Ethernet interface.";
- reference
- "IEEE Std 802.3, 30.3.1.1.32 aDuplexStatus";
- }
-
- leaf speed {
- type eth-if-speed-type;
- units "Gb/s";
- description
- "Operational speed (data rate) of the Ethernet interface.
- The default value is implementation-dependent.";
- }
-
- container flow-control {
- description
- "Holds the different types of Ethernet PAUSE frame based
- flow control that can be enabled.";
- container pause {
- if-feature "ethernet-pause";
- description
- "IEEE Std 802.3 PAUSE frame based PAUSE frame based flow
- control.";
- reference
- "IEEE Std 802.3, Annex 31B";
- leaf direction {
- type pause-fc-direction-type;
- description
- "Indicates which direction PAUSE frame based flow
- control is enabled in, or whether it is disabled.
- The default flow-control settings are vendor specific.
- If auto-negotiation is enabled, then PAUSE based
- flow-control is negotiated by default.
- The default value is implementation-dependent.";
- }
-
- container statistics {
- config false;
- description
- "Contains the number of PAUSE frames received or
- transmitted.";
- leaf in-frames-pause {
- type yang:counter64;
- units frames;
- description
- "A count of PAUSE MAC Control frames transmitted on
- this Ethernet interface.
-
- Discontinuities in the values of counters in
- this container can occur at re-initialization of the
- management system, and at other times as indicated
- by the value of the 'discontinuity-time' leaf
- defined in the ietf-interfaces YANG module
- (IETF RFC 8343).";
- reference
- "IEEE Std 802.3, 30.3.4.3 aPAUSEMACCtrlFramesReceived";
- }
- leaf out-frames-pause {
- type yang:counter64;
- units frames;
- description
- "A count of PAUSE MAC Control frames transmitted on
- this Ethernet interface.
-
- Discontinuities in the values of counters in
- this container can occur at re-initialization of the
- management system, and at other times as indicated
- by the value of the 'discontinuity-time' leaf
- defined in the ietf-interfaces YANG module
- (IETF RFC 8343).";
- reference
- "IEEE Std 802.3, 30.3.4.2
- aPAUSEMACCtrlFramesTransmitted";
- }
- }
- }
-
- container pfc {
- if-feature "ethernet-pfc";
- description
- "IEEE Std 802.3 Priority-based flow control.";
- reference
- "IEEE Std 802.3, Annex 31D";
-
- leaf enable {
- type boolean;
-
- description
- "True indicates that IEEE Std 802.3 priority-based
- flow control is enabled, false indicates that
- IEEE Std 802.3 priority-based flow control is disabled.
- For interfaces that have auto-negotiation,
- the priority-based flow control is enabled by default.";
- }
-
- container statistics {
- config false;
- description
- "This container collects all statistics for
- Ethernet interfaces.";
-
- leaf in-frames-pfc {
- type yang:counter64;
- units frames;
- description
- "A count of PFC MAC Control frames received on this
- Ethernet interface.
-
- Discontinuities in the values of counters in
- this container can occur at re-initialization of the
- management system, and at other times as indicated
- by the value of the 'discontinuity-time' leaf
- defined in the ietf-interfaces YANG module
- (IETF RFC 8343).";
- reference
- "IEEE Std 802.3.1, dot3HCInPFCFrames";
- }
-
- leaf out-frames-pfc {
- type yang:counter64;
- units frames;
- description
- "A count of PFC MAC Control frames transmitted on
- this interface.
-
- Discontinuities in the values of counters in
- this container can occur at re-initialization of the
- management system, and at other times as indicated
- by the value of the 'discontinuity-time' leaf
- defined in the ietf-interfaces YANG module
- (IETF RFC 8343).";
- reference
- "IEEE Std 802.3.1, dot3HCInPFCFrames";
- }
- }
- }
-
- leaf force-flow-control {
- type boolean;
- default false;
- description
- "Explicitly forces the local PAUSE frame based flow control
- settings regardless of what has been negotiated.
-
- Since the auto-negotiation of flow-control settings
- does not allow all sane combinations to be negotiated
- (e.g., consider a device that is only capable of sending
- PAUSE frames connected to a peer device that is only
- capable of receiving and acting on PAUSE frames) and
- failing to agree on the flow-control settings does not
- cause the auto-negotiation to fail completely, then it is
- sometimes useful to be able to explicitly enable
- particular PAUSE frame based flow control settings on
- the local device regardless of what is being advertised
- or negotiated.";
- reference
- "IEEE Std 802.3, Table 28B-3";
- }
- }
-
- leaf max-frame-length {
- type uint16;
- units octets;
- config false;
- description
- "This indicates the MAC frame length (including FCS bytes)
- at which frames are dropped for being too long.";
- reference
- "IEEE Std 802.3, 30.3.1.1.37 aMaxFrameLength";
- }
-
- leaf mac-control-extension-control {
- type boolean;
- config false;
- description
- "A value that identifies the current EXTENSION MAC Control
- function, as specified in IEEE Std 802.3, Annex 31C.";
- reference
- "IEEE Std 802.3, 30.3.8.3 aEXTENSIONMACCtrlStatus
- IEEE Std 802.3.1, dot3ExtensionMacCtrlStatus ";
- }
-
- leaf frame-limit-slow-protocol {
- type uint64;
- units f/s;
- default 10;
- config false;
- description
- "The maximum number of Slow Protocol frames of a given
- subtype that can be transmitted in a one second interval.
- The default value is 10.";
- reference
- "IEEE Std 802.3, 30.3.1.1.38 aSlowProtocolFrameLimit";
- }
-
- container capabilities {
- config false;
- description
- "Container all Ethernet interface specific capabilities.";
-
- leaf auto-negotiation {
- type boolean;
- description
- "Indicates whether auto-negotiation may be configured on
- this interface.";
- }
-
- }
-
- container statistics {
- config false;
- description
- "Contains statistics specific to Ethernet interfaces.
-
- Discontinuities in the values of counters in the
- container can occur at re-initialization of the management
- system, and at other times as indicated by the value of
- the 'discontinuity-time' leaf defined in the
- ietf-interfaces YANG module (IETF RFC 8343).";
-
- container frame {
- description
- "Contains frame statistics specific to Ethernet
- interfaces.
-
- All octet frame lengths include the 4 byte FCS.
-
- Error counters are only reported once ... The count
- represented by an instance of this object is incremented
- when the frameCheckError status is returned by the MAC
- service to the LLC (or other MAC user). Received frames
- for which multiple error conditions pertain are,
- according to the conventions of IEEE Std 802.3 Layer
- Management, counted exclusively according to the error
- status presented to the LLC.
-
- A frame that is counted by an instance of this object is
- also counted by the corresponding instance of 'in-errors'
- leaf defined in the ietf-interfaces YANG module
- (IETF RFC 8343).
-
- Discontinuities in the values of counters in the
- container can occur at re-initialization of the
- management system, and at other times as indicated by
- the value of the 'discontinuity-time' leaf defined in
- the ietf-interfaces YANG module (IETF RFC 8343).";
-
- leaf in-total-frames {
- type yang:counter64;
- units frames;
- description
- "The total number of frames (including bad frames)
- received on the Ethernet interface.
-
- This counter is calculated by summing the following
- IEEE Std 802.3, Clause 30 counters:
- aFramesReceivedOK +
- aFrameCheckSequenceErrors +
- aAlignmentErrors +
- aFrameTooLongErrors +
- aFramesLostDueToIntMACRcvError
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, Clause 30 counters, as specified
- in the description above.";
- }
-
- leaf in-total-octets {
- type yang:counter64;
- units octets;
- description
- "The total number of octets of data (including those in
- bad frames) received on the Ethernet interface.
-
- Includes the 4-octet FCS.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IETF RFC 2819, etherStatsOctets";
- }
-
- leaf in-frames {
- type yang:counter64;
- units frames;
- description
- "A count of frames (including unicast, multicast and
- broadcast) that have been successfully received on the
- Ethernet interface.
-
- This count does not include frames received with
- frame-too-long, FCS, length or alignment errors, or
- frames lost due to internal MAC sublayer error.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.1.1.5 aFramesReceivedOK";
- }
-
- leaf in-multicast-frames {
- type yang:counter64;
- units frames;
- description
- "A count of multicast frames that have been
- successfully received on the Ethernet interface.
-
- This counter represents a subset of the frames counted
- by in-frames.
-
- This count does not include frames received with
- frame-too-long, FCS, length or alignment errors, or
- frames lost due to internal MAC sublayer error.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.1.1.21 aMulticastFramesReceivedOK";
- }
-
- leaf in-broadcast-frames {
- type yang:counter64;
- units frames;
- description
- "A count of broadcast frames that have been
- successfully received on the Ethernet interface.
-
- This counter represents a subset of the frames counted
- by in-frames.
-
- This count does not include frames received with
- frame-too-long, FCS, length or alignment errors, or
- frames lost due to internal MAC sublayer error.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.1.1.22 aBroadcastFramesReceivedOK";
- }
-
- leaf in-error-fcs-frames {
- type yang:counter64;
- units frames;
- description
- "A count of receive frames that are of valid length,
- but do not pass the FCS check, regardless of whether
- or not the frames are an integral number of octets in
- length.
-
- This count effectively comprises
- aFrameCheckSequenceErrors and aAlignmentErrors added
- together.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.1.1.6 aFrameCheckSequenceErrors;
- IEEE Std 802.3, 30.3.1.1.7 aAlignmentErrors";
- }
-
- leaf in-error-undersize-frames {
- type yang:counter64;
- units frames;
- description
- "A count of frames received on a particular Ethernet
- interface that are less than 64 bytes in length, and
- are discarded.
-
- This counter is incremented regardless of whether the
- frame passes the FCS check.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IETF RFC 2819, etherStatsUndersizePkts and
- etherStatsFragments";
- }
-
- leaf in-error-oversize-frames {
- type yang:counter64;
- units frames;
- description
- "A count of frames received on a particular Ethernet
- interface that exceed the maximum permitted frame
- size, that is specified in max-frame-length, and are
- discarded.
-
- This counter is incremented regardless of whether the
- frame passes the FCS check.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference "IEEE Std 802.3, 30.3.1.1.25 aFrameTooLongErrors";
- }
-
- leaf in-error-mac-internal-frames {
- type yang:counter64;
- units frames;
- description
- "A count of frames for which reception on a particular
- Ethernet interface fails due to an internal MAC
- sublayer receive error.
-
- A frame is only counted by an instance of this object
- if it is not counted by the corresponding instance of
- either the in-error-fcs-frames, in-error-undersize-frames,
- or in-error-oversize-frames. The precise meaning of the
- count represented by an instance of this object is
- implementation-specific.
-
- In particular, an instance of this object may
- represent a count of receive errors on a particular
- Ethernet interface that are not otherwise counted.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.1.1.15
- aFramesLostDueToIntMACRcvError";
- }
-
- leaf out-frames {
- type yang:counter64;
- units frames;
- description
- "A count of frames (including unicast, multicast and
- broadcast) that have been successfully transmitted on
- the Ethernet interface.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.1.1.2 aFramesTransmittedOK";
- }
-
- leaf out-multicast-frames {
- type yang:counter64;
- units frames;
- description
- "A count of multicast frames that have been
- successfully transmitted on the Ethernet interface.
-
- This counter represents a subset of the frames counted
- by out-frames.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.1.1.18 aMulticastFramesXmittedOK";
- }
-
- leaf out-broadcast-frames {
- type yang:counter64;
- units frames;
- description
- "A count of broadcast frames that have been
- successfully transmitted on the Ethernet interface.
-
- This counter represents a subset of the frames counted
- by out-frames.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.1.1.19 aBroadcastFramesXmittedOK";
- }
-
- leaf out-error-mac-internal-frames {
- type yang:counter64;
- units frames;
- description
- "A count of frames for which transmission on a
- particular Ethernet interface fails due to an internal
- MAC sublayer transmit error.
-
- The precise meaning of the count represented by an
- instance of this object is implementation-specific. In
- particular, an instance of this object may represent a
- count of transmission errors on a particular Ethernet
- interface that are not otherwise counted.
-
- Also see the 'description' statement associated with
- the parent 'statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.1.1.12
- aFramesLostDueToIntMACXmitError";
- }
- }
-
- container phy {
- description
- "Ethernet statistics related to the PHY layer.
-
- Discontinuities in the values of counters in the
- container can occur at re-initialization of the
- management system, and at other times as indicated by
- the value of the 'discontinuity-time' leaf defined in
- the ietf-interfaces YANG module (IETF RFC 8343).";
-
- leaf in-error-symbol {
- type yang:counter64;
- units errors;
- description
- "A count of the number of symbol errors that have
- occurred.
-
- For the precise definition of when the symbol error
- counter is incremented, please see the 'description'
- text associated with aSymbolErrorDuringCarrier,
- specified in IEEE Std 802.3, 30.3.2.1.5.
-
- Also see the 'description' statement associated with
- the parent 'phy-statistics' container for additional
- common semantics related to this counter.";
- reference
- "IEEE Std 802.3, 30.3.2.1.5 aSymbolErrorDuringCarrier";
- }
-
- container lpi {
- description
- "Physical Ethernet statistics for the energy efficiency
- related low power idle indications.";
-
- leaf in-lpi-transitions {
- type yang:counter64;
- units transitions;
- description
- "A count of occurrences of the transition from
- DEASSERT to ASSERT of the LPI_INDICATE
- parameter. The indication reflects the state of the
- PHY according to the requirements of the RS (see
- IEEE Std 802.3, 22.7, 35.4, and 46.4).
-
- Also see the 'description' statement associated with
- the parent 'phy-statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.2.1.11 aReceiveLPITransitions";
- }
-
- leaf in-lpi-time {
- type decimal64 {
- fraction-digits 6;
- }
- units seconds;
- description
- "A count reflecting the total amount of time (in
- seconds) that the LPI_REQUEST parameter has the
- value ASSERT. The request is indicated to the PHY
- according to the requirements of the RS (see IEEE Std
- 802.3, 22.7, 35.4, and 46.4).
-
- Also see the 'description' statement associated with
- the parent 'phy-statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.2.1.9 aReceiveLPIMicroseconds";
- }
-
- leaf out-lpi-transitions {
- type yang:counter64;
- units transitions;
- description
- "A count of occurrences of the transition from state
- LPI_DEASSERTED to state LPI_ASSERTED in the LPI
- transmit state diagram of the RS. The state
- transition corresponds to the assertion of the
- LPI_REQUEST parameter. The request is indicated to
- the PHY according to the requirements of the RS (see
- IEEE Std 802.3, 22.7, 35.4, 46.4.)
-
- Also see the 'description' statement associated with
- the parent 'phy-statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.2.1.10 aTransmitLPITransitions";
- }
-
- leaf out-lpi-time {
- type decimal64 {
- fraction-digits 6;
- }
- units seconds;
- description
- "A count reflecting the total amount of time (in
- seconds) that the LPI_INDICATION parameter has the
- value ASSERT. The request is indicated to the PHY
- according to the requirements of the RS (see IEEE
- 802.3, 22.7, 35.4, and 46.4).
-
- Also see the 'description' statement associated with
- the parent 'phy-statistics' container for additional
- common semantics related to this counter.";
-
- reference
- "IEEE Std 802.3, 30.3.2.1.8 aTransmitLPIMicroseconds";
- }
- }
- }
-
- container mac-control {
- description
- "A group of statistics specific to MAC Control operation
- of selected Ethernet interfaces.
-
- Discontinuities in the values of counters in the
- container can occur at re-initialization of the
- management system, and at other times as indicated by
- the value of the 'discontinuity-time' leaf defined in
- the ietf-interfaces YANG module (IETF RFC 8343).";
-
- reference
- "IEEE Std 802.3.1, dot3ExtensionTable";
-
- leaf in-frames-mac-control-unknown {
- type yang:counter64;
- units frames;
- description
- "A count of MAC Control frames with an unsupported
- opcode received on this Ethernet interface.
-
- Frames counted against this counter are also counted
- against in-discards defined in the ietf-interfaces
- YANG module (IETF RFC 8343).
-
- Also see the 'description' statement associated with
- the parent 'mac-control-statistics' container for
- additional semantics.";
- reference
- "IEEE Std 802.3, 30.3.3.5 aUnsupportedOpcodesReceived";
- }
-
- leaf in-frames-mac-control-extension {
- type yang:counter64;
- units frames;
- description
- "The count of Extension MAC Control frames received on
- this Ethernet interface.
-
- Also see the 'description' statement associated with
- the parent 'mac-control-statistics' container for
- additional semantics.";
- reference
- "IEEE Std 802.3, 30.3.8.2
- aEXTENSIONMACCtrlFramesReceived";
- }
-
- leaf out-frames-mac-control-extension {
- type yang:counter64;
- units frames;
- description
- "The count of Extension MAC Control frames transmitted
- on this Ethernet interface.
-
- Also see the 'description' statement associated with
- the parent 'mac-control-statistics' container for
- additional semantics.";
- reference
- "IEEE Std 802.3, 30.3.8.1
- aEXTENSIONMACCtrlFramesTransmitted";
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/confd/yang/confd/ieee802-ethernet-interface@2025-09-10.yang b/src/confd/yang/confd/ieee802-ethernet-interface@2025-09-10.yang
new file mode 100644
index 000000000..4e33c11c4
--- /dev/null
+++ b/src/confd/yang/confd/ieee802-ethernet-interface@2025-09-10.yang
@@ -0,0 +1,860 @@
+module ieee802-ethernet-interface {
+ yang-version 1.1;
+ namespace "urn:ieee:std:802.3:yang:ieee802-ethernet-interface";
+ prefix ieee802-eth-if;
+
+ import ietf-yang-types {
+ prefix yang;
+ reference
+ "IETF RFC 6991";
+ }
+ import iana-if-type {
+ prefix ianaift;
+ reference
+ "http://www.iana.org/assignments/yang-parameters/
+ iana-if-type@2023-01-26.yang";
+ }
+ import ietf-interfaces {
+ prefix if;
+ reference
+ "IETF RFC 8343";
+ }
+ import ieee802-ethernet-phy-type {
+ prefix ieee802-phy;
+ reference
+ "IEEE Std 802.3-2022";
+ }
+
+ organization
+ "IEEE Std 802.3 Ethernet Working Group
+ Web URL: http://www.ieee802.org/3/";
+ contact
+ "Web URL: http://www.ieee802.org/3/";
+ description
+ "This module contains YANG definitions for configuring IEEE Std
+ 802.3 Ethernet Interfaces.
+ In this YANG module, 'Ethernet interface' can be interpreted
+ as referring to 'IEEE Std 802.3 compliant Ethernet
+ interfaces'.";
+
+ revision 2025-09-10 {
+ description
+ "Updates under IEEE Std 802.3.2-2025";
+ reference
+ "IEEE Std 802.3-2022 and IEEE Std 802.3.1-2024, unless dated
+ explicitly";
+ }
+
+ feature ethernet-pfc {
+ description
+ "This device supports Ethernet priority flow control.";
+ }
+
+ feature ethernet-pause {
+ description
+ "This device supports Ethernet PAUSE.";
+ }
+
+ typedef eth-if-speed-type {
+ type decimal64 {
+ fraction-digits 3;
+ }
+ units "Gb/s";
+ status obsolete;
+ description
+ "Used to represent the configured, negotiated, or actual
+ speed of an Ethernet interface in Gigabits per second
+ (Gb/s), accurate to 3 decimal places (i.e., accurate to
+ 1 Mb/s).";
+ }
+
+ typedef duplex-type {
+ type enumeration {
+ enum full {
+ description
+ "Full duplex.";
+ }
+ enum half {
+ description
+ "Half duplex.";
+ }
+ enum unknown {
+ description
+ "Link is currently disconnected or initializing.";
+ }
+ }
+ default "full";
+ description
+ "Used to represent the configured, negotiated, or actual
+ duplex mode of an Ethernet interface.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.32, aDuplexStatus";
+ }
+
+ typedef pause-fc-direction-type {
+ type enumeration {
+ enum disabled {
+ description
+ "Flow control disabled in both ingress and egress
+ directions.";
+ }
+ enum ingress-only {
+ description
+ "PAUSE frame-based flow control is enabled in the ingress
+ direction only.";
+ }
+ enum egress-only {
+ description
+ "PAUSE frame-based flow control is enabled in the egress
+ direction only.";
+ }
+ enum bi-directional {
+ description
+ "PAUSE frame-based flow control is enabled in both
+ ingress and egress directions.";
+ }
+ enum undefined {
+ description
+ "Link is currently disconnected or initializing.";
+ }
+ }
+ description
+ "Used to represent the configured, negotiated, or actual
+ PAUSE frame-based flow control setting.";
+ reference
+ "IEEE Std 802.3.1, dot3PauseAdminMode and dot3PauseOperMode";
+ }
+
+ augment "/if:interfaces/if:interface" {
+ when "derived-from-or-self(if:type, 'ianaift:ethernetCsmacd')" {
+ description
+ "Applies to all Ethernet interfaces.";
+ }
+ description
+ "Augment interface model with Ethernet interface
+ specific configuration nodes.";
+ container ethernet {
+ description
+ "Contains all Ethernet interface related configuration.";
+ container auto-negotiation {
+ presence "The presence of this container indicates that
+ auto-negotiation is supported on this Ethernet
+ interface.";
+ description
+ "Contains auto-negotiation transmission parameters.
+
+ This container contains a data node that allows the
+ advertised duplex value in the negotiation to be
+ restricted.
+
+ If not specified then the default behavior for the
+ duplex data node is to negotiate all available values for
+ the particular type of Ethernet PHY associated with the
+ interface.";
+ reference
+ "IEEE Std 802.3, Clause 28 and Annexes 28A-D";
+ leaf enable {
+ type boolean;
+ default "true";
+ description
+ "Controls whether auto-negotiation is enabled or
+ disabled.
+ For interface types that support auto-negotiation then
+ it defaults to being enabled.
+
+ For interface types that do not support
+ auto-negotiation, the related configuration data is
+ ignored.";
+ }
+ leaf negotiation-status {
+ when "../enable = 'true'";
+ type enumeration {
+ enum in-progress {
+ description
+ "The auto-negotiation protocol is running and
+ negotiation is currently in-progress.";
+ }
+ enum complete {
+ description
+ "The auto-negotiation protocol has completed
+ successfully.";
+ }
+ enum failed {
+ description
+ "The auto-negotiation protocol has failed.";
+ }
+ enum unknown {
+ description
+ "The auto-negotiation status is not currently known,
+ this could be because it is still negotiating or the
+ protocol cannot run
+ (e.g., if no medium is present).";
+ }
+ enum no-negotiation {
+ description
+ "No auto-negotiation is executed.
+ The auto-negotiation function is either not
+ supported on this interface or has not been
+ enabled.";
+ }
+ }
+ config false;
+ description
+ "The status of the auto-negotiation protocol.";
+ reference
+ "IEEE 802.3, 30.6.1.1.4, aAutoNegAutoConfig";
+ }
+ }
+ leaf phy-type {
+ type identityref {
+ base ieee802-phy:phy-type;
+ }
+ config false;
+ description
+ "A value that uniquely identifies the IEEE 802.3 PHY type
+ of the interface.";
+ reference
+ "IEEE Std 802.3, 30.3.2.1.2 aPhyType";
+ }
+ leaf pmd-type {
+ type identityref {
+ base ieee802-phy:pmd-type;
+ }
+ config false;
+ description
+ "A value that uniquely identifies the IEEE 802.3 PMD type
+ of the interface.";
+ reference
+ "IEEE Std 802.3, 30.5.1.1.2 aMAUType";
+ }
+ leaf duplex {
+ type duplex-type;
+ description
+ "Operational duplex mode of the Ethernet interface.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.32 aDuplexStatus";
+ }
+ leaf speed {
+ type eth-if-speed-type;
+ units "Gb/s";
+ status obsolete;
+ description
+ "Operational speed (data rate) of the Ethernet interface.
+ The default value is implementation dependent.
+ Superseded by speed in /if:interfaces/if:interface";
+ }
+ /* deprecated flow-control container */
+ container flow-control {
+ status deprecated;
+ description
+ "Holds the different types of Ethernet PAUSE frame-based
+ flow control that can be enabled.
+ Superseded by new container - pause.";
+ container pause {
+ if-feature "ethernet-pause";
+ description
+ "IEEE Std 802.3 PAUSE frame-based flow control.";
+ reference
+ "IEEE Std 802.3, Annex 31B";
+ leaf direction {
+ type pause-fc-direction-type;
+ description
+ "Indicates which direction PAUSE frame-based flow
+ control is enabled in, or whether it is disabled.
+ The default flow-control settings are vendor
+ specific. If auto-negotiation is enabled, then PAUSE
+ based flow control is negotiated by default.
+ The default value is implementation dependent.";
+ }
+ container statistics {
+ config false;
+ description
+ "Contains the number of PAUSE frames received or
+ transmitted.
+
+ Discontinuities in the values of counters in
+ this container can occur at re-initialization of
+ the management system, and at other times as
+ indicated by the value of the 'discontinuity-time'
+ leaf defined in the ietf-interfaces YANG module
+ (IETF RFC 8343).";
+ leaf in-frames-pause {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of PAUSE MAC Control frames transmitted on
+ this Ethernet interface.";
+ reference
+ "IEEE Std 802.3, 30.3.4.3
+ aPAUSEMACCtrlFramesReceived";
+ }
+ leaf out-frames-pause {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of PAUSE MAC Control frames transmitted on
+ this Ethernet interface.";
+ reference
+ "IEEE Std 802.3, 30.3.4.2
+ aPAUSEMACCtrlFramesTransmitted";
+ }
+ }
+ }
+ container pfc {
+ if-feature "ethernet-pfc";
+ description
+ "IEEE Std 802.3 Priority-based flow control.";
+ reference
+ "IEEE Std 802.3, Annex 31D";
+ leaf enable {
+ type boolean;
+ description
+ "True indicates that IEEE Std 802.3 priority-based
+ flow control is enabled, false indicates that
+ IEEE Std 802.3 priority-based flow control is
+ disabled. For interfaces that have auto-negotiation,
+ the priority-based flow control is enabled by
+ default.";
+ }
+ container statistics {
+ config false;
+ status deprecated;
+ description
+ "This container collects all statistics for
+ Ethernet interfaces.
+
+ Discontinuities in the values of counters in
+ this container can occur at re-initialization of
+ the management system, and at other times as
+ indicated by the value of the 'discontinuity-time'
+ leaf defined in the ietf-interfaces YANG module
+ (IETF RFC 8343).";
+ leaf in-frames-pfc {
+ type yang:counter64;
+ units "frames";
+ description
+ "Deprecated in-frames-pfc as not defined in base
+ standard. A count of PFC MAC Control frames
+ received on this Ethernet interface.";
+ reference
+ "IEEE Std 802.3.1, dot3HCInPFCFrames";
+ }
+ leaf out-frames-pfc {
+ type yang:counter64;
+ units "frames";
+ description
+ "Deprecated out-frames-pfc as not defined in base
+ standard. A count of PFC MAC Control frames
+ transmitted on this interface.";
+ reference
+ "IEEE Std 802.3.1, dot3HCInPFCFrames";
+ }
+ }
+ }
+ leaf force-flow-control {
+ type boolean;
+ default "false";
+ description
+ "Explicitly forces the local PAUSE frame-based flow
+ control settings regardless of what has been
+ negotiated.
+
+ Since the auto-negotiation of flow control settings
+ does not allow all sane combinations to be negotiated
+ (e.g., consider a device that is only capable of
+ sending PAUSE frames connected to a peer device that
+ is only capable of receiving and acting on PAUSE
+ frames) and failing to agree on the flow control
+ settings does not cause the auto-negotiation to fail
+ completely, then it is sometimes useful to be able to
+ explicitly enable particular PAUSE frame-based flow
+ control settings on the local device regardless of
+ what is being advertised or negotiated.";
+ reference
+ "IEEE Std 802.3, Table 28B-3";
+ }
+ }
+ leaf max-frame-length {
+ type uint16;
+ units "octets";
+ config false;
+ description
+ "This indicates the MAC frame length (including FCS bytes)
+ at which frames are dropped for being too long.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.37 aMaxFrameLength";
+ }
+ leaf mac-control-extension-control {
+ type boolean;
+ config false;
+ description
+ "A value that identifies the current EXTENSION
+ MAC Control function, as specified in
+ IEEE Std 802.3, Annex 31C.";
+ reference
+ "IEEE Std 802.3, 30.3.8.3 aEXTENSIONMACCtrlStatus
+ IEEE Std 802.3.1, dot3ExtensionMacCtrlStatus ";
+ }
+ leaf frame-limit-slow-protocol {
+ type uint64;
+ units "f/s";
+ default "10";
+ config false;
+ description
+ "The maximum number of Slow Protocol frames of a given
+ subtype that can be transmitted in a one second
+ interval.
+ The default value is 10.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.38 aSlowProtocolFrameLimit";
+ }
+ container capabilities {
+ config false;
+ description
+ "Contains all Ethernet interface specific capabilities.";
+ leaf auto-negotiation {
+ type boolean;
+ description
+ "Indicates whether auto-negotiation may be configured on
+ this interface.";
+ }
+ }
+ container ethernet-pause {
+ if-feature "ethernet-pause";
+ description
+ "IEEE Std 802.3 PAUSE flow control.
+
+ Discontinuities in the values of counters in
+ this container can occur at re-initialization of
+ the management system, and at other times as
+ indicated by the value of the 'discontinuity-time'
+ leaf defined in the ietf-interfaces YANG module
+ (IETF RFC 8343).";
+ reference
+ "IEEE Std 802.3, 30.3.4 PAUSE entity managed object class
+ and Clause 31, Annex 31B)";
+ container control-and-status {
+ description
+ "PAUSE function control and status objects.";
+ leaf pause-admin-control {
+ type pause-fc-direction-type;
+ default "disabled";
+ description
+ "What PAUSE functionality will run on this interface
+ when Auto-Negotiation is not implemented
+ or disabled.";
+ reference
+ "IEEE Std 802.3.1, dot3PauseAdminMode";
+ }
+ leaf pause-oper-status {
+ type pause-fc-direction-type;
+ config false;
+ description
+ "What PAUSE functionality is running on this
+ interface, as a result of Auto-Negotiation or
+ setting pause-admin-control.";
+ reference
+ "IEEE Std 802.3.1, dot3PauseOperMode";
+ }
+ leaf link-delay-allowance {
+ type uint32;
+ description
+ "The value in bit-times of the allowance made by the
+ MAC Control PAUSE entity for round-trip propagation
+ delay.
+ The default value is implementation dependent.";
+ }
+ leaf pfc-enable-status {
+ type boolean;
+ config false;
+ description
+ "Is IEEE 802.1 Priority-based Flow Control (PFC)
+ enabled on the interface. If PFC is enabled, then
+ 802.3 PAUSE flow control is disabled.";
+ reference
+ "IEEE Std 802.3, 30.3.3.6 aPFCEnableStatus";
+ }
+ }
+ container statistics {
+ config false;
+ description
+ "PAUSE frame counters.";
+ leaf in-frames-pause {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of MAC Control PAUSE frames transmitted on
+ this Ethernet interface.";
+ reference
+ "IEEE Std 802.3, 30.3.4.3
+ aPAUSEMACCtrlFramesReceived";
+ }
+ leaf out-frames-pause {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of MAC Control PAUSE frames transmitted on
+ this Ethernet interface.";
+ reference
+ "IEEE Std 802.3, 30.3.4.2
+ aPAUSEMACCtrlFramesTransmitted";
+ }
+ }
+ }
+ container statistics {
+ config false;
+ description
+ "Contains statistics specific to Ethernet interfaces.
+
+ Discontinuities in the values of counters in the
+ container can occur at re-initialization of the
+ management system, and at other times as indicated by
+ the value of the 'discontinuity-time' leaf defined in
+ the ietf-interfaces YANG module (IETF RFC 8343).";
+ container frame {
+ description
+ "Contains frame statistics specific to Ethernet
+ interfaces.
+
+ All octet frame lengths include the 4-byte FCS.
+
+ Error counters are only reported once. The count
+ represented by an instance of this object is
+ incremented when the frameCheckError status is
+ returned by the MAC service to the MAC Client.
+ Received frames for which multiple error conditions
+ pertain are, according to the conventions of
+ IEEE Std 802.3 Layer Management, counted exclusively
+ according to the error status presented to the MAC
+ Client.
+
+ A frame that is counted by an instance of this object
+ is also counted by the corresponding instance of
+ 'in-errors' leaf defined in the ietf-interfaces YANG
+ module (IETF RFC 8343).";
+ leaf in-total-frames {
+ type yang:counter64;
+ units "frames";
+ description
+ "The total number of frames (including bad frames)
+ received on the Ethernet interface.
+
+ This counter is calculated by summing the following
+ IEEE Std 802.3, Clause 30 counters:
+ aFramesReceivedOK +
+ aFrameCheckSequenceErrors +
+ aAlignmentErrors +
+ aFrameTooLongErrors +
+ aFramesLostDueToIntMACRcvError";
+ reference
+ "IEEE Std 802.3, Clause 30 counters, as specified
+ in the description above.";
+ }
+ leaf in-total-octets {
+ type yang:counter64;
+ units "octets";
+ description
+ "The total number of octets of data (including those
+ in bad frames) received on the Ethernet interface.
+
+ Includes the 4-octet FCS.";
+ reference
+ "IETF RFC 2819, etherStatsOctets";
+ }
+ leaf in-frames {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of frames (including unicast, multicast, and
+ broadcast) that have been successfully received on
+ the Ethernet interface.
+
+ This count does not include frames received with
+ frame-too-long, FCS, length, or alignment errors, or
+ frames lost due to internal MAC sublayer error.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.5 aFramesReceivedOK";
+ }
+ leaf in-multicast-frames {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of multicast frames that have been
+ successfully received on the Ethernet interface.
+
+ This counter represents a subset of the frames
+ counted by in-frames.
+
+ This count does not include frames received with
+ frame-too-long, FCS, length, or alignment errors, or
+ frames lost due to internal MAC sublayer error.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.21
+ aMulticastFramesReceivedOK";
+ }
+ leaf in-broadcast-frames {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of broadcast frames that have been
+ successfully received on the Ethernet interface.
+
+ This counter represents a subset of the frames
+ counted by in-frames.
+
+ This count does not include frames received with
+ frame-too-long, FCS, length, or alignment errors, or
+ frames lost due to internal MAC sublayer error.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.22
+ aBroadcastFramesReceivedOK";
+ }
+ leaf in-error-fcs-frames {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of receive frames that are of valid length,
+ but do not pass the FCS check, regardless of whether
+ or not the frames are an integral number of octets
+ in length.
+
+ This counter is calculated by summing the following
+ counters:
+ aFrameCheckSequenceErrors +
+ aAlignmentErrors";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.6 aFrameCheckSequenceErrors;
+ IEEE Std 802.3, 30.3.1.1.7 aAlignmentErrors";
+ }
+ leaf in-error-undersize-frames {
+ type yang:counter64;
+ units "frames";
+ status deprecated;
+ description
+ "Deprecated in-error-undersize-frames as not defined
+ in base standard. A count of frames received on a
+ particular Ethernet interface that are less than
+ 64 bytes in length, and are discarded.
+
+ This counter is incremented regardless of whether
+ the frame passes the FCS check.";
+ reference
+ "IETF RFC 2819, etherStatsUndersizePkts and
+ etherStatsFragments";
+ }
+ leaf in-error-oversize-frames {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of frames received on a particular Ethernet
+ interface that exceed the maximum permitted frame
+ size, that is specified in max-frame-length, and are
+ discarded.
+
+ This counter is incremented regardless of whether
+ the frame passes the FCS check.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.25
+ aFrameTooLongErrors";
+ }
+ leaf in-error-mac-internal-frames {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of frames for which reception on a
+ particular Ethernet interface fails due to an
+ internal MAC sublayer receive error.
+
+ A frame is only counted by an instance of this
+ object if it is not counted by the corresponding
+ instance of either the in-error-fcs-frames,
+ in-error-undersize-frames, or
+ in-error-oversize-frames. The precise meaning of
+ the count represented by an instance of this object
+ is implementation-specific.
+
+ In particular, an instance of this object may
+ represent a count of receive errors on a particular
+ Ethernet interface that are not otherwise counted.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.15
+ aFramesLostDueToIntMACRcvError";
+ }
+ leaf out-frames {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of frames (including unicast, multicast, and
+ broadcast) that have been successfully transmitted
+ on the Ethernet interface.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.2 aFramesTransmittedOK";
+ }
+ leaf out-multicast-frames {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of multicast frames that have been
+ successfully transmitted on the Ethernet interface.
+
+ This counter represents a subset of the frames
+ counted by out-frames.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.18
+ aMulticastFramesXmittedOK";
+ }
+ leaf out-broadcast-frames {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of broadcast frames that have been
+ successfully transmitted on the Ethernet interface.
+
+ This counter represents a subset of the frames
+ counted by out-frames.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.19
+ aBroadcastFramesXmittedOK";
+ }
+ leaf out-error-mac-internal-frames {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of frames for which transmission on a
+ particular Ethernet interface fails due to an
+ internal MAC sublayer transmit error.
+
+ The precise meaning of the count represented by an
+ instance of this object is implementation-specific.
+ In particular, an instance of this object may
+ represent a count of transmission errors on a
+ particular Ethernet interface that are not otherwise
+ counted.";
+ reference
+ "IEEE Std 802.3, 30.3.1.1.12
+ aFramesLostDueToIntMACXmitError";
+ }
+ }
+ container phy {
+ description
+ "Ethernet statistics related to the PHY layer.";
+ leaf in-error-symbol {
+ type yang:counter64;
+ units "errors";
+ description
+ "A count of the number of symbol errors that have
+ occurred.
+
+ For the precise definition of when the symbol error
+ counter is incremented, please see the 'description'
+ text associated with aSymbolErrorDuringCarrier,
+ specified in IEEE Std 802.3, 30.3.2.1.5.";
+ reference
+ "IEEE Std 802.3, 30.3.2.1.5
+ aSymbolErrorDuringCarrier";
+ }
+ container lpi {
+ description
+ "Physical Ethernet statistics for the energy
+ efficiency related low power idle indications.";
+ leaf in-lpi-transitions {
+ type yang:counter64;
+ units "transitions";
+ description
+ "The number of times the link partner transitioned to
+ Low Power Idle.
+ This counter has a maximum per second increment rate
+ of:
+ 50 thousand for 100 Mb/s;
+ 90 thousand for 1000 Mb/s
+ 230 thousand for 10 Gb/s.";
+ reference
+ "IEEE Std 802.3, 30.3.2.1.11
+ aReceiveLPITransitions";
+ }
+ leaf in-lpi-time {
+ type decimal64 {
+ fraction-digits 6;
+ }
+ units "seconds";
+ description
+ "The amount of time the link partner has
+ been in Low Power Idle.";
+ reference
+ "IEEE Std 802.3, 30.3.2.1.9
+ aReceiveLPIMicroseconds";
+ }
+ leaf out-lpi-transitions {
+ type yang:counter64;
+ units "transitions";
+ description
+ "The number of times this port transitioned to
+ Low Power Idle.
+ This counter has a maximum per second increment rate
+ of:
+ 50 thousand for 100 Mb/s;
+ 90 thousand for 1000 Mb/s
+ 230 thousand for 10 Gb/s.";
+ reference
+ "IEEE Std 802.3, 30.3.2.1.10
+ aTransmitLPITransitions";
+ }
+ leaf out-lpi-time {
+ type decimal64 {
+ fraction-digits 6;
+ }
+ units "seconds";
+ description
+ "The amount of time in this port has
+ been in Low Power Idle.";
+ reference
+ "IEEE Std 802.3, 30.3.2.1.8
+ aTransmitLPIMicroseconds";
+ }
+ }
+ }
+ container mac-control {
+ description
+ "A group of statistics specific to MAC Control
+ operation of selected Ethernet interfaces.";
+ reference
+ "IEEE Std 802.3.1, dot3ExtensionTable";
+ leaf in-frames-mac-control-unknown {
+ type yang:counter64;
+ units "frames";
+ description
+ "A count of MAC Control frames with an unsupported
+ opcode received on this Ethernet interface.
+
+ Frames counted against this counter are also counted
+ against in-discards defined in the ietf-interfaces
+ YANG module (IETF RFC 8343).";
+ reference
+ "IEEE Std 802.3, 30.3.3.5
+ aUnsupportedOpcodesReceived";
+ }
+ leaf in-frames-mac-control-extension {
+ type yang:counter64;
+ units "frames";
+ description
+ "The count of Extension MAC Control frames received
+ on this Ethernet interface.";
+ reference
+ "IEEE Std 802.3, 30.3.8.2
+ aEXTENSIONMACCtrlFramesReceived";
+ }
+ leaf out-frames-mac-control-extension {
+ type yang:counter64;
+ units "frames";
+ description
+ "The count of Extension MAC Control frames
+ transmitted on this Ethernet interface.";
+ reference
+ "IEEE Std 802.3, 30.3.8.1
+ aEXTENSIONMACCtrlFramesTransmitted";
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/confd/yang/confd/ieee802-ethernet-phy-type@2025-09-10.yang b/src/confd/yang/confd/ieee802-ethernet-phy-type@2025-09-10.yang
new file mode 100644
index 000000000..c32562c49
--- /dev/null
+++ b/src/confd/yang/confd/ieee802-ethernet-phy-type@2025-09-10.yang
@@ -0,0 +1,2955 @@
+module ieee802-ethernet-phy-type {
+ yang-version 1.1;
+ namespace "urn:ieee:std:802.3:yang:ieee802-ethernet-phy-type";
+ prefix ieee802-eth-phy-type;
+
+ organization
+ "IEEE Std 802.3 Ethernet Working Group
+ Web URL: http://www.ieee802.org/3/";
+ contact
+ "Web URL: http://www.ieee802.org/3/";
+ description
+ "This module contains YANG definitions for Physical Layer device
+ (PHY) and Physical Medium Dependent (PMD) identities and related
+ types.";
+
+ revision 2025-09-10 {
+ description
+ "Initial revision derived from IANA-MAU-MIB REVISION
+ 202309070000Z using smidump.";
+ reference
+ "IEEE Std 802.3-2022, unless dated explicitly";
+ }
+
+ /* PHY type identities */
+
+ identity phy-type {
+ description
+ "Base type for PHY types.";
+ reference
+ "IEEE Std 802.3, 30.3.2.1.2 aPhyType";
+ }
+
+ identity phy-type-other {
+ base phy-type;
+ description
+ "Undefined";
+ }
+
+ identity phy-type-unknown {
+ base phy-type;
+ description
+ "Initializing, true state or type not yet known";
+ }
+
+ identity phy-type-none {
+ base phy-type;
+ description
+ "MII present and nothing connected";
+ }
+
+ identity phy-type-10BASE-T {
+ base phy-type;
+ description
+ "Clause 14 10 Mb/s PAM3";
+ }
+
+ identity phy-type-10BASE-T1L {
+ base phy-type;
+ description
+ "Clause 146 10 Mb/s PAM3";
+ }
+
+ identity phy-type-10BASE-T1S {
+ base phy-type;
+ description
+ "Clause 147 10 Mb/s DME";
+ }
+
+ identity phy-type-100BASE-T1 {
+ base phy-type;
+ description
+ "Clause 96 100 Mb/s PAM3";
+ }
+
+ identity phy-type-100BASE-X {
+ base phy-type;
+ description
+ "Clause 24 or subclause 66.1 100 Mb/s 4B/5B";
+ }
+
+ identity phy-type-1000BASE-H {
+ base phy-type;
+ description
+ "Clause 115 1000 Mb/s PAM16-THP";
+ }
+
+ identity phy-type-1000BASE-T {
+ base phy-type;
+ description
+ "Clause 40 1000 Mb/s 4D-PAM5";
+ }
+
+ identity phy-type-1000BASE-T1 {
+ base phy-type;
+ description
+ "Clause 97 1000 Mb/s PAM3";
+ }
+
+ identity phy-type-1000BASE-X {
+ base phy-type;
+ description
+ "Clause 36 or subclause 66.2 1000 Mb/s 8B/10B";
+ }
+
+ identity phy-type-2.5GBASE-T {
+ base phy-type;
+ description
+ "Clause 126 2.5 Gb/s PAM16";
+ }
+
+ identity phy-type-2.5GBASE-T1 {
+ base phy-type;
+ description
+ "Clause 149 2.5 Gb/s PAM4";
+ }
+
+ identity phy-type-2.5GBASE-X {
+ base phy-type;
+ description
+ "Clause 127 2.5 Gb/s 8B/10B";
+ }
+
+ identity phy-type-5GBASE-R {
+ base phy-type;
+ description
+ "Clause 129 5 Gb/s 64/66B";
+ }
+
+ identity phy-type-5GBASE-T {
+ base phy-type;
+ description
+ "Clause 126 5 Gb/s PAM16";
+ }
+
+ identity phy-type-5GBASE-T1 {
+ base phy-type;
+ description
+ "Clause 149 5 Gb/s PAM4";
+ }
+
+ identity phy-type-10G-1GBASE-PRX {
+ base phy-type;
+ description
+ "Clause 76 10/1G-EPON 10 Gb/s 64B/66B downstream and
+ 1 Gb/s 8B/10B upstream";
+ }
+
+ identity phy-type-10GBASE-PR {
+ base phy-type;
+ description
+ "Clause 76 10/10G-EPON 10 Gb/s 64B/66B";
+ }
+
+ identity phy-type-10GBASE-R {
+ base phy-type;
+ description
+ "Clause 49 10 Gb/s 64B/66B";
+ }
+
+ identity phy-type-10GBASE-T {
+ base phy-type;
+ description
+ "Clause 55 10 Gb/s DSQ128";
+ }
+
+ identity phy-type-10GBASE-T1 {
+ base phy-type;
+ description
+ "Clause 149 10 Gb/s PAM4";
+ }
+
+ identity phy-type-10GBASE-X {
+ base phy-type;
+ description
+ "Clause 48 10 Gb/s 4 lane 8B/10B";
+ }
+
+ identity phy-type-10GPASS-XR {
+ base phy-type;
+ description
+ "Clause 101 PCS up to 10 Gb/s 64B/66B OFDM downstream
+ and up to 1.6 Gb/s 64B/66B OFDMA upstream";
+ }
+
+ identity phy-type-10G-2p5GGBASE-SP {
+ base phy-type;
+ description
+ "Subclause 164.3 10 Gb/s downstream and 2.5 Gb/s upstream
+ 256B/257B";
+ }
+
+ identity phy-type-10GBASE-SP {
+ base phy-type;
+ description
+ "Subclause 164.3 10 Gb/s 256B/257B";
+ }
+
+ identity phy-type-25G-10GBASE-PQ {
+ base phy-type;
+ description
+ "Clause 142 25/10G-EPON 256B/257B";
+ }
+
+ identity phy-type-25GBASE-PQ {
+ base phy-type;
+ description
+ "Clause 142 25/25G-EPON 256B/257B";
+ }
+
+ identity phy-type-25GBASE-R {
+ base phy-type;
+ description
+ "Clause 107 25 Gb/s 64B/66B";
+ }
+
+ identity phy-type-25GBASE-T {
+ base phy-type;
+ description
+ "Clause 113 25 Gb/s DSQ128";
+ }
+
+ identity phy-type-40GBASE-R {
+ base phy-type;
+ description
+ "Clause 82 40 Gb/s multi-PCS lane 64B/66B";
+ }
+
+ identity phy-type-40GBASE-T {
+ base phy-type;
+ description
+ "Clause 113 40 Gb/s DSQ128";
+ }
+
+ identity phy-type-50G-10GBASE-PQ {
+ base phy-type;
+ description
+ "Clause 142 50/10G-EPON 256B/257B";
+ }
+
+ identity phy-type-50G-25GBASE-PQ {
+ base phy-type;
+ description
+ "Clause 142 50/25G-EPON 256B/257B";
+ }
+
+ identity phy-type-50GBASE-PQ {
+ base phy-type;
+ description
+ "Clause 142 50/50G-EPON 256B/257B";
+ }
+
+ identity phy-type-50GBASE-R {
+ base phy-type;
+ description
+ "Clause 133 50 Gb/s multi-PCS lane 64B/66B";
+ }
+
+ identity phy-type-100GBASE-P {
+ base phy-type;
+ description
+ "Clause 82 100 Gb/s multi-PCS lane using >2-level PAM";
+ }
+
+ identity phy-type-100GBASE-R {
+ base phy-type;
+ description
+ "Clause 82 100 Gb/s multi-PCS lane using 2-level PAM";
+ }
+
+ identity phy-type-200GBASE-R {
+ base phy-type;
+ description
+ "Clause 119 200 Gb/s multi-PCS lane 64B/66B";
+ }
+
+ identity phy-type-400GBASE-R {
+ base phy-type;
+ description
+ "Clause 119 400 Gb/s multi-PCS lane 64B/66B";
+ }
+
+ identity phy-type-800GBASE-R {
+ base phy-type;
+ description
+ "Clause 172 800 Gb/s multi-PCS lane 64B/66B";
+ }
+
+ /* PMD identities */
+
+ identity pmd-type {
+ description
+ "Base type for Physical Medium Dependent (PMD) sublayer types.";
+ reference
+ "IEEE Std 802.3, 30.5.1.1.2 aMAUType";
+ }
+
+ identity pmd-type-global {
+ base pmd-type;
+ description
+ "Undefined";
+ }
+
+ identity pmd-type-other {
+ base pmd-type;
+ description
+ "Nonconformant PMD.";
+ }
+
+ identity pmd-type-unknown {
+ base pmd-type;
+ description
+ "Initializing, true state or type not yet known.";
+ }
+
+ identity pmd-type-10BASE-T {
+ base pmd-type;
+ description
+ "Twisted-pair cabling MAU as specified in Clause 14";
+ }
+
+ identity pmd-type-10BASE-T1L {
+ base pmd-type;
+ description
+ "Single balanced pair PHY as specified in Clause 146";
+ }
+
+ identity pmd-type-10BASE-T1S {
+ base pmd-type;
+ description
+ "Single balanced pair PHY as specified in Clause 147, full
+ duplex mode";
+ }
+
+ identity pmd-type-10BASE-T1SMD {
+ base pmd-type;
+ description
+ "Single balanced pair PHY as specified in Clause 147,
+ multidrop mode";
+ }
+
+ identity pmd-type-100BASE-BX10D {
+ base pmd-type;
+ description
+ "One single-mode fiber OLT PHY as specified in Clause 58";
+ }
+
+ identity pmd-type-100BASE-BX10U {
+ base pmd-type;
+ description
+ "One single-mode fiber ONU PHY as specified in Clause 58";
+ }
+
+ identity pmd-type-100BASE-FX {
+ base pmd-type;
+ description
+ "100BASE-FX PMD as specified in Clause 26";
+ }
+
+ identity pmd-type-100BASE-LX10 {
+ base pmd-type;
+ description
+ "Two fiber PHY as specified in Clause 58";
+ }
+
+ identity pmd-type-100BASE-T1 {
+ base pmd-type;
+ description
+ "Single balanced twisted-pair copper cabling PHY as specified
+ in Clause 96";
+ }
+
+ identity pmd-type-100BASE-TX {
+ base pmd-type;
+ description
+ "Two-pair Category 5 twisted-pair cabling as specified in
+ Clause 25";
+ }
+
+ identity pmd-type-1000BASE-BX10D {
+ base pmd-type;
+ description
+ "One single-mode fiber OLT PHY as specified in Clause 59";
+ }
+
+ identity pmd-type-1000BASE-BX10U {
+ base pmd-type;
+ description
+ "One single-mode fiber ONU PHY as specified in Clause 59";
+ }
+
+ identity pmd-type-1000BASE-KX {
+ base pmd-type;
+ description
+ "1000BASE-KX PCS/PMA over an electrical backplane PMD as
+ specified in Clause 70";
+ }
+
+ identity pmd-type-1000BASE-LX {
+ base pmd-type;
+ description
+ "1000BASE-LX fiber over long-wavelength laser PMD as specified
+ in Clause 38";
+ }
+
+ identity pmd-type-1000BASE-LX10 {
+ base pmd-type;
+ description
+ "Two fiber 10 km PHY as specified in Clause 59";
+ }
+
+ identity pmd-type-1000BASE-PX10-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OMP OLT PHY, as specified in Clause 60,
+ supporting a distance of at least 10 km, and a split of at
+ least 1:16";
+ }
+
+ identity pmd-type-1000BASE-PX10-U {
+ base pmd-type;
+ description
+ "One single-mode fiber OMP ONU PHY, as specified in Clause 60,
+ supporting a distance of at least 10 km, and a split of at
+ least 1:16";
+ }
+
+ identity pmd-type-1000BASE-PX20-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OMP OLT PHY, as specified in Clause 60,
+ supporting a distance of at least 20 km, and a split of at
+ least 1:16";
+ }
+
+ identity pmd-type-1000BASE-PX20-U {
+ base pmd-type;
+ description
+ "One single-mode fiber OMP ONU PHY, as specified in Clause 60,
+ supporting a distance of at least 20 km, and a split of at
+ least 1:16";
+ }
+
+ identity pmd-type-1000BASE-PX30-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OMP OLT PHY, as specified in Clause 60,
+ supporting a distance of at least 20 km, and a split of at
+ least 1:32";
+ }
+
+ identity pmd-type-1000BASE-PX30-U {
+ base pmd-type;
+ description
+ "One single-mode fiber OMP ONU PHY, as specified in Clause 60,
+ supporting a distance of at least 20 km, and a split of at
+ least 1:32";
+ }
+
+ identity pmd-type-1000BASE-PX40-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OMP OLT PHY as specified in Clause 60,
+ supporting a distance of at least 20 km, and a split of at
+ least 1:64";
+ }
+
+ identity pmd-type-1000BASE-PX40-U {
+ base pmd-type;
+ description
+ "One single-mode fiber OMP ONU PHY as specified in Clause 60,
+ supporting a distance of at least 20 km, and a split of at
+ least 1:64";
+ }
+
+ identity pmd-type-1000BASE-RHA {
+ base pmd-type;
+ description
+ "Plastic optical fiber PHY as specified in Clause 115.";
+ }
+
+ identity pmd-type-1000BASE-RHB {
+ base pmd-type;
+ description
+ "Plastic optical fiber PHY as specified in Clause 115.";
+ }
+
+ identity pmd-type-1000BASE-RHC {
+ base pmd-type;
+ description
+ "Plastic optical fiber PHY as specified in Clause 115.";
+ }
+
+ identity pmd-type-1000BASE-SX {
+ base pmd-type;
+ description
+ "1000BASE-SX fiber over short-wavelength laser PMD as
+ specified in Clause 38";
+ }
+
+ identity pmd-type-1000BASE-T {
+ base pmd-type;
+ description
+ "Four-pair Category 5 twisted-pair cabling PHY as specified in
+ Clause 40";
+ }
+
+ identity pmd-type-1000BASE-T1 {
+ base pmd-type;
+ description
+ "Single twisted-pair copper cable PHY as specified in Clause
+ 97";
+ }
+
+ identity pmd-type-1000BASE-X {
+ base pmd-type;
+ description
+ "1000BASE-X PCS/PMA as specified in Clause 36 over undefined
+ PMD";
+ }
+
+ identity pmd-type-2.5GBASE-KX {
+ base pmd-type;
+ description
+ "2.5GBASE-X PMD as specified in Clause 128 over an electrical
+ backplane as specified in Clause 128";
+ }
+
+ identity pmd-type-2.5GBASE-T {
+ base pmd-type;
+ description
+ "Four-pair twisted-pair balanced copper cabling PHY as
+ specified in Clause 126";
+ }
+
+ identity pmd-type-2.5GBASE-T1 {
+ base pmd-type;
+ description
+ "Single balanced pair of conductors PHY as specified in Clause
+ 149";
+ }
+
+ identity pmd-type-2.5GBASE-X {
+ base pmd-type;
+ description
+ "2.5GBASE-X PCS/PMA as specified in Clause 127 over undefined
+ PMD";
+ }
+
+ identity pmd-type-5GBASE-KR {
+ base pmd-type;
+ description
+ "5GBASE-KR PMD as specified in Clause 130 over an electrical
+ backplane as specified in Clause 130";
+ }
+
+ identity pmd-type-5GBASE-R {
+ base pmd-type;
+ description
+ "5GBASE-R PCS/PMA as specified in Clause 129 over undefined
+ PMD";
+ }
+
+ identity pmd-type-5GBASE-T {
+ base pmd-type;
+ description
+ "Four-pair twisted-pair balanced copper cabling PHY as
+ specified in Clause 126";
+ }
+
+ identity pmd-type-5GBASE-T1 {
+ base pmd-type;
+ description
+ "Single balanced pair of conductors PHY as specified in Clause
+ 149";
+ }
+
+ identity pmd-type-10G-1GBASE-PRX-D1 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream OLT PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10G-1GBASE-PRX-D2 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream OLT PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10G-1GBASE-PRX-D3 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream OLT PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10G-1GBASE-PRX-D4 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream OLT PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10G-1GBASE-PRX-U1 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream ONU PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10G-1GBASE-PRX-U2 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream ONU PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10G-1GBASE-PRX-U3 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream ONU PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10G-1GBASE-PRX-U4 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream ONU PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10GBASE-BR10-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OLT PHY supporting a distance of at
+ least 10 km as specified in Clause 158";
+ }
+
+ identity pmd-type-10GBASE-BR10-U {
+ base pmd-type;
+ description
+ "One single-mode fiber ONU PHY supporting a distance of at
+ least 10 km as specified in Clause 158";
+ }
+
+ identity pmd-type-10GBASE-BR20-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OLT PHY supporting a distance of at
+ least 20 km as specified in Clause 158";
+ }
+
+ identity pmd-type-10GBASE-BR20-U {
+ base pmd-type;
+ description
+ "One single-mode fiber ONU PHY supporting a distance of at
+ least 20 km as specified in Clause 158";
+ }
+
+ identity pmd-type-10GBASE-BR40-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OLT PHY supporting a distance of at
+ least 40 km as specified in Clause 158";
+ }
+
+ identity pmd-type-10GBASE-BR40-U {
+ base pmd-type;
+ description
+ "One single-mode fiber ONU PHY supporting a distance of at
+ least 40 km as specified in Clause 158";
+ }
+
+ identity pmd-type-10GBASE-CX4 {
+ base pmd-type;
+ description
+ "10GBASE-CX4 copper over 8 pair 100-Ohm balanced cable as
+ specified in Clause 54";
+ }
+
+ identity pmd-type-10GBASE-ER {
+ base pmd-type;
+ description
+ "10GBASE-ER fiber over 1550nm optics as specified in Clause 52";
+ }
+
+ identity pmd-type-10GBASE-EW {
+ base pmd-type;
+ description
+ "10GBASE-EW fiber over 1550nm optics as specified in Clause 52";
+ }
+
+ identity pmd-type-10GBASE-KR {
+ base pmd-type;
+ description
+ "10GBASE-KR PCS/PMA over an electrical backplane PMD as
+ specified in Clause 72";
+ }
+
+ identity pmd-type-10GBASE-KX4 {
+ base pmd-type;
+ description
+ "10GBASE-KX4 PCS/PMA over an electrical backplane PMD as
+ specified in Clause 71";
+ }
+
+ identity pmd-type-10GBASE-LR {
+ base pmd-type;
+ description
+ "10GBASE-LR fiber over 1310nm optics as specified in Clause 52";
+ }
+
+ identity pmd-type-10GBASE-LRM {
+ base pmd-type;
+ description
+ "10GBASE-LRM fiber over 1310 nm optics as specified in
+ Clause 68";
+ }
+
+ identity pmd-type-10GBASE-LW {
+ base pmd-type;
+ description
+ "10GBASE-LW fiber over 1310nm optics as specified in Clause 52";
+ }
+
+ identity pmd-type-10GBASE-LX4 {
+ base pmd-type;
+ description
+ "10GBASE-LX4 fiber over 4 lane 1310nm optics as specified in
+ Clause 53";
+ }
+
+ identity pmd-type-10GBASE-PR-D1 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream OLT PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10GBASE-PR-D2 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream OLT PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10GBASE-PR-D3 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream OLT PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10GBASE-PR-D4 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream OLT PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10GBASE-PR-U1 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream ONU PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10GBASE-PR-U3 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream ONU PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10GBASE-PR-U4 {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 1.25 GBd burst mode upstream ONU PHY as specified in Clause 75";
+ }
+
+ identity pmd-type-10GBASE-R {
+ base pmd-type;
+ description
+ "10GBASE-R PCS/PMA as specified in Clause 49 over undefined
+ PMD";
+ }
+
+ identity pmd-type-10GBASE-SR {
+ base pmd-type;
+ description
+ "10GBASE-SR fiber over 850nm optics as specified in Clause 52";
+ }
+
+ identity pmd-type-10GBASE-SW {
+ base pmd-type;
+ description
+ "10GBASE-SW fiber over 850nm optics as specified in Clause 52";
+ }
+
+ identity pmd-type-10GBASE-T {
+ base pmd-type;
+ description
+ "Four-pair twisted-pair balanced copper cabling PHY as
+ specified in Clause 55";
+ }
+
+ identity pmd-type-10GBASE-T1 {
+ base pmd-type;
+ description
+ "Single balanced pair of conductors PHY as specified in Clause
+ 149";
+ }
+
+ identity pmd-type-10GBASE-X {
+ base pmd-type;
+ description
+ "10GBASE-X PCS/PMA as specified in Clause 48 over undefined
+ PMD";
+ }
+
+ identity pmd-type-10GPASS-XR {
+ base pmd-type;
+ description
+ "Coax cable distribution network PHY continuous
+ downstream/burst mode upstream PHY as specified in Clause 100
+ and Clause 101";
+ }
+
+ identity pmd-type-10G-2p5GGBASE-SP1-Dx {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 2.578125 GBd burst mode upstream OLT PHY supporting
+ channel x of FSR set 1, as specified in 164.2,";
+ }
+
+ identity pmd-type-10G-2p5GGBASE-SP1-Uxy {
+ base pmd-type;
+ description
+ "One single-mode fiber 10.3125 GBd continuous downstream /
+ 2.578125 GBd burst mode upstream ONU PHY supporting
+ channels x to y of FSR set 1, as specified in 164.2";
+ }
+
+ identity pmd-type-10GBASE-SP {
+ base pmd-type;
+ description
+ "Subclause 164.3 10 Gb/s 256B/257B";
+ }
+
+ identity pmd-type-25G-10GBASE-PQG-D2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous
+ transmission / 1 x 10.3125 GBd burst mode reception, medium
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-25G-10GBASE-PQG-D3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous
+ transmission / 1 x 10.3125 GBd burst mode reception, high
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-25G-10GBASE-PQG-U2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous reception
+ / 1 x 10.3125 GBd burst mode transmission, medium power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-25G-10GBASE-PQG-U3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous reception
+ / 1 x 10.3125 GBd burst mode transmission, high power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-25G-10GBASE-PQX-D2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous
+ transmission / 1 x 10.3125 GBd burst mode reception, medium
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-25G-10GBASE-PQX-D3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous
+ transmission / 1 x 10.3125 GBd burst mode reception, high
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-25G-10GBASE-PQX-U2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous reception
+ / 1 x 10.3125 GBd burst mode transmission, medium power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-25G-10GBASE-PQX-U3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous reception
+ / 1 x 10.3125 GBd burst mode transmission, high power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-25GBASE-BR10-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OLT PHY supporting a distance of at
+ least 10 km as specified in Clause 159";
+ }
+
+ identity pmd-type-25GBASE-BR10-U {
+ base pmd-type;
+ description
+ "One single-mode fiber ONU PHY supporting a distance of at
+ least 10 km as specified in Clause 159";
+ }
+
+ identity pmd-type-25GBASE-BR20-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OLT PHY supporting a distance of at
+ least 20 km as specified in Clause 159";
+ }
+
+ identity pmd-type-25GBASE-BR20-U {
+ base pmd-type;
+ description
+ "One single-mode fiber ONU PHY supporting a distance of at
+ least 20 km as specified in Clause 159";
+ }
+
+ identity pmd-type-25GBASE-BR40-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OLT PHY supporting a distance of at
+ least 40 km as specified in Clause 159";
+ }
+
+ identity pmd-type-25GBASE-BR40-U {
+ base pmd-type;
+ description
+ "One single-mode fiber ONU PHY supporting a distance of at
+ least 40 km as specified in Clause 159";
+ }
+
+ identity pmd-type-25GBASE-CR {
+ base pmd-type;
+ description
+ "25GBASE-R PCS/PMA over shielded balanced copper cable PMD as
+ specified in Clause 110";
+ }
+
+ identity pmd-type-25GBASE-CR-S {
+ base pmd-type;
+ description
+ "25GBASE-R PCS/PMA over shielded balanced copper cable PMD as
+ specified in Clause 110 without support for RS-FEC ";
+ }
+
+ identity pmd-type-25GBASE-ER {
+ base pmd-type;
+ description
+ "25GBASE-R PCS/PMA over single-mode fiber PMD, with extended
+ reach, as specified in Clause 114";
+ }
+
+ identity pmd-type-25GBASE-KR {
+ base pmd-type;
+ description
+ "25GBASE-R PCS/PMA over an electrical backplane PMD as
+ specified in Clause 111";
+ }
+
+ identity pmd-type-25GBASE-KR-S {
+ base pmd-type;
+ description
+ "25GBASE-R PCS/PMA over an electrical backplane PMD as
+ specified in Clause 111 without support for RS-FEC";
+ }
+
+ identity pmd-type-25GBASE-LR {
+ base pmd-type;
+ description
+ "25GBASE-R PCS/PMA over single-mode fiber PMD, with long
+ reach, as specified in Clause 114";
+ }
+
+ identity pmd-type-25GBASE-PQG-D2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous
+ transmission / 1 x 25.78125 GBd burst mode reception, medium
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-25GBASE-PQG-D3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous
+ transmission / 1 x 25.78125 GBd burst mode reception, high
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-25GBASE-PQG-U2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous reception
+ / 1 x 25.78125 GBd burst mode transmission, medium power
+ class, as specified in Clause 141";
+ }
+
+ identity pmd-type-25GBASE-PQG-U3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous reception
+ / 1 x 25.78125 GBd burst mode transmission, high power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-25GBASE-PQX-D2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous
+ transmission / 1 x 25.78125 GBd burst mode reception, medium
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-25GBASE-PQX-D3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous
+ transmission / 1 x 25.78125 GBd burst mode reception, high
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-25GBASE-PQX-U2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous reception
+ / 1 x 25.78125 GBd burst mode transmission, medium power
+ class, as specified in Clause 141";
+ }
+
+ identity pmd-type-25GBASE-PQX-U3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 1 x 25.78125 GBd continuous reception
+ / 1 x 25.78125 GBd burst mode transmission, high power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-25GBASE-R {
+ base pmd-type;
+ description
+ "PCS as specified in Clause 107 with PMA as specified in
+ Clause 109 over undefined PMD";
+ }
+
+ identity pmd-type-25GBASE-SR {
+ base pmd-type;
+ description
+ "25GBASE-R PCS/PMA over multimode fiber PMD as specified in
+ Clause 112";
+ }
+
+ identity pmd-type-25GBASE-T {
+ base pmd-type;
+ description
+ "Four-pair twisted-pair balanced copper cabling PHY as
+ specified in Clause 113";
+ }
+
+ identity pmd-type-40GBASE-CR4 {
+ base pmd-type;
+ description
+ "40GBASE-R PCS/PMA over 4 lane shielded copper balanced cable
+ PMD as specified in Clause 85";
+ }
+
+ identity pmd-type-40GBASE-ER4 {
+ base pmd-type;
+ description
+ "40GBASE-R PCS/PMA over 4 WDM lane single mode fiber PMD, with
+ extended reach, as specified in Clause 87";
+ }
+
+ identity pmd-type-40GBASE-FR {
+ base pmd-type;
+ description
+ "40GBASE-R PCS/PMA over single mode fiber PMD as specified in
+ Clause 89";
+ }
+
+ identity pmd-type-40GBASE-KR4 {
+ base pmd-type;
+ description
+ "40GBASE-R PCS/PMA over an electrical backplane PMD as
+ specified in Clause 84";
+ }
+
+ identity pmd-type-40GBASE-LR4 {
+ base pmd-type;
+ description
+ "40GBASE-R PCS/PMA over 4 WDM lane single mode fiber PMD, with
+ long reach, as specified in Clause 87";
+ }
+
+ identity pmd-type-40GBASE-R {
+ base pmd-type;
+ description
+ "Multi-lane PCS as specified in Clause 82 over undefined
+ PMA/PMD";
+ }
+
+ identity pmd-type-40GBASE-SR4 {
+ base pmd-type;
+ description
+ "40GBASE-R PCS/PMA over 4 lane multimode fiber PMD as
+ specified in Clause 86";
+ }
+
+ identity pmd-type-40GBASE-T {
+ base pmd-type;
+ description
+ "Four-pair twisted-pair balanced copper cabling PHY as
+ specified in Clause 113";
+ }
+
+ identity pmd-type-50G-10GBASE-PQG-D2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 1 x 10.3125 GBd burst mode reception, medium
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-10GBASE-PQG-D3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 1 x 10.3125 GBd burst mode reception, high
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-10GBASE-PQG-U2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 1 x 10.3125 GBd burst mode transmission, medium power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-10GBASE-PQG-U3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 1 x 10.3125 GBd burst mode transmission, high power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-10GBASE-PQX-D2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 1 x 10.3125 GBd burst mode reception, medium
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-10GBASE-PQX-D3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 1 x 10.3125 GBd burst mode reception, high
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-10GBASE-PQX-U2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 1 x 10.3125 GBd burst mode transmission, medium power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-10GBASE-PQX-U3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 1 x 10.3125 GBd burst mode transmission, high power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-25GBASE-PQG-D2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 1 x 25.78125 GBd burst mode reception, medium
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-25GBASE-PQG-D3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 1 x 25.78125 GBd burst mode reception, high
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-25GBASE-PQG-U2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 1 x 25.78125 GBd burst mode transmission, medium power
+ class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-25GBASE-PQG-U3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 1 x 25.78125 GBd burst mode transmission, high power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-25GBASE-PQX-D2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 1 x 25.78125 GBd burst mode reception, medium
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-25GBASE-PQX-D3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 1 x 25.78125 GBd burst mode reception, high
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-25GBASE-PQX-U2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 1 x 25.78125 GBd burst mode transmission, medium power
+ class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50G-25GBASE-PQX-U3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 1 x 25.78125 GBd burst mode transmission, high power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-50GBASE-BR10-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OLT PHY supporting a distance of at
+ least 10 km as specified in Clause 160";
+ }
+
+ identity pmd-type-50GBASE-BR10-U {
+ base pmd-type;
+ description
+ "One single-mode fiber ONU PHY supporting a distance of at
+ least 10 km as specified in Clause 160";
+ }
+
+ identity pmd-type-50GBASE-BR20-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OLT PHY supporting a distance of at
+ least 20 km as specified in Clause 160";
+ }
+
+ identity pmd-type-50GBASE-BR20-U {
+ base pmd-type;
+ description
+ "One single-mode fiber ONU PHY supporting a distance of at
+ least 20 km as specified in Clause 160";
+ }
+
+ identity pmd-type-50GBASE-BR40-D {
+ base pmd-type;
+ description
+ "One single-mode fiber OLT PHY supporting a distance of at
+ least 40 km as specified in Clause 160";
+ }
+
+ identity pmd-type-50GBASE-BR40-U {
+ base pmd-type;
+ description
+ "One single-mode fiber ONU PHY supporting a distance of at
+ least 40 km as specified in Clause 160";
+ }
+
+ identity pmd-type-50GBASE-CR {
+ base pmd-type;
+ description
+ "50GBASE-R PCS/PMA over shielded copper balanced cable PMD as
+ specified in Clause 136 ";
+ }
+
+ identity pmd-type-50GBASE-ER {
+ base pmd-type;
+ description
+ "50GBASE-R PCS/PMA over single-mode fiber PMD with reach up to
+ at least 40 km as specified in Clause 139";
+ }
+
+ identity pmd-type-50GBASE-FR {
+ base pmd-type;
+ description
+ "50GBASE-R PCS/PMA over single mode fiber PMD as specified in
+ Clause 139";
+ }
+
+ identity pmd-type-50GBASE-KR {
+ base pmd-type;
+ description
+ "50GBASE-R PCS/PMA over an electrical backplane PMD as
+ specified in Clause 137";
+ }
+
+ identity pmd-type-50GBASE-LR {
+ base pmd-type;
+ description
+ "50GBASE-R PCS/PMA over single mode fiber PMD as specified in
+ Clause 139";
+ }
+
+ identity pmd-type-50GBASE-PQG-D2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 2 x 25.78125 GBd burst mode reception, medium
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50GBASE-PQG-D3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 2 x 25.78125 GBd burst mode reception, high
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50GBASE-PQG-U2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 2 x 25.78125 GBd burst mode transmission, medium power
+ class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50GBASE-PQG-U3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 2 x 25.78125 GBd burst mode transmission, high power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-50GBASE-PQX-D2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 2 x 25.78125 GBd burst mode reception, medium
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50GBASE-PQX-D3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous
+ transmission / 2 x 25.78125 GBd burst mode reception, high
+ power class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50GBASE-PQX-U2 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 2 x 25.78125 GBd burst mode transmission, medium power
+ class, as specified in Clause 141";
+ }
+
+ identity pmd-type-50GBASE-PQX-U3 {
+ base pmd-type;
+ description
+ "One single mode fiber, 2 x 25.78125 GBd continuous reception
+ / 2 x 25.78125 GBd burst mode transmission, high power class,
+ as specified in Clause 141";
+ }
+
+ identity pmd-type-50GBASE-R {
+ base pmd-type;
+ description
+ "Multi-lane PCS as specified in Clause 133 with PMA as
+ specified in Clause 135 over undefined PMD";
+ }
+
+ identity pmd-type-50GBASE-SR {
+ base pmd-type;
+ description
+ "50GBASE-R PCS/PMA over multimode fiber PMD as specified in
+ Clause 138";
+ }
+
+ identity pmd-type-100GBASE-CR1 {
+ base pmd-type;
+ description
+ "100GBASE-CR1 as specified in Clause 162 or 100GBASE-KR1 as
+ specified in Clause 163";
+ }
+
+ identity pmd-type-100GBASE-CR2 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over 2 lane shielded copper balanced cable
+ PMD as specified in Clause 136";
+ }
+
+ identity pmd-type-100GBASE-CR4 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over 4 lane shielded copper balanced cable
+ PMD as specified in Clause 92";
+ }
+
+ identity pmd-type-100GBASE-CR10 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over 10 lane shielded copper balanced
+ cable PMD as specified in Clause 85";
+ }
+
+ identity pmd-type-100GBASE-DR {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over single mode fiber PMD as specified in
+ Clause 140";
+ }
+
+ identity pmd-type-100GBASE-ER4 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over 4 WDM lane single mode fiber PMD,
+ with extended reach, as specified in Clause 88";
+ }
+
+ identity pmd-type-100GBASE-FR1 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over single-mode fiber PMD with reach up
+ to at least 2 km as specified in Clause 140";
+ }
+
+ identity pmd-type-100GBASE-KP4 {
+ base pmd-type;
+ description
+ "100GBASE-P PCS/PMA over an electrical backplane PMD as
+ specified in Clause 94";
+ }
+
+ identity pmd-type-100GBASE-KR2 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over an electrical backplane PMD as
+ specified in Clause 137";
+ }
+
+ identity pmd-type-100GBASE-KR4 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over an electrical backplane PMD as
+ specified in Clause 93";
+ }
+
+ identity pmd-type-100GBASE-LR1 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over single-mode fiber PMD with reach up
+ to at least 10 km as specified in Clause 140";
+ }
+
+ identity pmd-type-100GBASE-LR4 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over 4 WDM lane single mode fiber PMD,
+ with long reach, as specified in Clause 88";
+ }
+
+ identity pmd-type-100GBASE-R {
+ base pmd-type;
+ description
+ "Multi-lane PCS as specified in Clause 82 over undefined
+ 100GBASE-R or 100GBASE-P PMA/PMD";
+ }
+
+ identity pmd-type-100GBASE-SR1 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over multimode fiber PMD with
+ reach up to at least 100 m as specified in Clause 167";
+ }
+
+ identity pmd-type-100GBASE-SR2 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over 2 lane multimode fiber PMD as
+ specified in Clause 138";
+ }
+
+ identity pmd-type-100GBASE-SR4 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over 4 lane multimode fiber PMD as
+ specified in Clause 95";
+ }
+
+ identity pmd-type-100GBASE-SR10 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over 10 lane multimode fiber PMD as
+ specified in Clause 86";
+ }
+
+ identity pmd-type-100GBASE-VR1 {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/PMA over multimode fiber PMD with
+ reach up to at least 50 m as specified in Clause 167";
+ }
+
+ identity pmd-type-100GBASE-ZR {
+ base pmd-type;
+ description
+ "100GBASE-R PCS/100GBASE-ZR PMA over a PMD with reach up to at
+ least 80 km as specified in Clause 154";
+ }
+
+ identity pmd-type-200GBASE-CR2 {
+ base pmd-type;
+ description
+ "200GBASE-CR2 as specified in Clause 162 or 200GBASE-KR2 as
+ specified in Clause 163";
+ }
+
+ identity pmd-type-200GBASE-CR4 {
+ base pmd-type;
+ description
+ "200GBASE-R PCS/PMA over 4 lane shielded copper balanced cable
+ PMD as specified in Clause 136 ";
+ }
+
+ identity pmd-type-200GBASE-DR4 {
+ base pmd-type;
+ description
+ "200GBASE-R PCS/PMA over 4-lane single-mode fiber PMD as
+ specified in Clause 121";
+ }
+
+ identity pmd-type-200GBASE-ER4 {
+ base pmd-type;
+ description
+ "200GBASE-R PCS/PMA over 4 WDM lane single-mode fiber PMD with
+ reach up to at least 40 km as specified in Clause 122";
+ }
+
+ identity pmd-type-200GBASE-FR4 {
+ base pmd-type;
+ description
+ "200GBASE-R PCS/PMA over 4 WDM lane single-mode fiber PMD with
+ reach up to at least 2 km as specified in Clause 122";
+ }
+
+ identity pmd-type-200GBASE-KR2 {
+ base pmd-type;
+ description
+ "200GBASE-R PCS/PMA over an electrical backplane PMD
+ as specified in Clause 163";
+ }
+
+ identity pmd-type-200GBASE-KR4 {
+ base pmd-type;
+ description
+ "200GBASE-R PCS/PMA over an electrical backplane PMD as
+ specified in Clause 137";
+ }
+
+ identity pmd-type-200GBASE-LR4 {
+ base pmd-type;
+ description
+ "200GBASE-R PCS/PMA over 4 WDM lane single-mode fiber PMD with
+ reach up to at least 10 km as specified in Clause 122";
+ }
+
+ identity pmd-type-200GBASE-R {
+ base pmd-type;
+ description
+ "Multi-lane PCS as specified in Clause 119 over undefined
+ PMA/PMD";
+ }
+
+ identity pmd-type-200GBASE-SR2 {
+ base pmd-type;
+ description
+ "200GBASE-R PCS/PMA over 2 lane multimode fiber PMD with
+ reach up to at least 100 m as specified in Clause 167";
+ }
+
+ identity pmd-type-200GBASE-SR4 {
+ base pmd-type;
+ description
+ "200GBASE-R PCS/PMA over 4 lane multimode fiber PMD as
+ specified in Clause 138";
+ }
+
+ identity pmd-type-200GBASE-VR2 {
+ base pmd-type;
+ description
+ "200GBASE-R PCS/PMA over 2 lane multimode fiber PMD with
+ reach up to at least 50 m as specified in Clause 167";
+ }
+
+ identity pmd-type-400GBASE-DR4 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 4-lane single-mode fiber PMD as
+ specified in Clause 124";
+ }
+
+ identity pmd-type-400GBASE-DR4-2 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 4 single-mode fibers in each
+ direction PMD with reach up to at least 2 km as specified
+ in Clause 124";
+ }
+
+ identity pmd-type-400GBASE-ER8 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 8 WDM lane single-mode fiber PMD with
+ reach up to at least 40 km as specified in Clause 122";
+ }
+
+ identity pmd-type-400GBASE-FR4 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 4 WDM lane single-mode fiber PMD with
+ reach up to at least 2 km as specified in Clause 151";
+ }
+
+ identity pmd-type-400GBASE-FR8 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 8 WDM lane single-mode fiber PMD with
+ reach up to at least 2 km as specified in Clause 122";
+ }
+
+ identity pmd-type-400GBASE-LR4-6 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 4 WDM lane single-mode fiber PMD with
+ reach up to at least 6 km as specified in Clause 151";
+ }
+
+ identity pmd-type-400GBASE-LR8 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 8 WDM lane single-mode fiber PMD with
+ reach up to at least 10 km as specified in Clause 122";
+ }
+
+ identity pmd-type-400GBASE-R {
+ base pmd-type;
+ description
+ "Multi-lane PCS as specified in Clause 119 over undefined
+ PMA/PMD";
+ }
+
+ identity pmd-type-400GBASE-SR4 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 4 lane multimode fiber PMD with
+ reach up to at least 100 m as specified in Clause 167";
+ }
+
+ identity pmd-type-400GBASE-SR4d2 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 8-lane multimode fiber PMD as
+ specified in Clause 150";
+ }
+
+ identity pmd-type-400GBASE-SR8 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 8-lane multimode fiber PMD as
+ specified in Clause 138";
+ }
+
+ identity pmd-type-400GBASE-SR16 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 16-lane multimode fiber PMD as
+ specified in Clause 123";
+ }
+
+ identity pmd-type-400GBASE-VR4 {
+ base pmd-type;
+ description
+ "400GBASE-R PCS/PMA over 4 lane multimode fiber PMD with
+ reach up to at least 50 m as specified in Clause 167";
+ }
+
+ identity pmd-type-800GBASE-CR8 {
+ base pmd-type;
+ description
+ "800GBASE-R PCS/PMA over 8-lane shielded balanced copper cable
+ PMD as specified in Clause 162";
+ }
+
+ identity pmd-type-800GBASE-DR8 {
+ base pmd-type;
+ description
+ "800GBASE-R PCS/PMA over 8 single-mode fibers in each
+ direction PMD with reach up to at least 500 m as specified
+ in Clause 124";
+ }
+
+ identity pmd-type-800GBASE-DR8-2 {
+ base pmd-type;
+ description
+ "800GBASE-R PCS/PMA over 8 single-mode fibers in each
+ direction PMD with reach up to at least 2 km as specified
+ in Clause 124";
+ }
+
+ identity pmd-type-800GBASE-KR8 {
+ base pmd-type;
+ description
+ "800GBASE-R PCS/PMA over an electrical backplane PMD as
+ specified in Clause 163";
+ }
+
+ identity pmd-type-800GBASE-R {
+ base pmd-type;
+ description
+ "Multi-lane PCS as specified in Clause 172 over
+ undefined PMA/PMD";
+ }
+
+ identity pmd-type-800GBASE-SR8 {
+ base pmd-type;
+ description
+ "800GBASE-R PCS/PMA over 8 multimode fibers in each
+ direction PMD with reach up to at least 100 m as specified
+ in Clause 167";
+ }
+
+ identity pmd-type-800GBASE-VR8 {
+ base pmd-type;
+ description
+ "800GBASE-R PCS/PMA over 8 multimode fibers in each
+ direction PMD with reach up to at least 50 m as specified
+ in Clause 167";
+ }
+
+ typedef pmd-type-list {
+ type bits {
+ /* 802.3-2022 */
+ bit bOther {
+ description
+ "Other";
+ }
+ bit b10baseT {
+ description
+ "10BASE-T";
+ }
+ bit b10baseFL {
+ description
+ "10BASE-FL";
+ }
+ bit b100baseTX {
+ description
+ "100BASE-TX";
+ }
+ bit b100baseFX {
+ description
+ "100BASE-FX";
+ }
+ bit b1000baseX {
+ description
+ "1000BASE-X";
+ }
+ bit b1000baseLX {
+ description
+ "1000BASE-LX";
+ }
+ bit b1000baseSX {
+ description
+ "1000BASE-SX";
+ }
+ bit b1000baseCX {
+ description
+ "1000BASE-CX";
+ }
+ bit b1000baseT {
+ description
+ "1000BASE-T";
+ }
+ bit b10GbaseX {
+ description
+ "10GBASE-X";
+ }
+ bit b10GbaseLX4 {
+ description
+ "10GBASE-LX4";
+ }
+ bit b10GbaseR {
+ description
+ "10GBASE-R";
+ }
+ bit b10GbaseER {
+ description
+ "10GBASE-ER";
+ }
+ bit b10GbaseLR {
+ description
+ "10GBASE-LR";
+ }
+ bit b10GbaseSR {
+ description
+ "10GBASE-SR";
+ }
+ bit b10GbaseSW {
+ description
+ "10GBASE-SW";
+ }
+ bit b10GbaseCX4 {
+ description
+ "10GBASE-CX4";
+ }
+ bit b100BaseBX10D {
+ description
+ "100BASE-BX10D";
+ }
+ bit b100BaseBX10U {
+ description
+ "100BASE-BX10U";
+ }
+ bit b100BaseLX10 {
+ description
+ "100BASE-LX10";
+ }
+ bit b1000BaseBX10D {
+ description
+ "1000BASE-BX10D";
+ }
+ bit b1000BaseBX10U {
+ description
+ "1000BASE-BX10U";
+ }
+ bit b1000BaseLX10 {
+ description
+ "1000BASE-LX10";
+ }
+ bit b1000BasePX10D {
+ description
+ "1000BASE-PX10D";
+ }
+ bit b1000BasePX10U {
+ description
+ "1000BASE-PX10U";
+ }
+ bit b1000BasePX20D {
+ description
+ "1000BASE-PX20D";
+ }
+ bit b1000BasePX20U {
+ description
+ "1000BASE-PX20U";
+ }
+ bit b10GbaseT {
+ description
+ "10GBASE-T";
+ }
+ bit b10GbaseLRM {
+ description
+ "10GBASE-LRM";
+ }
+ bit b1000baseKX {
+ description
+ "1000BASE-KX";
+ }
+ bit b10GbaseKX4 {
+ description
+ "10GBASE-KX4";
+ }
+ bit b10GbaseKR {
+ description
+ "10GBASE-KR";
+ }
+ bit b10G1GbasePRXD1 {
+ description
+ "10/1GBASE-PRXD1";
+ }
+ bit b10G1GbasePRXD2 {
+ description
+ "10/1GBASE-PRXD2";
+ }
+ bit b10G1GbasePRXD3 {
+ description
+ "10/1GBASE-PRXD3";
+ }
+ bit b10G1GbasePRXU1 {
+ description
+ "10/1GBASE-PRXU1";
+ }
+ bit b10G1GbasePRXU2 {
+ description
+ "10/1GBASE-PRXU2";
+ }
+ bit b10G1GbasePRXU3 {
+ description
+ "10/1GBASE-PRXU3";
+ }
+ bit b10GbasePRD1 {
+ description
+ "10GBASE-PRD1";
+ }
+ bit b10GbasePRD2 {
+ description
+ "10GBASE-PRD2";
+ }
+ bit b10GbasePRD3 {
+ description
+ "10GBASE-PRD3";
+ }
+ bit b10GbasePRU1 {
+ description
+ "10GBASE-PRU1";
+ }
+ bit b10GbasePRU3 {
+ description
+ "10GBASE-PRU3";
+ }
+ bit b40GbaseKR4 {
+ description
+ "40GBASE-KR4";
+ }
+ bit b40GbaseCR4 {
+ description
+ "40GBASE-CR4";
+ }
+ bit b40GbaseSR4 {
+ description
+ "40GBASE-SR4";
+ }
+ bit b40GbaseFR {
+ description
+ "40GBASE-FR";
+ }
+ bit b40GbaseLR4 {
+ description
+ "40GBASE-LR4";
+ }
+ bit b100GbaseCR10 {
+ description
+ "100GBASE-CR10";
+ }
+ bit b100GbaseSR10 {
+ description
+ "100GBASE-SR10";
+ }
+ bit b100GbaseLR4 {
+ description
+ "100GBASE-LR4";
+ }
+ bit b100GbaseER4 {
+ description
+ "100GBASE-ER4";
+ }
+ bit b1000baseT1 {
+ description
+ "1000BASE-T1";
+ }
+ bit b1000basePX30D {
+ description
+ "1000BASE-PX30D";
+ }
+ bit b1000basePX30U {
+ description
+ "1000BASE-PX30U";
+ }
+ bit b1000basePX40D {
+ description
+ "1000BASE-PX40D";
+ }
+ bit b1000basePX40U {
+ description
+ "1000BASE-PX40U";
+ }
+ bit b10G1GbasePRXD4 {
+ description
+ "10/1GBASE-PRXD4";
+ }
+ bit b10G1GbasePRXU4 {
+ description
+ "10/1GBASE-PRXU4";
+ }
+ bit b10GbasePRD4 {
+ description
+ "10GBASE-PRD4";
+ }
+ bit b10GbasePRU4 {
+ description
+ "10GBASE-PRU4";
+ }
+ bit b25GbaseCR {
+ description
+ "25GBASE-CR";
+ }
+ bit b25GbaseCRS {
+ description
+ "25GBASE-CRS";
+ }
+ bit b25GbaseKR {
+ description
+ "25GBASE-KR";
+ }
+ bit b25GbaseKRS {
+ description
+ "25GBASE-KRS";
+ }
+ bit b25GbaseR {
+ description
+ "25GBASE-R";
+ }
+ bit b25GbaseSR {
+ description
+ "25GBASE-SR";
+ }
+ bit b25GbaseT {
+ description
+ "25GBASE-T";
+ }
+ bit b40GbaseER4 {
+ description
+ "40GBASE-ER4";
+ }
+ bit b40GbaseR {
+ description
+ "40GBASE-R";
+ }
+ bit b40GbaseT {
+ description
+ "40GBASE-T";
+ }
+ bit b100GbaseCR4 {
+ description
+ "100GBASE-CR4";
+ }
+ bit b100GbaseKR4 {
+ description
+ "100GBASE-KR4";
+ }
+ bit b100GbaseKP4 {
+ description
+ "100GBASE-KP4";
+ }
+ bit b100GbaseR {
+ description
+ "100GBASE-R";
+ }
+ bit b100GbaseSR4 {
+ description
+ "100GBASE-SR4";
+ }
+ bit b2p5GbaseT {
+ description
+ "2.5GBASE-T";
+ }
+ bit b5GbaseT {
+ description
+ "5GBASE-T";
+ }
+ bit b100baseT1 {
+ description
+ "100BASE-T1";
+ }
+ bit b1000baseRHA {
+ description
+ "1000BASE-RHA";
+ }
+ bit b1000baseRHB {
+ description
+ "1000BASE-RHB";
+ }
+ bit b1000baseRHC {
+ description
+ "1000BASE-RHC";
+ }
+ bit b2p5GbaseKX {
+ description
+ "2.5GBASE-KX";
+ }
+ bit b2p5GbaseX {
+ description
+ "2.5GBASE-X";
+ }
+ bit b5GbaseKR {
+ description
+ "5GBASE-KR";
+ }
+ bit b5GbaseR {
+ description
+ "5GBASE-R";
+ }
+ bit b10GpassXR {
+ description
+ "10GPASS-XR";
+ }
+ bit b25GbaseLR {
+ description
+ "25GBASE-LR";
+ }
+ bit b25GbaseER {
+ description
+ "25GBASE-ER";
+ }
+ bit b50GbaseR {
+ description
+ "50GBASE-R";
+ }
+ bit b50GbaseCR {
+ description
+ "50GBASE-CR";
+ }
+ bit b50GbaseKR {
+ description
+ "50GBASE-KR";
+ }
+ bit b50GbaseSR {
+ description
+ "50GBASE-SR";
+ }
+ bit b50GbaseFR {
+ description
+ "50GBASE-FR";
+ }
+ bit b50GbaseLR {
+ description
+ "50GBASE-LR";
+ }
+ bit b50GbaseER {
+ description
+ "50GBASE-ER";
+ }
+ bit b100GbaseCR2 {
+ description
+ "100GBASE-CR2";
+ }
+ bit b100GbaseKR2 {
+ description
+ "100GBASE-KR2";
+ }
+ bit b100GbaseSR2 {
+ description
+ "100GBASE-SR2";
+ }
+ bit b100GbaseDR {
+ description
+ "100GBASE-DR";
+ }
+ bit b200GbaseR {
+ description
+ "200GBASE-R";
+ }
+ bit b200GbaseDR4 {
+ description
+ "200GBASE-DR4";
+ }
+ bit b200GbaseFR4 {
+ description
+ "200GBASE-FR4";
+ }
+ bit b200GbaseLR4 {
+ description
+ "200GBASE-LR4";
+ }
+ bit b200GbaseCR4 {
+ description
+ "200GBASE-CR4";
+ }
+ bit b200GbaseKR4 {
+ description
+ "200GBASE-KR4";
+ }
+ bit b200GbaseSR4 {
+ description
+ "200GBASE-SR4";
+ }
+ bit b200GbaseER4 {
+ description
+ "200GBASE-ER4";
+ }
+ bit b400GbaseR {
+ description
+ "400GBASE-R";
+ }
+ bit b400GbaseSR16 {
+ description
+ "400GBASE-SR16";
+ }
+ bit b400GbaseDR4 {
+ description
+ "400GBASE-DR4";
+ }
+ bit b400GbaseFR8 {
+ description
+ "400GBASE-FR8";
+ }
+ bit b400GbaseLR8 {
+ description
+ "400GBASE-LR8";
+ }
+ bit b400GbaseER8 {
+ description
+ "400GBASE-ER8";
+ }
+ bit b10baseT1L {
+ description
+ "10BASE-T1L";
+ }
+ bit b10baseT1S {
+ description
+ "10BASE-T1S";
+ }
+ bit b10baseT1SMD {
+ description
+ "10BASE-T1SMD";
+ }
+ bit b100GbaseFR1 {
+ description
+ "100GBASE-FR1";
+ }
+ bit b100GbaseLR1 {
+ description
+ "100GBASE-LR1";
+ }
+ bit b100GBASE-CR1 {
+ description
+ "100GBASE-LR1";
+ }
+ bit b400GbaseFR4 {
+ description
+ "400GBASE-FR4";
+ }
+ bit b400GbaseLR46 {
+ description
+ "400GBASE-LR46";
+ }
+ bit b400GbaseSR8 {
+ description
+ "400GBASE-SR8";
+ }
+ bit b400GbaseSR4p2 {
+ description
+ "400GBASE-SR4p2";
+ }
+ bit b2p5GbaseT1 {
+ description
+ "2.5GBASE-T1";
+ }
+ bit b5GbaseT1 {
+ description
+ "5GBASE-T1";
+ }
+ bit b10GbaseT1 {
+ description
+ "10GBASE-T1";
+ }
+ bit b25G10GbasePQGD2 {
+ description
+ "25/10GBASE-PQGD2";
+ }
+ bit b25G10GbasePQGD3 {
+ description
+ "25/10GBASE-PQGD3";
+ }
+ bit b25G10GbasePQGU2 {
+ description
+ "25/10GBASE-PQGU2";
+ }
+ bit b25G10GbasePQGU3 {
+ description
+ "25/10GBASE-PQGU3";
+ }
+ bit b25G10GbasePQXD2 {
+ description
+ "25/10GBASE-PQXD2";
+ }
+ bit b25G10GbasePQXD3 {
+ description
+ "25/10GBASE-PQXD3";
+ }
+ bit b25G10GbasePQXU2 {
+ description
+ "25/10GBASE-PQXU2";
+ }
+ bit b25G10GbasePQXU3 {
+ description
+ "25/10GBASE-PQXU3";
+ }
+ bit b25GbasePQGD2 {
+ description
+ "25GBASE-PQGD2";
+ }
+ bit b25GbasePQGD3 {
+ description
+ "25GBASE-PQGD3";
+ }
+ bit b25GbasePQGU2 {
+ description
+ "25GBASE-PQGU2";
+ }
+ bit b25GbasePQGU3 {
+ description
+ "25GBASE-PQGU3";
+ }
+ bit b25GbasePQXD2 {
+ description
+ "25GBASE-PQXD2";
+ }
+ bit b25GbasePQXD3 {
+ description
+ "25GBASE-PQXD3";
+ }
+ bit b25GbasePQXU2 {
+ description
+ "25GBASE-PQXU2";
+ }
+ bit b25GbasePQXU3 {
+ description
+ "25GBASE-PQXU3";
+ }
+ bit b50G10GbasePQGD2 {
+ description
+ "50/10GBASE-PQGD2";
+ }
+ bit b50G10GbasePQGD3 {
+ description
+ "50/10GBASE-PQGD3";
+ }
+ bit b50G10GbasePQGU2 {
+ description
+ "50/10GBASE-PQGU2";
+ }
+ bit b50G10GbasePQGU3 {
+ description
+ "50/10GBASE-PQGU3";
+ }
+ bit b50G10GbasePQXD2 {
+ description
+ "50/10GBASE-PQXD2";
+ }
+ bit b50G10GbasePQXD3 {
+ description
+ "50/10GBASE-PQXD3";
+ }
+ bit b50G10GbasePQXU2 {
+ description
+ "50/10GBASE-PQXU2";
+ }
+ bit b50G10GbasePQXU3 {
+ description
+ "50/10GBASE-PQXU3";
+ }
+ bit b50G25GbasePQGD2 {
+ description
+ "50/25GBASE-PQGD2";
+ }
+ bit b50G25GbasePQGD3 {
+ description
+ "50/25GBASE-PQGD3";
+ }
+ bit b50G25GbasePQGU2 {
+ description
+ "50/25GBASE-PQGU2";
+ }
+ bit b50G25GbasePQGU3 {
+ description
+ "50/25GBASE-PQGU3";
+ }
+ bit b50G25GbasePQXD2 {
+ description
+ "50/25GBASE-PQXD2";
+ }
+ bit b50G25GbasePQXD3 {
+ description
+ "50/25GBASE-PQXD3";
+ }
+ bit b50G25GbasePQXU2 {
+ description
+ "50/25GBASE-PQXU2";
+ }
+ bit b50G25GbasePQXU3 {
+ description
+ "50/25GBASE-PQXU3";
+ }
+ bit b50GbasePQGD2 {
+ description
+ "50GBASE-PQGD2";
+ }
+ bit b50GbasePQGD3 {
+ description
+ "50GBASE-PQGD3";
+ }
+ bit b50GbasePQGU2 {
+ description
+ "50GBASE-PQGU2";
+ }
+ bit b50GbasePQGU3 {
+ description
+ "50GBASE-PQGU3";
+ }
+ bit b50GbasePQXD2 {
+ description
+ "50GBASE-PQXD2";
+ }
+ bit b50GbasePQXD3 {
+ description
+ "50GBASE-PQXD3";
+ }
+ bit b50GbasePQXU2 {
+ description
+ "50GBASE-PQXU2";
+ }
+ bit b50GbasePQXU3 {
+ description
+ "50GBASE-PQXU3";
+ }
+ bit b100GbaseZR {
+ description
+ "100GBASE-ZR";
+ }
+ bit b10GbaseBR10D {
+ description
+ "10GBASE-BR10D";
+ }
+ bit b10GbaseBR10U {
+ description
+ "10GBASE-BR10U";
+ }
+ bit b10GbaseBR20D {
+ description
+ "10GBASE-BR20D";
+ }
+ bit b10GbaseBR20U {
+ description
+ "10GBASE-BR20U";
+ }
+ bit b10GbaseBR40D {
+ description
+ "10GBASE-BR40D";
+ }
+ bit b10GbaseBR40U {
+ description
+ "10GBASE-BR40U";
+ }
+ bit b25GbaseBR10D {
+ description
+ "25GBASE-BR10D";
+ }
+ bit b25GbaseBR10U {
+ description
+ "25GBASE-BR10U";
+ }
+ bit b25GbaseBR20D {
+ description
+ "25GBASE-BR20D";
+ }
+ bit b25GbaseBR20U {
+ description
+ "25GBASE-BR20U";
+ }
+ bit b25GbaseBR40D {
+ description
+ "25GBASE-BR40D";
+ }
+ bit b25GbaseBR40U {
+ description
+ "25GBASE-BR40U";
+ }
+ bit b50GbaseBR10D {
+ description
+ "50GBASE-BR10D";
+ }
+ bit b50GbaseBR10U {
+ description
+ "50GBASE-BR10U";
+ }
+ bit b50GbaseBR20D {
+ description
+ "50GBASE-BR20D";
+ }
+ bit b50GbaseBR20U {
+ description
+ "50GBASE-BR20U";
+ }
+ bit b50GbaseBR40D {
+ description
+ "50GBASE-BR40D";
+ }
+ bit b50GbaseBR40U {
+ description
+ "50GBASE-BR40U";
+ }
+ /* 802.3ck-2022 */
+ bit b100GBaseCR1 {
+ description
+ "100GBASE-CR1";
+ }
+ bit b100GBaseKR1 {
+ description
+ "100GBASE-KR1";
+ }
+ bit b200GBaseCR2 {
+ description
+ "200GBASE-CR2";
+ }
+ bit b200GBaseKR2 {
+ description
+ "200GBASE-KR2";
+ }
+ bit b400GBaseCR4 {
+ description
+ "400GBASE-CR4";
+ }
+ bit b400GBaseKR4 {
+ description
+ "400GBASE-KR4";
+ }
+ /* 802.3cs-2022 */
+ bit b10G2p5GBaseSP1Dx {
+ description
+ "10/2.5GBASE-SP1-Dx";
+ }
+ bit b10G2p5GBaseSP1Uxy {
+ description
+ "10/2.5GBASE-SP1-Uxy";
+ }
+ bit b10GBaseSP1Dx {
+ description
+ "10GBASE-SP1-Dx";
+ }
+ bit b10GBaseSP1Uxy {
+ description
+ "10GBASE-SP1-Uxy";
+ }
+ /* 802.3db-2022 */
+ bit b100GBaseSR1 {
+ description
+ "100GBASE-SR1";
+ }
+ bit b100GBaseVR1 {
+ description
+ "100GBASE-VR1";
+ }
+ bit bit200GBaseSR2 {
+ description
+ "200GBASE-SR2";
+ }
+ bit bit200GBaseVR2 {
+ description
+ "200GBASE-VR2";
+ }
+ bit bit400GBaseSR4 {
+ description
+ "400GBASE-SR4";
+ }
+ bit bit400GBaseVR4 {
+ description
+ "400GBASE-VR4";
+ }
+ /* 802.3cz-2023 */
+ bit b2p5GbaseAU {
+ description
+ "2.5GBASE-AU";
+ }
+ bit b5GbaseAU {
+ description
+ "5GBASE-AU";
+ }
+ bit b10GbaseAU {
+ description
+ "10GBASE-AU";
+ }
+ bit b25GbaseAU {
+ description
+ "25GBASE-AU";
+ }
+ bit b50GbaseAU {
+ description
+ "50GBASE-AU";
+ }
+ /* 802.3cy-2023 */
+ bit b25GbaseT1 {
+ description
+ "25GBASE-T1";
+ }
+ /* 802.3df-2024 */
+ bit bit400GBaseDR4d2 {
+ description
+ "400GBASE-DR4-2";
+ }
+ bit bit800GBaseCR8 {
+ description
+ "800GBASE-CR8";
+ }
+ bit bit800GBaseDR8 {
+ description
+ "800GBASE-DR8";
+ }
+ bit bit800GBaseDR8d2 {
+ description
+ "800GBASE-DR8-2";
+ }
+ bit bit800GBaseKR8 {
+ description
+ "800GBASE-KR8";
+ }
+ bit bit800GBaseR {
+ description
+ "800GBASE-R";
+ }
+ bit bit800GBaseSR8 {
+ description
+ "800GBASE-SR8";
+ }
+ bit bit800GBaseVR8 {
+ description
+ "800GBASE-VR8";
+ }
+ }
+ description
+ "This data type is used to report the set of pmd-type values
+ an interface can implement.";
+ reference
+ "IEEE Std 802.3, 30.5.1.1.3 aMAUTypeList";
+ }
+
+ typedef media-available-type {
+ type enumeration {
+ /* 802.3-2022 */
+ enum other {
+ description
+ "Undefined";
+ }
+ enum unknown {
+ description
+ "initializing, true state not yet known";
+ }
+ enum available {
+ description
+ "link or light normal, loopback normal";
+ }
+ enum notAvailable {
+ description
+ "link loss or low light, no loopback";
+ }
+ enum remoteFault {
+ description
+ "remote fault with no detail";
+ }
+ enum remoteJabber {
+ description
+ "remote fault, reason known to be jabber";
+ }
+ enum remoteLinkLoss {
+ description
+ "remote fault, reason known to be far-end link loss";
+ }
+ enum remoteTest {
+ description
+ "remote fault, reason known to be test";
+ }
+ enum offline {
+ description
+ "offline, applies only to Clause 37 Auto-Negotiation";
+ }
+ enum autoNegError {
+ description
+ "Auto-Negotiation Error, applies only to Clause 37
+ auto-Negotiation";
+ }
+ enum pmdLinkFault {
+ description
+ "PMD/PMA receive link fault";
+ }
+ enum pcsLinkFault {
+ description
+ "PCS receive link fault";
+ }
+ enum excessiveBER {
+ description
+ "PCS Bit Error Ratio monitor reporting excessive error
+ ratio";
+ }
+ enum dxsLinkFault {
+ description
+ "DTE XGXS receive link fault, applies only to XAUI ";
+ }
+ enum pxsLinkFault {
+ description
+ "PHY XGXS transmit link fault, applies only to XAUI";
+ }
+ }
+ description
+ "This data type is used to report media availability.";
+ reference
+ "IEEE Std 802.3, 30.5.1.1.4 aMediaAvailable";
+ }
+
+ typedef auto-neg-ability-bits {
+ type bits {
+ /* Not PHY specific */
+ bit bOther {
+ description
+ "Other abilities beyond the scope of this module.";
+ }
+ bit bHalfDuplex {
+ description
+ "Half duplex";
+ }
+ bit bFullDuplex {
+ description
+ "Full duplex";
+ }
+ bit bPause {
+ description
+ "PAUSE operation as defined in Annex 31B";
+ }
+ bit bAPause {
+ description
+ "Asymmetric PAUSE operation as defined in
+ Clause 37, Annex 28B, and Annex 31B";
+ }
+ bit bSPause {
+ description
+ "Symmetric PAUSE operation as defined in
+ Clause 37, Annex 28B, and Annex 31B";
+ }
+ bit bBPause {
+ description
+ "Asymmetric and Symmetric PAUSE operation
+ as defined in Clause 37, Annex 28B, and Annex 31B";
+ }
+ bit bRemFault {
+ description
+ "Remote fault bit (RF) as specified in Clause 73
+ and Clause 98";
+ }
+ bit bRemFault1 {
+ description
+ "Remote fault bit 1 (RF1) as specified in Clause 37";
+ }
+ bit bRemFault2 {
+ description
+ "Remote fault bit 2 (RF2) as specified in Clause 37";
+ }
+ bit bFECCapable {
+ description
+ "FEC ability as specified in Clause 73 (see 73.6.5)
+ and Clause 74";
+ }
+ bit bFECRequested {
+ description
+ "FEC requested as specified in Clause 73 (see 73.6.5)
+ and Clause 74";
+ }
+ bit bRSFEC25Greq {
+ description
+ "25G RS-FEC requested as specified in Clause 73 (see 73.6.5)
+ and Clause 108";
+ }
+ bit bBaseFEC25Greq {
+ description
+ "25Gb/s BASE-R FEC ";
+ }
+ bit bForceMS {
+ description
+ "Force MASTER-SLAVE as specified in Clause 98 (see
+ 98.2.1.2.5)";
+ }
+ /* PHY/PMD */
+ bit b10baseT {
+ description
+ "10BASE-T as defined in Clause 14";
+ }
+ bit b10baseT1L {
+ description
+ "10BASE-T1L as specified in Clause 146";
+ }
+ bit b10baseT1S {
+ description
+ "10BASE-T1S as specified in Clause 147";
+ }
+ bit b100baseTX {
+ description
+ "100BASE-TX as defined in Clause 25";
+ }
+ bit b1000baseX {
+ description
+ "1000BASE-X half duplex as specified in Clause 36";
+ }
+ bit b1000baseT {
+ description
+ "1000BASE-T PHY as specified in Clause 40";
+ }
+ bit b1000baseT1 {
+ description
+ "1000BASE-T1 as specified in Clause 97";
+ }
+ bit b2p5GbaseT {
+ description
+ "2.5GBASE-T PHY as specified in Clause 126";
+ }
+ bit b2p5GbaseT1 {
+ description
+ "2.5GBASE-T1 as specified in Clause 149";
+ }
+ bit b2p5GbaseKX {
+ description
+ "2.5GBASE-KX as specified in Clause 128";
+ }
+ bit b5GBaseT {
+ description
+ "5GBASE-T PHY as specified in Clause 126";
+ }
+ bit b5GbaseT1 {
+ description
+ "5GBASE-T1 as specified in Clause 149";
+ }
+ bit b5GbaseKR {
+ description
+ "5GBASE-KR as specified in Clause 130";
+ }
+ bit b10GbaseT {
+ description
+ "10GBASE-T PHY as specified in Clause 55";
+ }
+ bit b1000baseKX {
+ description
+ "1000BASE-KX as specified in Clause 70";
+ }
+ bit b10GbaseKX4 {
+ description
+ "10GBASE-KX4 as specified in Clause 71";
+ }
+ bit b10GbaseKR {
+ description
+ "10GBASE-KR as specified in Clause 72";
+ }
+ bit b25GbaseT {
+ description
+ "25GBASE-T as specified in Clause 113";
+ }
+ bit b25GbaseRS {
+ description
+ "25GBASE-CR-S as specified in Clause 110 or
+ 25GBASE-KR-S as specified in Clause 111";
+ }
+ bit b25GbaseR {
+ description
+ "25GBASE-CR as specified in Clause 110 or
+ 25GBASE-KR as specified in Clause 111";
+ }
+ bit b25GbaseT1 {
+ description
+ "25GBASE-T1 as specified in Clause 165";
+ }
+ bit b40GbaseKR4 {
+ description
+ "40GBASE-KR4 as specified in Clause 84";
+ }
+ bit b40GbaseCR4 {
+ description
+ "40GBASE-CR4 as specified in Clause 85";
+ }
+ bit b40GbaseT {
+ description
+ "40GBASE-T as specified in Clause 113";
+ }
+ bit b50GbaseR {
+ description
+ "50GBASE-CR as specified in Clause 136 or
+ 50GBASE-KR as specified in Clause 137";
+ }
+ bit b100GbaseCR10 {
+ description
+ "100GBASE-CR10 as specified in Clause 85";
+ }
+ bit b100GbaseCR4 {
+ description
+ "100GBASE-CR4 as specified in Clause 92";
+ }
+ bit b100GbaseKR4 {
+ description
+ "100GBASE-KR4 as specified in Clause 93";
+ }
+ bit b100GbaseKP4 {
+ description
+ "100GBASE-KP4 as specified in Clause 94";
+ }
+ bit b100GbaseR2 {
+ description
+ "100GBASE-CR2 as specified in Clause 136 or
+ 100GBASE-KR2 as specified in Clause 137";
+ }
+ bit b200GbaseR4 {
+ description
+ "200GBASE-CR4 as specified in Clause 136
+ or 200GBASE-KR4 as specified in Clause 137";
+ }
+ }
+ description
+ "This data type is used as the syntax of the
+ ieee802-eth-phy-auto-neg-capability-bits,
+ ieee802-eth-phy-auto-neg-cap-advertised-bits,
+ and ieee802-eth-phy-auto-neg-cap-received-bits
+ objects in ieee802-eth-phy-auto-neg-table.";
+ reference
+ "IEEE Std 802.3, 30.6.1.1.5";
+ }
+}
diff --git a/src/confd/yang/confd/infix-ethernet-interface.yang b/src/confd/yang/confd/infix-ethernet-interface.yang
index f663a91fd..b5bbf4c9c 100644
--- a/src/confd/yang/confd/infix-ethernet-interface.yang
+++ b/src/confd/yang/confd/infix-ethernet-interface.yang
@@ -5,6 +5,7 @@ module infix-ethernet-interface {
import ieee802-ethernet-interface {
prefix eth;
+ revision-date 2025-09-10;
}
import ietf-interfaces {
prefix if;
@@ -18,6 +19,15 @@ module infix-ethernet-interface {
contact "kernelkit@googlegroups.com";
description "Extensions and deviations to ieee802-ethernet-interface.yang";
+ revision 2026-05-18 {
+ description "Updated to ieee802-ethernet-interface@2025-09-10 base
+ (IEEE Std 802.3.2-2025). No path or semantic changes
+ to Infix-exposed config; new operational leaves
+ phy-type and pmd-type from the upstream model are
+ used directly without deviation.";
+ reference "internal";
+ }
+
revision 2024-02-27 {
description "Add augment for in-good-octets and out-good-octets";
reference "internal";
diff --git a/src/confd/yang/confd/infix-ethernet-interface@2024-02-27.yang b/src/confd/yang/confd/infix-ethernet-interface@2026-05-18.yang
similarity index 100%
rename from src/confd/yang/confd/infix-ethernet-interface@2024-02-27.yang
rename to src/confd/yang/confd/infix-ethernet-interface@2026-05-18.yang
diff --git a/src/confd/yang/confd/infix-interfaces.yang b/src/confd/yang/confd/infix-interfaces.yang
index f4de3640f..6cd517d85 100644
--- a/src/confd/yang/confd/infix-interfaces.yang
+++ b/src/confd/yang/confd/infix-interfaces.yang
@@ -41,6 +41,15 @@ module infix-interfaces {
contact "kernelkit@googlegroups.com";
description "Linux bridge and lag extensions for ietf-interfaces.";
+ revision 2026-05-18 {
+ description "Track ieee802-ethernet-interface@2025-09-10 upgrade
+ (IEEE Std 802.3.2-2025): operational data now exposes
+ phy-type/pmd-type leaves and the interface speed via
+ ietf-interfaces:speed (bits/s) rather than the obsolete
+ eth:speed.";
+ reference "internal";
+ }
+
revision 2026-05-13 {
description "Add limitations on custom mac addresses on interfaces, now needs to be a correct unicast mac-address";
reference "internal";
diff --git a/src/confd/yang/confd/infix-interfaces@2026-05-13.yang b/src/confd/yang/confd/infix-interfaces@2026-05-18.yang
similarity index 100%
rename from src/confd/yang/confd/infix-interfaces@2026-05-13.yang
rename to src/confd/yang/confd/infix-interfaces@2026-05-18.yang
diff --git a/src/klish-plugin-infix/xml/infix.xml b/src/klish-plugin-infix/xml/infix.xml
index 250cd8378..bfb3b9b3f 100644
--- a/src/klish-plugin-infix/xml/infix.xml
+++ b/src/klish-plugin-infix/xml/infix.xml
@@ -737,15 +737,39 @@ echo "Public: $pub"
- copy factory | jq -C . |pager
+
+
+
+
+
+ copy factory ${KLISH_PARAM_xpath:+-x $KLISH_PARAM_xpath} | jq -C . |pager
- copy running | jq -C . |pager
+
+
+
+
+
+ copy running ${KLISH_PARAM_xpath:+-x $KLISH_PARAM_xpath} | jq -C . |pager
- copy startup | jq -C . |pager
+
+
+
+
+
+ copy startup ${KLISH_PARAM_xpath:+-x $KLISH_PARAM_xpath} | jq -C . |pager
+
+
+
+
+
+
+
+
+ copy operational ${KLISH_PARAM_xpath:+-x $KLISH_PARAM_xpath} | jq -C . |pager
diff --git a/src/landing/index.html b/src/landing/index.html
index 2a0a4ec51..e481dfe19 100644
--- a/src/landing/index.html
+++ b/src/landing/index.html
@@ -106,14 +106,15 @@ Welcome to Infix :-)
}
}
admin@infix-12-34-56:/config/interface/eth0/> leave
-admin@infix-12-34-56:/> show interfaces
-INTERFACE PROTOCOL STATE DATA
-eth0 ethernet UP 52:54:00:12:34:56
- ipv4 192.168.2.200/24 (static)
- ipv6 fe80::5054:ff:fe12:3456/64 (link-layer)
-lo ethernet UP 00:00:00:00:00:00
- ipv4 127.0.0.1/8 (static)
- ipv6 ::1/128 (static)
+admin@infix-12-34-56:/> show interface
+INTERFACE PROTOCOL STATE DATA
+eth0 1000baseT UP duplex: full
+ ethernet 52:54:00:12:34:56
+ ipv4 192.168.2.200/24 (static)
+ ipv6 fe80::5054:ff:fe12:3456/64 (link-layer)
+lo loopback UP
+ ipv4 127.0.0.1/8 (static)
+ ipv6 ::1/128 (static)
admin@infix-12-34-56:/> copy running-config startup-config
Click here for more details.
diff --git a/src/statd/python/cli_pretty/cli_pretty.py b/src/statd/python/cli_pretty/cli_pretty.py
index bf77df3db..22ef48b94 100755
--- a/src/statd/python/cli_pretty/cli_pretty.py
+++ b/src/statd/python/cli_pretty/cli_pretty.py
@@ -101,7 +101,7 @@ def compress_interface_list(interfaces):
class Pad:
flags = 2
iface = 16
- proto = 11
+ proto = 14
state = 12
data = 41
@@ -1042,7 +1042,9 @@ def __init__(self, data):
self.autoneg = get_json_data('unknown', self.data, 'ieee802-ethernet-interface:ethernet',
'auto-negotiation', 'enable')
self.duplex = get_json_data('', self.data,'ieee802-ethernet-interface:ethernet','duplex')
- self.speed = get_json_data('', self.data, 'ieee802-ethernet-interface:ethernet', 'speed')
+ self.speed = get_json_data('', self.data, 'speed')
+ self.pmd_type = get_json_data('', self.data, 'ieee802-ethernet-interface:ethernet', 'pmd-type')
+ self.phy_type = get_json_data('', self.data, 'ieee802-ethernet-interface:ethernet', 'phy-type')
self.phys_address = data.get('phys-address', '')
self.br_mdb = get_json_data({}, self.data, 'infix-interfaces:bridge', 'multicast-filters')
@@ -1107,9 +1109,12 @@ def __init__(self, data):
self.wireguard = self.data.get('infix-interfaces:wireguard')
if self.data.get('infix-interfaces:vlan'):
- self.lower_if = self.data.get('infix-interfaces:vlan', None).get('lower-layer-if',None)
+ vlan_data = self.data.get('infix-interfaces:vlan')
+ self.lower_if = vlan_data.get('lower-layer-if', None)
+ self.vid = vlan_data.get('id', None)
else:
self.lower_if = ''
+ self.vid = None
def is_wifi(self):
return self.type == "infix-if-type:wifi"
@@ -1173,66 +1178,102 @@ def pr_proto_ipv6(self, pipe=''):
row += f"{'':<{Pad.state}}{addr['ip']}/{addr['prefix-length']} {origin}"
print(row)
- def _pr_proto_common(self, name, phys_address, pipe=''):
+ def _phy_label(self):
+ """Display label derived from IEEE pmd-type or phy-type identity.
+
+ Prefers pmd-type (specific medium, e.g. '10GbaseLR') over phy-type
+ (family-level, e.g. '10GbaseR') when both are populated. Empty
+ when neither is reported — non-ethernet interfaces don't have these
+ leaves, and yanger skips them for ethernet ports with no link or
+ unmapped (port, speed, duplex) tuple.
+ """
+ identity = self.pmd_type or self.phy_type
+ if not identity:
+ return ""
+ return identity.removeprefix(
+ "ieee802-ethernet-phy-type:pmd-type-"
+ ).removeprefix(
+ "ieee802-ethernet-phy-type:phy-type-"
+ ).replace("BASE-", "base")
+
+ def _pr_proto_common(self, name, pipe='', data='', show_state=True):
+ # pipe="" means this row follows pr_name() on the same line, so col 1-2
+ # are already on screen. A non-empty pipe (" ", "│", "└ ") prints col
+ # 1-2 with that marker. show_state=False blanks the STATE column for
+ # sub-rows whose state was already reflected in the row above.
row = ""
if len(pipe) > 0:
row = f"{'':<{Pad.flags}}"
row += f"{pipe:<{Pad.iface}}"
row += f"{name:<{Pad.proto}}"
- dec = Decore.green if self.oper() == "up" else Decore.red
- row += dec(f"{self.oper().upper():<{Pad.state}}")
- if phys_address:
- row += f"{self.phys_address:<{Pad.data}}"
+ if show_state:
+ dec = Decore.green if self.oper() == "up" else Decore.red
+ row += dec(f"{self.oper().upper():<{Pad.state}}")
+ else:
+ row += f"{'':<{Pad.state}}"
+ if data:
+ row += f"{data:<{Pad.data}}"
return row
- def pr_proto_eth(self, pipe=''):
- row = self._pr_proto_common("ethernet", True, pipe);
- print(row)
+ def _pr_phy_row(self, pipe=''):
+ """Emit the physical-medium row when applicable. Return True if printed.
- def pr_proto_veth(self, pipe=''):
- row = self._pr_proto_common("veth", True, pipe);
+ Skipped when pmd-type is unknown or the link is not up — keeping the
+ common 'boring port' cases quiet and falling back to the ethernet row.
+ """
+ label = self._phy_label()
+ if not label or self.oper() != "up":
+ return False
+ data = f"duplex: {self.duplex}" if self.duplex else ""
+ print(self._pr_proto_common(label, pipe, data))
+ return True
- if self.lower_if:
- row = f"{'':<{Pad.iface}}"
- row += f"{'veth':<{Pad.proto}}"
- row += f"{'':<{Pad.state}}"
- row += f"peer:{self.lower_if}"
+ def pr_proto_eth(self, pipe=''):
+ print(self._pr_proto_common("ethernet", pipe, self.phys_address or ""))
- print(row)
+ def pr_proto_eth_subrow(self, pipe=' '):
+ """Ethernet row beneath another protocol row: bare MAC, no STATE column."""
+ print(self._pr_proto_common("ethernet", pipe, self.phys_address or "",
+ show_state=False))
- def pr_proto_gretap(self, pipe=''):
- row = self._pr_proto_common("gretap", True, pipe);
- print(row)
+ def pr_proto_veth(self, pipe=''):
+ parts = []
+ if self.phys_address:
+ parts.append(self.phys_address)
+ if self.lower_if:
+ parts.append(f"peer: {self.lower_if}")
+ print(self._pr_proto_common("veth", pipe, " ".join(parts)))
def pr_proto_gre(self, pipe=''):
- row = self._pr_proto_common("gre", False, pipe);
- print(row)
+ data = ""
+ if self.gre and (remote := self.gre.get('remote')):
+ data = f"remote: {remote}"
+ print(self._pr_proto_common("gre", pipe, data))
def pr_proto_vxlan(self, pipe=''):
- row = self._pr_proto_common("vxlan", True, pipe);
- print(row)
+ parts = []
+ if self.vxlan:
+ if (vni := self.vxlan.get('vni')) is not None:
+ parts.append(f"vni: {vni}")
+ if remote := self.vxlan.get('remote'):
+ parts.append(f"remote: {remote}")
+ print(self._pr_proto_common("vxlan", pipe, " ".join(parts)))
def pr_proto_wireguard(self, pipe=''):
- row = self._pr_proto_common("wireguard", False, pipe)
-
+ data = ""
if self.wireguard:
peer_status = self.wireguard.get('peer-status', {})
peers = peer_status.get('peer', [])
total_peers = len(peers)
up_peers = sum(1 for p in peers if p.get('connection-status') == 'up')
-
if total_peers > 0:
- row += f"{total_peers} peer"
- if total_peers != 1:
- row += "s"
- row += f" ({up_peers} up)"
-
- print(row)
+ plural = "s" if total_peers != 1 else ""
+ data = f"{total_peers} peer{plural} ({up_peers} up)"
+ print(self._pr_proto_common("wireguard", pipe, data))
def pr_proto_loopack(self, pipe=''):
- row = self._pr_proto_common("loopback", False, pipe);
- print(row)
+ print(self._pr_proto_common("loopback", pipe))
def pr_wifi_ssids(self):
width = 70
@@ -1309,42 +1350,19 @@ def pr_wifi_stations(self):
def pr_proto_wifi(self, pipe=''):
- row = self._pr_proto_common("ethernet", True, pipe);
- print(row)
- ssid = None
- signal = None
- mode = None
-
- if self.wifi:
- # Detect mode: AP has "stations", Station has "signal-strength" or "scan-results"
- ap=self.wifi.get("access-point", {})
- if ap:
- ssid = ap.get("ssid", "------")
- mode = "AP"
- stations_data = ap.get("stations", {})
- stations = stations_data.get("station", [])
- station_count = len(stations)
- data_str = f"{mode}, ssid: {ssid}, stations: {station_count}"
- else:
- station=self.wifi.get("station", {})
- ssid = station.get("ssid", "------")
- signal = station.get("signal-strength")
- mode = "Station"
- if signal is not None:
- signal_str = signal_to_status(signal)
- data_str = f"{mode}, ssid: {ssid}, signal: {signal_str}"
- else:
- data_str = f"{mode}, ssid: {ssid}"
+ if self.wifi and (ap := self.wifi.get("access-point", {})):
+ ssid = ap.get("ssid", "------")
+ stations = ap.get("stations", {}).get("station", [])
+ data_str = f"access-point ssid: {ssid} stations: {len(stations)}"
+ elif self.wifi and (station := self.wifi.get("station", {})):
+ ssid = station.get("ssid", "------")
+ data_str = f"station ssid: {ssid}"
+ if (signal := station.get("signal-strength")) is not None:
+ data_str += f" signal: {signal_to_status(signal)}"
else:
data_str = "ssid: ------"
- row = f"{'':<{Pad.flags}}"
- row += f"{pipe:<{Pad.iface}}"
- row = f"{'':<{Pad.flags}}"
- row += f"{pipe:<{Pad.iface}}"
- row += f"{'wifi':<{Pad.proto}}"
- row += f"{'':<{Pad.state}}{data_str}"
- print(row)
+ print(self._pr_proto_common("wifi", pipe, data_str))
def pr_proto_br(self, br_vlans):
data_str = ""
@@ -1357,23 +1375,18 @@ def pr_proto_br(self, br_vlans):
else:
row += Decore.red(f"{self.oper().upper():<{Pad.state}}")
+ vlans = []
for vlan in br_vlans:
- if 'tagged' in vlan:
- for tagged in vlan['tagged']:
- if tagged == self.name:
- if data_str:
- data_str += f",{vlan['vid']}t"
- else:
- data_str += f"vlan:{vlan['vid']}t"
- if 'untagged' in vlan:
- for untagged in vlan['untagged']:
- if untagged == self.name:
- if data_str:
- data_str += f",{vlan['vid']}u"
- else:
- data_str += f"vlan:{vlan['vid']}u"
+ if 'tagged' in vlan and self.name in vlan['tagged']:
+ vlans.append(f"{vlan['vid']}t")
+ if 'untagged' in vlan and self.name in vlan['untagged']:
+ vlans.append(f"{vlan['vid']}u")
+ tokens = []
+ if vlans:
+ tokens.append(f"vlan: {','.join(vlans)}")
if self.pvid:
- data_str += f" pvid:{self.pvid}"
+ tokens.append(f"pvid: {self.pvid}")
+ data_str = " ".join(tokens)
if data_str:
row += f"{data_str:<{Pad.data}}"
@@ -1390,11 +1403,11 @@ def pr_bridge(self, _ifaces):
lowers.append(_iface)
if lowers:
- self.pr_proto_eth(pipe='│')
+ self.pr_proto_eth_subrow(pipe='│')
self.pr_proto_ipv4(pipe='│')
self.pr_proto_ipv6(pipe='│')
else:
- self.pr_proto_eth(pipe=' ')
+ self.pr_proto_eth_subrow()
self.pr_proto_ipv4()
self.pr_proto_ipv6()
@@ -1449,11 +1462,11 @@ def pr_lag(self, _ifaces):
lowers.append(_iface)
if lowers:
- self.pr_proto_eth(pipe='│')
+ self.pr_proto_eth_subrow(pipe='│')
self.pr_proto_ipv4(pipe='│')
self.pr_proto_ipv6(pipe='│')
else:
- self.pr_proto_eth(pipe=' ')
+ self.pr_proto_eth_subrow()
self.pr_proto_ipv4()
self.pr_proto_ipv6()
@@ -1476,13 +1489,15 @@ def pr_gre(self):
def pr_gretap(self):
self.pr_name(pipe="")
- self.pr_proto_gretap()
+ self.pr_proto_gre()
+ self.pr_proto_eth_subrow()
self.pr_proto_ipv4()
self.pr_proto_ipv6()
def pr_vxlan(self):
self.pr_name(pipe="")
self.pr_proto_vxlan()
+ self.pr_proto_eth_subrow()
self.pr_proto_ipv4()
self.pr_proto_ipv6()
@@ -1495,12 +1510,14 @@ def pr_wireguard(self):
def pr_wifi(self):
self.pr_name(pipe="")
self.pr_proto_wifi()
+ self.pr_proto_eth_subrow()
self.pr_proto_ipv4()
self.pr_proto_ipv6()
def pr_vlan(self, _ifaces):
self.pr_name(pipe="")
- self.pr_proto_eth()
+ data = f"vid: {self.vid}" if self.vid is not None else ""
+ print(self._pr_proto_common("vlan", "", data))
if self.lower_if:
self.pr_proto_ipv4(pipe='│')
@@ -1515,7 +1532,7 @@ def pr_vlan(self, _ifaces):
print(f"Error, didn't find parent interface for vlan {self.name}")
sys.exit(1)
parent.pr_name(pipe='└ ')
- parent.pr_proto_eth()
+ print()
def pr_container(self):
# Add ⇅ flag for interfaces with IP forwarding enabled
@@ -1532,62 +1549,65 @@ def pr_container(self):
def pr_iface(self):
if self.is_in_container():
- print(Decore.gray_bg(f"{'owned by container':<{20}}: {', ' . join(self.containers)}"))
+ print(Decore.gray_bg(f"{'owned by container':<{19}}: {', ' . join(self.containers)}"))
- print(f"{'name':<{20}}: {self.name}")
- print(f"{'type':<{20}}: {self.type.split(':')[1]}")
- print(f"{'index':<{20}}: {self.index}")
+ print(f"{'name':<{19}}: {self.name}")
+ print(f"{'type':<{19}}: {self.type.split(':')[1]}")
+ print(f"{'index':<{19}}: {self.index}")
if self.mtu:
- print(f"{'mtu':<{20}}: {self.mtu}")
+ print(f"{'mtu':<{19}}: {self.mtu}")
if self.oper():
- print(f"{'operational status':<{20}}: {self.oper(detail=True)}")
+ print(f"{'operational status':<{19}}: {self.oper(detail=True)}")
forwarding = "enabled" if self.name in Iface._routing_ifaces else "disabled"
- print(f"{'ip forwarding':<{20}}: {forwarding}")
+ print(f"{'ip forwarding':<{19}}: {forwarding}")
if self.lower_if:
- print(f"{'lower-layer-if':<{20}}: {self.lower_if}")
+ print(f"{'lower-layer-if':<{19}}: {self.lower_if}")
+
+ if label := self._phy_label():
+ print(f"{'link mode':<{19}}: {label}")
if self.autoneg != 'unknown':
val = "on" if self.autoneg else "off"
- print(f"{'auto-negotiation':<{20}}: {val}")
+ print(f"{'auto-negotiation':<{19}}: {val}")
if self.duplex:
- print(f"{'duplex':<{20}}: {self.duplex}")
+ print(f"{'duplex':<{19}}: {self.duplex}")
if self.speed:
- mbs = float(self.speed) * 1000
- print(f"{'speed':<{20}}: {int(mbs)}")
+ mbps = int(self.speed) // 1_000_000
+ print(f"{'speed':<{19}}: {mbps}")
if self.phys_address:
- print(f"{'physical address':<{20}}: {self.phys_address}")
+ print(f"{'physical address':<{19}}: {self.phys_address}")
if self.lag_mode:
- print(f"{'lag mode':<{20}}: {self.lag_mode}")
+ print(f"{'lag mode':<{19}}: {self.lag_mode}")
if self.lag_mode == "lacp":
- print(f"{'lag hash':<{20}}: {self.lag_hash}")
- print(f"{'lacp mode':<{20}}: {self.lacp_mode}")
- print(f"{'lacp rate':<{20}}: {self.lacp_rate}")
- print(f"{'lacp aggregate id':<{20}}: {self.lacp_id}")
- print(f"{'lacp system priority':<{20}}: {self.lacp_sys_prio}")
- print(f"{'lacp actor key':<{20}}: {self.lacp_actor_key}")
- print(f"{'lacp partner key':<{20}}: {self.lacp_partner_key}")
- print(f"{'lacp partner mac':<{20}}: {self.lacp_partner_mac}")
+ print(f"{'lag hash':<{19}}: {self.lag_hash}")
+ print(f"{'lacp mode':<{19}}: {self.lacp_mode}")
+ print(f"{'lacp rate':<{19}}: {self.lacp_rate}")
+ print(f"{'lacp aggregate id':<{19}}: {self.lacp_id}")
+ print(f"{'lacp sys priority':<{19}}: {self.lacp_sys_prio}")
+ print(f"{'lacp actor key':<{19}}: {self.lacp_actor_key}")
+ print(f"{'lacp partner key':<{19}}: {self.lacp_partner_key}")
+ print(f"{'lacp partner mac':<{19}}: {self.lacp_partner_mac}")
else:
- print(f"{'lag type':<{20}}: {self.lag_type}")
- print(f"{'lag hash':<{20}}: {self.lag_hash}")
- print(f"{'link debounce up':<{20}}: {self.link_updelay} msec")
- print(f"{'link debounce down':<{20}}: {self.link_downdelay} msec")
+ print(f"{'lag type':<{19}}: {self.lag_type}")
+ print(f"{'lag hash':<{19}}: {self.lag_hash}")
+ print(f"{'link debounce up':<{19}}: {self.link_updelay} msec")
+ print(f"{'link debounce down':<{19}}: {self.link_downdelay} msec")
if self.lag:
- print(f"{'lag member':<{20}}: {self.lag}")
- print(f"{'lag member state':<{20}}: {self.lag_state}")
+ print(f"{'lag member':<{19}}: {self.lag}")
+ print(f"{'lag member state':<{19}}: {self.lag_state}")
if self.lacp_state:
- print(f"{'lacp aggregate id':<{20}}: {self.lacp_id}")
- print(f"{'lacp actor state':<{20}}: {', '.join(self.lacp_state)}")
- print(f"{'lacp partner state':<{20}}: {', '.join(self.lacp_pstate)}")
- print(f"{'link failure count':<{20}}: {self.link_failures}")
+ print(f"{'lacp aggregate id':<{19}}: {self.lacp_id}")
+ print(f"{'lacp actor state':<{19}}: {', '.join(self.lacp_state)}")
+ print(f"{'lacp partner state':<{19}}: {', '.join(self.lacp_pstate)}")
+ print(f"{'link failure count':<{19}}: {self.link_failures}")
if self.ipv4_addr:
first = True
@@ -1595,12 +1615,12 @@ def pr_iface(self):
origin = f"({addr['origin']})" if addr.get('origin') else ""
key = 'ipv4 addresses' if first else ''
colon = ':' if first else ' '
- row = f"{key:<{20}}{colon} "
+ row = f"{key:<{19}}{colon} "
row += f"{addr['ip']}/{addr['prefix-length']} {origin}"
print(row)
first = False
else:
- print(f"{'ipv4 addresses':<{20}}:")
+ print(f"{'ipv4 addresses':<{19}}:")
if self.ipv6_addr:
first = True
@@ -1608,16 +1628,16 @@ def pr_iface(self):
origin = f"({addr['origin']})" if addr.get('origin') else ""
key = 'ipv6 addresses' if first else ''
colon = ':' if first else ' '
- row = f"{key:<{20}}{colon} "
+ row = f"{key:<{19}}{colon} "
row += f"{addr['ip']}/{addr['prefix-length']} {origin}"
print(row)
first = False
else:
- print(f"{'ipv6 addresses':<{20}}:")
+ print(f"{'ipv6 addresses':<{19}}:")
if self.in_octets and self.out_octets:
- print(f"{'in-octets':<{20}}: {self.in_octets}")
- print(f"{'out-octets':<{20}}: {self.out_octets}")
+ print(f"{'in-octets':<{19}}: {self.in_octets}")
+ print(f"{'out-octets':<{19}}: {self.out_octets}")
if self.wifi:
# Detect mode: AP has "stations", Station has "signal-strength" or "scan-results"
@@ -1627,43 +1647,43 @@ def pr_iface(self):
ssid = ap.get('ssid', "----")
stations_data = ap.get("stations", {})
stations = stations_data.get("station", [])
- print(f"{'mode':<{20}}: {mode}")
- print(f"{'ssid':<{20}}: {ssid}")
- print(f"{'connected stations':<{20}}: {len(stations)}")
+ print(f"{'mode':<{19}}: {mode}")
+ print(f"{'ssid':<{19}}: {ssid}")
+ print(f"{'connected stations':<{19}}: {len(stations)}")
self.pr_wifi_stations()
else:
mode = "station"
station = self.wifi.get('station', {})
signal = station.get('signal-strength')
ssid = station.get('ssid', "----")
- print(f"{'mode':<{20}}: {mode}")
- print(f"{'ssid':<{20}}: {ssid}")
+ print(f"{'mode':<{19}}: {mode}")
+ print(f"{'ssid':<{19}}: {ssid}")
if signal is not None:
signal_status = signal_to_status(signal)
- print(f"{'signal':<{20}}: {signal} dBm ({signal_status})")
+ print(f"{'signal':<{19}}: {signal} dBm ({signal_status})")
rx_speed = station.get('rx-speed')
tx_speed = station.get('tx-speed')
if rx_speed is not None:
- print(f"{'rx bitrate':<{20}}: {rx_speed / 10:.1f} Mbps")
+ print(f"{'rx bitrate':<{19}}: {rx_speed / 10:.1f} Mbps")
if tx_speed is not None:
- print(f"{'tx bitrate':<{20}}: {tx_speed / 10:.1f} Mbps")
+ print(f"{'tx bitrate':<{19}}: {tx_speed / 10:.1f} Mbps")
if "scan-results" in station:
self.pr_wifi_ssids()
if self.gre:
- print(f"{'local address':<{20}}: {self.gre['local']}")
- print(f"{'remote address':<{20}}: {self.gre['remote']}")
+ print(f"{'local address':<{19}}: {self.gre['local']}")
+ print(f"{'remote address':<{19}}: {self.gre['remote']}")
if self.vxlan:
- print(f"{'local address':<{20}}: {self.vxlan['local']}")
- print(f"{'remote address':<{20}}: {self.vxlan['remote']}")
- print(f"{'VxLAN id':<{20}}: {self.vxlan['vni']}")
+ print(f"{'local address':<{19}}: {self.vxlan['local']}")
+ print(f"{'remote address':<{19}}: {self.vxlan['remote']}")
+ print(f"{'VxLAN id':<{19}}: {self.vxlan['vni']}")
if self.wireguard:
peer_status = self.wireguard.get('peer-status', {})
peers = peer_status.get('peer', [])
if peers:
- print(f"{'peers':<{20}}: {len(peers)}")
+ print(f"{'peers':<{19}}: {len(peers)}")
for idx, peer in enumerate(peers, 1):
print(f"\n Peer {idx}:")
@@ -1700,10 +1720,10 @@ def pr_iface(self):
frame = get_json_data([], self.data,'ieee802-ethernet-interface:ethernet',
'statistics', 'frame')
if frame:
- print("")
+ Decore.title("Ethernet Statistics")
for key, val in frame.items():
key = remove_yang_prefix(key)
- print(f"eth-{key:<{25}}: {val}")
+ print(f"{key:<{25}}: {val}")
def pr_mdb(self, bridge):
for group in self.br_mdb.get("multicast-filter", {}):
@@ -1804,7 +1824,10 @@ def brport_sort(iface):
def print_interface(iface):
iface.pr_name()
- iface.pr_proto_eth()
+ if iface._pr_phy_row():
+ iface.pr_proto_eth_subrow()
+ else:
+ iface.pr_proto_eth()
iface.pr_proto_ipv4()
iface.pr_proto_ipv6()
diff --git a/src/statd/python/yanger/ietf_interfaces/ethernet.py b/src/statd/python/yanger/ietf_interfaces/ethernet.py
index c2b3821c8..670246ccc 100644
--- a/src/statd/python/yanger/ietf_interfaces/ethernet.py
+++ b/src/statd/python/yanger/ietf_interfaces/ethernet.py
@@ -68,31 +68,87 @@ def statistics(ifname):
return statistics
+# ethtool reports SPEED_UNKNOWN as UINT32_MAX when no link / no medium.
+_ETHTOOL_SPEED_UNKNOWN = (1 << 32) - 1
+
+# Map (ethtool port string, speed in Mb/s, duplex) -> (phy-type, pmd-type)
+# identity suffixes per IEEE Std 802.3.2-2025 (ieee802-ethernet-phy-type).
+#
+# phy-type names the PHY family / line coding (e.g. 1000BASE-X is the 8B/10B
+# family covering LX/SX/ZX/CX); pmd-type names the specific physical medium
+# (1000BASE-LX vs 1000BASE-SX). For media where ethtool's (port, speed,
+# duplex) tuple uniquely identifies the variant — copper, DAC, copper-T —
+# both leaves are populated with the right identities (often the same name).
+# For generic fiber where the same tuple can be SR/LR/ER/etc., we only
+# populate phy-type (family) and leave pmd-type as None — emitting a guess
+# would be misleading. Refining the PMD on fiber needs the SFP EEPROM
+# (ethtool -m), deferred.
+_LINK_MODES = {
+ # (port, speed Mb/s, duplex): (phy-type, pmd-type or None)
+ ("Twisted Pair", 10, "full"): ("10BASE-T", "10BASE-T"),
+ ("Twisted Pair", 10, "half"): ("10BASE-T", "10BASE-T"),
+ ("Twisted Pair", 100, "full"): ("100BASE-X", "100BASE-TX"),
+ ("Twisted Pair", 100, "half"): ("100BASE-X", "100BASE-TX"),
+ ("Twisted Pair", 1000, "full"): ("1000BASE-T", "1000BASE-T"),
+ ("Twisted Pair", 1000, "half"): ("1000BASE-T", "1000BASE-T"),
+ ("Twisted Pair", 2500, "full"): ("2.5GBASE-T", "2.5GBASE-T"),
+ ("Twisted Pair", 5000, "full"): ("5GBASE-T", "5GBASE-T"),
+ ("Twisted Pair", 10000, "full"): ("10GBASE-T", "10GBASE-T"),
+ ("Twisted Pair", 25000, "full"): ("25GBASE-T", "25GBASE-T"),
+ ("Twisted Pair", 40000, "full"): ("40GBASE-T", "40GBASE-T"),
+ ("MII", 10, "full"): ("10BASE-T", "10BASE-T"),
+ ("MII", 10, "half"): ("10BASE-T", "10BASE-T"),
+ ("MII", 100, "full"): ("100BASE-X", "100BASE-TX"),
+ ("MII", 100, "half"): ("100BASE-X", "100BASE-TX"),
+ ("FIBRE", 100, "full"): ("100BASE-X", None),
+ ("FIBRE", 1000, "full"): ("1000BASE-X", None),
+ ("FIBRE", 10000, "full"): ("10GBASE-R", None),
+ ("FIBRE", 25000, "full"): ("25GBASE-R", None),
+ ("FIBRE", 40000, "full"): ("40GBASE-R", None),
+ ("FIBRE", 100000, "full"): ("100GBASE-R", None),
+ ("Direct Attach Copper", 10000, "full"): ("10GBASE-R", "10GBASE-CR"),
+ ("Direct Attach Copper", 25000, "full"): ("25GBASE-R", "25GBASE-CR"),
+ ("Direct Attach Copper", 40000, "full"): ("40GBASE-R", "40GBASE-CR4"),
+ ("Direct Attach Copper", 100000, "full"): ("100GBASE-R", "100GBASE-CR4"),
+}
+
+
def link(ifname):
- """Parse speed/duplex/autoneg from ethtool output"""
+ """Read link properties from ethtool.
+
+ Returns (eth_container_dict, interface_speed_bps_or_None); the
+ interface speed is lifted onto ietf-interfaces:speed by the caller.
+ """
if data := HOST.run_json(["ethtool", "--json", ifname], {}):
data = data[0]
else:
- return None
+ return {}, None
- eth = {}
- eth["auto-negotation"] = { "enable": data.get("auto-negotation", False) }
+ eth = {"auto-negotiation": {"enable": data.get("auto-negotiation", False)}}
- if data.get("speed"):
- gbps = round((int(data["speed"]) / 1000), 3)
- eth["speed"] = str(gbps)
- if data.get("duplex"):
- eth["duplex"] = data["duplex"].lower()
- return eth
+ duplex = (data.get("duplex") or "").lower()
+ if duplex in ("full", "half"):
+ eth["duplex"] = duplex
+ speed_bps = None
+ speed_mbps = data.get("speed")
+ if isinstance(speed_mbps, int) and 0 < speed_mbps < _ETHTOOL_SPEED_UNKNOWN:
+ speed_bps = speed_mbps * 1_000_000
+ port = data.get("port") or ""
+ if mapping := _LINK_MODES.get((port, speed_mbps, duplex)):
+ phy, pmd = mapping
+ eth["phy-type"] = f"ieee802-ethernet-phy-type:phy-type-{phy}"
+ if pmd is not None:
+ eth["pmd-type"] = f"ieee802-ethernet-phy-type:pmd-type-{pmd}"
+
+ return eth, speed_bps
-def ethernet(iplink):
- eth = link(iplink["ifname"])
- if eth is None:
- eth = {}
+def ethernet(iplink):
+ """Return (ethernet container, interface speed in bits/s or None)."""
+ eth, speed_bps = link(iplink["ifname"])
if stats := statistics(iplink["ifname"]):
eth["statistics"] = stats
- return eth
+ return eth, speed_bps
diff --git a/src/statd/python/yanger/ietf_interfaces/link.py b/src/statd/python/yanger/ietf_interfaces/link.py
index 4f99c8769..f4ae79a2b 100644
--- a/src/statd/python/yanger/ietf_interfaces/link.py
+++ b/src/statd/python/yanger/ietf_interfaces/link.py
@@ -159,8 +159,11 @@ def interface(iplink, ipaddr, systemjson=None):
if lg := lag.lag(iplink):
interface["infix-interfaces:lag"] = lg
case "infix-if-type:ethernet":
- if eth := ethernet.ethernet(iplink):
+ eth, speed_bps = ethernet.ethernet(iplink)
+ if eth:
interface["ieee802-ethernet-interface:ethernet"] = eth
+ if speed_bps:
+ interface["speed"] = str(speed_bps)
case "infix-if-type:vxlan":
if vxlan := tun.vxlan(iplink):
interface["infix-interfaces:vxlan"] = vxlan
diff --git a/test/case/statd/bridge-mdb/ietf-interfaces.json b/test/case/statd/bridge-mdb/ietf-interfaces.json
index 3967bc8a7..5dc320677 100644
--- a/test/case/statd/bridge-mdb/ietf-interfaces.json
+++ b/test/case/statd/bridge-mdb/ietf-interfaces.json
@@ -57,7 +57,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -80,7 +80,7 @@
"mtu": 1500
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -120,7 +120,7 @@
"mtu": 1500
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -160,7 +160,7 @@
"mtu": 1500
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -207,7 +207,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -237,7 +237,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -267,7 +267,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
diff --git a/test/case/statd/bridge-mdb/operational.json b/test/case/statd/bridge-mdb/operational.json
index ccb7b39de..e8f9697b1 100644
--- a/test/case/statd/bridge-mdb/operational.json
+++ b/test/case/statd/bridge-mdb/operational.json
@@ -35,7 +35,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -65,7 +65,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -105,7 +105,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -145,7 +145,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -185,7 +185,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -215,7 +215,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -245,7 +245,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
diff --git a/test/case/statd/containers/cli/show-interfaces b/test/case/statd/containers/cli/show-interfaces
index 375beb061..12ed8c334 100644
--- a/test/case/statd/containers/cli/show-interfaces
+++ b/test/case/statd/containers/cli/show-interfaces
@@ -1,41 +1,41 @@
-[7m⚑ INTERFACE PROTOCOL STATE DATA [0m
- lo loopback [32mUP [39m
- ipv4 127.0.0.1/8 (static)
- ipv6 ::1/128 (static)
- br0 bridge [33m [39mvlan:1u pvid:1
- │ ethernet [32mUP [39m00:a0:85:00:03:00
- │ ipv4 169.254.1.1/16 (random)
- │ ipv6 fe80::2a0:85ff:fe00:300/64 (link-layer)
- ├ e3 bridge [32mFORWARDING [39mvlan:1u pvid:1
- ├ e4 bridge [32mFORWARDING [39mvlan:1u pvid:1
- ├ veth0b bridge [32mFORWARDING [39mvlan:1u pvid:1
- └ veth2b bridge [32mFORWARDING [39mvlan:1u pvid:1
- br1 bridge [33m [39m
- │ ethernet [32mUP [39m00:a0:85:00:03:00
- ├ veth1b bridge [32mFORWARDING [39mvlan:6u pvid:6
- └ veth3b bridge [32mFORWARDING [39m
- e1 ethernet [32mUP [39m00:a0:85:00:03:01
- ipv6 fe80::2a0:85ff:fe00:301/64 (link-layer)
- e2 ethernet [32mUP [39m00:a0:85:00:03:02
- ipv6 fe80::2a0:85ff:fe00:302/64 (link-layer)
- e3.8 ethernet [32mUP [39m00:a0:85:00:03:03
- │ ipv4 10.1.1.1/32 (static)
- └ e3 ethernet [32mUP [39m00:a0:85:00:03:03
- e4.8 ethernet [32mUP [39m00:a0:85:00:03:04
- │ ipv4 10.1.1.1/32 (static)
- └ e4 ethernet [32mUP [39m00:a0:85:00:03:04
- e5 ethernet [32mUP [39m00:a0:85:00:03:05
- ipv6 fe80::2a0:85ff:fe00:305/64 (link-layer)
- e6 ethernet [32mUP [39m00:a0:85:00:03:06
- ipv4 10.1.1.101/24 (static)
- ipv6 fe80::2a0:85ff:fe00:306/64 (link-layer)
- e7 ethernet [32mUP [39m00:a0:85:00:03:07
- ipv6 fe80::2a0:85ff:fe00:307/64 (link-layer)
- [100mveth0a container container-A [0m
- veth0b veth [32mUP [39me6:19:75:86:80:dd
- [100mveth1a container container-A [0m
- veth1b veth [32mUP [39m3e:67:0f:15:24:14
- [100mveth2a container container-B [0m
- veth2b veth [32mUP [39mb2:fa:30:63:98:f0
- [100mveth3a container container-B [0m
- veth3b veth [32mUP [39mb2:1c:fa:a7:45:eb
+[7m⚑ INTERFACE PROTOCOL STATE DATA [0m
+ lo loopback [32mUP [39m
+ ipv4 127.0.0.1/8 (static)
+ ipv6 ::1/128 (static)
+ br0 bridge [33m [39mvlan: 1u pvid: 1
+ │ ethernet 00:a0:85:00:03:00
+ │ ipv4 169.254.1.1/16 (random)
+ │ ipv6 fe80::2a0:85ff:fe00:300/64 (link-layer)
+ ├ e3 bridge [32mFORWARDING [39mvlan: 1u pvid: 1
+ ├ e4 bridge [32mFORWARDING [39mvlan: 1u pvid: 1
+ ├ veth0b bridge [32mFORWARDING [39mvlan: 1u pvid: 1
+ └ veth2b bridge [32mFORWARDING [39mvlan: 1u pvid: 1
+ br1 bridge [33m [39m
+ │ ethernet 00:a0:85:00:03:00
+ ├ veth1b bridge [32mFORWARDING [39mvlan: 6u pvid: 6
+ └ veth3b bridge [32mFORWARDING [39m
+ e1 ethernet [32mUP [39m00:a0:85:00:03:01
+ ipv6 fe80::2a0:85ff:fe00:301/64 (link-layer)
+ e2 ethernet [32mUP [39m00:a0:85:00:03:02
+ ipv6 fe80::2a0:85ff:fe00:302/64 (link-layer)
+ e3.8 vlan [32mUP [39mvid: 8
+ │ ipv4 10.1.1.1/32 (static)
+ └ e3
+ e4.8 vlan [32mUP [39mvid: 8
+ │ ipv4 10.1.1.1/32 (static)
+ └ e4
+ e5 ethernet [32mUP [39m00:a0:85:00:03:05
+ ipv6 fe80::2a0:85ff:fe00:305/64 (link-layer)
+ e6 ethernet [32mUP [39m00:a0:85:00:03:06
+ ipv4 10.1.1.101/24 (static)
+ ipv6 fe80::2a0:85ff:fe00:306/64 (link-layer)
+ e7 ethernet [32mUP [39m00:a0:85:00:03:07
+ ipv6 fe80::2a0:85ff:fe00:307/64 (link-layer)
+ [100mveth0a container container-A [0m
+ veth0b veth [32mUP [39me6:19:75:86:80:dd
+ [100mveth1a container container-A [0m
+ veth1b veth [32mUP [39m3e:67:0f:15:24:14
+ [100mveth2a container container-B [0m
+ veth2b veth [32mUP [39mb2:fa:30:63:98:f0
+ [100mveth3a container container-B [0m
+ veth3b veth [32mUP [39mb2:1c:fa:a7:45:eb
diff --git a/test/case/statd/containers/ietf-interfaces.json b/test/case/statd/containers/ietf-interfaces.json
index b60d8694e..29b4bf8e8 100644
--- a/test/case/statd/containers/ietf-interfaces.json
+++ b/test/case/statd/containers/ietf-interfaces.json
@@ -57,7 +57,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -87,7 +87,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -110,7 +110,7 @@
"mtu": 1500
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -151,7 +151,7 @@
"mtu": 1500
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -199,7 +199,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -236,7 +236,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -266,7 +266,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
diff --git a/test/case/statd/containers/operational.json b/test/case/statd/containers/operational.json
index 23198c4a3..fd3773d9d 100644
--- a/test/case/statd/containers/operational.json
+++ b/test/case/statd/containers/operational.json
@@ -35,7 +35,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -65,7 +65,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -95,7 +95,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -136,7 +136,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -177,7 +177,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -207,7 +207,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -244,7 +244,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces b/test/case/statd/interfaces-all/cli/show-interfaces
index 2d64d5a4a..e992c2e30 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces
+++ b/test/case/statd/interfaces-all/cli/show-interfaces
@@ -1,51 +1,55 @@
-[7m⚑ INTERFACE PROTOCOL STATE DATA [0m
- lo loopback [32mUP [39m
- ipv4 127.0.0.1/8 (static)
- ipv6 ::1/128 (static)
- br-0 bridge [31mDOWN [39m
- ethernet [31mDOWN [39m00:a0:85:00:03:00
- br-D bridge [33m [39m
- │ ethernet [32mUP [39m00:a0:85:00:03:00
- │ ipv4 10.0.0.1/8 (static)
- │ ipv4 192.168.20.1/24 (static)
- │ ipv6 2001:db8::1/64 (static)
- │ ipv6 fe80::2a0:85ff:fe00:300/64 (link-layer)
- └ veth0a.20 bridge [32mFORWARDING [39m
- br-Q bridge [33m [39mvlan:20u,30u,40t
- │ ethernet [32mUP [39m00:a0:85:00:03:00
- ├ e3 bridge [32mFORWARDING [39mvlan:20t,30t,40t
- └ veth0b bridge [32mFORWARDING [39mvlan:20t,30t,40t
- br-Q.40 ethernet [32mUP [39m00:a0:85:00:03:00
- └ br-Q ethernet [32mUP [39m00:a0:85:00:03:00
- br-X bridge [33m [39m
- │ ethernet [32mUP [39m00:a0:85:00:03:00
- └ e2.30 bridge [32mFORWARDING [39m
- e1 ethernet [32mUP [39m00:a0:85:00:03:01
- ipv6 fe80::2a0:85ff:fe00:301/64 (link-layer)
- e2 ethernet [32mUP [39m00:a0:85:00:03:02
- ipv6 fe80::2a0:85ff:fe00:302/64 (link-layer)
- e2.30 ethernet [32mUP [39m00:a0:85:00:03:02
- └ e2 ethernet [32mUP [39m00:a0:85:00:03:02
- e3.10 ethernet [32mUP [39m00:a0:85:00:03:03
- └ e3 ethernet [32mUP [39m00:a0:85:00:03:03
- e4 ethernet [32mUP [39m00:a0:85:00:03:04
- ipv6 fe80::2a0:85ff:fe00:304/64 (link-layer)
- e5 ethernet [32mUP [39m00:a0:85:00:03:05
- ipv6 fe80::2a0:85ff:fe00:305/64 (link-layer)
- e6 ethernet [32mUP [39m00:a0:85:00:03:06
- ipv6 fe80::2a0:85ff:fe00:306/64 (link-layer)
- e7 ethernet [32mUP [39m00:a0:85:00:03:07
- ipv6 fe80::2a0:85ff:fe00:307/64 (link-layer)
- gre-v4 gre [32mUP [39m
- gre-v6 gre [32mUP [39m
- ipv4 192.168.50.2/16 (static)
- gretap-v4 gretap [32mUP [39mf6:d4:96:d8:9f:96
- gretap-v6 gretap [32mUP [39m7a:46:13:bd:fa:e6
- veth0a veth [32mUP [39m6e:d0:98:c4:e7:ef
- veth0a.20 ethernet [32mUP [39m6e:d0:98:c4:e7:ef
- └ veth0a ethernet [32mUP [39m6e:d0:98:c4:e7:ef
- veth0b veth [32mUP [39m36:da:80:06:7f:99
- vxlan-v4 vxlan [32mUP [39m8a:ea:59:32:df:70
- ipv4 192.168.30.2/24 (static)
- vxlan-v6 vxlan [32mUP [39m3e:30:c6:a1:71:64
- ipv4 192.168.40.2/24 (static)
+[7m⚑ INTERFACE PROTOCOL STATE DATA [0m
+ lo loopback [32mUP [39m
+ ipv4 127.0.0.1/8 (static)
+ ipv6 ::1/128 (static)
+ br-0 bridge [31mDOWN [39m
+ ethernet 00:a0:85:00:03:00
+ br-D bridge [33m [39m
+ │ ethernet 00:a0:85:00:03:00
+ │ ipv4 10.0.0.1/8 (static)
+ │ ipv4 192.168.20.1/24 (static)
+ │ ipv6 2001:db8::1/64 (static)
+ │ ipv6 fe80::2a0:85ff:fe00:300/64 (link-layer)
+ └ veth0a.20 bridge [32mFORWARDING [39m
+ br-Q bridge [33m [39mvlan: 20u,30u,40t
+ │ ethernet 00:a0:85:00:03:00
+ ├ e3 bridge [32mFORWARDING [39mvlan: 20t,30t,40t
+ └ veth0b bridge [32mFORWARDING [39mvlan: 20t,30t,40t
+ br-Q.40 vlan [32mUP [39mvid: 40
+ └ br-Q
+ br-X bridge [33m [39m
+ │ ethernet 00:a0:85:00:03:00
+ └ e2.30 bridge [32mFORWARDING [39m
+ e1 ethernet [32mUP [39m00:a0:85:00:03:01
+ ipv6 fe80::2a0:85ff:fe00:301/64 (link-layer)
+ e2 ethernet [32mUP [39m00:a0:85:00:03:02
+ ipv6 fe80::2a0:85ff:fe00:302/64 (link-layer)
+ e2.30 vlan [32mUP [39mvid: 30
+ └ e2
+ e3.10 vlan [32mUP [39mvid: 10
+ └ e3
+ e4 ethernet [32mUP [39m00:a0:85:00:03:04
+ ipv6 fe80::2a0:85ff:fe00:304/64 (link-layer)
+ e5 ethernet [32mUP [39m00:a0:85:00:03:05
+ ipv6 fe80::2a0:85ff:fe00:305/64 (link-layer)
+ e6 ethernet [32mUP [39m00:a0:85:00:03:06
+ ipv6 fe80::2a0:85ff:fe00:306/64 (link-layer)
+ e7 ethernet [32mUP [39m00:a0:85:00:03:07
+ ipv6 fe80::2a0:85ff:fe00:307/64 (link-layer)
+ gre-v4 gre [32mUP [39mremote: 192.168.20.2
+ gre-v6 gre [32mUP [39mremote: 2001:db8::2
+ ipv4 192.168.50.2/16 (static)
+ gretap-v4 gre [32mUP [39mremote: 192.168.20.2
+ ethernet f6:d4:96:d8:9f:96
+ gretap-v6 gre [32mUP [39mremote: 2001:db8::2
+ ethernet 7a:46:13:bd:fa:e6
+ veth0a veth [32mUP [39m6e:d0:98:c4:e7:ef
+ veth0a.20 vlan [32mUP [39mvid: 20
+ └ veth0a
+ veth0b veth [32mUP [39m36:da:80:06:7f:99
+ vxlan-v4 vxlan [32mUP [39mvni: 4 remote: 192.168.20.200
+ ethernet 8a:ea:59:32:df:70
+ ipv4 192.168.30.2/24 (static)
+ vxlan-v6 vxlan [32mUP [39mvni: 6 remote: 2001:db8::200
+ ethernet 3e:30:c6:a1:71:64
+ ipv4 192.168.40.2/24 (static)
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-0 b/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-0
index ada755b4b..f3a338758 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-0
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-0
@@ -1,9 +1,9 @@
-name : br-0
-type : bridge
-index : 9
-mtu : 1500
-operational status : down
-ip forwarding : disabled
-physical address : 00:a0:85:00:03:00
-ipv4 addresses :
-ipv6 addresses :
+name : br-0
+type : bridge
+index : 9
+mtu : 1500
+operational status : down
+ip forwarding : disabled
+physical address : 00:a0:85:00:03:00
+ipv4 addresses :
+ipv6 addresses :
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-D b/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-D
index a7cf8ca8f..2c30ec700 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-D
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-D
@@ -1,11 +1,11 @@
-name : br-D
-type : bridge
-index : 15
-mtu : 1500
-operational status : up
-ip forwarding : disabled
-physical address : 00:a0:85:00:03:00
-ipv4 addresses : 10.0.0.1/8 (static)
- 192.168.20.1/24 (static)
-ipv6 addresses : 2001:db8::1/64 (static)
- fe80::2a0:85ff:fe00:300/64 (link-layer)
+name : br-D
+type : bridge
+index : 15
+mtu : 1500
+operational status : up
+ip forwarding : disabled
+physical address : 00:a0:85:00:03:00
+ipv4 addresses : 10.0.0.1/8 (static)
+ 192.168.20.1/24 (static)
+ipv6 addresses : 2001:db8::1/64 (static)
+ fe80::2a0:85ff:fe00:300/64 (link-layer)
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-Q b/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-Q
index f149ac4df..f5be2191d 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-Q
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-Q
@@ -1,9 +1,9 @@
-name : br-Q
-type : bridge
-index : 16
-mtu : 1500
-operational status : up
-ip forwarding : disabled
-physical address : 00:a0:85:00:03:00
-ipv4 addresses :
-ipv6 addresses :
+name : br-Q
+type : bridge
+index : 16
+mtu : 1500
+operational status : up
+ip forwarding : disabled
+physical address : 00:a0:85:00:03:00
+ipv4 addresses :
+ipv6 addresses :
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-Q.40 b/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-Q.40
index 79d1e0582..bc2ddbbd5 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-Q.40
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-Q.40
@@ -1,10 +1,10 @@
-name : br-Q.40
-type : vlan
-index : 17
-mtu : 1500
-operational status : up
-ip forwarding : disabled
-lower-layer-if : br-Q
-physical address : 00:a0:85:00:03:00
-ipv4 addresses :
-ipv6 addresses :
+name : br-Q.40
+type : vlan
+index : 17
+mtu : 1500
+operational status : up
+ip forwarding : disabled
+lower-layer-if : br-Q
+physical address : 00:a0:85:00:03:00
+ipv4 addresses :
+ipv6 addresses :
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-X b/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-X
index 29e6717cc..5e9bc6126 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-X
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_br-X
@@ -1,9 +1,9 @@
-name : br-X
-type : bridge
-index : 11
-mtu : 1500
-operational status : up
-ip forwarding : disabled
-physical address : 00:a0:85:00:03:00
-ipv4 addresses :
-ipv6 addresses :
+name : br-X
+type : bridge
+index : 11
+mtu : 1500
+operational status : up
+ip forwarding : disabled
+physical address : 00:a0:85:00:03:00
+ipv4 addresses :
+ipv6 addresses :
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_gre-v4 b/test/case/statd/interfaces-all/cli/show-interfaces_-n_gre-v4
index 0b384b6bb..5e1386e74 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_gre-v4
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_gre-v4
@@ -1,10 +1,10 @@
-name : gre-v4
-type : gre
-index : 19
-mtu : 1476
-operational status : up
-ip forwarding : disabled
-ipv4 addresses :
-ipv6 addresses :
-local address : 192.168.20.1
-remote address : 192.168.20.2
+name : gre-v4
+type : gre
+index : 19
+mtu : 1476
+operational status : up
+ip forwarding : disabled
+ipv4 addresses :
+ipv6 addresses :
+local address : 192.168.20.1
+remote address : 192.168.20.2
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_gre-v6 b/test/case/statd/interfaces-all/cli/show-interfaces_-n_gre-v6
index a8e11775a..fa1f40b28 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_gre-v6
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_gre-v6
@@ -1,10 +1,10 @@
-name : gre-v6
-type : gre
-index : 20
-mtu : 1448
-operational status : up
-ip forwarding : disabled
-ipv4 addresses : 192.168.50.2/16 (static)
-ipv6 addresses :
-local address : 2001:db8::1
-remote address : 2001:db8::2
+name : gre-v6
+type : gre
+index : 20
+mtu : 1448
+operational status : up
+ip forwarding : disabled
+ipv4 addresses : 192.168.50.2/16 (static)
+ipv6 addresses :
+local address : 2001:db8::1
+remote address : 2001:db8::2
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_gretap-v4 b/test/case/statd/interfaces-all/cli/show-interfaces_-n_gretap-v4
index a33278028..87834dbb6 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_gretap-v4
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_gretap-v4
@@ -1,11 +1,11 @@
-name : gretap-v4
-type : gretap
-index : 21
-mtu : 1462
-operational status : up
-ip forwarding : disabled
-physical address : f6:d4:96:d8:9f:96
-ipv4 addresses :
-ipv6 addresses :
-local address : 192.168.20.1
-remote address : 192.168.20.2
+name : gretap-v4
+type : gretap
+index : 21
+mtu : 1462
+operational status : up
+ip forwarding : disabled
+physical address : f6:d4:96:d8:9f:96
+ipv4 addresses :
+ipv6 addresses :
+local address : 192.168.20.1
+remote address : 192.168.20.2
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_gretap-v6 b/test/case/statd/interfaces-all/cli/show-interfaces_-n_gretap-v6
index 24850d75d..eb25e8932 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_gretap-v6
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_gretap-v6
@@ -1,11 +1,11 @@
-name : gretap-v6
-type : gretap
-index : 22
-mtu : 1434
-operational status : up
-ip forwarding : disabled
-physical address : 7a:46:13:bd:fa:e6
-ipv4 addresses :
-ipv6 addresses :
-local address : 2001:db8::1
-remote address : 2001:db8::2
+name : gretap-v6
+type : gretap
+index : 22
+mtu : 1434
+operational status : up
+ip forwarding : disabled
+physical address : 7a:46:13:bd:fa:e6
+ipv4 addresses :
+ipv6 addresses :
+local address : 2001:db8::1
+remote address : 2001:db8::2
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0a b/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0a
index 5c7ea4226..5d7db92ea 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0a
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0a
@@ -1,11 +1,11 @@
-name : veth0a
-type : veth
-index : 13
-mtu : 1500
-operational status : up
-ip forwarding : disabled
-physical address : 6e:d0:98:c4:e7:ef
-ipv4 addresses :
-ipv6 addresses :
-in-octets : 299
-out-octets : 17190
+name : veth0a
+type : veth
+index : 13
+mtu : 1500
+operational status : up
+ip forwarding : disabled
+physical address : 6e:d0:98:c4:e7:ef
+ipv4 addresses :
+ipv6 addresses :
+in-octets : 299
+out-octets : 17190
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0a.20 b/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0a.20
index b42b6c6de..4c3c26e32 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0a.20
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0a.20
@@ -1,10 +1,10 @@
-name : veth0a.20
-type : vlan
-index : 14
-mtu : 1500
-operational status : up
-ip forwarding : disabled
-lower-layer-if : veth0a
-physical address : 6e:d0:98:c4:e7:ef
-ipv4 addresses :
-ipv6 addresses :
+name : veth0a.20
+type : vlan
+index : 14
+mtu : 1500
+operational status : up
+ip forwarding : disabled
+lower-layer-if : veth0a
+physical address : 6e:d0:98:c4:e7:ef
+ipv4 addresses :
+ipv6 addresses :
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0b b/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0b
index 7b3fadf2a..5b286a667 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0b
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_veth0b
@@ -1,11 +1,11 @@
-name : veth0b
-type : veth
-index : 12
-mtu : 1500
-operational status : up
-ip forwarding : disabled
-physical address : 36:da:80:06:7f:99
-ipv4 addresses :
-ipv6 addresses :
-in-octets : 17190
-out-octets : 299
+name : veth0b
+type : veth
+index : 12
+mtu : 1500
+operational status : up
+ip forwarding : disabled
+physical address : 36:da:80:06:7f:99
+ipv4 addresses :
+ipv6 addresses :
+in-octets : 17190
+out-octets : 299
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_vxlan-v4 b/test/case/statd/interfaces-all/cli/show-interfaces_-n_vxlan-v4
index 1fb950e96..144336574 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_vxlan-v4
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_vxlan-v4
@@ -1,12 +1,12 @@
-name : vxlan-v4
-type : vxlan
-index : 23
-mtu : 1500
-operational status : up
-ip forwarding : disabled
-physical address : 8a:ea:59:32:df:70
-ipv4 addresses : 192.168.30.2/24 (static)
-ipv6 addresses :
-local address : 192.168.20.100
-remote address : 192.168.20.200
-VxLAN id : 4
+name : vxlan-v4
+type : vxlan
+index : 23
+mtu : 1500
+operational status : up
+ip forwarding : disabled
+physical address : 8a:ea:59:32:df:70
+ipv4 addresses : 192.168.30.2/24 (static)
+ipv6 addresses :
+local address : 192.168.20.100
+remote address : 192.168.20.200
+VxLAN id : 4
diff --git a/test/case/statd/interfaces-all/cli/show-interfaces_-n_vxlan-v6 b/test/case/statd/interfaces-all/cli/show-interfaces_-n_vxlan-v6
index 0cf4d4fde..1e14a458d 100644
--- a/test/case/statd/interfaces-all/cli/show-interfaces_-n_vxlan-v6
+++ b/test/case/statd/interfaces-all/cli/show-interfaces_-n_vxlan-v6
@@ -1,12 +1,12 @@
-name : vxlan-v6
-type : vxlan
-index : 24
-mtu : 1500
-operational status : up
-ip forwarding : disabled
-physical address : 3e:30:c6:a1:71:64
-ipv4 addresses : 192.168.40.2/24 (static)
-ipv6 addresses :
-local address : 2001:db8::100
-remote address : 2001:db8::200
-VxLAN id : 6
+name : vxlan-v6
+type : vxlan
+index : 24
+mtu : 1500
+operational status : up
+ip forwarding : disabled
+physical address : 3e:30:c6:a1:71:64
+ipv4 addresses : 192.168.40.2/24 (static)
+ipv6 addresses :
+local address : 2001:db8::100
+remote address : 2001:db8::200
+VxLAN id : 6
diff --git a/test/case/statd/interfaces-all/ietf-interfaces.json b/test/case/statd/interfaces-all/ietf-interfaces.json
index bbd5cdb5b..e476101bb 100644
--- a/test/case/statd/interfaces-all/ietf-interfaces.json
+++ b/test/case/statd/interfaces-all/ietf-interfaces.json
@@ -57,7 +57,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -87,7 +87,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -109,7 +109,7 @@
"mtu": 1500
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -156,7 +156,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -186,7 +186,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -216,7 +216,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
@@ -246,7 +246,7 @@
]
},
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
}
diff --git a/test/case/statd/interfaces-all/operational.json b/test/case/statd/interfaces-all/operational.json
index 8a6725f90..cfc2b6ed8 100644
--- a/test/case/statd/interfaces-all/operational.json
+++ b/test/case/statd/interfaces-all/operational.json
@@ -35,7 +35,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -65,7 +65,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -95,7 +95,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -134,7 +134,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -164,7 +164,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -194,7 +194,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},
@@ -224,7 +224,7 @@
{
"admin-status": "up",
"ieee802-ethernet-interface:ethernet": {
- "auto-negotation": {
+ "auto-negotiation": {
"enable": false
}
},