--- /dev/null
+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
+
+}
\ No newline at end of file