module openconfig-if-ethernet { yang-version "1"; // namespace namespace "http://openconfig.net/yang/interfaces/ethernet"; prefix "oc-eth"; // import some basic types import openconfig-interfaces { prefix oc-if; } import iana-if-type { prefix ift; } import openconfig-yang-types { prefix oc-yang; } import openconfig-extensions { prefix oc-ext; } // meta organization "OpenConfig working group"; contact "OpenConfig working group netopenconfig@googlegroups.com"; description "Model for managing Ethernet interfaces -- augments the OpenConfig model for interface configuration and state."; oc-ext:openconfig-version "2.3.0"; revision "2018-01-05" { description "Add logical loopback to interface."; reference "2.3.0"; } revision "2017-12-21" { description "Added IPv6 router advertisement configuration."; reference "2.1.0"; } revision "2017-07-14" { description "Added Ethernet/IP state data; Add dhcp-client; migrate to OpenConfig types modules; Removed or renamed opstate values"; reference "2.0.0"; } revision "2016-12-22" { description "Fixes to Ethernet interfaces model"; reference "1.1.0"; } // extension statements // feature statements // identity statements identity ETHERNET_SPEED { description "base type to specify available Ethernet link speeds"; } identity SPEED_10MB { base ETHERNET_SPEED; description "10 Mbps Ethernet"; } identity SPEED_100MB { base ETHERNET_SPEED; description "100 Mbps Ethernet"; } identity SPEED_1GB { base ETHERNET_SPEED; description "1 GBps Ethernet"; } identity SPEED_10GB { base ETHERNET_SPEED; description "10 GBps Ethernet"; } identity SPEED_25GB { base ETHERNET_SPEED; description "25 GBps Ethernet"; } identity SPEED_40GB { base ETHERNET_SPEED; description "40 GBps Ethernet"; } identity SPEED_50GB { base ETHERNET_SPEED; description "50 GBps Ethernet"; } identity SPEED_100GB { base ETHERNET_SPEED; description "100 GBps Ethernet"; } identity SPEED_UNKNOWN { base ETHERNET_SPEED; description "Interface speed is unknown. Systems may report speed UNKNOWN when an interface is down or unpopuplated (e.g., pluggable not present)."; } // typedef statements // grouping statements grouping ethernet-interface-config { description "Configuration items for Ethernet interfaces"; leaf mac-address { type oc-yang:mac-address; description "Assigns a MAC address to the Ethernet interface. If not specified, the corresponding operational state leaf is expected to show the system-assigned MAC address."; } leaf auto-negotiate { type boolean; default true; description "Set to TRUE to request the interface to auto-negotiate transmission parameters with its peer interface. When set to FALSE, the transmission parameters are specified manually."; reference "IEEE 802.3-2012 auto-negotiation transmission parameters"; } leaf duplex-mode { type enumeration { enum FULL { description "Full duplex mode"; } enum HALF { description "Half duplex mode"; } } description "When auto-negotiate is TRUE, this optionally sets the duplex mode that will be advertised to the peer. If unspecified, the interface should negotiate the duplex mode directly (typically full-duplex). When auto-negotiate is FALSE, this sets the duplex mode on the interface directly."; } leaf port-speed { type identityref { base ETHERNET_SPEED; } description "When auto-negotiate is TRUE, this optionally sets the port-speed mode that will be advertised to the peer for negotiation. If unspecified, it is expected that the interface will select the highest speed available based on negotiation. When auto-negotiate is set to FALSE, sets the link speed to a fixed value -- supported values are defined by ETHERNET_SPEED identities"; } leaf enable-flow-control { type boolean; default false; description "Enable or disable flow control for this interface. Ethernet flow control is a mechanism by which a receiver may send PAUSE frames to a sender to stop transmission for a specified time. This setting should override auto-negotiated flow control settings. If left unspecified, and auto-negotiate is TRUE, flow control mode is negotiated with the peer interface."; reference "IEEE 802.3x"; } } grouping ethernet-interface-state-counters { description "Ethernet-specific counters and statistics"; // ingress counters leaf in-mac-control-frames { type oc-yang:counter64; description "MAC layer control frames received on the interface"; } leaf in-mac-pause-frames { type oc-yang:counter64; description "MAC layer PAUSE frames received on the interface"; } leaf in-oversize-frames { type oc-yang:counter64; description "Number of oversize frames received on the interface"; } leaf in-jabber-frames { type oc-yang:counter64; description "Number of jabber frames received on the interface. Jabber frames are typically defined as oversize frames which also have a bad CRC. Implementations may use slightly different definitions of what constitutes a jabber frame. Often indicative of a NIC hardware problem."; } leaf in-fragment-frames { type oc-yang:counter64; description "Number of fragment frames received on the interface."; } leaf in-8021q-frames { type oc-yang:counter64; description "Number of 802.1q tagged frames received on the interface"; } leaf in-crc-errors { type oc-yang:counter64; description "Number of receive error events due to FCS/CRC check failure"; } // egress counters leaf out-mac-control-frames { type oc-yang:counter64; description "MAC layer control frames sent on the interface"; } leaf out-mac-pause-frames { type oc-yang:counter64; description "MAC layer PAUSE frames sent on the interface"; } leaf out-8021q-frames { type oc-yang:counter64; description "Number of 802.1q tagged frames sent on the interface"; } } grouping ethernet-interface-state { description "Grouping for defining Ethernet-specific operational state"; leaf hw-mac-address { type oc-yang:mac-address; description "Represenets the 'burned-in', or system-assigned, MAC address for the Ethernet interface."; } leaf negotiated-duplex-mode { type enumeration { enum FULL { description "Full duplex mode"; } enum HALF { description "Half duplex mode"; } } description "When auto-negotiate is set to TRUE, and the interface has completed auto-negotiation with the remote peer, this value shows the duplex mode that has been negotiated."; } leaf negotiated-port-speed { type identityref { base ETHERNET_SPEED; } description "When auto-negotiate is set to TRUE, and the interface has completed auto-negotiation with the remote peer, this value shows the interface speed that has been negotiated."; } container counters { description "Ethernet interface counters"; uses ethernet-interface-state-counters; } } // data definition statements grouping ethernet-top { description "top-level Ethernet config and state containers"; container ethernet { description "Top-level container for ethernet configuration and state"; container config { description "Configuration data for ethernet interfaces"; uses ethernet-interface-config; } container state { config false; description "State variables for Ethernet interfaces"; uses ethernet-interface-config; uses ethernet-interface-state; } } } // augment statements augment "/oc-if:interfaces/oc-if:interface" { description "Adds addtional Ethernet-specific configuration to interfaces model"; uses ethernet-top { when "oc-if:state/oc-if:type = 'ift:ethernetCsmacd'" { description "Additional interface configuration parameters when the interface type is Ethernet"; } } } // rpc statements // notification statements }