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.
-
-![VLAN interface on top of Ethernet or Bridge interfaces](img/interface-vlan-variants.svg)
-
-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. ![4-port Gbit/s switch connected to Gbit and Fast Ethernet Hosts](img/ethernet-autoneg.svg) -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 ![Switch example (eth0 and lo)](img/ip-address-example-switch.svg) -
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. + +![VLAN interface on top of Ethernet or Bridge interfaces](img/interface-vlan-variants.svg) + +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 @@ -⚑ INTERFACE PROTOCOL STATE DATA  - lo loopback UP  - ipv4 127.0.0.1/8 (static) - ipv6 ::1/128 (static) - br0 bridge  vlan:1u pvid:1 - │ ethernet UP 00:a0:85:00:03:00 - │ ipv4 169.254.1.1/16 (random) - │ ipv6 fe80::2a0:85ff:fe00:300/64 (link-layer) - ├ e3 bridge FORWARDING vlan:1u pvid:1 - ├ e4 bridge FORWARDING vlan:1u pvid:1 - ├ veth0b bridge FORWARDING vlan:1u pvid:1 - └ veth2b bridge FORWARDING vlan:1u pvid:1 - br1 bridge   - │ ethernet UP 00:a0:85:00:03:00 - ├ veth1b bridge FORWARDING vlan:6u pvid:6 - └ veth3b bridge FORWARDING  - e1 ethernet UP 00:a0:85:00:03:01 - ipv6 fe80::2a0:85ff:fe00:301/64 (link-layer) - e2 ethernet UP 00:a0:85:00:03:02 - ipv6 fe80::2a0:85ff:fe00:302/64 (link-layer) - e3.8 ethernet UP 00:a0:85:00:03:03 - │ ipv4 10.1.1.1/32 (static) - └ e3 ethernet UP 00:a0:85:00:03:03 - e4.8 ethernet UP 00:a0:85:00:03:04 - │ ipv4 10.1.1.1/32 (static) - └ e4 ethernet UP 00:a0:85:00:03:04 - e5 ethernet UP 00:a0:85:00:03:05 - ipv6 fe80::2a0:85ff:fe00:305/64 (link-layer) - e6 ethernet UP 00:a0:85:00:03:06 - ipv4 10.1.1.101/24 (static) - ipv6 fe80::2a0:85ff:fe00:306/64 (link-layer) - e7 ethernet UP 00:a0:85:00:03:07 - ipv6 fe80::2a0:85ff:fe00:307/64 (link-layer) - veth0a container container-A  - veth0b veth UP e6:19:75:86:80:dd - veth1a container container-A  - veth1b veth UP 3e:67:0f:15:24:14 - veth2a container container-B  - veth2b veth UP b2:fa:30:63:98:f0 - veth3a container container-B  - veth3b veth UP b2:1c:fa:a7:45:eb +⚑ INTERFACE PROTOCOL STATE DATA  + lo loopback UP  + ipv4 127.0.0.1/8 (static) + ipv6 ::1/128 (static) + br0 bridge  vlan: 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 FORWARDING vlan: 1u pvid: 1 + ├ e4 bridge FORWARDING vlan: 1u pvid: 1 + ├ veth0b bridge FORWARDING vlan: 1u pvid: 1 + └ veth2b bridge FORWARDING vlan: 1u pvid: 1 + br1 bridge   + │ ethernet 00:a0:85:00:03:00 + ├ veth1b bridge FORWARDING vlan: 6u pvid: 6 + └ veth3b bridge FORWARDING  + e1 ethernet UP 00:a0:85:00:03:01 + ipv6 fe80::2a0:85ff:fe00:301/64 (link-layer) + e2 ethernet UP 00:a0:85:00:03:02 + ipv6 fe80::2a0:85ff:fe00:302/64 (link-layer) + e3.8 vlan UP vid: 8 + │ ipv4 10.1.1.1/32 (static) + └ e3 + e4.8 vlan UP vid: 8 + │ ipv4 10.1.1.1/32 (static) + └ e4 + e5 ethernet UP 00:a0:85:00:03:05 + ipv6 fe80::2a0:85ff:fe00:305/64 (link-layer) + e6 ethernet UP 00:a0:85:00:03:06 + ipv4 10.1.1.101/24 (static) + ipv6 fe80::2a0:85ff:fe00:306/64 (link-layer) + e7 ethernet UP 00:a0:85:00:03:07 + ipv6 fe80::2a0:85ff:fe00:307/64 (link-layer) + veth0a container container-A  + veth0b veth UP e6:19:75:86:80:dd + veth1a container container-A  + veth1b veth UP 3e:67:0f:15:24:14 + veth2a container container-B  + veth2b veth UP b2:fa:30:63:98:f0 + veth3a container container-B  + veth3b veth UP b2: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 @@ -⚑ INTERFACE PROTOCOL STATE DATA  - lo loopback UP  - ipv4 127.0.0.1/8 (static) - ipv6 ::1/128 (static) - br-0 bridge DOWN  - ethernet DOWN 00:a0:85:00:03:00 - br-D bridge   - │ ethernet UP 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 FORWARDING  - br-Q bridge  vlan:20u,30u,40t - │ ethernet UP 00:a0:85:00:03:00 - ├ e3 bridge FORWARDING vlan:20t,30t,40t - └ veth0b bridge FORWARDING vlan:20t,30t,40t - br-Q.40 ethernet UP 00:a0:85:00:03:00 - └ br-Q ethernet UP 00:a0:85:00:03:00 - br-X bridge   - │ ethernet UP 00:a0:85:00:03:00 - └ e2.30 bridge FORWARDING  - e1 ethernet UP 00:a0:85:00:03:01 - ipv6 fe80::2a0:85ff:fe00:301/64 (link-layer) - e2 ethernet UP 00:a0:85:00:03:02 - ipv6 fe80::2a0:85ff:fe00:302/64 (link-layer) - e2.30 ethernet UP 00:a0:85:00:03:02 - └ e2 ethernet UP 00:a0:85:00:03:02 - e3.10 ethernet UP 00:a0:85:00:03:03 - └ e3 ethernet UP 00:a0:85:00:03:03 - e4 ethernet UP 00:a0:85:00:03:04 - ipv6 fe80::2a0:85ff:fe00:304/64 (link-layer) - e5 ethernet UP 00:a0:85:00:03:05 - ipv6 fe80::2a0:85ff:fe00:305/64 (link-layer) - e6 ethernet UP 00:a0:85:00:03:06 - ipv6 fe80::2a0:85ff:fe00:306/64 (link-layer) - e7 ethernet UP 00:a0:85:00:03:07 - ipv6 fe80::2a0:85ff:fe00:307/64 (link-layer) - gre-v4 gre UP  - gre-v6 gre UP  - ipv4 192.168.50.2/16 (static) - gretap-v4 gretap UP f6:d4:96:d8:9f:96 - gretap-v6 gretap UP 7a:46:13:bd:fa:e6 - veth0a veth UP 6e:d0:98:c4:e7:ef - veth0a.20 ethernet UP 6e:d0:98:c4:e7:ef - └ veth0a ethernet UP 6e:d0:98:c4:e7:ef - veth0b veth UP 36:da:80:06:7f:99 - vxlan-v4 vxlan UP 8a:ea:59:32:df:70 - ipv4 192.168.30.2/24 (static) - vxlan-v6 vxlan UP 3e:30:c6:a1:71:64 - ipv4 192.168.40.2/24 (static) +⚑ INTERFACE PROTOCOL STATE DATA  + lo loopback UP  + ipv4 127.0.0.1/8 (static) + ipv6 ::1/128 (static) + br-0 bridge DOWN  + ethernet 00:a0:85:00:03:00 + br-D bridge   + │ 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 FORWARDING  + br-Q bridge  vlan: 20u,30u,40t + │ ethernet 00:a0:85:00:03:00 + ├ e3 bridge FORWARDING vlan: 20t,30t,40t + └ veth0b bridge FORWARDING vlan: 20t,30t,40t + br-Q.40 vlan UP vid: 40 + └ br-Q + br-X bridge   + │ ethernet 00:a0:85:00:03:00 + └ e2.30 bridge FORWARDING  + e1 ethernet UP 00:a0:85:00:03:01 + ipv6 fe80::2a0:85ff:fe00:301/64 (link-layer) + e2 ethernet UP 00:a0:85:00:03:02 + ipv6 fe80::2a0:85ff:fe00:302/64 (link-layer) + e2.30 vlan UP vid: 30 + └ e2 + e3.10 vlan UP vid: 10 + └ e3 + e4 ethernet UP 00:a0:85:00:03:04 + ipv6 fe80::2a0:85ff:fe00:304/64 (link-layer) + e5 ethernet UP 00:a0:85:00:03:05 + ipv6 fe80::2a0:85ff:fe00:305/64 (link-layer) + e6 ethernet UP 00:a0:85:00:03:06 + ipv6 fe80::2a0:85ff:fe00:306/64 (link-layer) + e7 ethernet UP 00:a0:85:00:03:07 + ipv6 fe80::2a0:85ff:fe00:307/64 (link-layer) + gre-v4 gre UP remote: 192.168.20.2 + gre-v6 gre UP remote: 2001:db8::2 + ipv4 192.168.50.2/16 (static) + gretap-v4 gre UP remote: 192.168.20.2 + ethernet f6:d4:96:d8:9f:96 + gretap-v6 gre UP remote: 2001:db8::2 + ethernet 7a:46:13:bd:fa:e6 + veth0a veth UP 6e:d0:98:c4:e7:ef + veth0a.20 vlan UP vid: 20 + └ veth0a + veth0b veth UP 36:da:80:06:7f:99 + vxlan-v4 vxlan UP vni: 4 remote: 192.168.20.200 + ethernet 8a:ea:59:32:df:70 + ipv4 192.168.30.2/24 (static) + vxlan-v6 vxlan UP vni: 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 } },