--- /dev/null
+module portmapping {
+ yang-version 1;
+ namespace "urn:opendaylight:params:xml:ns:yang:portmapping";
+ prefix "portmapping";
+
+ revision "2017-2-28" {
+ description "Initial revision of port mapping model";
+ }
+ container network{
+ list nodes{
+ key node-id;
+ leaf node-id{
+ type string;
+ description
+ "Unique identifier for node in the network";
+ }
+ list mapping{
+ description
+ "Mapping for Physical circuit pack/port/parent interfaces
+ corresponding to each logical connection point present in the node.";
+ key logical-connection-point;
+ leaf logical-connection-point{
+ type string;
+ }
+ leaf supporting-circuit-pack-name{
+ type string;
+ description
+ "Circuit pack where the logical connection point is located";
+ }
+ leaf supporting-port{
+ type string;
+ description
+ "Port where the logical connection point is located";
+ }
+ leaf supporting-oms{
+ type string;
+ description
+ "OMS interface provisioned on the port";
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+module renderer {
+ yang-version 1;
+ namespace "urn:opendaylight:params:xml:ns:yang:renderer";
+ prefix "renderer";
+
+ revision "2017-2-28" {
+ description "Initial revision of renderer model";
+ }
+ rpc service-path{
+ input{
+ leaf wave-number{
+ type uint32;
+ }
+ leaf operation{
+ type enumeration{
+ enum "create"{
+ value 1;
+ }
+ enum "delete"{
+ value 2;
+ }
+ }
+ }
+ list nodes{
+ key "node-id";
+ leaf node-id{
+ type string;
+ }
+ leaf src-tp{
+ type string;
+ description "Source termination point ";
+ mandatory true;
+ }
+ leaf dest-tp{
+ type string;
+ description "Destination termination point ";
+ mandatory true;
+ }
+ }
+ }
+ output{
+ leaf result{
+ type string;
+ }
+ }
+ }
+}
\ No newline at end of file
<feature version="${project.version}">odl-transportpce-rest</feature>
<feature version="${restconf.version}">odl-mdsal-apidocs</feature>
<feature version="${mdsal.version}">odl-mdsal-xsql</feature>
- <feature version="${dlux.version}">odl-dlux-yangui</feature>
+ <feature version="${dlux.version}">odl-dlux-core</feature>
</feature>
<feature name='odl-transportpce-cli' version='${project.version}' description='OpenDaylight :: transportpce :: CLI'>
<feature version="${project.version}">odl-transportpce</feature>
<dependencies>
<dependency>
<groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>ietf-inet-types</artifactId>
+ <artifactId>ietf-inet-types-2013-07-15</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>ietf-yang-types</artifactId>
+ <artifactId>iana-afn-safi</artifactId>
+ <version>2013.07.04.9.3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>ietf-access-control-list</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>iana-if-type-2014-05-08</artifactId>
+ <version>2014.05.08.9.3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>ietf-yang-types-20130715</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>ietf-interfaces</artifactId>
+ <version>2014.05.08.9.3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>ietf-packet-fields</artifactId>
</dependency>
</dependencies>
-
-</project>
+</project>
\ No newline at end of file
+++ /dev/null
-module iana-afn-safi {
- namespace "urn:ietf:params:xml:ns:yang:iana-afn-safi";
- prefix "ianaaf";
-
- organization
- "IANA";
- contact
- " Internet Assigned Numbers Authority
-
- Postal: ICANN
- 4676 Admiralty Way, Suite 330
- Marina del Rey, CA 90292
-
- Tel: +1 310 823 9358
- E-Mail: iana&iana.org";
- description
- "This YANG module provides two typedefs containing YANG
- definitions for the following IANA-registered enumerations:
-
- - Address Family Numbers (AFN)
-
- - Subsequent Address Family Identifiers (SAFI)
-
- The latest revision of this YANG module can be obtained from the
- IANA web site.
-
- Copyright (c) 2012 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
-
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject to
- the license terms contained in, the Simplified BSD License set
- forth in Section 4.c of the IETF Trust's Legal Provisions
- Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
-
- This version of this YANG module is part of RFC XXXX; see the
- RFC itself for full legal notices.";
- // RFC Ed.: replace XXXX with actual RFC number and remove this
- // note.
-
- // RFC Ed.: update the date below with the date of RFC publication
- // and remove this note.
- revision 2013-07-04 {
- description
- "Initial revision.";
- reference
- "RFC XXXX: IANA Address Family Numbers and
- Subsequent Address Family Identifiers YANG Module";
- }
-
- typedef address-family {
- type enumeration {
- // value 0 is reserved by IANA
- enum ipV4 {
- value "1";
- description
- "IP version 4";
- }
- enum ipV6 {
- value "2";
- description
- "IP version 6";
- }
- enum nsap {
- value "3";
- description
- "NSAP";
- }
- enum hdlc {
- value "4";
- description
- "HDLC (8-bit multidrop)";
- }
- enum bbn1822 {
- value "5";
- description
- "BBN 1822";
- }
- enum all802 {
- value "6";
- description
- "802 (includes all 802 media plus Ethernet 'canonical
- format')";
- }
- enum e163 {
- value "7";
- description
- "E.163";
- }
- enum e164 {
- value "8";
- description
- "E.164 (SMDS, FrameRelay, ATM)";
- }
- enum f69 {
- value "9";
- description
- "F.69 (Telex)";
- }
- enum x121 {
- value "10";
- description
- "X.121 (X.25, Frame Relay)";
- }
- enum ipx {
- value "11";
- description
- "IPX (Internetwork Packet Exchange)";
- }
- enum appletalk {
- value "12";
- description
- "Appletalk";
- }
- enum decnetIV {
- value "13";
- description
- "DECnet IV";
- }
- enum banyanVines {
- value "14";
- description
- "Banyan Vines";
- }
- enum e164withNsap {
- value "15";
- description
- "E.164 with NSAP format subaddress";
- reference
- "ATM Forum UNI 3.1";
- }
- enum dns {
- value "16";
- description
- "DNS (Domain Name System)";
- }
- enum distinguishedName {
- value "17";
- description
- "Distinguished Name (per X.500)";
- }
- enum asNumber {
- value "18";
- description
- "Autonomous System Number";
- }
- enum xtpOverIpv4 {
- value "19";
- description
- "XTP over IP version 4";
- }
- enum xtpOverIpv6 {
- value "20";
- description
- "XTP over IP version 6";
- }
- enum xtpNativeModeXTP {
- value "21";
- description
- "XTP native mode XTP";
- }
- enum fibreChannelWWPN {
- value "22";
- description
- "Fibre Channel World-Wide Port Name";
- }
- enum fibreChannelWWNN {
- value "23";
- description
- "Fibre Channel World-Wide Node Name";
- }
- enum gwid {
- value "24";
- description
- "Gateway Identifier";
- }
- // FIXME: This one is actually called "afi" in the MIB, but
- // that must be a mistake.
- enum l2vpn {
- value "25";
- description
- "AFI for L2VPN information";
- reference
- "RFC 4761: Virtual Private LAN Service (VPLS): Using BGP
- for Auto-Discovery and Signaling
-
- RFC 6074: Provisioning, Auto-Discovery, and Signaling in
- Layer 2 Virtual Private Networks (L2VPNs)";
- }
- enum mplsTpSectionEndpointIdentifier {
- value "26";
- description
- "MPLS-TP Section Endpoint Identifier";
- reference
- "draft-ietf-mpls-gach-adv";
- }
- enum mplsTpLspEndpointIdentifier {
- value "27";
- description
- "MPLS-TP LSP Endpoint Identifier";
- reference
- "draft-ietf-mpls-gach-adv";
- }
- enum mplsTpPseudowireEndpointIdentifier {
- value "28";
- description
- "MPLS-TP Pseudowire Endpoint Identifier";
- reference
- "draft-ietf-mpls-gach-adv";
- }
- enum eigrpCommonServiceFamily {
- value "16384";
- description
- "EIGRP Common Service Family";
- }
- enum eigrpIpv4ServiceFamily {
- value "16385";
- description
- "EIGRP IPv4 Service Family";
- }
- enum eigrpIpv6ServiceFamily {
- value "16386";
- description
- "EIGRP IPv6 Service Family";
- }
- enum lispCanonicalAddressFormat {
- value "16387";
- description
- "LISP Canonical Address Format (LCAF)";
- }
- enum bgpLs {
- value "16388";
- description
- "BGP-LS";
- reference
- "draft-ietf-idr-ls-distribution";
- }
- enum 48BitMac {
- value "16389";
- description
- "48-bit MAC";
- reference
- "draft-eastlake-rfc5342bis";
- }
- enum 64BitMac {
- value "16390";
- description
- "64-bit MAC";
- reference
- "draft-eastlake-rfc5342bis";
- }
- // value 65535 is reserved by IANA
- }
- description
- "This typedef is a YANG enumeration of IANA-registered address
- family numbers (AFN).";
- reference
- "IANA Address Family Numbers registry.
- <http://www.iana.org/assignments/address-family-numbers>";
- }
-
- typedef subsequent-address-family {
- type enumeration {
- // value 0 is reserved by IANA
- enum nlriUnicast {
- value "1";
- description
- "Network Layer Reachability Information used for unicast
- forwarding";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum nlriMulticast {
- value "2";
- description
- "Network Layer Reachability Information used for multicast
- forwarding";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- // value 3 is reserved by IANA
- enum nlriMpls {
- value "4";
- description
- "Network Layer Reachability Information (NLRI) with MPLS
- Labels";
- reference
- "RFC 3107: Carrying Label Information in BGP-4";
- }
- enum mcastVpn {
- value "5";
- description
- "MCAST-VPN";
- reference
- "RFC 6514: BGP Encodings and Procedures for Multicast in
- MPLS/BGP IP VPNs";
- }
- enum nlriDynamicMsPw {
- value "6";
- status "obsolete";
- description
- "Network Layer Reachability Information used for Dynamic
- Placement of Multi-Segment Pseudowires (TEMPORARY -
- Expires 2008-08-23)";
- reference
- "draft-ietf-pwe3-dynamic-ms-pw: Dynamic Placement of Multi
- Segment Pseudowires";
- }
- enum encapsulation {
- value "7";
- description
- "Encapsulation SAFI";
- reference
- "RFC 5512: The BGP Encapsulation Subsequent Address Family
- Identifier (SAFI) and the BGP Tunnel Encapsulation
- Attribute";
- }
- enum tunnel {
- value "64";
- status "obsolete";
- description
- "Tunnel SAFI";
- reference
- "draft-nalawade-kapoor-tunnel-safi: BGP Tunnel SAFI";
- }
- enum vpls {
- value "65";
- description
- "Virtual Private LAN Service (VPLS)";
- reference
- "RFC 4761: Virtual Private LAN Service (VPLS): Using BGP
- for Auto-Discovery and Signaling
-
- RFC 6074: Provisioning, Auto-Discovery, and Signaling in
- Layer 2 Virtual Private Networks (L2VPNs)";
- }
- enum bgpMdt {
- value "66";
- description
- "BGP MDT SAFI";
- reference
- "RFC 6037: Cisco Systems' Solution for Multicast in
- BGP/MPLS IP VPNs";
- }
- enum bgp4over6 {
- value "67";
- description
- "BGP 4over6 SAFI";
- reference
- "RFC 5747: 4over6 Transit Solution Using IP Encapsulation
- and MP-BGP Extensions";
- }
- enum bgp6over4 {
- value "68";
- description
- "BGP 6over4 SAFI";
- }
- enum l1VpnAutoDiscovery {
- value "69";
- description
- "Layer-1 VPN auto-discovery information";
- reference
- "RFC 5195: BGP-Based Auto-Discovery for Layer-1 VPNs";
- }
- enum mplsVpn {
- value "128";
- description
- "MPLS-labeled VPN address";
- reference
- "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs)";
- }
- enum multicastBgpMplsVpn {
- value "129";
- description
- "Multicast for BGP/MPLS IP Virtual Private Networks
- (VPNs)";
- reference
- "RFC 6513: Multicast in MPLS/BGP IP VPNs
-
- RFC 6514: BGP Encodings and Procedures for Multicast in
- MPLS/BGP IP VPNs";
- }
- // values 130-131 are reserved by IANA
- enum routeTargetConstraints {
- value "132";
- description
- "Route Target constraints";
- reference
- "RFC 4684: Constrained Route Distribution for Border
- Gateway Protocol/MultiProtocol Label Switching (BGP/MPLS)
- Internet Protocol (IP) Virtual Private Networks (VPNs)";
- }
- enum ipv4DissFlow {
- value "133";
- description
- "IPv4 dissemination of flow specification rules";
- reference
- "RFC 5575: Dissemination of Flow Specification Rules";
- }
- enum vpnv4DissFlow {
- value "134";
- description
- "VPNv4 dissemination of flow specification rules";
- reference
- "RFC 5575: Dissemination of Flow Specification Rules";
- }
- // values 135-139 are reserved by IANA
- enum vpnAutoDiscovery {
- value "140";
- status "obsolete";
- description
- "VPN auto-discovery";
- reference
- "draft-ietf-l3vpn-bgpvpn-auto: Using BGP as an
- Auto-Discovery Mechanism for VR-based Layer-3 VPNs";
- }
- // values 141-240 are reserved by IANA
- enum private241 {
- value "241";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private242 {
- value "242";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private243 {
- value "243";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private244 {
- value "244";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private245 {
- value "245";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private246 {
- value "246";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private247 {
- value "247";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private248 {
- value "248";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private249 {
- value "249";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private250 {
- value "250";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private251 {
- value "251";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private252 {
- value "252";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private253 {
- value "253";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- enum private254 {
- value "254";
- description
- "Reserved for Private Use";
- reference
- "RFC 4760: Multiprotocol Extensions for BGP-4";
- }
- // value 255 is reserved by IANA
- }
- description
- "This typedef is a YANG enumeration of IANA-registered
- subsequent address family identifiers (SAFI).";
- reference
- "IANA SAFI Values registry.
- <http://www.iana.org/assignments/safi-namespace>";
- }
-}
\ No newline at end of file
+++ /dev/null
-module iana-if-type {
- namespace "urn:ietf:params:xml:ns:yang:iana-if-type";
- prefix ianaift;
-
- import ietf-interfaces {
- prefix if;
- }
-
- organization "IANA";
- contact
- " Internet Assigned Numbers Authority
-
- Postal: ICANN
- 4676 Admiralty Way, Suite 330
- Marina del Rey, CA 90292
-
- Tel: +1 310 823 9358
- <mailto:iana@iana.org>";
- description
- "This YANG module defines YANG identities for IANA-registered
- interface types.
-
- This YANG module is maintained by IANA and reflects the
- 'ifType definitions' registry.
-
- The latest revision of this YANG module can be obtained from
- the IANA web site.
-
- Requests for new values should be made to IANA via
- email (iana@iana.org).
-
- Copyright (c) 2014 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
-
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD License
- set forth in Section 4.c of the IETF Trust's Legal Provisions
- Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
-
- The initial version of this YANG module is part of RFC 7224;
- see the RFC itself for full legal notices.";
- reference
- "IANA 'ifType definitions' registry.
- <http://www.iana.org/assignments/smi-numbers>";
-
- revision 2014-05-08 {
- description
- "Initial revision.";
- reference
- "RFC 7224: IANA Interface Type YANG Module";
- }
-
- identity iana-interface-type {
- base if:interface-type;
- description
- "This identity is used as a base for all interface types
- defined in the 'ifType definitions' registry.";
- }
-
-
-
-
-
-
- identity other {
- base iana-interface-type;
- }
- identity regular1822 {
- base iana-interface-type;
- }
- identity hdh1822 {
- base iana-interface-type;
- }
- identity ddnX25 {
- base iana-interface-type;
- }
- identity rfc877x25 {
- base iana-interface-type;
- reference
- "RFC 1382 - SNMP MIB Extension for the X.25 Packet Layer";
- }
- identity ethernetCsmacd {
- base iana-interface-type;
- description
- "For all Ethernet-like interfaces, regardless of speed,
- as per RFC 3635.";
- reference
- "RFC 3635 - Definitions of Managed Objects for the
- Ethernet-like Interface Types";
- }
- identity iso88023Csmacd {
- base iana-interface-type;
- status deprecated;
- description
- "Deprecated via RFC 3635.
- Use ethernetCsmacd(6) instead.";
- reference
- "RFC 3635 - Definitions of Managed Objects for the
- Ethernet-like Interface Types";
- }
- identity iso88024TokenBus {
- base iana-interface-type;
- }
- identity iso88025TokenRing {
- base iana-interface-type;
- }
- identity iso88026Man {
- base iana-interface-type;
- }
- identity starLan {
- base iana-interface-type;
- status deprecated;
- description
- "Deprecated via RFC 3635.
- Use ethernetCsmacd(6) instead.";
- reference
- "RFC 3635 - Definitions of Managed Objects for the
- Ethernet-like Interface Types";
- }
- identity proteon10Mbit {
- base iana-interface-type;
- }
- identity proteon80Mbit {
- base iana-interface-type;
- }
- identity hyperchannel {
- base iana-interface-type;
- }
- identity fddi {
- base iana-interface-type;
- reference
- "RFC 1512 - FDDI Management Information Base";
- }
- identity lapb {
- base iana-interface-type;
- reference
- "RFC 1381 - SNMP MIB Extension for X.25 LAPB";
- }
- identity sdlc {
- base iana-interface-type;
- }
- identity ds1 {
- base iana-interface-type;
- description
- "DS1-MIB.";
- reference
- "RFC 4805 - Definitions of Managed Objects for the
- DS1, J1, E1, DS2, and E2 Interface Types";
- }
- identity e1 {
- base iana-interface-type;
- status obsolete;
- description
- "Obsolete; see DS1-MIB.";
- reference
- "RFC 4805 - Definitions of Managed Objects for the
- DS1, J1, E1, DS2, and E2 Interface Types";
- }
-
-
- identity basicISDN {
- base iana-interface-type;
- description
- "No longer used. See also RFC 2127.";
- }
- identity primaryISDN {
- base iana-interface-type;
- description
- "No longer used. See also RFC 2127.";
- }
- identity propPointToPointSerial {
- base iana-interface-type;
- description
- "Proprietary serial.";
- }
- identity ppp {
- base iana-interface-type;
- }
- identity softwareLoopback {
- base iana-interface-type;
- }
- identity eon {
- base iana-interface-type;
- description
- "CLNP over IP.";
- }
- identity ethernet3Mbit {
- base iana-interface-type;
- }
- identity nsip {
- base iana-interface-type;
- description
- "XNS over IP.";
- }
- identity slip {
- base iana-interface-type;
- description
- "Generic SLIP.";
- }
- identity ultra {
- base iana-interface-type;
- description
- "Ultra Technologies.";
- }
- identity ds3 {
- base iana-interface-type;
- description
- "DS3-MIB.";
- reference
- "RFC 3896 - Definitions of Managed Objects for the
- DS3/E3 Interface Type";
- }
- identity sip {
- base iana-interface-type;
- description
- "SMDS, coffee.";
- reference
- "RFC 1694 - Definitions of Managed Objects for SMDS
- Interfaces using SMIv2";
- }
- identity frameRelay {
- base iana-interface-type;
- description
- "DTE only.";
- reference
- "RFC 2115 - Management Information Base for Frame Relay
- DTEs Using SMIv2";
- }
- identity rs232 {
- base iana-interface-type;
- reference
- "RFC 1659 - Definitions of Managed Objects for RS-232-like
- Hardware Devices using SMIv2";
- }
- identity para {
- base iana-interface-type;
- description
- "Parallel-port.";
- reference
- "RFC 1660 - Definitions of Managed Objects for
- Parallel-printer-like Hardware Devices using
- SMIv2";
- }
- identity arcnet {
- base iana-interface-type;
- description
- "ARCnet.";
- }
- identity arcnetPlus {
- base iana-interface-type;
- description
- "ARCnet Plus.";
- }
-
-
-
- identity atm {
- base iana-interface-type;
- description
- "ATM cells.";
- }
- identity miox25 {
- base iana-interface-type;
- reference
- "RFC 1461 - SNMP MIB extension for Multiprotocol
- Interconnect over X.25";
- }
- identity sonet {
- base iana-interface-type;
- description
- "SONET or SDH.";
- }
- identity x25ple {
- base iana-interface-type;
- reference
- "RFC 2127 - ISDN Management Information Base using SMIv2";
- }
- identity iso88022llc {
- base iana-interface-type;
- }
- identity localTalk {
- base iana-interface-type;
- }
- identity smdsDxi {
- base iana-interface-type;
- }
- identity frameRelayService {
- base iana-interface-type;
- description
- "FRNETSERV-MIB.";
- reference
- "RFC 2954 - Definitions of Managed Objects for Frame
- Relay Service";
- }
- identity v35 {
- base iana-interface-type;
- }
- identity hssi {
- base iana-interface-type;
- }
- identity hippi {
- base iana-interface-type;
- }
-
- identity modem {
- base iana-interface-type;
- description
- "Generic modem.";
- }
- identity aal5 {
- base iana-interface-type;
- description
- "AAL5 over ATM.";
- }
- identity sonetPath {
- base iana-interface-type;
- }
- identity sonetVT {
- base iana-interface-type;
- }
- identity smdsIcip {
- base iana-interface-type;
- description
- "SMDS InterCarrier Interface.";
- }
- identity propVirtual {
- base iana-interface-type;
- description
- "Proprietary virtual/internal.";
- reference
- "RFC 2863 - The Interfaces Group MIB";
- }
- identity propMultiplexor {
- base iana-interface-type;
- description
- "Proprietary multiplexing.";
- reference
- "RFC 2863 - The Interfaces Group MIB";
- }
- identity ieee80212 {
- base iana-interface-type;
- description
- "100BaseVG.";
- }
- identity fibreChannel {
- base iana-interface-type;
- description
- "Fibre Channel.";
- }
-
-
-
- identity hippiInterface {
- base iana-interface-type;
- description
- "HIPPI interfaces.";
- }
- identity frameRelayInterconnect {
- base iana-interface-type;
- status obsolete;
- description
- "Obsolete; use either
- frameRelay(32) or frameRelayService(44).";
- }
- identity aflane8023 {
- base iana-interface-type;
- description
- "ATM Emulated LAN for 802.3.";
- }
- identity aflane8025 {
- base iana-interface-type;
- description
- "ATM Emulated LAN for 802.5.";
- }
- identity cctEmul {
- base iana-interface-type;
- description
- "ATM Emulated circuit.";
- }
- identity fastEther {
- base iana-interface-type;
- status deprecated;
- description
- "Obsoleted via RFC 3635.
- ethernetCsmacd(6) should be used instead.";
- reference
- "RFC 3635 - Definitions of Managed Objects for the
- Ethernet-like Interface Types";
- }
- identity isdn {
- base iana-interface-type;
- description
- "ISDN and X.25.";
- reference
- "RFC 1356 - Multiprotocol Interconnect on X.25 and ISDN
- in the Packet Mode";
- }
-
-
-
- identity v11 {
- base iana-interface-type;
- description
- "CCITT V.11/X.21.";
- }
- identity v36 {
- base iana-interface-type;
- description
- "CCITT V.36.";
- }
- identity g703at64k {
- base iana-interface-type;
- description
- "CCITT G703 at 64Kbps.";
- }
- identity g703at2mb {
- base iana-interface-type;
- status obsolete;
- description
- "Obsolete; see DS1-MIB.";
- }
- identity qllc {
- base iana-interface-type;
- description
- "SNA QLLC.";
- }
- identity fastEtherFX {
- base iana-interface-type;
- status deprecated;
- description
- "Obsoleted via RFC 3635.
- ethernetCsmacd(6) should be used instead.";
- reference
- "RFC 3635 - Definitions of Managed Objects for the
- Ethernet-like Interface Types";
- }
- identity channel {
- base iana-interface-type;
- description
- "Channel.";
- }
- identity ieee80211 {
- base iana-interface-type;
- description
- "Radio spread spectrum.";
- }
- identity ibm370parChan {
- base iana-interface-type;
- description
- "IBM System 360/370 OEMI Channel.";
- }
- identity escon {
- base iana-interface-type;
- description
- "IBM Enterprise Systems Connection.";
- }
- identity dlsw {
- base iana-interface-type;
- description
- "Data Link Switching.";
- }
- identity isdns {
- base iana-interface-type;
- description
- "ISDN S/T interface.";
- }
- identity isdnu {
- base iana-interface-type;
- description
- "ISDN U interface.";
- }
- identity lapd {
- base iana-interface-type;
- description
- "Link Access Protocol D.";
- }
- identity ipSwitch {
- base iana-interface-type;
- description
- "IP Switching Objects.";
- }
- identity rsrb {
- base iana-interface-type;
- description
- "Remote Source Route Bridging.";
- }
- identity atmLogical {
- base iana-interface-type;
- description
- "ATM Logical Port.";
- reference
- "RFC 3606 - Definitions of Supplemental Managed Objects
- for ATM Interface";
- }
- identity ds0 {
- base iana-interface-type;
- description
- "Digital Signal Level 0.";
- reference
- "RFC 2494 - Definitions of Managed Objects for the DS0
- and DS0 Bundle Interface Type";
- }
- identity ds0Bundle {
- base iana-interface-type;
- description
- "Group of ds0s on the same ds1.";
- reference
- "RFC 2494 - Definitions of Managed Objects for the DS0
- and DS0 Bundle Interface Type";
- }
- identity bsc {
- base iana-interface-type;
- description
- "Bisynchronous Protocol.";
- }
- identity async {
- base iana-interface-type;
- description
- "Asynchronous Protocol.";
- }
- identity cnr {
- base iana-interface-type;
- description
- "Combat Net Radio.";
- }
- identity iso88025Dtr {
- base iana-interface-type;
- description
- "ISO 802.5r DTR.";
- }
- identity eplrs {
- base iana-interface-type;
- description
- "Ext Pos Loc Report Sys.";
- }
- identity arap {
- base iana-interface-type;
- description
- "Appletalk Remote Access Protocol.";
- }
- identity propCnls {
- base iana-interface-type;
- description
- "Proprietary Connectionless Protocol.";
- }
- identity hostPad {
- base iana-interface-type;
- description
- "CCITT-ITU X.29 PAD Protocol.";
- }
- identity termPad {
- base iana-interface-type;
- description
- "CCITT-ITU X.3 PAD Facility.";
- }
- identity frameRelayMPI {
- base iana-interface-type;
- description
- "Multiproto Interconnect over FR.";
- }
- identity x213 {
- base iana-interface-type;
- description
- "CCITT-ITU X213.";
- }
- identity adsl {
- base iana-interface-type;
- description
- "Asymmetric Digital Subscriber Loop.";
- }
- identity radsl {
- base iana-interface-type;
- description
- "Rate-Adapt. Digital Subscriber Loop.";
- }
- identity sdsl {
- base iana-interface-type;
- description
- "Symmetric Digital Subscriber Loop.";
- }
- identity vdsl {
- base iana-interface-type;
- description
- "Very H-Speed Digital Subscrib. Loop.";
- }
- identity iso88025CRFPInt {
- base iana-interface-type;
- description
- "ISO 802.5 CRFP.";
- }
- identity myrinet {
- base iana-interface-type;
- description
- "Myricom Myrinet.";
- }
- identity voiceEM {
- base iana-interface-type;
- description
- "Voice recEive and transMit.";
- }
- identity voiceFXO {
- base iana-interface-type;
- description
- "Voice Foreign Exchange Office.";
- }
- identity voiceFXS {
- base iana-interface-type;
- description
- "Voice Foreign Exchange Station.";
- }
- identity voiceEncap {
- base iana-interface-type;
- description
- "Voice encapsulation.";
- }
- identity voiceOverIp {
- base iana-interface-type;
- description
- "Voice over IP encapsulation.";
- }
- identity atmDxi {
- base iana-interface-type;
- description
- "ATM DXI.";
- }
- identity atmFuni {
- base iana-interface-type;
- description
- "ATM FUNI.";
- }
- identity atmIma {
- base iana-interface-type;
- description
- "ATM IMA.";
- }
- identity pppMultilinkBundle {
- base iana-interface-type;
- description
- "PPP Multilink Bundle.";
- }
- identity ipOverCdlc {
- base iana-interface-type;
- description
- "IBM ipOverCdlc.";
- }
- identity ipOverClaw {
- base iana-interface-type;
- description
- "IBM Common Link Access to Workstn.";
- }
- identity stackToStack {
- base iana-interface-type;
- description
- "IBM stackToStack.";
- }
- identity virtualIpAddress {
- base iana-interface-type;
- description
- "IBM VIPA.";
- }
- identity mpc {
- base iana-interface-type;
- description
- "IBM multi-protocol channel support.";
- }
- identity ipOverAtm {
- base iana-interface-type;
- description
- "IBM ipOverAtm.";
- reference
- "RFC 2320 - Definitions of Managed Objects for Classical IP
- and ARP Over ATM Using SMIv2 (IPOA-MIB)";
- }
- identity iso88025Fiber {
- base iana-interface-type;
- description
- "ISO 802.5j Fiber Token Ring.";
- }
- identity tdlc {
- base iana-interface-type;
- description
- "IBM twinaxial data link control.";
- }
- identity gigabitEthernet {
- base iana-interface-type;
- status deprecated;
-
-
- description
- "Obsoleted via RFC 3635.
- ethernetCsmacd(6) should be used instead.";
- reference
- "RFC 3635 - Definitions of Managed Objects for the
- Ethernet-like Interface Types";
- }
- identity hdlc {
- base iana-interface-type;
- description
- "HDLC.";
- }
- identity lapf {
- base iana-interface-type;
- description
- "LAP F.";
- }
- identity v37 {
- base iana-interface-type;
- description
- "V.37.";
- }
- identity x25mlp {
- base iana-interface-type;
- description
- "Multi-Link Protocol.";
- }
- identity x25huntGroup {
- base iana-interface-type;
- description
- "X25 Hunt Group.";
- }
- identity transpHdlc {
- base iana-interface-type;
- description
- "Transp HDLC.";
- }
- identity interleave {
- base iana-interface-type;
- description
- "Interleave channel.";
- }
- identity fast {
- base iana-interface-type;
- description
- "Fast channel.";
- }
-
- identity ip {
- base iana-interface-type;
- description
- "IP (for APPN HPR in IP networks).";
- }
- identity docsCableMaclayer {
- base iana-interface-type;
- description
- "CATV Mac Layer.";
- }
- identity docsCableDownstream {
- base iana-interface-type;
- description
- "CATV Downstream interface.";
- }
- identity docsCableUpstream {
- base iana-interface-type;
- description
- "CATV Upstream interface.";
- }
- identity a12MppSwitch {
- base iana-interface-type;
- description
- "Avalon Parallel Processor.";
- }
- identity tunnel {
- base iana-interface-type;
- description
- "Encapsulation interface.";
- }
- identity coffee {
- base iana-interface-type;
- description
- "Coffee pot.";
- reference
- "RFC 2325 - Coffee MIB";
- }
- identity ces {
- base iana-interface-type;
- description
- "Circuit Emulation Service.";
- }
- identity atmSubInterface {
- base iana-interface-type;
- description
- "ATM Sub Interface.";
- }
-
- identity l2vlan {
- base iana-interface-type;
- description
- "Layer 2 Virtual LAN using 802.1Q.";
- }
- identity l3ipvlan {
- base iana-interface-type;
- description
- "Layer 3 Virtual LAN using IP.";
- }
- identity l3ipxvlan {
- base iana-interface-type;
- description
- "Layer 3 Virtual LAN using IPX.";
- }
- identity digitalPowerline {
- base iana-interface-type;
- description
- "IP over Power Lines.";
- }
- identity mediaMailOverIp {
- base iana-interface-type;
- description
- "Multimedia Mail over IP.";
- }
- identity dtm {
- base iana-interface-type;
- description
- "Dynamic synchronous Transfer Mode.";
- }
- identity dcn {
- base iana-interface-type;
- description
- "Data Communications Network.";
- }
- identity ipForward {
- base iana-interface-type;
- description
- "IP Forwarding Interface.";
- }
- identity msdsl {
- base iana-interface-type;
- description
- "Multi-rate Symmetric DSL.";
- }
- identity ieee1394 {
- base iana-interface-type;
-
- description
- "IEEE1394 High Performance Serial Bus.";
- }
- identity if-gsn {
- base iana-interface-type;
- description
- "HIPPI-6400.";
- }
- identity dvbRccMacLayer {
- base iana-interface-type;
- description
- "DVB-RCC MAC Layer.";
- }
- identity dvbRccDownstream {
- base iana-interface-type;
- description
- "DVB-RCC Downstream Channel.";
- }
- identity dvbRccUpstream {
- base iana-interface-type;
- description
- "DVB-RCC Upstream Channel.";
- }
- identity atmVirtual {
- base iana-interface-type;
- description
- "ATM Virtual Interface.";
- }
- identity mplsTunnel {
- base iana-interface-type;
- description
- "MPLS Tunnel Virtual Interface.";
- }
- identity srp {
- base iana-interface-type;
- description
- "Spatial Reuse Protocol.";
- }
- identity voiceOverAtm {
- base iana-interface-type;
- description
- "Voice over ATM.";
- }
- identity voiceOverFrameRelay {
- base iana-interface-type;
- description
- "Voice Over Frame Relay.";
- }
- identity idsl {
- base iana-interface-type;
- description
- "Digital Subscriber Loop over ISDN.";
- }
- identity compositeLink {
- base iana-interface-type;
- description
- "Avici Composite Link Interface.";
- }
- identity ss7SigLink {
- base iana-interface-type;
- description
- "SS7 Signaling Link.";
- }
- identity propWirelessP2P {
- base iana-interface-type;
- description
- "Prop. P2P wireless interface.";
- }
- identity frForward {
- base iana-interface-type;
- description
- "Frame Forward Interface.";
- }
- identity rfc1483 {
- base iana-interface-type;
- description
- "Multiprotocol over ATM AAL5.";
- reference
- "RFC 1483 - Multiprotocol Encapsulation over ATM
- Adaptation Layer 5";
- }
- identity usb {
- base iana-interface-type;
- description
- "USB Interface.";
- }
- identity ieee8023adLag {
- base iana-interface-type;
- description
- "IEEE 802.3ad Link Aggregate.";
- }
- identity bgppolicyaccounting {
- base iana-interface-type;
- description
- "BGP Policy Accounting.";
- }
- identity frf16MfrBundle {
- base iana-interface-type;
- description
- "FRF.16 Multilink Frame Relay.";
- }
- identity h323Gatekeeper {
- base iana-interface-type;
- description
- "H323 Gatekeeper.";
- }
- identity h323Proxy {
- base iana-interface-type;
- description
- "H323 Voice and Video Proxy.";
- }
- identity mpls {
- base iana-interface-type;
- description
- "MPLS.";
- }
- identity mfSigLink {
- base iana-interface-type;
- description
- "Multi-frequency signaling link.";
- }
- identity hdsl2 {
- base iana-interface-type;
- description
- "High Bit-Rate DSL - 2nd generation.";
- }
- identity shdsl {
- base iana-interface-type;
- description
- "Multirate HDSL2.";
- }
- identity ds1FDL {
- base iana-interface-type;
- description
- "Facility Data Link (4Kbps) on a DS1.";
- }
- identity pos {
- base iana-interface-type;
- description
- "Packet over SONET/SDH Interface.";
- }
-
-
-
- identity dvbAsiIn {
- base iana-interface-type;
- description
- "DVB-ASI Input.";
- }
- identity dvbAsiOut {
- base iana-interface-type;
- description
- "DVB-ASI Output.";
- }
- identity plc {
- base iana-interface-type;
- description
- "Power Line Communications.";
- }
- identity nfas {
- base iana-interface-type;
- description
- "Non-Facility Associated Signaling.";
- }
- identity tr008 {
- base iana-interface-type;
- description
- "TR008.";
- }
- identity gr303RDT {
- base iana-interface-type;
- description
- "Remote Digital Terminal.";
- }
- identity gr303IDT {
- base iana-interface-type;
- description
- "Integrated Digital Terminal.";
- }
- identity isup {
- base iana-interface-type;
- description
- "ISUP.";
- }
- identity propDocsWirelessMaclayer {
- base iana-interface-type;
- description
- "Cisco proprietary Maclayer.";
- }
-
-
-
- identity propDocsWirelessDownstream {
- base iana-interface-type;
- description
- "Cisco proprietary Downstream.";
- }
- identity propDocsWirelessUpstream {
- base iana-interface-type;
- description
- "Cisco proprietary Upstream.";
- }
- identity hiperlan2 {
- base iana-interface-type;
- description
- "HIPERLAN Type 2 Radio Interface.";
- }
- identity propBWAp2Mp {
- base iana-interface-type;
- description
- "PropBroadbandWirelessAccesspt2Multipt (use of this value
- for IEEE 802.16 WMAN interfaces as per IEEE Std 802.16f
- is deprecated, and ieee80216WMAN(237) should be used
- instead).";
- }
- identity sonetOverheadChannel {
- base iana-interface-type;
- description
- "SONET Overhead Channel.";
- }
- identity digitalWrapperOverheadChannel {
- base iana-interface-type;
- description
- "Digital Wrapper.";
- }
- identity aal2 {
- base iana-interface-type;
- description
- "ATM adaptation layer 2.";
- }
- identity radioMAC {
- base iana-interface-type;
- description
- "MAC layer over radio links.";
- }
- identity atmRadio {
- base iana-interface-type;
- description
- "ATM over radio links.";
- }
- identity imt {
- base iana-interface-type;
- description
- "Inter-Machine Trunks.";
- }
- identity mvl {
- base iana-interface-type;
- description
- "Multiple Virtual Lines DSL.";
- }
- identity reachDSL {
- base iana-interface-type;
- description
- "Long Reach DSL.";
- }
- identity frDlciEndPt {
- base iana-interface-type;
- description
- "Frame Relay DLCI End Point.";
- }
- identity atmVciEndPt {
- base iana-interface-type;
- description
- "ATM VCI End Point.";
- }
- identity opticalChannel {
- base iana-interface-type;
- description
- "Optical Channel.";
- }
- identity opticalTransport {
- base iana-interface-type;
- description
- "Optical Transport.";
- }
- identity propAtm {
- base iana-interface-type;
- description
- "Proprietary ATM.";
- }
- identity voiceOverCable {
- base iana-interface-type;
- description
- "Voice Over Cable Interface.";
- }
-
-
-
- identity infiniband {
- base iana-interface-type;
- description
- "Infiniband.";
- }
- identity teLink {
- base iana-interface-type;
- description
- "TE Link.";
- }
- identity q2931 {
- base iana-interface-type;
- description
- "Q.2931.";
- }
- identity virtualTg {
- base iana-interface-type;
- description
- "Virtual Trunk Group.";
- }
- identity sipTg {
- base iana-interface-type;
- description
- "SIP Trunk Group.";
- }
- identity sipSig {
- base iana-interface-type;
- description
- "SIP Signaling.";
- }
- identity docsCableUpstreamChannel {
- base iana-interface-type;
- description
- "CATV Upstream Channel.";
- }
- identity econet {
- base iana-interface-type;
- description
- "Acorn Econet.";
- }
- identity pon155 {
- base iana-interface-type;
- description
- "FSAN 155Mb Symetrical PON interface.";
- }
-
-
-
- identity pon622 {
- base iana-interface-type;
- description
- "FSAN 622Mb Symetrical PON interface.";
- }
- identity bridge {
- base iana-interface-type;
- description
- "Transparent bridge interface.";
- }
- identity linegroup {
- base iana-interface-type;
- description
- "Interface common to multiple lines.";
- }
- identity voiceEMFGD {
- base iana-interface-type;
- description
- "Voice E&M Feature Group D.";
- }
- identity voiceFGDEANA {
- base iana-interface-type;
- description
- "Voice FGD Exchange Access North American.";
- }
- identity voiceDID {
- base iana-interface-type;
- description
- "Voice Direct Inward Dialing.";
- }
- identity mpegTransport {
- base iana-interface-type;
- description
- "MPEG transport interface.";
- }
- identity sixToFour {
- base iana-interface-type;
- status deprecated;
- description
- "6to4 interface (DEPRECATED).";
- reference
- "RFC 4087 - IP Tunnel MIB";
- }
- identity gtp {
- base iana-interface-type;
- description
- "GTP (GPRS Tunneling Protocol).";
- }
- identity pdnEtherLoop1 {
- base iana-interface-type;
- description
- "Paradyne EtherLoop 1.";
- }
- identity pdnEtherLoop2 {
- base iana-interface-type;
- description
- "Paradyne EtherLoop 2.";
- }
- identity opticalChannelGroup {
- base iana-interface-type;
- description
- "Optical Channel Group.";
- }
- identity homepna {
- base iana-interface-type;
- description
- "HomePNA ITU-T G.989.";
- }
- identity gfp {
- base iana-interface-type;
- description
- "Generic Framing Procedure (GFP).";
- }
- identity ciscoISLvlan {
- base iana-interface-type;
- description
- "Layer 2 Virtual LAN using Cisco ISL.";
- }
- identity actelisMetaLOOP {
- base iana-interface-type;
- description
- "Acteleis proprietary MetaLOOP High Speed Link.";
- }
- identity fcipLink {
- base iana-interface-type;
- description
- "FCIP Link.";
- }
- identity rpr {
- base iana-interface-type;
- description
- "Resilient Packet Ring Interface Type.";
- }
-
-
-
- identity qam {
- base iana-interface-type;
- description
- "RF Qam Interface.";
- }
- identity lmp {
- base iana-interface-type;
- description
- "Link Management Protocol.";
- reference
- "RFC 4327 - Link Management Protocol (LMP) Management
- Information Base (MIB)";
- }
- identity cblVectaStar {
- base iana-interface-type;
- description
- "Cambridge Broadband Networks Limited VectaStar.";
- }
- identity docsCableMCmtsDownstream {
- base iana-interface-type;
- description
- "CATV Modular CMTS Downstream Interface.";
- }
- identity adsl2 {
- base iana-interface-type;
- status deprecated;
- description
- "Asymmetric Digital Subscriber Loop Version 2
- (DEPRECATED/OBSOLETED - please use adsl2plus(238)
- instead).";
- reference
- "RFC 4706 - Definitions of Managed Objects for Asymmetric
- Digital Subscriber Line 2 (ADSL2)";
- }
- identity macSecControlledIF {
- base iana-interface-type;
- description
- "MACSecControlled.";
- }
- identity macSecUncontrolledIF {
- base iana-interface-type;
- description
- "MACSecUncontrolled.";
- }
- identity aviciOpticalEther {
- base iana-interface-type;
- description
- "Avici Optical Ethernet Aggregate.";
- }
- identity atmbond {
- base iana-interface-type;
- description
- "atmbond.";
- }
- identity voiceFGDOS {
- base iana-interface-type;
- description
- "Voice FGD Operator Services.";
- }
- identity mocaVersion1 {
- base iana-interface-type;
- description
- "MultiMedia over Coax Alliance (MoCA) Interface
- as documented in information provided privately to IANA.";
- }
- identity ieee80216WMAN {
- base iana-interface-type;
- description
- "IEEE 802.16 WMAN interface.";
- }
- identity adsl2plus {
- base iana-interface-type;
- description
- "Asymmetric Digital Subscriber Loop Version 2 -
- Version 2 Plus and all variants.";
- }
- identity dvbRcsMacLayer {
- base iana-interface-type;
- description
- "DVB-RCS MAC Layer.";
- reference
- "RFC 5728 - The SatLabs Group DVB-RCS MIB";
- }
- identity dvbTdm {
- base iana-interface-type;
- description
- "DVB Satellite TDM.";
- reference
- "RFC 5728 - The SatLabs Group DVB-RCS MIB";
- }
- identity dvbRcsTdma {
- base iana-interface-type;
- description
- "DVB-RCS TDMA.";
- reference
- "RFC 5728 - The SatLabs Group DVB-RCS MIB";
- }
- identity x86Laps {
- base iana-interface-type;
- description
- "LAPS based on ITU-T X.86/Y.1323.";
- }
- identity wwanPP {
- base iana-interface-type;
- description
- "3GPP WWAN.";
- }
- identity wwanPP2 {
- base iana-interface-type;
- description
- "3GPP2 WWAN.";
- }
- identity voiceEBS {
- base iana-interface-type;
- description
- "Voice P-phone EBS physical interface.";
- }
- identity ifPwType {
- base iana-interface-type;
- description
- "Pseudowire interface type.";
- reference
- "RFC 5601 - Pseudowire (PW) Management Information Base (MIB)";
- }
- identity ilan {
- base iana-interface-type;
- description
- "Internal LAN on a bridge per IEEE 802.1ap.";
- }
- identity pip {
- base iana-interface-type;
- description
- "Provider Instance Port on a bridge per IEEE 802.1ah PBB.";
- }
- identity aluELP {
- base iana-interface-type;
- description
- "Alcatel-Lucent Ethernet Link Protection.";
- }
- identity gpon {
- base iana-interface-type;
- description
- "Gigabit-capable passive optical networks (G-PON) as per
- ITU-T G.948.";
- }
- identity vdsl2 {
- base iana-interface-type;
- description
- "Very high speed digital subscriber line Version 2
- (as per ITU-T Recommendation G.993.2).";
- reference
- "RFC 5650 - Definitions of Managed Objects for Very High
- Speed Digital Subscriber Line 2 (VDSL2)";
- }
- identity capwapDot11Profile {
- base iana-interface-type;
- description
- "WLAN Profile Interface.";
- reference
- "RFC 5834 - Control and Provisioning of Wireless Access
- Points (CAPWAP) Protocol Binding MIB for
- IEEE 802.11";
- }
- identity capwapDot11Bss {
- base iana-interface-type;
- description
- "WLAN BSS Interface.";
- reference
- "RFC 5834 - Control and Provisioning of Wireless Access
- Points (CAPWAP) Protocol Binding MIB for
- IEEE 802.11";
- }
- identity capwapWtpVirtualRadio {
- base iana-interface-type;
- description
- "WTP Virtual Radio Interface.";
- reference
- "RFC 5833 - Control and Provisioning of Wireless Access
- Points (CAPWAP) Protocol Base MIB";
- }
- identity bits {
- base iana-interface-type;
- description
- "bitsport.";
- }
- identity docsCableUpstreamRfPort {
- base iana-interface-type;
- description
- "DOCSIS CATV Upstream RF Port.";
- }
-
-
- identity cableDownstreamRfPort {
- base iana-interface-type;
- description
- "CATV downstream RF Port.";
- }
- identity vmwareVirtualNic {
- base iana-interface-type;
- description
- "VMware Virtual Network Interface.";
- }
- identity ieee802154 {
- base iana-interface-type;
- description
- "IEEE 802.15.4 WPAN interface.";
- reference
- "IEEE 802.15.4-2006";
- }
- identity otnOdu {
- base iana-interface-type;
- description
- "OTN Optical Data Unit.";
- }
- identity otnOtu {
- base iana-interface-type;
- description
- "OTN Optical channel Transport Unit.";
- }
- identity ifVfiType {
- base iana-interface-type;
- description
- "VPLS Forwarding Instance Interface Type.";
- }
- identity g9981 {
- base iana-interface-type;
- description
- "G.998.1 bonded interface.";
- }
- identity g9982 {
- base iana-interface-type;
- description
- "G.998.2 bonded interface.";
- }
- identity g9983 {
- base iana-interface-type;
- description
- "G.998.3 bonded interface.";
- }
-
- identity aluEpon {
- base iana-interface-type;
- description
- "Ethernet Passive Optical Networks (E-PON).";
- }
- identity aluEponOnu {
- base iana-interface-type;
- description
- "EPON Optical Network Unit.";
- }
- identity aluEponPhysicalUni {
- base iana-interface-type;
- description
- "EPON physical User to Network interface.";
- }
- identity aluEponLogicalLink {
- base iana-interface-type;
- description
- "The emulation of a point-to-point link over the EPON
- layer.";
- }
- identity aluGponOnu {
- base iana-interface-type;
- description
- "GPON Optical Network Unit.";
- reference
- "ITU-T G.984.2";
- }
- identity aluGponPhysicalUni {
- base iana-interface-type;
- description
- "GPON physical User to Network interface.";
- reference
- "ITU-T G.984.2";
- }
- identity vmwareNicTeam {
- base iana-interface-type;
- description
- "VMware NIC Team.";
- }
-}
\ No newline at end of file
+++ /dev/null
-module ietf-access-control-list {
- yang-version 1.1;
- namespace "urn:ietf:params:xml:ns:yang:ietf-access-control-list";
- prefix acl;
- import ietf-yang-types {
- prefix yang; revision-date 2013-07-15;
- }
- import ietf-packet-fields {
- prefix packet-fields; revision-date 2016-02-18;
- }
- organization "IETF NETMOD (NETCONF Data Modeling Language)
- Working Group";
- contact
- "WG Web: http://tools.ietf.org/wg/netmod/
- WG List: netmod@ietf.org
- WG Chair: Juergen Schoenwaelder
- j.schoenwaelder@jacobs-university.de
- WG Chair: Tom Nadeau
- tnadeau@lucidvision.com
- Editor: Dean Bogdanovic
- ivandean@gmail.com
- Editor: Kiran Agrahara Sreenivasa
- kkoushik@cisco.com
- Editor: Lisa Huang
- lyihuang@juniper.net
- Editor: Dana Blair
- dblair@cisco.com";
- description
- "This YANG module defines a component that describing the
- configuration of Access Control Lists (ACLs).
- Copyright (c) 2016 IETF Trust and the persons identified as
- the document authors. All rights reserved.
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD
- License set forth in Section 4.c of the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
- This version of this YANG module is part of RFC XXXX; see
- the RFC itself for full legal notices.";
- revision 2016-02-18 {
- description
- "Base model for Network Access Control List (ACL).";
- reference
- "RFC XXXX: Network Access Control List (ACL)
- YANG Data Model";
- }
- identity acl-base {
- description
- "Base Access Control List type for all Access Control List type
- identifiers.";
- }
- identity ipv4-acl {
- base acl:acl-base;
- description
- "ACL that primarily matches on fields from the IPv4 header
- (e.g. IPv4 destination address) and layer 4 headers (e.g. TCP
- destination port). An acl of type ipv4-acl does not contain
- matches on fields in the ethernet header or the IPv6 header.";
- }
- identity ipv6-acl {
- base acl:acl-base;
- description
- "ACL that primarily matches on fields from the IPv6 header
- (e.g. IPv6 destination address) and layer 4 headers (e.g. TCP
- destination port). An acl of type ipv6-acl does not contain
- matches on fields in the ethernet header or the IPv4 header.";
- }
- identity eth-acl {
- base acl:acl-base;
- description
- "ACL that primarily matches on fields in the ethernet header,
- like 10/100/1000baseT or WiFi Access Control List. An acl of
- type eth-acl does not contain matches on fields in the IPv4
- header, IPv6 header or layer 4 headers.";
- }
- typedef acl-type {
- type identityref {
- base acl:acl-base;
- }
- description
- "This type is used to refer to an Access Control List
- (ACL) type";
- }
- typedef access-control-list-ref {
- type leafref {
- path "/access-lists/acl/acl-name";
- }
- description
- "This type is used by data models that need to reference an
- Access Control List";
- }
- container access-lists {
- description
- "This is a top level container for Access Control Lists.
- It can have one or more Access Control Lists.";
- list acl {
- key "acl-type acl-name";
- description
- "An Access Control List(ACL) is an ordered list of
- Access List Entries (ACE). Each Access Control Entry has a
- list of match criteria and a list of actions.
- Since there are several kinds of Access Control Lists
- implemented with different attributes for
- different vendors, this
- model accommodates customizing Access Control Lists for
- each kind and for each vendor.";
- leaf acl-name {
- type string;
- description
- "The name of access-list. A device MAY restrict the length
- and value of this name, possibly space and special
- characters are not allowed.";
- }
- leaf acl-type {
- type acl-type;
- description
- "Type of access control list. Indicates the primary intended
- type of match criteria (e.g. ethernet, IPv4, IPv6, mixed, etc)
- used in the list instance.";
- }
- container acl-oper-data {
- config false;
- description
- "Overall Access Control List operational data";
- }
- container access-list-entries {
- description
- "The access-list-entries container contains
- a list of access-list-entries(ACE).";
- list ace {
- key "rule-name";
- ordered-by user;
- description
- "List of access list entries(ACE)";
- leaf rule-name {
- type string;
- description
- "A unique name identifying this Access List
- Entry(ACE).";
- }
- container matches {
- description
- "Definitions for match criteria for this Access List
- Entry.";
- choice ace-type {
- description
- "Type of access list entry.";
- case ace-ip {
- description "IP Access List Entry.";
- choice ace-ip-version {
- description
- "IP version used in this Access List Entry.";
- case ace-ipv4 {
- uses packet-fields:acl-ipv4-header-fields;
- }
- case ace-ipv6 {
- uses packet-fields:acl-ipv6-header-fields;
- }
- }
- uses packet-fields:acl-ip-header-fields;
- }
- case ace-eth {
- description
- "Ethernet Access List entry.";
- uses packet-fields:acl-eth-header-fields;
- }
- }
- uses packet-fields:metadata;
- }
- container actions {
- description
- "Definitions of action criteria for this Access List
- Entry.";
- choice packet-handling {
- default "deny";
- description
- "Packet handling action.";
- case deny {
- leaf deny {
- type empty;
- description
- "Deny action.";
- }
- }
- case permit {
- leaf permit {
- type empty;
- description
- "Permit action.";
- }
- }
- }
- }
- container ace-oper-data {
- config false;
- description
- "Operational data for this Access List Entry.";
- leaf match-counter {
- type yang:counter64;
- description
- "Number of matches for this Access List Entry";
- }
- }
- }
- }
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-module ietf-inet-types {
-
- namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
- prefix "inet";
-
- organization
- "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
- contact
- "WG Web: <http://tools.ietf.org/wg/netmod/>
- WG List: <mailto:netmod@ietf.org>
-
- WG Chair: David Partain
- <mailto:david.partain@ericsson.com>
-
- WG Chair: David Kessens
- <mailto:david.kessens@nsn.com>
-
- Editor: Juergen Schoenwaelder
- <mailto:j.schoenwaelder@jacobs-university.de>";
-
- description
- "This module contains a collection of generally useful derived
- YANG data types for Internet addresses and related things.
-
- Copyright (c) 2010 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, is permitted pursuant to, and subject to the license
- terms contained in, the Simplified BSD License set forth in Section
- 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
-
- This version of this YANG module is part of RFC 6021; see
- the RFC itself for full legal notices.";
-
- revision 2010-09-24 {
- description
- "Initial revision.";
- reference
- "RFC 6021: Common YANG Data Types";
- }
-
- /*** collection of protocol field related types ***/
-
- typedef ip-version {
- type enumeration {
- enum unknown {
- value "0";
- description
- "An unknown or unspecified version of the Internet protocol.";
- }
- enum ipv4 {
- value "1";
- description
- "The IPv4 protocol as defined in RFC 791.";
- }
- enum ipv6 {
- value "2";
- description
- "The IPv6 protocol as defined in RFC 2460.";
- }
- }
- description
- "This value represents the version of the IP protocol.
-
- In the value set and its semantics, this type is equivalent
- to the InetVersion textual convention of the SMIv2.";
- reference
- "RFC 791: Internet Protocol
- RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
- RFC 4001: Textual Conventions for Internet Network Addresses";
- }
-
- typedef dscp {
- type uint8 {
- range "0..63";
- }
- description
- "The dscp type represents a Differentiated Services Code-Point
- that may be used for marking packets in a traffic stream.
-
- In the value set and its semantics, this type is equivalent
- to the Dscp textual convention of the SMIv2.";
- reference
- "RFC 3289: Management Information Base for the Differentiated
- Services Architecture
- RFC 2474: Definition of the Differentiated Services Field
- (DS Field) in the IPv4 and IPv6 Headers
- RFC 2780: IANA Allocation Guidelines For Values In
- the Internet Protocol and Related Headers";
- }
-
- typedef ipv6-flow-label {
- type uint32 {
- range "0..1048575";
- }
- description
- "The flow-label type represents flow identifier or Flow Label
- in an IPv6 packet header that may be used to discriminate
- traffic flows.
-
- In the value set and its semantics, this type is equivalent
- to the IPv6FlowLabel textual convention of the SMIv2.";
- reference
- "RFC 3595: Textual Conventions for IPv6 Flow Label
- RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
- }
-
- typedef port-number {
- type uint16 {
- range "0..65535";
- }
- description
- "The port-number type represents a 16-bit port number of an
- Internet transport layer protocol such as UDP, TCP, DCCP, or
- SCTP. Port numbers are assigned by IANA. A current list of
- all assignments is available from <http://www.iana.org/>.
-
- Note that the port number value zero is reserved by IANA. In
- situations where the value zero does not make sense, it can
- be excluded by subtyping the port-number type.
-
- In the value set and its semantics, this type is equivalent
- to the InetPortNumber textual convention of the SMIv2.";
- reference
- "RFC 768: User Datagram Protocol
- RFC 793: Transmission Control Protocol
- RFC 4960: Stream Control Transmission Protocol
- RFC 4340: Datagram Congestion Control Protocol (DCCP)
- RFC 4001: Textual Conventions for Internet Network Addresses";
- }
-
- /*** collection of autonomous system related types ***/
-
- typedef as-number {
- type uint32;
- description
- "The as-number type represents autonomous system numbers
- which identify an Autonomous System (AS). An AS is a set
- of routers under a single technical administration, using
- an interior gateway protocol and common metrics to route
- packets within the AS, and using an exterior gateway
- protocol to route packets to other ASs'. IANA maintains
- the AS number space and has delegated large parts to the
- regional registries.
-
- Autonomous system numbers were originally limited to 16
- bits. BGP extensions have enlarged the autonomous system
- number space to 32 bits. This type therefore uses an uint32
- base type without a range restriction in order to support
- a larger autonomous system number space.
-
- In the value set and its semantics, this type is equivalent
- to the InetAutonomousSystemNumber textual convention of
- the SMIv2.";
- reference
- "RFC 1930: Guidelines for creation, selection, and registration
- of an Autonomous System (AS)
- RFC 4271: A Border Gateway Protocol 4 (BGP-4)
- RFC 4893: BGP Support for Four-octet AS Number Space
- RFC 4001: Textual Conventions for Internet Network Addresses";
- }
-
- /*** collection of IP address and hostname related types ***/
-
- typedef ip-address {
- type union {
- type inet:ipv4-address;
- type inet:ipv6-address;
- }
- description
- "The ip-address type represents an IP address and is IP
- version neutral. The format of the textual representations
- implies the IP version.";
- }
-
- typedef ipv4-address {
- type string {
- pattern
- '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
- + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
- + '(%[\p{N}\p{L}]+)?';
- }
- description
- "The ipv4-address type represents an IPv4 address in
- dotted-quad notation. The IPv4 address may include a zone
- index, separated by a % sign.
-
- The zone index is used to disambiguate identical address
- values. For link-local addresses, the zone index will
- typically be the interface index number or the name of an
- interface. If the zone index is not present, the default
- zone of the device will be used.
-
- The canonical format for the zone index is the numerical
- format";
- }
-
- typedef ipv6-address {
- type string {
- pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
- + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
- + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
- + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
- + '(%[\p{N}\p{L}]+)?';
- pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
- + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
- + '(%.+)?';
- }
- description
- "The ipv6-address type represents an IPv6 address in full,
- mixed, shortened, and shortened-mixed notation. The IPv6
- address may include a zone index, separated by a % sign.
-
- The zone index is used to disambiguate identical address
- values. For link-local addresses, the zone index will
- typically be the interface index number or the name of an
- interface. If the zone index is not present, the default
- zone of the device will be used.
-
- The canonical format of IPv6 addresses uses the compressed
- format described in RFC 4291, Section 2.2, item 2 with the
- following additional rules: the :: substitution must be
- applied to the longest sequence of all-zero 16-bit chunks
- in an IPv6 address. If there is a tie, the first sequence
- of all-zero 16-bit chunks is replaced by ::. Single
- all-zero 16-bit chunks are not compressed. The canonical
- format uses lowercase characters and leading zeros are
- not allowed. The canonical format for the zone index is
- the numerical format as described in RFC 4007, Section
- 11.2.";
- reference
- "RFC 4291: IP Version 6 Addressing Architecture
- RFC 4007: IPv6 Scoped Address Architecture
- RFC 5952: A Recommendation for IPv6 Address Text Representation";
- }
-
- typedef ip-prefix {
- type union {
- type inet:ipv4-prefix;
- type inet:ipv6-prefix;
- }
- description
- "The ip-prefix type represents an IP prefix and is IP
- version neutral. The format of the textual representations
- implies the IP version.";
- }
-
- typedef ipv4-prefix {
- type string {
- pattern
- '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
- + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
- + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
- }
- description
- "The ipv4-prefix type represents an IPv4 address prefix.
- The prefix length is given by the number following the
- slash character and must be less than or equal to 32.
-
- A prefix length value of n corresponds to an IP address
- mask that has n contiguous 1-bits from the most
- significant bit (MSB) and all other bits set to 0.
-
- The canonical format of an IPv4 prefix has all bits of
- the IPv4 address set to zero that are not part of the
- IPv4 prefix.";
- }
-
- typedef ipv6-prefix {
- type string {
- pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
- + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
- + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
- + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
- + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
- pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
- + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
- + '(/.+)';
- }
- description
- "The ipv6-prefix type represents an IPv6 address prefix.
- The prefix length is given by the number following the
- slash character and must be less than or equal 128.
-
- A prefix length value of n corresponds to an IP address
- mask that has n contiguous 1-bits from the most
- significant bit (MSB) and all other bits set to 0.
-
- The IPv6 address should have all bits that do not belong
- to the prefix set to zero.
-
- The canonical format of an IPv6 prefix has all bits of
- the IPv6 address set to zero that are not part of the
- IPv6 prefix. Furthermore, IPv6 address is represented
- in the compressed format described in RFC 4291, Section
- 2.2, item 2 with the following additional rules: the ::
- substitution must be applied to the longest sequence of
- all-zero 16-bit chunks in an IPv6 address. If there is
- a tie, the first sequence of all-zero 16-bit chunks is
- replaced by ::. Single all-zero 16-bit chunks are not
- compressed. The canonical format uses lowercase
- characters and leading zeros are not allowed.";
- reference
- "RFC 4291: IP Version 6 Addressing Architecture";
- }
-
- /*** collection of domain name and URI types ***/
-
- typedef domain-name {
- type string {
- pattern '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
- + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
- + '|\.';
- length "1..253";
- }
- description
- "The domain-name type represents a DNS domain name. The
- name SHOULD be fully qualified whenever possible.
-
- Internet domain names are only loosely specified. Section
- 3.5 of RFC 1034 recommends a syntax (modified in Section
- 2.1 of RFC 1123). The pattern above is intended to allow
- for current practice in domain name use, and some possible
- future expansion. It is designed to hold various types of
- domain names, including names used for A or AAAA records
- (host names) and other records, such as SRV records. Note
- that Internet host names have a stricter syntax (described
- in RFC 952) than the DNS recommendations in RFCs 1034 and
- 1123, and that systems that want to store host names in
- schema nodes using the domain-name type are recommended to
- adhere to this stricter standard to ensure interoperability.
-
- The encoding of DNS names in the DNS protocol is limited
- to 255 characters. Since the encoding consists of labels
- prefixed by a length bytes and there is a trailing NULL
- byte, only 253 characters can appear in the textual dotted
- notation.
-
- The description clause of schema nodes using the domain-name
- type MUST describe when and how these names are resolved to
- IP addresses. Note that the resolution of a domain-name value
- may require to query multiple DNS records (e.g., A for IPv4
- and AAAA for IPv6). The order of the resolution process and
- which DNS record takes precedence can either be defined
- explicitely or it may depend on the configuration of the
- resolver.
-
- Domain-name values use the US-ASCII encoding. Their canonical
- format uses lowercase US-ASCII characters. Internationalized
- domain names MUST be encoded in punycode as described in RFC
- 3492";
- reference
- "RFC 952: DoD Internet Host Table Specification
- RFC 1034: Domain Names - Concepts and Facilities
- RFC 1123: Requirements for Internet Hosts -- Application
- and Support
- RFC 2782: A DNS RR for specifying the location of services
- (DNS SRV)
- RFC 3492: Punycode: A Bootstring encoding of Unicode for
- Internationalized Domain Names in Applications
- (IDNA)
- RFC 5891: Internationalizing Domain Names in Applications
- (IDNA): Protocol";
- }
-
- typedef host {
- type union {
- type inet:ip-address;
- type inet:domain-name;
- }
- description
- "The host type represents either an IP address or a DNS
- domain name.";
- }
-
- typedef uri {
- type string;
- description
- "The uri type represents a Uniform Resource Identifier
- (URI) as defined by STD 66.
-
- Objects using the uri type MUST be in US-ASCII encoding,
- and MUST be normalized as described by RFC 3986 Sections
- 6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary
- percent-encoding is removed, and all case-insensitive
- characters are set to lowercase except for hexadecimal
- digits, which are normalized to uppercase as described in
- Section 6.2.2.1.
-
- The purpose of this normalization is to help provide
- unique URIs. Note that this normalization is not
- sufficient to provide uniqueness. Two URIs that are
- textually distinct after this normalization may still be
- equivalent.
-
- Objects using the uri type may restrict the schemes that
- they permit. For example, 'data:' and 'urn:' schemes
- might not be appropriate.
-
- A zero-length URI is not a valid URI. This can be used to
- express 'URI absent' where required.
-
- In the value set and its semantics, this type is equivalent
- to the Uri SMIv2 textual convention defined in RFC 5017.";
- reference
- "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
- RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
- Group: Uniform Resource Identifiers (URIs), URLs,
- and Uniform Resource Names (URNs): Clarifications
- and Recommendations
- RFC 5017: MIB Textual Conventions for Uniform Resource
- Identifiers (URIs)";
- }
-
- }
\ No newline at end of file
+++ /dev/null
-module ietf-inet-types {
-
- namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
- prefix "inet";
-
- organization
- "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
- contact
- "WG Web: <http://tools.ietf.org/wg/netmod/>
- WG List: <mailto:netmod@ietf.org>
-
- WG Chair: David Kessens
- <mailto:david.kessens@nsn.com>
-
- WG Chair: Juergen Schoenwaelder
- <mailto:j.schoenwaelder@jacobs-university.de>
-
- Editor: Juergen Schoenwaelder
- <mailto:j.schoenwaelder@jacobs-university.de>";
-
- description
- "This module contains a collection of generally useful derived
- YANG data types for Internet addresses and related things.
-
- Copyright (c) 2013 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
-
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD License
- set forth in Section 4.c of the IETF Trust's Legal Provisions
- Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
-
- This version of this YANG module is part of RFC 6991; see
- the RFC itself for full legal notices.";
-
- revision 2013-07-15 {
- description
- "This revision adds the following new data types:
- - ip-address-no-zone
- - ipv4-address-no-zone
- - ipv6-address-no-zone";
- reference
- "RFC 6991: Common YANG Data Types";
- }
-
- revision 2010-09-24 {
- description
- "Initial revision.";
- reference
- "RFC 6021: Common YANG Data Types";
- }
-
- /*** collection of types related to protocol fields ***/
-
- typedef ip-version {
- type enumeration {
- enum unknown {
- value "0";
- description
- "An unknown or unspecified version of the Internet
- protocol.";
- }
- enum ipv4 {
- value "1";
- description
- "The IPv4 protocol as defined in RFC 791.";
- }
- enum ipv6 {
- value "2";
- description
- "The IPv6 protocol as defined in RFC 2460.";
- }
- }
- description
- "This value represents the version of the IP protocol.
-
- In the value set and its semantics, this type is equivalent
- to the InetVersion textual convention of the SMIv2.";
- reference
- "RFC 791: Internet Protocol
- RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
- RFC 4001: Textual Conventions for Internet Network Addresses";
- }
-
- typedef dscp {
- type uint8 {
- range "0..63";
- }
- description
- "The dscp type represents a Differentiated Services Code Point
- that may be used for marking packets in a traffic stream.
- In the value set and its semantics, this type is equivalent
- to the Dscp textual convention of the SMIv2.";
- reference
- "RFC 3289: Management Information Base for the Differentiated
- Services Architecture
- RFC 2474: Definition of the Differentiated Services Field
- (DS Field) in the IPv4 and IPv6 Headers
- RFC 2780: IANA Allocation Guidelines For Values In
- the Internet Protocol and Related Headers";
- }
-
- typedef ipv6-flow-label {
- type uint32 {
- range "0..1048575";
- }
- description
- "The ipv6-flow-label type represents the flow identifier or Flow
- Label in an IPv6 packet header that may be used to
- discriminate traffic flows.
-
- In the value set and its semantics, this type is equivalent
- to the IPv6FlowLabel textual convention of the SMIv2.";
- reference
- "RFC 3595: Textual Conventions for IPv6 Flow Label
- RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
- }
-
- typedef port-number {
- type uint16 {
- range "0..65535";
- }
- description
- "The port-number type represents a 16-bit port number of an
- Internet transport-layer protocol such as UDP, TCP, DCCP, or
- SCTP. Port numbers are assigned by IANA. A current list of
- all assignments is available from <http://www.iana.org/>.
-
- Note that the port number value zero is reserved by IANA. In
- situations where the value zero does not make sense, it can
- be excluded by subtyping the port-number type.
- In the value set and its semantics, this type is equivalent
- to the InetPortNumber textual convention of the SMIv2.";
- reference
- "RFC 768: User Datagram Protocol
- RFC 793: Transmission Control Protocol
- RFC 4960: Stream Control Transmission Protocol
- RFC 4340: Datagram Congestion Control Protocol (DCCP)
- RFC 4001: Textual Conventions for Internet Network Addresses";
- }
-
- /*** collection of types related to autonomous systems ***/
-
- typedef as-number {
- type uint32;
- description
- "The as-number type represents autonomous system numbers
- which identify an Autonomous System (AS). An AS is a set
- of routers under a single technical administration, using
- an interior gateway protocol and common metrics to route
- packets within the AS, and using an exterior gateway
- protocol to route packets to other ASes. IANA maintains
- the AS number space and has delegated large parts to the
- regional registries.
-
- Autonomous system numbers were originally limited to 16
- bits. BGP extensions have enlarged the autonomous system
- number space to 32 bits. This type therefore uses an uint32
- base type without a range restriction in order to support
- a larger autonomous system number space.
-
- In the value set and its semantics, this type is equivalent
- to the InetAutonomousSystemNumber textual convention of
- the SMIv2.";
- reference
- "RFC 1930: Guidelines for creation, selection, and registration
- of an Autonomous System (AS)
- RFC 4271: A Border Gateway Protocol 4 (BGP-4)
- RFC 4001: Textual Conventions for Internet Network Addresses
- RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
- Number Space";
- }
-
- /*** collection of types related to IP addresses and hostnames ***/
-
- typedef ip-address {
- type union {
- type inet:ipv4-address;
- type inet:ipv6-address;
- }
- description
- "The ip-address type represents an IP address and is IP
- version neutral. The format of the textual representation
- implies the IP version. This type supports scoped addresses
- by allowing zone identifiers in the address format.";
- reference
- "RFC 4007: IPv6 Scoped Address Architecture";
- }
-
- typedef ipv4-address {
- type string {
- pattern
- '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
- + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
- + '(%[\p{N}\p{L}]+)?';
- }
- description
- "The ipv4-address type represents an IPv4 address in
- dotted-quad notation. The IPv4 address may include a zone
- index, separated by a % sign.
-
- The zone index is used to disambiguate identical address
- values. For link-local addresses, the zone index will
- typically be the interface index number or the name of an
- interface. If the zone index is not present, the default
- zone of the device will be used.
-
- The canonical format for the zone index is the numerical
- format";
- }
-
- typedef ipv6-address {
- type string {
- pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
- + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
- + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
- + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
- + '(%[\p{N}\p{L}]+)?';
- pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
- + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
- + '(%.+)?';
- }
- description
- "The ipv6-address type represents an IPv6 address in full,
- mixed, shortened, and shortened-mixed notation. The IPv6
- address may include a zone index, separated by a % sign.
-
- The zone index is used to disambiguate identical address
- values. For link-local addresses, the zone index will
- typically be the interface index number or the name of an
- interface. If the zone index is not present, the default
- zone of the device will be used.
-
- The canonical format of IPv6 addresses uses the textual
- representation defined in Section 4 of RFC 5952. The
- canonical format for the zone index is the numerical
- format as described in Section 11.2 of RFC 4007.";
- reference
- "RFC 4291: IP Version 6 Addressing Architecture
- RFC 4007: IPv6 Scoped Address Architecture
- RFC 5952: A Recommendation for IPv6 Address Text
- Representation";
- }
-
- typedef ip-address-no-zone {
- type union {
- type inet:ipv4-address-no-zone;
- type inet:ipv6-address-no-zone;
- }
- description
- "The ip-address-no-zone type represents an IP address and is
- IP version neutral. The format of the textual representation
- implies the IP version. This type does not support scoped
- addresses since it does not allow zone identifiers in the
- address format.";
- reference
- "RFC 4007: IPv6 Scoped Address Architecture";
- }
-
- typedef ipv4-address-no-zone {
- type inet:ipv4-address {
- pattern '[0-9\.]*';
- }
- description
- "An IPv4 address without a zone index. This type, derived from
- ipv4-address, may be used in situations where the zone is
- known from the context and hence no zone index is needed.";
- }
-
- typedef ipv6-address-no-zone {
- type inet:ipv6-address {
- pattern '[0-9a-fA-F:\.]*';
- }
- description
- "An IPv6 address without a zone index. This type, derived from
- ipv6-address, may be used in situations where the zone is
- known from the context and hence no zone index is needed.";
- reference
- "RFC 4291: IP Version 6 Addressing Architecture
- RFC 4007: IPv6 Scoped Address Architecture
- RFC 5952: A Recommendation for IPv6 Address Text
- Representation";
- }
-
- typedef ip-prefix {
- type union {
- type inet:ipv4-prefix;
- type inet:ipv6-prefix;
- }
- description
- "The ip-prefix type represents an IP prefix and is IP
- version neutral. The format of the textual representations
- implies the IP version.";
- }
-
- typedef ipv4-prefix {
- type string {
- pattern
- '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
- + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
- + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
- }
- description
- "The ipv4-prefix type represents an IPv4 address prefix.
- The prefix length is given by the number following the
- slash character and must be less than or equal to 32.
-
- A prefix length value of n corresponds to an IP address
- mask that has n contiguous 1-bits from the most
- significant bit (MSB) and all other bits set to 0.
-
- The canonical format of an IPv4 prefix has all bits of
- the IPv4 address set to zero that are not part of the
- IPv4 prefix.";
- }
-
- typedef ipv6-prefix {
- type string {
- pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
- + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
- + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
- + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
- + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
- pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
- + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
- + '(/.+)';
- }
- description
- "The ipv6-prefix type represents an IPv6 address prefix.
- The prefix length is given by the number following the
- slash character and must be less than or equal to 128.
-
- A prefix length value of n corresponds to an IP address
- mask that has n contiguous 1-bits from the most
- significant bit (MSB) and all other bits set to 0.
-
- The IPv6 address should have all bits that do not belong
- to the prefix set to zero.
-
- The canonical format of an IPv6 prefix has all bits of
- the IPv6 address set to zero that are not part of the
- IPv6 prefix. Furthermore, the IPv6 address is represented
- as defined in Section 4 of RFC 5952.";
- reference
- "RFC 5952: A Recommendation for IPv6 Address Text
- Representation";
- }
-
- /*** collection of domain name and URI types ***/
-
- typedef domain-name {
- type string {
- pattern
- '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
- + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
- + '|\.';
- length "1..253";
- }
- description
- "The domain-name type represents a DNS domain name. The
- name SHOULD be fully qualified whenever possible.
-
- Internet domain names are only loosely specified. Section
- 3.5 of RFC 1034 recommends a syntax (modified in Section
- 2.1 of RFC 1123). The pattern above is intended to allow
- for current practice in domain name use, and some possible
- future expansion. It is designed to hold various types of
- domain names, including names used for A or AAAA records
- (host names) and other records, such as SRV records. Note
- that Internet host names have a stricter syntax (described
- in RFC 952) than the DNS recommendations in RFCs 1034 and
- 1123, and that systems that want to store host names in
- schema nodes using the domain-name type are recommended to
- adhere to this stricter standard to ensure interoperability.
-
- The encoding of DNS names in the DNS protocol is limited
- to 255 characters. Since the encoding consists of labels
- prefixed by a length bytes and there is a trailing NULL
- byte, only 253 characters can appear in the textual dotted
- notation.
-
- The description clause of schema nodes using the domain-name
- type MUST describe when and how these names are resolved to
- IP addresses. Note that the resolution of a domain-name value
- may require to query multiple DNS records (e.g., A for IPv4
- and AAAA for IPv6). The order of the resolution process and
- which DNS record takes precedence can either be defined
- explicitly or may depend on the configuration of the
- resolver.
-
- Domain-name values use the US-ASCII encoding. Their canonical
- format uses lowercase US-ASCII characters. Internationalized
- domain names MUST be A-labels as per RFC 5890.";
- reference
- "RFC 952: DoD Internet Host Table Specification
- RFC 1034: Domain Names - Concepts and Facilities
- RFC 1123: Requirements for Internet Hosts -- Application
- and Support
- RFC 2782: A DNS RR for specifying the location of services
- (DNS SRV)
- RFC 5890: Internationalized Domain Names in Applications
- (IDNA): Definitions and Document Framework";
- }
-
- typedef host {
- type union {
- type inet:ip-address;
- type inet:domain-name;
- }
- description
- "The host type represents either an IP address or a DNS
- domain name.";
- }
-
- typedef uri {
- type string;
- description
- "The uri type represents a Uniform Resource Identifier
- (URI) as defined by STD 66.
-
- Objects using the uri type MUST be in US-ASCII encoding,
- and MUST be normalized as described by RFC 3986 Sections
- 6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary
- percent-encoding is removed, and all case-insensitive
- characters are set to lowercase except for hexadecimal
- digits, which are normalized to uppercase as described in
- Section 6.2.2.1.
-
- The purpose of this normalization is to help provide
- unique URIs. Note that this normalization is not
- sufficient to provide uniqueness. Two URIs that are
- textually distinct after this normalization may still be
- equivalent.
-
- Objects using the uri type may restrict the schemes that
- they permit. For example, 'data:' and 'urn:' schemes
- might not be appropriate.
-
- A zero-length URI is not a valid URI. This can be used to
- express 'URI absent' where required.
-
- In the value set and its semantics, this type is equivalent
- to the Uri SMIv2 textual convention defined in RFC 5017.";
- reference
- "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
- RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
- Group: Uniform Resource Identifiers (URIs), URLs,
- and Uniform Resource Names (URNs): Clarifications
- and Recommendations
- RFC 5017: MIB Textual Conventions for Uniform Resource
- Identifiers (URIs)";
- }
-
-}
\ No newline at end of file
+++ /dev/null
-module ietf-interfaces {
-
- namespace "urn:ietf:params:xml:ns:yang:ietf-interfaces";
- prefix if;
-
- import ietf-yang-types {
- prefix yang;
- revision-date "2013-07-15";
- }
-
- organization
- "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
- contact
- "WG Web: <http://tools.ietf.org/wg/netmod/>
- WG List: <mailto:netmod@ietf.org>
-
- WG Chair: Thomas Nadeau
- <mailto:tnadeau@lucidvision.com>
-
- WG Chair: Juergen Schoenwaelder
- <mailto:j.schoenwaelder@jacobs-university.de>
-
- Editor: Martin Bjorklund
- <mailto:mbj@tail-f.com>";
-
- description
- "This module contains a collection of YANG definitions for
- managing network interfaces.
-
- Copyright (c) 2014 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
-
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD License
- set forth in Section 4.c of the IETF Trust's Legal Provisions
- Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
-
- This version of this YANG module is part of RFC 7223; see
- the RFC itself for full legal notices.";
-
- revision 2014-05-08 {
- description
- "Initial revision.";
- reference
- "RFC 7223: A YANG Data Model for Interface Management";
- }
-
- /*
- * Typedefs
- */
-
- typedef interface-ref {
- type leafref {
- path "/if:interfaces/if:interface/if:name";
- }
- description
- "This type is used by data models that need to reference
- configured interfaces.";
- }
-
- typedef interface-state-ref {
- type leafref {
- path "/if:interfaces-state/if:interface/if:name";
- }
- description
- "This type is used by data models that need to reference
- the operationally present interfaces.";
- }
-
- /*
- * Identities
- */
-
- identity interface-type {
- description
- "Base identity from which specific interface types are
- derived.";
- }
-
- /*
- * Features
- */
-
- feature arbitrary-names {
- description
- "This feature indicates that the device allows user-controlled
- interfaces to be named arbitrarily.";
- }
- feature pre-provisioning {
- description
- "This feature indicates that the device supports
- pre-provisioning of interface configuration, i.e., it is
- possible to configure an interface whose physical interface
- hardware is not present on the device.";
- }
-
- feature if-mib {
- description
- "This feature indicates that the device implements
- the IF-MIB.";
- reference
- "RFC 2863: The Interfaces Group MIB";
- }
-
- /*
- * Configuration data nodes
- */
-
- container interfaces {
- description
- "Interface configuration parameters.";
-
- list interface {
- key "name";
-
- description
- "The list of configured interfaces on the device.
-
- The operational state of an interface is available in the
- /interfaces-state/interface list. If the configuration of a
- system-controlled interface cannot be used by the system
- (e.g., the interface hardware present does not match the
- interface type), then the configuration is not applied to
- the system-controlled interface shown in the
- /interfaces-state/interface list. If the configuration
- of a user-controlled interface cannot be used by the system,
- the configured interface is not instantiated in the
- /interfaces-state/interface list.";
-
- leaf name {
- type string;
- description
- "The name of the interface.
-
- A device MAY restrict the allowed values for this leaf,
- possibly depending on the type of the interface.
- For system-controlled interfaces, this leaf is the
- device-specific name of the interface. The 'config false'
- list /interfaces-state/interface contains the currently
- existing interfaces on the device.
-
- If a client tries to create configuration for a
- system-controlled interface that is not present in the
- /interfaces-state/interface list, the server MAY reject
- the request if the implementation does not support
- pre-provisioning of interfaces or if the name refers to
- an interface that can never exist in the system. A
- NETCONF server MUST reply with an rpc-error with the
- error-tag 'invalid-value' in this case.
-
- If the device supports pre-provisioning of interface
- configuration, the 'pre-provisioning' feature is
- advertised.
-
- If the device allows arbitrarily named user-controlled
- interfaces, the 'arbitrary-names' feature is advertised.
-
- When a configured user-controlled interface is created by
- the system, it is instantiated with the same name in the
- /interface-state/interface list.";
- }
-
- leaf description {
- type string;
- description
- "A textual description of the interface.
-
- A server implementation MAY map this leaf to the ifAlias
- MIB object. Such an implementation needs to use some
- mechanism to handle the differences in size and characters
- allowed between this leaf and ifAlias. The definition of
- such a mechanism is outside the scope of this document.
-
- Since ifAlias is defined to be stored in non-volatile
- storage, the MIB implementation MUST map ifAlias to the
- value of 'description' in the persistently stored
- datastore.
-
- Specifically, if the device supports ':startup', when
- ifAlias is read the device MUST return the value of
- 'description' in the 'startup' datastore, and when it is
- written, it MUST be written to the 'running' and 'startup'
- datastores. Note that it is up to the implementation to
-
- decide whether to modify this single leaf in 'startup' or
- perform an implicit copy-config from 'running' to
- 'startup'.
-
- If the device does not support ':startup', ifAlias MUST
- be mapped to the 'description' leaf in the 'running'
- datastore.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifAlias";
- }
-
- leaf type {
- type identityref {
- base interface-type;
- }
- mandatory true;
- description
- "The type of the interface.
-
- When an interface entry is created, a server MAY
- initialize the type leaf with a valid value, e.g., if it
- is possible to derive the type from the name of the
- interface.
-
- If a client tries to set the type of an interface to a
- value that can never be used by the system, e.g., if the
- type is not supported or if the type does not match the
- name of the interface, the server MUST reject the request.
- A NETCONF server MUST reply with an rpc-error with the
- error-tag 'invalid-value' in this case.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifType";
- }
-
- leaf enabled {
- type boolean;
- default "true";
- description
- "This leaf contains the configured, desired state of the
- interface.
-
- Systems that implement the IF-MIB use the value of this
- leaf in the 'running' datastore to set
- IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry
- has been initialized, as described in RFC 2863.
-
-
-
- Changes in this leaf in the 'running' datastore are
- reflected in ifAdminStatus, but if ifAdminStatus is
- changed over SNMP, this leaf is not affected.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
- }
-
- leaf link-up-down-trap-enable {
- if-feature if-mib;
- type enumeration {
- enum enabled {
- value 1;
- }
- enum disabled {
- value 2;
- }
- }
- description
- "Controls whether linkUp/linkDown SNMP notifications
- should be generated for this interface.
-
- If this node is not configured, the value 'enabled' is
- operationally used by the server for interfaces that do
- not operate on top of any other interface (i.e., there are
- no 'lower-layer-if' entries), and 'disabled' otherwise.";
- reference
- "RFC 2863: The Interfaces Group MIB -
- ifLinkUpDownTrapEnable";
- }
- }
- }
-
- /*
- * Operational state data nodes
- */
-
- container interfaces-state {
- config false;
- description
- "Data nodes for the operational state of interfaces.";
-
- list interface {
- key "name";
-
-
-
-
-
- description
- "The list of interfaces on the device.
-
- System-controlled interfaces created by the system are
- always present in this list, whether they are configured or
- not.";
-
- leaf name {
- type string;
- description
- "The name of the interface.
-
- A server implementation MAY map this leaf to the ifName
- MIB object. Such an implementation needs to use some
- mechanism to handle the differences in size and characters
- allowed between this leaf and ifName. The definition of
- such a mechanism is outside the scope of this document.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifName";
- }
-
- leaf type {
- type identityref {
- base interface-type;
- }
- mandatory true;
- description
- "The type of the interface.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifType";
- }
-
- leaf admin-status {
- if-feature if-mib;
- type enumeration {
- enum up {
- value 1;
- description
- "Ready to pass packets.";
- }
- enum down {
- value 2;
- description
- "Not ready to pass packets and not in some test mode.";
- }
-
-
-
- enum testing {
- value 3;
- description
- "In some test mode.";
- }
- }
- mandatory true;
- description
- "The desired state of the interface.
-
- This leaf has the same read semantics as ifAdminStatus.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
- }
-
- leaf oper-status {
- type enumeration {
- enum up {
- value 1;
- description
- "Ready to pass packets.";
- }
- enum down {
- value 2;
- description
- "The interface does not pass any packets.";
- }
- enum testing {
- value 3;
- description
- "In some test mode. No operational packets can
- be passed.";
- }
- enum unknown {
- value 4;
- description
- "Status cannot be determined for some reason.";
- }
- enum dormant {
- value 5;
- description
- "Waiting for some external event.";
- }
- enum not-present {
- value 6;
- description
- "Some component (typically hardware) is missing.";
- }
- enum lower-layer-down {
- value 7;
- description
- "Down due to state of lower-layer interface(s).";
- }
- }
- mandatory true;
- description
- "The current operational state of the interface.
-
- This leaf has the same semantics as ifOperStatus.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifOperStatus";
- }
-
- leaf last-change {
- type yang:date-and-time;
- description
- "The time the interface entered its current operational
- state. If the current state was entered prior to the
- last re-initialization of the local network management
- subsystem, then this node is not present.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifLastChange";
- }
-
- leaf if-index {
- if-feature if-mib;
- type int32 {
- range "1..2147483647";
- }
- mandatory true;
- description
- "The ifIndex value for the ifEntry represented by this
- interface.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifIndex";
- }
-
- leaf phys-address {
- type yang:phys-address;
- description
- "The interface's address at its protocol sub-layer. For
- example, for an 802.x interface, this object normally
- contains a Media Access Control (MAC) address. The
- interface's media-specific modules must define the bit
-
-
- and byte ordering and the format of the value of this
- object. For interfaces that do not have such an address
- (e.g., a serial line), this node is not present.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
- }
-
- leaf-list higher-layer-if {
- type interface-state-ref;
- description
- "A list of references to interfaces layered on top of this
- interface.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifStackTable";
- }
-
- leaf-list lower-layer-if {
- type interface-state-ref;
- description
- "A list of references to interfaces layered underneath this
- interface.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifStackTable";
- }
-
- leaf speed {
- type yang:gauge64;
- units "bits/second";
- description
- "An estimate of the interface's current bandwidth in bits
- per second. For interfaces that do not vary in
- bandwidth or for those where no accurate estimation can
- be made, this node should contain the nominal bandwidth.
- For interfaces that have no concept of bandwidth, this
- node is not present.";
- reference
- "RFC 2863: The Interfaces Group MIB -
- ifSpeed, ifHighSpeed";
- }
-
-
-
-
-
-
-
-
-
- container statistics {
- description
- "A collection of interface-related statistics objects.";
-
- leaf discontinuity-time {
- type yang:date-and-time;
- mandatory true;
- description
- "The time on the most recent occasion at which any one or
- more of this interface's counters suffered a
- discontinuity. If no such discontinuities have occurred
- since the last re-initialization of the local management
- subsystem, then this node contains the time the local
- management subsystem re-initialized itself.";
- }
-
- leaf in-octets {
- type yang:counter64;
- description
- "The total number of octets received on the interface,
- including framing characters.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
- }
-
- leaf in-unicast-pkts {
- type yang:counter64;
- description
- "The number of packets, delivered by this sub-layer to a
- higher (sub-)layer, that were not addressed to a
- multicast or broadcast address at this sub-layer.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
- }
-
-
-
-
- leaf in-broadcast-pkts {
- type yang:counter64;
- description
- "The number of packets, delivered by this sub-layer to a
- higher (sub-)layer, that were addressed to a broadcast
- address at this sub-layer.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB -
- ifHCInBroadcastPkts";
- }
-
- leaf in-multicast-pkts {
- type yang:counter64;
- description
- "The number of packets, delivered by this sub-layer to a
- higher (sub-)layer, that were addressed to a multicast
- address at this sub-layer. For a MAC-layer protocol,
- this includes both Group and Functional addresses.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB -
- ifHCInMulticastPkts";
- }
-
- leaf in-discards {
- type yang:counter32;
- description
- "The number of inbound packets that were chosen to be
- discarded even though no errors had been detected to
- prevent their being deliverable to a higher-layer
- protocol. One possible reason for discarding such a
- packet could be to free up buffer space.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
-
-
- reference
- "RFC 2863: The Interfaces Group MIB - ifInDiscards";
- }
-
- leaf in-errors {
- type yang:counter32;
- description
- "For packet-oriented interfaces, the number of inbound
- packets that contained errors preventing them from being
- deliverable to a higher-layer protocol. For character-
- oriented or fixed-length interfaces, the number of
- inbound transmission units that contained errors
- preventing them from being deliverable to a higher-layer
- protocol.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifInErrors";
- }
-
- leaf in-unknown-protos {
- type yang:counter32;
- description
- "For packet-oriented interfaces, the number of packets
- received via the interface that were discarded because
- of an unknown or unsupported protocol. For
- character-oriented or fixed-length interfaces that
- support protocol multiplexing, the number of
- transmission units received via the interface that were
- discarded because of an unknown or unsupported protocol.
- For any interface that does not support protocol
- multiplexing, this counter is not present.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
- }
-
-
-
-
-
- leaf out-octets {
- type yang:counter64;
- description
- "The total number of octets transmitted out of the
- interface, including framing characters.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
- }
-
- leaf out-unicast-pkts {
- type yang:counter64;
- description
- "The total number of packets that higher-level protocols
- requested be transmitted, and that were not addressed
- to a multicast or broadcast address at this sub-layer,
- including those that were discarded or not sent.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
- }
-
- leaf out-broadcast-pkts {
- type yang:counter64;
- description
- "The total number of packets that higher-level protocols
- requested be transmitted, and that were addressed to a
- broadcast address at this sub-layer, including those
- that were discarded or not sent.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB -
- ifHCOutBroadcastPkts";
- }
-
-
- leaf out-multicast-pkts {
- type yang:counter64;
- description
- "The total number of packets that higher-level protocols
- requested be transmitted, and that were addressed to a
- multicast address at this sub-layer, including those
- that were discarded or not sent. For a MAC-layer
- protocol, this includes both Group and Functional
- addresses.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB -
- ifHCOutMulticastPkts";
- }
-
- leaf out-discards {
- type yang:counter32;
- description
- "The number of outbound packets that were chosen to be
- discarded even though no errors had been detected to
- prevent their being transmitted. One possible reason
- for discarding such a packet could be to free up buffer
- space.
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
- }
-
- leaf out-errors {
- type yang:counter32;
- description
- "For packet-oriented interfaces, the number of outbound
- packets that could not be transmitted because of errors.
- For character-oriented or fixed-length interfaces, the
- number of outbound transmission units that could not be
- transmitted because of errors.
-
-
-
-
- Discontinuities in the value of this counter can occur
- at re-initialization of the management system, and at
- other times as indicated by the value of
- 'discontinuity-time'.";
- reference
- "RFC 2863: The Interfaces Group MIB - ifOutErrors";
- }
- }
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-module ietf-netconf-notifications {
-
- namespace
- "urn:ietf:params:xml:ns:yang:ietf-netconf-notifications";
-
- prefix ncn;
-
- import ietf-inet-types { prefix inet; revision-date "2013-07-15";}
- import ietf-netconf { prefix nc; revision-date "2011-06-01";}
-
- organization
- "IETF NETCONF (Network Configuration Protocol) Working Group";
-
- contact
- "WG Web: <http://tools.ietf.org/wg/netconf/>
- WG List: <mailto:netconf@ietf.org>
-
- WG Chair: Bert Wijnen
- <mailto:bertietf@bwijnen.net>
-
- WG Chair: Mehmet Ersue
- <mailto:mehmet.ersue@nsn.com>
-
- Editor: Andy Bierman
- <mailto:andy@netconfcentral.org>";
-
- description
- "This module defines a YANG data model for use with the
- NETCONF protocol that allows the NETCONF client to
- receive common NETCONF base event notifications.
-
- Copyright (c) 2012 IETF Trust and the persons identified as
- the document authors. All rights reserved.
-
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD License
-
-
-
- set forth in Section 4.c of the IETF Trust's Legal Provisions
- Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
-
- This version of this YANG module is part of RFC 6470; see
- the RFC itself for full legal notices.";
-
- revision "2012-02-06" {
- description
- "Initial version. Errata 3957 added.";
- reference
- "RFC 6470: NETCONF Base Notifications";
- }
-
- grouping common-session-parms {
- description
- "Common session parameters to identify a
- management session.";
-
- leaf username {
- type string;
- mandatory true;
- description
- "Name of the user for the session.";
- }
-
- leaf session-id {
- type nc:session-id-or-zero-type;
- mandatory true;
- description
- "Identifier of the session.
- A NETCONF session MUST be identified by a non-zero value.
- A non-NETCONF session MAY be identified by the value zero.";
- }
-
- leaf source-host {
- type inet:ip-address;
- description
- "Address of the remote host for the session.";
- }
- }
-
-
-
-
-
-
-
-
- grouping changed-by-parms {
- description
- "Common parameters to identify the source
- of a change event, such as a configuration
- or capability change.";
-
- container changed-by {
- description
- "Indicates the source of the change.
- If caused by internal action, then the
- empty leaf 'server' will be present.
- If caused by a management session, then
- the name, remote host address, and session ID
- of the session that made the change will be reported.";
- choice server-or-user {
- mandatory true;
- leaf server {
- type empty;
- description
- "If present, the change was caused
- by the server.";
- }
-
- case by-user {
- uses common-session-parms;
- }
- } // choice server-or-user
- } // container changed-by-parms
- }
-
-
- notification netconf-config-change {
- description
- "Generated when the NETCONF server detects that the
- <running> or <startup> configuration datastore
- has been changed by a management session.
- The notification summarizes the edits that
- have been detected.
-
- The server MAY choose to also generate this
- notification while loading a datastore during the
- boot process for the device.";
-
- uses changed-by-parms;
-
-
-
-
-
- leaf datastore {
- type enumeration {
- enum running {
- description "The <running> datastore has changed.";
- }
- enum startup {
- description "The <startup> datastore has changed";
- }
- }
- default "running";
- description
- "Indicates which configuration datastore has changed.";
- }
-
- list edit {
- description
- "An edit record SHOULD be present for each distinct
- edit operation that the server has detected on
- the target datastore. This list MAY be omitted
- if the detailed edit operations are not known.
- The server MAY report entries in this list for
- changes not made by a NETCONF session (e.g., CLI).";
-
- leaf target {
- type instance-identifier;
- description
- "Topmost node associated with the configuration change.
- A server SHOULD set this object to the node within
- the datastore that is being altered. A server MAY
- set this object to one of the ancestors of the actual
- node that was changed, or omit this object, if the
- exact node is not known.";
- }
-
- leaf operation {
- type nc:edit-operation-type;
- description
- "Type of edit operation performed.
- A server MUST set this object to the NETCONF edit
- operation performed on the target datastore.";
- }
- } // list edit
- } // notification netconf-config-change
-
-
-
-
-
-
- notification netconf-capability-change {
- description
- "Generated when the NETCONF server detects that
- the server capabilities have changed.
- Indicates which capabilities have been added, deleted,
- and/or modified. The manner in which a server
- capability is changed is outside the scope of this
- document.";
-
- uses changed-by-parms;
-
- leaf-list added-capability {
- type inet:uri;
- description
- "List of capabilities that have just been added.";
- }
-
- leaf-list deleted-capability {
- type inet:uri;
- description
- "List of capabilities that have just been deleted.";
- }
-
- leaf-list modified-capability {
- type inet:uri;
- description
- "List of capabilities that have just been modified.
- A capability is considered to be modified if the
- base URI for the capability has not changed, but
- one or more of the parameters encoded at the end of
- the capability URI have changed.
- The new modified value of the complete URI is returned.";
- }
- } // notification netconf-capability-change
-
-
- notification netconf-session-start {
- description
- "Generated when a NETCONF server detects that a
- NETCONF session has started. A server MAY generate
- this event for non-NETCONF management sessions.
- Indicates the identity of the user that started
- the session.";
- uses common-session-parms;
- } // notification netconf-session-start
-
-
-
-
- notification netconf-session-end {
- description
- "Generated when a NETCONF server detects that a
- NETCONF session has terminated.
- A server MAY optionally generate this event for
- non-NETCONF management sessions. Indicates the
- identity of the user that owned the session,
- and why the session was terminated.";
-
- uses common-session-parms;
-
- leaf killed-by {
- when "../termination-reason = 'killed'";
- type nc:session-id-type;
- description
- "The ID of the session that directly caused this session
- to be abnormally terminated. If this session was abnormally
- terminated by a non-NETCONF session unknown to the server,
- then this leaf will not be present.";
- }
-
- leaf termination-reason {
- type enumeration {
- enum "closed" {
- description
- "The session was terminated by the client in normal
- fashion, e.g., by the NETCONF <close-session>
- protocol operation.";
- }
- enum "killed" {
- description
- "The session was terminated in abnormal
- fashion, e.g., by the NETCONF <kill-session>
- protocol operation.";
- }
- enum "dropped" {
- description
- "The session was terminated because the transport layer
- connection was unexpectedly closed.";
- }
- enum "timeout" {
- description
- "The session was terminated because of inactivity,
- e.g., waiting for the <hello> message or <rpc>
- messages.";
- }
-
-
-
- enum "bad-hello" {
- description
- "The client's <hello> message was invalid.";
- }
- enum "other" {
- description
- "The session was terminated for some other reason.";
- }
- }
- mandatory true;
- description
- "Reason the session was terminated.";
- }
- } // notification netconf-session-end
-
-
- notification netconf-confirmed-commit {
- description
- "Generated when a NETCONF server detects that a
- confirmed-commit event has occurred. Indicates the event
- and the current state of the confirmed-commit procedure
- in progress.";
- reference
- "RFC 6241, Section 8.4";
-
- uses common-session-parms {
- when "confirm-event != 'timeout'";
- }
-
- leaf confirm-event {
- type enumeration {
- enum "start" {
- description
- "The confirmed-commit procedure has started.";
- }
- enum "cancel" {
- description
- "The confirmed-commit procedure has been canceled,
- e.g., due to the session being terminated, or an
- explicit <cancel-commit> operation.";
- }
- enum "timeout" {
- description
- "The confirmed-commit procedure has been canceled
- due to the confirm-timeout interval expiring.
- The common session parameters will not be present
- in this sub-mode.";
- }
-
- enum "extend" {
- description
- "The confirmed-commit timeout has been extended,
- e.g., by a new <confirmed-commit> operation.";
- }
- enum "complete" {
- description
- "The confirmed-commit procedure has been completed.";
- }
- }
- mandatory true;
- description
- "Indicates the event that caused the notification.";
- }
-
- leaf timeout {
- when
- "../confirm-event = 'start' or ../confirm-event = 'extend'";
- type uint32;
- units "seconds";
- description
- "The configured timeout value if the event type
- is 'start' or 'extend'. This value represents
- the approximate number of seconds from the event
- time when the 'timeout' event might occur.";
- }
- } // notification netconf-confirmed-commit
-
-}
\ No newline at end of file
+++ /dev/null
-module ietf-network-topology {\r
- yang-version 1;\r
- namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology";\r
- prefix lnk;\r
-\r
- import ietf-inet-types {\r
- prefix inet;\r
- }\r
- import ietf-network {\r
- prefix nd;\r
- }\r
-\r
- organization "TBD";\r
- contact\r
- "WILL-BE-DEFINED-LATER";\r
- description\r
- "This module defines a common base model for network topology, \r
- augmenting the base network model with links to connect nodes, \r
- as well as termination points to terminate links on nodes.";\r
-\r
- revision 2015-06-08 {\r
- description\r
- "Initial revision.";\r
- reference "draft-ietf-i2rs-yang-network-topo-01";\r
- }\r
-\r
- typedef link-id {\r
- type inet:uri;\r
- description\r
- "An identifier for a link in a topology.\r
- The identifier may be opaque.\r
- The identifier SHOULD be chosen such that the same link in a\r
- real network topology will always be identified through the\r
- same identifier, even if the model is instantiated in \r
- separate datastores. An implementation MAY choose to capture\r
- semantics in the identifier, for example to indicate the type\r
- of link and/or the type of topology that the link is a part \r
- of.";\r
- }\r
-\r
- typedef tp-id {\r
- type inet:uri;\r
- description\r
- "An identifier for termination points on a node.\r
- The identifier may be opaque.\r
- The identifier SHOULD be chosen such that the same TP in a\r
- real network topology will always be identified through the\r
- same identifier, even if the model is instantiated in\r
- separate datastores. An implementation MAY choose to capture\r
- semantics in the identifier, for example to indicate the type\r
- of TP and/or the type of node and topology that the TP is a \r
- part of.";\r
- }\r
-\r
- grouping link-ref {\r
- description\r
- "References a link in a specific network.";\r
- leaf link-ref {\r
- type leafref {\r
- path "/nd:network[nd:network-id=current()/../"+\r
- "nd:network-ref]/link/link-id";\r
- }\r
- description\r
- "A type for an absolute reference a link instance.\r
- (This type should not be used for relative references.\r
- In such a case, a relative path should be used instead.)";\r
- }\r
- uses nd:network-ref;\r
- }\r
-\r
- grouping tp-ref {\r
- description\r
- "References a termination point in a specific node.";\r
- leaf tp-ref {\r
- type leafref {\r
- path "/nd:network[nd:network-id=current()/../"+\r
- "nd:network-ref]/nd:node[nd:node-id=current()/../"+\r
- "nd:node-ref]/termination-point/tp-id";\r
- }\r
- description\r
- "A type for an absolute reference to a termination point.\r
- (This type should not be used for relative references.\r
- In such a case, a relative path should be used instead.)";\r
- }\r
- uses nd:node-ref;\r
- }\r
-\r
- augment "/nd:network" {\r
- description \r
- "Add links to the network model.";\r
- list link {\r
- key "link-id";\r
- description\r
- "A Network Link connects a by Local (Source) node and\r
- a Remote (Destination) Network Nodes via a set of the\r
- nodes' termination points.\r
- As it is possible to have several links between the same\r
- source and destination nodes, and as a link could\r
- potentially be re-homed between termination points, to\r
- ensure that we would always know to distinguish between\r
- links, every link is identified by a dedicated link\r
- identifier.\r
- Note that a link models a point-to-point link, not a\r
- multipoint link.\r
- Layering dependencies on links in underlay topologies are\r
- not represented as the layering information of nodes and of\r
- termination points is sufficient.";\r
- container source {\r
- description\r
- "This container holds the logical source of a particular\r
- link.";\r
- leaf source-node {\r
- type leafref {\r
- path "../../../nd:node/nd:node-id";\r
- }\r
- mandatory true;\r
- description\r
- "Source node identifier, must be in same topology.";\r
- }\r
- leaf source-tp {\r
- type leafref {\r
- path "../../../nd:node[nd:node-id=current()/../"+\r
- "source-node]/termination-point/tp-id";\r
- }\r
- description\r
- "Termination point within source node that terminates\r
- the link.";\r
- }\r
- }\r
- container destination {\r
- description\r
- "This container holds the logical destination of a\r
- particular link.";\r
- leaf dest-node {\r
- type leafref {\r
- path "../../../nd:node/nd:node-id";\r
- }\r
- mandatory true;\r
- description\r
- "Destination node identifier, must be in the same\r
- network.";\r
- }\r
- leaf dest-tp {\r
- type leafref {\r
- path "../../../nd:node[nd:node-id=current()/../"+\r
- "dest-node]/termination-point/tp-id";\r
- }\r
- description\r
- "Termination point within destination node that\r
- terminates the link.";\r
- }\r
- }\r
- leaf link-id {\r
- type link-id;\r
- description\r
- "The identifier of a link in the topology.\r
- A link is specific to a topology to which it belongs.";\r
- }\r
- list supporting-link {\r
- key "network-ref link-ref";\r
- description\r
- "Identifies the link, or links, that this link\r
- is dependent on.";\r
- leaf network-ref {\r
- type leafref {\r
- path "../../../nd:supporting-network/nd:network-ref";\r
- }\r
- description\r
- "This leaf identifies in which underlay topology\r
- supporting link is present.";\r
- }\r
- leaf link-ref {\r
- type leafref {\r
- path "/nd:network[nd:network-id=current()/.."+\r
- "/network-ref]/link/link-id";\r
- }\r
- description\r
- "This leaf identifies a link which is a part\r
- of this link's underlay. Reference loops, in which\r
- a link identifies itself as its underlay, either\r
- directly or transitively, are not allowed.";\r
- }\r
- }\r
- }\r
- }\r
- augment "/nd:network/nd:node" {\r
- description\r
- "Augment termination points which terminate links. \r
- Termination points can ultimately be mapped to interfaces.";\r
- list termination-point {\r
- key "tp-id";\r
- description\r
- "A termination point can terminate a link.\r
- Depending on the type of topology, a termination point\r
- could, for example, refer to a port or an interface.";\r
- leaf tp-id {\r
- type tp-id;\r
- description\r
- "Termination point identifier.";\r
- }\r
- list supporting-termination-point {\r
- key "network-ref node-ref tp-ref";\r
- description\r
- "The leaf list identifies any termination points that\r
- the termination point is dependent on, or maps onto.\r
- Those termination points will themselves be contained\r
- in a supporting node.\r
- This dependency information can be inferred from\r
- the dependencies between links. For this reason,\r
- this item is not separately configurable. Hence no\r
- corresponding constraint needs to be articulated.\r
- The corresponding information is simply provided by the\r
- implementing system.";\r
- leaf network-ref {\r
- type leafref {\r
- path "../../../nd:supporting-node/nd:network-ref";\r
- }\r
- description\r
- "This leaf identifies in which topology the\r
- supporting termination point is present.";\r
- }\r
- leaf node-ref {\r
- type leafref {\r
- path "../../../nd:supporting-node/nd:node-ref";\r
- }\r
- description\r
- "This leaf identifies in which node the supporting\r
- termination point is present.";\r
- }\r
- leaf tp-ref {\r
- type leafref {\r
- path "/nd:network[nd:network-id=current()/../"+\r
- "network-ref]/nd:node[nd:node-id=current()/../"+\r
- "node-ref]/termination-point/tp-id";\r
- }\r
- description\r
- "Reference to the underlay node, must be in a\r
- different topology";\r
- }\r
- }\r
- }\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-module ietf-network {\r
- yang-version 1;\r
- namespace "urn:ietf:params:xml:ns:yang:ietf-network";\r
- prefix nd;\r
-\r
- import ietf-inet-types {\r
- prefix inet;\r
- }\r
-\r
- organization "TBD";\r
- contact\r
- "WILL-BE-DEFINED-LATER";\r
- description\r
- "This module defines a common base model for a collection \r
- of nodes in a network. Node definitions s are further used\r
- in network topologies and inventories.";\r
-\r
- revision 2015-06-08 {\r
- description\r
- "Initial revision.";\r
- reference "draft-ietf-i2rs-yang-network-topo-01";\r
- }\r
-\r
- typedef node-id {\r
- type inet:uri;\r
- description\r
- "Identifier for a node.";\r
- }\r
-\r
- typedef network-id {\r
- type inet:uri;\r
- description\r
- "Identifier for a network.";\r
- }\r
-\r
- grouping network-ref {\r
- description\r
- "Contains the information necessary to reference a network,\r
- for example an underlay network.";\r
- leaf network-ref {\r
- type leafref {\r
- path "/network/network-id";\r
- }\r
- description\r
- "Used to reference a network, for example an underlay\r
- network.";\r
- }\r
- }\r
-\r
- grouping node-ref {\r
- description \r
- "Contains the information necessary to reference a node.";\r
- leaf node-ref {\r
- type leafref {\r
- path "/network[network-id=current()/../network-ref]"+\r
- "/node/node-id";\r
- }\r
- description\r
- "Used to reference a node. \r
- Nodes are identified relative to the network they are\r
- contained in.";\r
- }\r
- uses network-ref;\r
- }\r
-\r
- list network {\r
- key "network-id";\r
- description\r
- "Describes a network.\r
- A network typically contains an inventory of nodes,\r
- topological information (augmented through \r
- network-topology model), as well as layering \r
- information.";\r
- container network-types {\r
- description\r
- "Serves as an augmentation target. \r
- The network type is indicated through corresponding\r
- presence containers augmented into this container.";\r
- }\r
- leaf network-id {\r
- type network-id;\r
- description\r
- "Identifies a network.";\r
- }\r
- leaf server-provided {\r
- type boolean;\r
- config false;\r
- description\r
- "Indicates whether the information concerning this\r
- particular network is populated by the server \r
- (server-provided true, the general case for network \r
- information discovered from the server), \r
- or whether it is configured by a client \r
- (server-provided true, possible e.g. for \r
- service overlays managed through a controller).";\r
- }\r
- list supporting-network {\r
- key "network-ref";\r
- description\r
- "An underlay network, used to represent layered network\r
- topologies.";\r
- leaf network-ref {\r
- type leafref {\r
- path "/network/network-id";\r
- }\r
- description\r
- "References the underlay network.";\r
- }\r
- }\r
- list node {\r
- key "node-id";\r
- description\r
- "The inventory of nodes of this network.";\r
- leaf node-id {\r
- type node-id;\r
- description\r
- "Identifies a node uniquely within the containing \r
- network.";\r
- }\r
- list supporting-node {\r
- key "network-ref node-ref";\r
- description\r
- "Represents another node, in an underlay network, that \r
- this node is supported by. Used to represent layering \r
- structure.";\r
- leaf network-ref {\r
- type leafref {\r
- path "../../../supporting-network/network-ref";\r
- }\r
- description\r
- "References the underlay network that the \r
- underlay node is part of.";\r
- }\r
- leaf node-ref {\r
- type leafref {\r
- path "/network/node/node-id";\r
- }\r
- description\r
- "References the underlay node itself.";\r
- }\r
- }\r
- }\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-module ietf-packet-fields {
- yang-version 1.1;
- namespace "urn:ietf:params:xml:ns:yang:ietf-packet-fields";
- prefix packet-fields;
- import ietf-inet-types {
- prefix inet; revision-date 2013-07-15;
- }
- import ietf-yang-types {
- prefix yang; revision-date 2013-07-15;
- }
- import ietf-interfaces {
- prefix if; revision-date 2014-05-08;
- }
- organization "IETF NETMOD (NETCONF Data Modeling Language) Working
- Group";
- contact
- "WG Web: http://tools.ietf.org/wg/netmod/
- WG List: netmod@ietf.org
- WG Chair: Juergen Schoenwaelder
- j.schoenwaelder@jacobs-university.de
- WG Chair: Tom Nadeau
- tnadeau@lucidvision.com
- Editor: Dean Bogdanovic
- deanb@juniper.net
- Editor: Kiran Agrahara Sreenivasa
- kkoushik@cisco.com
- Editor: Lisa Huang
- lyihuang@juniper.net
- Editor: Dana Blair
- dblair@cisco.com";
- description
- "This YANG module defines groupings that are used by
- ietf-access-control-list YANG module. Their usage is not
- limited to ietf-access-control-list and can be
- used anywhere as applicable.
- Copyright (c) 2016 IETF Trust and the persons identified as
- the document authors. All rights reserved.
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD
- License set forth in Section 4.c of the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
- This version of this YANG module is part of RFC XXXX; see
- the RFC itself for full legal notices.";
- revision 2016-02-18 {
- description
- "Initial version of packet fields used by
- ietf-access-control-list";
- reference
- "RFC XXXX: Network Access Control List (ACL)
- YANG Data Model";
- }
- grouping acl-transport-header-fields {
- description
- "Transport header fields";
- container source-port-range {
- presence "Enables setting source port range";
- description
- "Inclusive range representing source ports to be used.
- When only lower-port is present, it represents a single port.";
- leaf lower-port {
- type inet:port-number;
- mandatory true;
- description
- "Lower boundary for port.";
- }
- leaf upper-port {
- type inet:port-number;
- must ". >= ../lower-port" {
- error-message
- "The upper-port must be greater than or equal to lower-port";
- }
- description
- "Upper boundary for port . If existing, the upper port
- must be greater or equal to lower-port.";
- }
- }
- container destination-port-range {
- presence "Enables setting destination port range";
- description
- "Inclusive range representing destination ports to be used. When
- only lower-port is present, it represents a single port.";
- leaf lower-port {
- type inet:port-number;
- mandatory true;
- description
- "Lower boundary for port.";
- }
- leaf upper-port {
- type inet:port-number;
- must ". >= ../lower-port" {
- error-message
- "The upper-port must be greater than or equal to lower-port";
- }
-
- description
- "Upper boundary for port. If existing, the upper port must
- be greater or equal to lower-port";
- }
- }
- }
- grouping acl-ip-header-fields {
- description
- "IP header fields common to ipv4 and ipv6";
- leaf dscp {
- type inet:dscp;
- description
- "Value of dscp.";
- }
- leaf protocol {
- type uint8;
- description
- "Internet Protocol number.";
- }
- uses acl-transport-header-fields;
- }
- grouping acl-ipv4-header-fields {
- description
- "Fields in IPv4 header.";
- leaf destination-ipv4-network {
- type inet:ipv4-prefix;
- description
- "Destination IPv4 address prefix.";
- }
- leaf source-ipv4-network {
- type inet:ipv4-prefix;
- description
- "Source IPv4 address prefix.";
- }
- }
- grouping acl-ipv6-header-fields {
- description
- "Fields in IPv6 header";
- leaf destination-ipv6-network {
- type inet:ipv6-prefix;
- description
- "Destination IPv6 address prefix.";
- }
- leaf source-ipv6-network {
- type inet:ipv6-prefix;
- description
- "Source IPv6 address prefix.";
- }
- leaf flow-label {
- type inet:ipv6-flow-label;
- description
- "IPv6 Flow label.";
- }
- reference
- "RFC 4291: IP Version 6 Addressing Architecture
- RFC 4007: IPv6 Scoped Address Architecture
- RFC 5952: A Recommendation for IPv6 Address Text Representation";
- }
- grouping acl-eth-header-fields {
- description
- "Fields in Ethernet header.";
- leaf destination-mac-address {
- type yang:mac-address;
- description
- "Destination IEEE 802 MAC address.";
- }
- leaf destination-mac-address-mask {
- type yang:mac-address;
- description
- "Destination IEEE 802 MAC address mask.";
- }
- leaf source-mac-address {
- type yang:mac-address;
- description
- "Source IEEE 802 MAC address.";
- }
- leaf source-mac-address-mask {
- type yang:mac-address;
- description
- "Source IEEE 802 MAC address mask.";
- }
- reference
- "IEEE 802: IEEE Standard for Local and Metropolitan Area
- Networks: Overview and Architecture.";
- }
-
- grouping metadata {
- description
- "Fields associated with a packet whick are not in
- the header.";
- leaf input-interface {
- type if:interface-ref {
- require-instance false;
- }
- description
- "Packet was received on this interface.";
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-module ietf-restconf-monitoring {
- namespace "urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring";
- prefix "rcmon";
-
- import ietf-yang-types { prefix yang; }
- import ietf-inet-types { prefix inet; }
-
- organization
- "IETF NETCONF (Network Configuration) Working Group";
-
- contact
- "WG Web: <http://tools.ietf.org/wg/netconf/>
- WG List: <mailto:netconf@ietf.org>
- Author: Andy Bierman
- <mailto:andy@yumaworks.com>
- Author: Martin Bjorklund
- <mailto:mbj@tail-f.com>
- Author: Kent Watsen
- <mailto:kwatsen@juniper.net>";
-
- description
- "This module contains monitoring information for the
- RESTCONF protocol.
- Copyright (c) 2016 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD License
- set forth in Section 4.c of the IETF Trust's Legal Provisions
- Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
- This version of this YANG module is part of RFC XXXX; see
- the RFC itself for full legal notices.";
-
- // RFC Ed.: replace XXXX with actual RFC number and remove this
- // note.
-
- // RFC Ed.: remove this note
- // Note: extracted from draft-ietf-netconf-restconf-17.txt
-
- // RFC Ed.: update the date below with the date of RFC publication
- // and remove this note.
- revision 2016-08-15 {
- description
- "Initial revision.";
- reference
- "RFC XXXX: RESTCONF Protocol.";
- }
-
- container restconf-state {
- config false;
- description
- "Contains RESTCONF protocol monitoring information.";
-
- container capabilities {
- description
- "Contains a list of protocol capability URIs";
-
- leaf-list capability {
- type inet:uri;
- description "A RESTCONF protocol capability URI.";
- }
- }
-
- container streams {
- description
- "Container representing the notification event streams
- supported by the server.";
- reference
- "RFC 5277, Section 3.4, <streams> element.";
-
- list stream {
- key name;
- description
- "Each entry describes an event stream supported by
- the server.";
-
- leaf name {
- type string;
- description "The stream name";
- reference "RFC 5277, Section 3.4, <name> element.";
- }
-
- leaf description {
- type string;
- description "Description of stream content";
- reference
- "RFC 5277, Section 3.4, <description> element.";
- }
-
- leaf replay-support {
- type boolean;
- default false;
- description
- "Indicates if replay buffer supported for this stream.
- If 'true', then the server MUST support the 'start-time'
- and 'stop-time' query parameters for this stream.";
- reference
- "RFC 5277, Section 3.4, <replaySupport> element.";
- }
-
- leaf replay-log-creation-time {
- when "../replay-support" {
- description
- "Only present if notification replay is supported";
- }
- type yang:date-and-time;
- description
- "Indicates the time the replay log for this stream
- was created.";
- reference
- "RFC 5277, Section 3.4, <replayLogCreationTime>
- element.";
- }
-
- list access {
- key encoding;
- min-elements 1;
- description
- "The server will create an entry in this list for each
- encoding format that is supported for this stream.
- The media type 'text/event-stream' is expected
- for all event streams. This list identifies the
- sub-types supported for this stream.";
-
- leaf encoding {
- type string;
- description
- "This is the secondary encoding format within the
- 'text/event-stream' encoding used by all streams.
- The type 'xml' is supported for XML encoding.
- The type 'json' is supported for JSON encoding.";
- }
-
- leaf location {
- type inet:uri;
- mandatory true;
- description
- "Contains a URL that represents the entry point
- for establishing notification delivery via server
- sent events.";
- }
- }
- }
- }
- }
-
-}
\ No newline at end of file
+++ /dev/null
-module ietf-restconf {
- yang-version 1.1;
- namespace "urn:ietf:params:xml:ns:yang:ietf-restconf";
- prefix "rc";
-
- organization
- "IETF NETCONF (Network Configuration) Working Group";
-
- contact
- "WG Web: <http://tools.ietf.org/wg/netconf/>
- WG List: <mailto:netconf@ietf.org>
- Author: Andy Bierman
- <mailto:andy@yumaworks.com>
- Author: Martin Bjorklund
- <mailto:mbj@tail-f.com>
- Author: Kent Watsen
- <mailto:kwatsen@juniper.net>";
-
- description
- "This module contains conceptual YANG specifications
- for basic RESTCONF media type definitions used in
- RESTCONF protocol messages.
- Note that the YANG definitions within this module do not
- represent configuration data of any kind.
- The 'restconf-media-type' YANG extension statement
- provides a normative syntax for XML and JSON message
- encoding purposes.
- Copyright (c) 2016 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD License
- set forth in Section 4.c of the IETF Trust's Legal Provisions
- Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
- This version of this YANG module is part of RFC XXXX; see
- the RFC itself for full legal notices.";
-
- // RFC Ed.: replace XXXX with actual RFC number and remove this
- // note.
-
- // RFC Ed.: remove this note
- // Note: extracted from draft-ietf-netconf-restconf-17.txt
-
- // RFC Ed.: update the date below with the date of RFC publication
- // and remove this note.
- revision 2016-08-15 {
- description
- "Initial revision.";
- reference
- "RFC XXXX: RESTCONF Protocol.";
- }
-
- extension yang-data {
- argument name {
- yin-element true;
- }
- description
- "This extension is used to specify a YANG data template which
- represents conceptual data defined in YANG. It is
- intended to describe hierarchical data independent of
- protocol context or specific message encoding format.
- Data definition statements within a yang-data extension
- specify the generic syntax for the specific YANG data
- template, whose name is the argument of the yang-data
- extension statement.
- Note that this extension does not define a media-type.
- A specification using this extension MUST specify the
- message encoding rules, including the content media type.
- The mandatory 'name' parameter value identifies the YANG
- data template that is being defined. It contains the
- template name.
- This extension is ignored unless it appears as a top-level
- statement. It MUST contain data definition statements
- that result in exactly one container data node definition.
- An instance of a YANG data template can thus be translated
- into an XML instance document, whose top-level element
- corresponds to the top-level container.
- The module name and namespace value for the YANG module using
- the extension statement is assigned to instance document data
- conforming to the data definition statements within
- this extension.
- The sub-statements of this extension MUST follow the
- 'data-def-stmt' rule in the YANG ABNF.
- The XPath document root is the extension statement itself,
- such that the child nodes of the document root are
- represented by the data-def-stmt sub-statements within
- this extension. This conceptual document is the context
- for the following YANG statements:
- - must-stmt
- - when-stmt
- - path-stmt
- - min-elements-stmt
- - max-elements-stmt
- - mandatory-stmt
- - unique-stmt
- - ordered-by
- - instance-identifier data type
- The following data-def-stmt sub-statements are constrained
- when used within a yang-data-resource extension statement.
- - The list-stmt is not required to have a key-stmt defined.
- - The if-feature-stmt is ignored if present.
- - The config-stmt is ignored if present.
- - The available identity values for any 'identityref'
- leaf or leaf-list nodes is limited to the module
- containing this extension statement, and the modules
- imported into that module.
- ";
- }
-
- rc:yang-data yang-errors {
- uses errors;
- }
-
- rc:yang-data yang-api {
- uses restconf;
- }
-
- grouping errors {
- description
- "A grouping that contains a YANG container
- representing the syntax and semantics of a
- YANG Patch errors report within a response message.";
-
- container errors {
- description
- "Represents an error report returned by the server if
- a request results in an error.";
-
- list error {
- description
- "An entry containing information about one
- specific error that occurred while processing
- a RESTCONF request.";
- reference "RFC 6241, Section 4.3";
-
- leaf error-type {
- type enumeration {
- enum transport {
- description "The transport layer";
- }
- enum rpc {
- description "The rpc or notification layer";
- }
- enum protocol {
- description "The protocol operation layer";
- }
- enum application {
- description "The server application layer";
- }
- }
- mandatory true;
- description
- "The protocol layer where the error occurred.";
- }
-
- leaf error-tag {
- type string;
- mandatory true;
- description
- "The enumerated error tag.";
- }
-
- leaf error-app-tag {
- type string;
- description
- "The application-specific error tag.";
- }
-
- leaf error-path {
- type instance-identifier;
- description
- "The YANG instance identifier associated
- with the error node.";
- }
-
- leaf error-message {
- type string;
- description
- "A message describing the error.";
- }
-
- anydata error-info {
- description
- "This anydata value MUST represent a container with
- zero or more data nodes representing additional
- error information.";
- }
- }
- }
- }
-
- grouping restconf {
- description
- "Conceptual grouping representing the RESTCONF
- root resource.";
-
- container restconf {
- description
- "Conceptual container representing the RESTCONF
- root resource.";
-
- container data {
- description
- "Container representing the datastore resource.
- Represents the conceptual root of all state data
- and configuration data supported by the server.
- The child nodes of this container can be any data
- resource which are defined as top-level data nodes
- from the YANG modules advertised by the server in
- the ietf-yang-library module.";
- }
-
- container operations {
- description
- "Container for all operation resources.
- Each resource is represented as an empty leaf with the
- name of the RPC operation from the YANG rpc statement.
- For example, the 'system-restart' RPC operation defined
- in the 'ietf-system' module would be represented as
- an empty leaf in the 'ietf-system' namespace. This is
- a conceptual leaf, and will not actually be found in
- the module:
- module ietf-system {
- leaf system-reset {
- type empty;
- }
- }
- To invoke the 'system-restart' RPC operation:
- POST /restconf/operations/ietf-system:system-restart
- To discover the RPC operations supported by the server:
- GET /restconf/operations
- In XML the YANG module namespace identifies the module:
- <system-restart
- xmlns='urn:ietf:params:xml:ns:yang:ietf-system' />
- In JSON the YANG module name identifies the module:
- { 'ietf-system:system-restart' : [null] }
- ";
- }
-
- leaf yang-library-version {
- type string {
- pattern '\d{4}-\d{2}-\d{2}';
- }
- config false;
- mandatory true;
- description
- "Identifies the revision date of the ietf-yang-library
- module that is implemented by this RESTCONF server.
- Indicates the year, month, and day in YYYY-MM-DD
- numeric format.";
- }
- }
- }
-
-}
\ No newline at end of file
+++ /dev/null
-module ietf-yang-types {
-
- namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
- prefix "yang";
-
- organization
- "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
- contact
- "WG Web: <http://tools.ietf.org/wg/netmod/>
- WG List: <mailto:netmod@ietf.org>
-
- WG Chair: David Partain
- <mailto:david.partain@ericsson.com>
-
- WG Chair: David Kessens
- <mailto:david.kessens@nsn.com>
-
- Editor: Juergen Schoenwaelder
- <mailto:j.schoenwaelder@jacobs-university.de>";
-
- description
- "This module contains a collection of generally useful derived
- YANG data types.
-
- Copyright (c) 2010 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, is permitted pursuant to, and subject to the license
- terms contained in, the Simplified BSD License set forth in Section
- 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
-
- This version of this YANG module is part of RFC 6021; see
- the RFC itself for full legal notices.";
-
- revision 2010-09-24 {
- description
- "Initial revision.";
- reference
- "RFC 6021: Common YANG Data Types";
- }
-
- /*** collection of counter and gauge types ***/
-
- typedef counter32 {
- type uint32;
- description
- "The counter32 type represents a non-negative integer
- that monotonically increases until it reaches a
- maximum value of 2^32-1 (4294967295 decimal), when it
- wraps around and starts increasing again from zero.
-
- Counters have no defined 'initial' value, and thus, a
- single value of a counter has (in general) no information
- content. Discontinuities in the monotonically increasing
- value normally occur at re-initialization of the
- management system, and at other times as specified in the
- description of a schema node using this type. If such
- other times can occur, for example, the creation of
- a schema node of type counter32 at times other than
- re-initialization, then a corresponding schema node
- should be defined, with an appropriate type, to indicate
- the last discontinuity.
-
- The counter32 type should not be used for configuration
- schema nodes. A default statement SHOULD NOT be used in
- combination with the type counter32.
-
- In the value set and its semantics, this type is equivalent
- to the Counter32 type of the SMIv2.";
- reference
- "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
- }
-
- typedef zero-based-counter32 {
- type yang:counter32;
- default "0";
- description
- "The zero-based-counter32 type represents a counter32
- that has the defined 'initial' value zero.
-
- A schema node of this type will be set to zero (0) on creation
- and will thereafter increase monotonically until it reaches
- a maximum value of 2^32-1 (4294967295 decimal), when it
- wraps around and starts increasing again from zero.
-
- Provided that an application discovers a new schema node
- of this type within the minimum time to wrap, it can use the
- 'initial' value as a delta. It is important for a management
- station to be aware of this minimum time and the actual time
- between polls, and to discard data if the actual time is too
- long or there is no defined minimum time.
-
- In the value set and its semantics, this type is equivalent
- to the ZeroBasedCounter32 textual convention of the SMIv2.";
- reference
- "RFC 4502: Remote Network Monitoring Management Information
- Base Version 2";
- }
-
- typedef counter64 {
- type uint64;
- description
- "The counter64 type represents a non-negative integer
- that monotonically increases until it reaches a
- maximum value of 2^64-1 (18446744073709551615 decimal),
- when it wraps around and starts increasing again from zero.
-
- Counters have no defined 'initial' value, and thus, a
- single value of a counter has (in general) no information
- content. Discontinuities in the monotonically increasing
- value normally occur at re-initialization of the
- management system, and at other times as specified in the
- description of a schema node using this type. If such
- other times can occur, for example, the creation of
- a schema node of type counter64 at times other than
- re-initialization, then a corresponding schema node
- should be defined, with an appropriate type, to indicate
- the last discontinuity.
-
- The counter64 type should not be used for configuration
- schema nodes. A default statement SHOULD NOT be used in
- combination with the type counter64.
-
- In the value set and its semantics, this type is equivalent
- to the Counter64 type of the SMIv2.";
- reference
- "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
- }
-
- typedef zero-based-counter64 {
- type yang:counter64;
- default "0";
- description
- "The zero-based-counter64 type represents a counter64 that
- has the defined 'initial' value zero.
-
- A schema node of this type will be set to zero (0) on creation
- and will thereafter increase monotonically until it reaches
- a maximum value of 2^64-1 (18446744073709551615 decimal),
- when it wraps around and starts increasing again from zero.
-
- Provided that an application discovers a new schema node
- of this type within the minimum time to wrap, it can use the
- 'initial' value as a delta. It is important for a management
- station to be aware of this minimum time and the actual time
- between polls, and to discard data if the actual time is too
- long or there is no defined minimum time.
-
- In the value set and its semantics, this type is equivalent
- to the ZeroBasedCounter64 textual convention of the SMIv2.";
- reference
- "RFC 2856: Textual Conventions for Additional High Capacity
- Data Types";
- }
-
- typedef gauge32 {
- type uint32;
- description
- "The gauge32 type represents a non-negative integer, which
- may increase or decrease, but shall never exceed a maximum
- value, nor fall below a minimum value. The maximum value
- cannot be greater than 2^32-1 (4294967295 decimal), and
- the minimum value cannot be smaller than 0. The value of
- a gauge32 has its maximum value whenever the information
- being modeled is greater than or equal to its maximum
- value, and has its minimum value whenever the information
- being modeled is smaller than or equal to its minimum value.
- If the information being modeled subsequently decreases
- below (increases above) the maximum (minimum) value, the
- gauge32 also decreases (increases).
-
- In the value set and its semantics, this type is equivalent
- to the Gauge32 type of the SMIv2.";
- reference
- "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
- }
-
- typedef gauge64 {
- type uint64;
- description
- "The gauge64 type represents a non-negative integer, which
- may increase or decrease, but shall never exceed a maximum
- value, nor fall below a minimum value. The maximum value
- cannot be greater than 2^64-1 (18446744073709551615), and
- the minimum value cannot be smaller than 0. The value of
- a gauge64 has its maximum value whenever the information
- being modeled is greater than or equal to its maximum
- value, and has its minimum value whenever the information
- being modeled is smaller than or equal to its minimum value.
- If the information being modeled subsequently decreases
- below (increases above) the maximum (minimum) value, the
- gauge64 also decreases (increases).
-
- In the value set and its semantics, this type is equivalent
- to the CounterBasedGauge64 SMIv2 textual convention defined
- in RFC 2856";
- reference
- "RFC 2856: Textual Conventions for Additional High Capacity
- Data Types";
- }
-
- /*** collection of identifier related types ***/
-
- typedef object-identifier {
- type string {
- pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
- + '(\.(0|([1-9]\d*)))*';
- }
- description
- "The object-identifier type represents administratively
- assigned names in a registration-hierarchical-name tree.
-
- Values of this type are denoted as a sequence of numerical
- non-negative sub-identifier values. Each sub-identifier
- value MUST NOT exceed 2^32-1 (4294967295). Sub-identifiers
- are separated by single dots and without any intermediate
- whitespace.
-
- The ASN.1 standard restricts the value space of the first
- sub-identifier to 0, 1, or 2. Furthermore, the value space
- of the second sub-identifier is restricted to the range
- 0 to 39 if the first sub-identifier is 0 or 1. Finally,
- the ASN.1 standard requires that an object identifier
- has always at least two sub-identifier. The pattern
- captures these restrictions.
-
- Although the number of sub-identifiers is not limited,
- module designers should realize that there may be
- implementations that stick with the SMIv2 limit of 128
- sub-identifiers.
-
- This type is a superset of the SMIv2 OBJECT IDENTIFIER type
- since it is not restricted to 128 sub-identifiers. Hence,
- this type SHOULD NOT be used to represent the SMIv2 OBJECT
- IDENTIFIER type, the object-identifier-128 type SHOULD be
- used instead.";
- reference
- "ISO9834-1: Information technology -- Open Systems
- Interconnection -- Procedures for the operation of OSI
- Registration Authorities: General procedures and top
- arcs of the ASN.1 Object Identifier tree";
- }
-
-
-
-
- typedef object-identifier-128 {
- type object-identifier {
- pattern '\d*(\.\d*){1,127}';
- }
- description
- "This type represents object-identifiers restricted to 128
- sub-identifiers.
-
- In the value set and its semantics, this type is equivalent
- to the OBJECT IDENTIFIER type of the SMIv2.";
- reference
- "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
- }
-
- /*** collection of date and time related types ***/
-
- typedef date-and-time {
- type string {
- pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
- + '(Z|[\+\-]\d{2}:\d{2})';
- }
- description
- "The date-and-time type is a profile of the ISO 8601
- standard for representation of dates and times using the
- Gregorian calendar. The profile is defined by the
- date-time production in Section 5.6 of RFC 3339.
-
- The date-and-time type is compatible with the dateTime XML
- schema type with the following notable exceptions:
-
- (a) The date-and-time type does not allow negative years.
-
- (b) The date-and-time time-offset -00:00 indicates an unknown
- time zone (see RFC 3339) while -00:00 and +00:00 and Z all
- represent the same time zone in dateTime.
-
- (c) The canonical format (see below) of data-and-time values
- differs from the canonical format used by the dateTime XML
- schema type, which requires all times to be in UTC using the
- time-offset 'Z'.
-
- This type is not equivalent to the DateAndTime textual
- convention of the SMIv2 since RFC 3339 uses a different
- separator between full-date and full-time and provides
- higher resolution of time-secfrac.
-
- The canonical format for date-and-time values with a known time
- zone uses a numeric time zone offset that is calculated using
- the device's configured known offset to UTC time. A change of
- the device's offset to UTC time will cause date-and-time values
- to change accordingly. Such changes might happen periodically
- in case a server follows automatically daylight saving time
- (DST) time zone offset changes. The canonical format for
- date-and-time values with an unknown time zone (usually referring
- to the notion of local time) uses the time-offset -00:00.";
- reference
- "RFC 3339: Date and Time on the Internet: Timestamps
- RFC 2579: Textual Conventions for SMIv2
- XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
- }
-
- typedef timeticks {
- type uint32;
- description
- "The timeticks type represents a non-negative integer that
- represents the time, modulo 2^32 (4294967296 decimal), in
- hundredths of a second between two epochs. When a schema
- node is defined that uses this type, the description of
- the schema node identifies both of the reference epochs.
-
- In the value set and its semantics, this type is equivalent
- to the TimeTicks type of the SMIv2.";
- reference
- "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
- }
-
- typedef timestamp {
- type yang:timeticks;
- description
- "The timestamp type represents the value of an associated
- timeticks schema node at which a specific occurrence happened.
- The specific occurrence must be defined in the description
- of any schema node defined using this type. When the specific
- occurrence occurred prior to the last time the associated
- timeticks attribute was zero, then the timestamp value is
- zero. Note that this requires all timestamp values to be
- reset to zero when the value of the associated timeticks
- attribute reaches 497+ days and wraps around to zero.
-
- The associated timeticks schema node must be specified
- in the description of any schema node using this type.
-
- In the value set and its semantics, this type is equivalent
- to the TimeStamp textual convention of the SMIv2.";
- reference
- "RFC 2579: Textual Conventions for SMIv2";
- }
-
- /*** collection of generic address types ***/
-
- typedef phys-address {
- type string {
- pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
- }
- description
- "Represents media- or physical-level addresses represented
- as a sequence octets, each octet represented by two hexadecimal
- numbers. Octets are separated by colons. The canonical
- representation uses lowercase characters.
-
- In the value set and its semantics, this type is equivalent
- to the PhysAddress textual convention of the SMIv2.";
- reference
- "RFC 2579: Textual Conventions for SMIv2";
- }
-
- typedef mac-address {
- type string {
- pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
- }
- description
- "The mac-address type represents an IEEE 802 MAC address.
- The canonical representation uses lowercase characters.
-
- In the value set and its semantics, this type is equivalent
- to the MacAddress textual convention of the SMIv2.";
- reference
- "IEEE 802: IEEE Standard for Local and Metropolitan Area
- Networks: Overview and Architecture
- RFC 2579: Textual Conventions for SMIv2";
- }
-
- /*** collection of XML specific types ***/
-
- typedef xpath1.0 {
- type string;
- description
- "This type represents an XPATH 1.0 expression.
-
- When a schema node is defined that uses this type, the
- description of the schema node MUST specify the XPath
- context in which the XPath expression is evaluated.";
- reference
- "XPATH: XML Path Language (XPath) Version 1.0";
- }
-
- }
\ No newline at end of file
+++ /dev/null
-module ietf-yang-types {
-
- namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
- prefix "yang";
-
- organization
- "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
- contact
- "WG Web: <http://tools.ietf.org/wg/netmod/>
- WG List: <mailto:netmod@ietf.org>
- WG Chair: David Kessens
- <mailto:david.kessens@nsn.com>
-
- WG Chair: Juergen Schoenwaelder
- <mailto:j.schoenwaelder@jacobs-university.de>
-
- Editor: Juergen Schoenwaelder
- <mailto:j.schoenwaelder@jacobs-university.de>";
-
- description
- "This module contains a collection of generally useful derived
- YANG data types.
-
- Copyright (c) 2013 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
-
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD License
- set forth in Section 4.c of the IETF Trust's Legal Provisions
- Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
-
- This version of this YANG module is part of RFC 6991; see
- the RFC itself for full legal notices.";
-
- revision 2013-07-15 {
- description
- "This revision adds the following new data types:
- - yang-identifier
- - hex-string
- - uuid
- - dotted-quad";
- reference
- "RFC 6991: Common YANG Data Types";
- }
-
- revision 2010-09-24 {
- description
- "Initial revision.";
- reference
- "RFC 6021: Common YANG Data Types";
- }
-
- /*** collection of counter and gauge types ***/
-
- typedef counter32 {
- type uint32;
- description
- "The counter32 type represents a non-negative integer
- that monotonically increases until it reaches a
- maximum value of 2^32-1 (4294967295 decimal), when it
- wraps around and starts increasing again from zero.
-
- Counters have no defined 'initial' value, and thus, a
- single value of a counter has (in general) no information
- content. Discontinuities in the monotonically increasing
- value normally occur at re-initialization of the
- management system, and at other times as specified in the
- description of a schema node using this type. If such
- other times can occur, for example, the creation of
- a schema node of type counter32 at times other than
- re-initialization, then a corresponding schema node
- should be defined, with an appropriate type, to indicate
- the last discontinuity.
-
- The counter32 type should not be used for configuration
- schema nodes. A default statement SHOULD NOT be used in
- combination with the type counter32.
-
- In the value set and its semantics, this type is equivalent
- to the Counter32 type of the SMIv2.";
- reference
- "RFC 2578: Structure of Management Information Version 2
- (SMIv2)";
- }
-
- typedef zero-based-counter32 {
- type yang:counter32;
- default "0";
- description
- "The zero-based-counter32 type represents a counter32
- that has the defined 'initial' value zero.
-
- A schema node of this type will be set to zero (0) on creation
- and will thereafter increase monotonically until it reaches
- a maximum value of 2^32-1 (4294967295 decimal), when it
- wraps around and starts increasing again from zero.
-
- Provided that an application discovers a new schema node
- of this type within the minimum time to wrap, it can use the
- 'initial' value as a delta. It is important for a management
- station to be aware of this minimum time and the actual time
- between polls, and to discard data if the actual time is too
- long or there is no defined minimum time.
- In the value set and its semantics, this type is equivalent
- to the ZeroBasedCounter32 textual convention of the SMIv2.";
- reference
- "RFC 4502: Remote Network Monitoring Management Information
- Base Version 2";
- }
-
- typedef counter64 {
- type uint64;
- description
- "The counter64 type represents a non-negative integer
- that monotonically increases until it reaches a
- maximum value of 2^64-1 (18446744073709551615 decimal),
- when it wraps around and starts increasing again from zero.
-
- Counters have no defined 'initial' value, and thus, a
- single value of a counter has (in general) no information
- content. Discontinuities in the monotonically increasing
- value normally occur at re-initialization of the
- management system, and at other times as specified in the
- description of a schema node using this type. If such
- other times can occur, for example, the creation of
- a schema node of type counter64 at times other than
- re-initialization, then a corresponding schema node
- should be defined, with an appropriate type, to indicate
- the last discontinuity.
-
- The counter64 type should not be used for configuration
- schema nodes. A default statement SHOULD NOT be used in
- combination with the type counter64.
-
- In the value set and its semantics, this type is equivalent
- to the Counter64 type of the SMIv2.";
- reference
- "RFC 2578: Structure of Management Information Version 2
- (SMIv2)";
- }
-
- typedef zero-based-counter64 {
- type yang:counter64;
- default "0";
- description
- "The zero-based-counter64 type represents a counter64 that
- has the defined 'initial' value zero.
- A schema node of this type will be set to zero (0) on creation
- and will thereafter increase monotonically until it reaches
- a maximum value of 2^64-1 (18446744073709551615 decimal),
- when it wraps around and starts increasing again from zero.
-
- Provided that an application discovers a new schema node
- of this type within the minimum time to wrap, it can use the
- 'initial' value as a delta. It is important for a management
- station to be aware of this minimum time and the actual time
- between polls, and to discard data if the actual time is too
- long or there is no defined minimum time.
-
- In the value set and its semantics, this type is equivalent
- to the ZeroBasedCounter64 textual convention of the SMIv2.";
- reference
- "RFC 2856: Textual Conventions for Additional High Capacity
- Data Types";
- }
-
- typedef gauge32 {
- type uint32;
- description
- "The gauge32 type represents a non-negative integer, which
- may increase or decrease, but shall never exceed a maximum
- value, nor fall below a minimum value. The maximum value
- cannot be greater than 2^32-1 (4294967295 decimal), and
- the minimum value cannot be smaller than 0. The value of
- a gauge32 has its maximum value whenever the information
- being modeled is greater than or equal to its maximum
- value, and has its minimum value whenever the information
- being modeled is smaller than or equal to its minimum value.
- If the information being modeled subsequently decreases
- below (increases above) the maximum (minimum) value, the
- gauge32 also decreases (increases).
-
- In the value set and its semantics, this type is equivalent
- to the Gauge32 type of the SMIv2.";
- reference
- "RFC 2578: Structure of Management Information Version 2
- (SMIv2)";
- }
-
- typedef gauge64 {
- type uint64;
- description
- "The gauge64 type represents a non-negative integer, which
- may increase or decrease, but shall never exceed a maximum
- value, nor fall below a minimum value. The maximum value
- cannot be greater than 2^64-1 (18446744073709551615), and
- the minimum value cannot be smaller than 0. The value of
- a gauge64 has its maximum value whenever the information
- being modeled is greater than or equal to its maximum
- value, and has its minimum value whenever the information
- being modeled is smaller than or equal to its minimum value.
- If the information being modeled subsequently decreases
- below (increases above) the maximum (minimum) value, the
- gauge64 also decreases (increases).
-
- In the value set and its semantics, this type is equivalent
- to the CounterBasedGauge64 SMIv2 textual convention defined
- in RFC 2856";
- reference
- "RFC 2856: Textual Conventions for Additional High Capacity
- Data Types";
- }
-
- /*** collection of identifier-related types ***/
-
- typedef object-identifier {
- type string {
- pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
- + '(\.(0|([1-9]\d*)))*';
- }
- description
- "The object-identifier type represents administratively
- assigned names in a registration-hierarchical-name tree.
-
- Values of this type are denoted as a sequence of numerical
- non-negative sub-identifier values. Each sub-identifier
- value MUST NOT exceed 2^32-1 (4294967295). Sub-identifiers
- are separated by single dots and without any intermediate
- whitespace.
-
- The ASN.1 standard restricts the value space of the first
- sub-identifier to 0, 1, or 2. Furthermore, the value space
- of the second sub-identifier is restricted to the range
- 0 to 39 if the first sub-identifier is 0 or 1. Finally,
- the ASN.1 standard requires that an object identifier
- has always at least two sub-identifiers. The pattern
- captures these restrictions.
-
- Although the number of sub-identifiers is not limited,
- module designers should realize that there may be
- implementations that stick with the SMIv2 limit of 128
- sub-identifiers.
- This type is a superset of the SMIv2 OBJECT IDENTIFIER type
- since it is not restricted to 128 sub-identifiers. Hence,
- this type SHOULD NOT be used to represent the SMIv2 OBJECT
- IDENTIFIER type; the object-identifier-128 type SHOULD be
- used instead.";
- reference
- "ISO9834-1: Information technology -- Open Systems
- Interconnection -- Procedures for the operation of OSI
- Registration Authorities: General procedures and top
- arcs of the ASN.1 Object Identifier tree";
- }
-
- typedef object-identifier-128 {
- type object-identifier {
- pattern '\d*(\.\d*){1,127}';
- }
- description
- "This type represents object-identifiers restricted to 128
- sub-identifiers.
-
- In the value set and its semantics, this type is equivalent
- to the OBJECT IDENTIFIER type of the SMIv2.";
- reference
- "RFC 2578: Structure of Management Information Version 2
- (SMIv2)";
- }
-
- typedef yang-identifier {
- type string {
- length "1..max";
- pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
- pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
- }
- description
- "A YANG identifier string as defined by the 'identifier'
- rule in Section 12 of RFC 6020. An identifier must
- start with an alphabetic character or an underscore
- followed by an arbitrary sequence of alphabetic or
- numeric characters, underscores, hyphens, or dots.
-
- A YANG identifier MUST NOT start with any possible
- combination of the lowercase or uppercase character
- sequence 'xml'.";
- reference
- "RFC 6020: YANG - A Data Modeling Language for the Network
- Configuration Protocol (NETCONF)";
- }
- /*** collection of types related to date and time***/
-
- typedef date-and-time {
- type string {
- pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
- + '(Z|[\+\-]\d{2}:\d{2})';
- }
- description
- "The date-and-time type is a profile of the ISO 8601
- standard for representation of dates and times using the
- Gregorian calendar. The profile is defined by the
- date-time production in Section 5.6 of RFC 3339.
-
- The date-and-time type is compatible with the dateTime XML
- schema type with the following notable exceptions:
-
- (a) The date-and-time type does not allow negative years.
-
- (b) The date-and-time time-offset -00:00 indicates an unknown
- time zone (see RFC 3339) while -00:00 and +00:00 and Z
- all represent the same time zone in dateTime.
-
- (c) The canonical format (see below) of data-and-time values
- differs from the canonical format used by the dateTime XML
- schema type, which requires all times to be in UTC using
- the time-offset 'Z'.
-
- This type is not equivalent to the DateAndTime textual
- convention of the SMIv2 since RFC 3339 uses a different
- separator between full-date and full-time and provides
- higher resolution of time-secfrac.
-
- The canonical format for date-and-time values with a known time
- zone uses a numeric time zone offset that is calculated using
- the device's configured known offset to UTC time. A change of
- the device's offset to UTC time will cause date-and-time values
- to change accordingly. Such changes might happen periodically
- in case a server follows automatically daylight saving time
- (DST) time zone offset changes. The canonical format for
- date-and-time values with an unknown time zone (usually
- referring to the notion of local time) uses the time-offset
- -00:00.";
- reference
- "RFC 3339: Date and Time on the Internet: Timestamps
- RFC 2579: Textual Conventions for SMIv2
- XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
- }
- typedef timeticks {
- type uint32;
- description
- "The timeticks type represents a non-negative integer that
- represents the time, modulo 2^32 (4294967296 decimal), in
- hundredths of a second between two epochs. When a schema
- node is defined that uses this type, the description of
- the schema node identifies both of the reference epochs.
-
- In the value set and its semantics, this type is equivalent
- to the TimeTicks type of the SMIv2.";
- reference
- "RFC 2578: Structure of Management Information Version 2
- (SMIv2)";
- }
-
- typedef timestamp {
- type yang:timeticks;
- description
- "The timestamp type represents the value of an associated
- timeticks schema node at which a specific occurrence
- happened. The specific occurrence must be defined in the
- description of any schema node defined using this type. When
- the specific occurrence occurred prior to the last time the
- associated timeticks attribute was zero, then the timestamp
- value is zero. Note that this requires all timestamp values
- to be reset to zero when the value of the associated timeticks
- attribute reaches 497+ days and wraps around to zero.
-
- The associated timeticks schema node must be specified
- in the description of any schema node using this type.
-
- In the value set and its semantics, this type is equivalent
- to the TimeStamp textual convention of the SMIv2.";
- reference
- "RFC 2579: Textual Conventions for SMIv2";
- }
-
- /*** collection of generic address types ***/
-
- typedef phys-address {
- type string {
- pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
- }
- description
- "Represents media- or physical-level addresses represented
- as a sequence octets, each octet represented by two hexadecimal
- numbers. Octets are separated by colons. The canonical
- representation uses lowercase characters.
-
- In the value set and its semantics, this type is equivalent
- to the PhysAddress textual convention of the SMIv2.";
- reference
- "RFC 2579: Textual Conventions for SMIv2";
- }
-
- typedef mac-address {
- type string {
- pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
- }
- description
- "The mac-address type represents an IEEE 802 MAC address.
- The canonical representation uses lowercase characters.
-
- In the value set and its semantics, this type is equivalent
- to the MacAddress textual convention of the SMIv2.";
- reference
- "IEEE 802: IEEE Standard for Local and Metropolitan Area
- Networks: Overview and Architecture
- RFC 2579: Textual Conventions for SMIv2";
- }
-
- /*** collection of XML-specific types ***/
-
- typedef xpath1.0 {
- type string;
- description
- "This type represents an XPATH 1.0 expression.
-
- When a schema node is defined that uses this type, the
- description of the schema node MUST specify the XPath
- context in which the XPath expression is evaluated.";
- reference
- "XPATH: XML Path Language (XPath) Version 1.0";
- }
-
- /*** collection of string types ***/
-
- typedef hex-string {
- type string {
- pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
- }
- description
- "A hexadecimal string with octets represented as hex digits
- separated by colons. The canonical representation uses
- lowercase characters.";
- }
-
- typedef uuid {
- type string {
- pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
- + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
- }
- description
- "A Universally Unique IDentifier in the string representation
- defined in RFC 4122. The canonical representation uses
- lowercase characters.
-
- The following is an example of a UUID in string representation:
- f81d4fae-7dec-11d0-a765-00a0c91e6bf6
- ";
- reference
- "RFC 4122: A Universally Unique IDentifier (UUID) URN
- Namespace";
- }
-
- typedef dotted-quad {
- type string {
- pattern
- '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
- + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
- }
- description
- "An unsigned 32-bit number expressed in the dotted-quad
- notation, i.e., four octets written as decimal numbers
- and separated with the '.' (full stop) character.";
- }
- }
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2017 AT&T and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.renderer;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.stream.Collectors;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.controller.md.sal.binding.api.MountPoint;
+import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.controller.md.sal.binding.api.NotificationService;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.transportpce.renderer.listeners.AlarmNotificationListener;
+import org.opendaylight.transportpce.renderer.listeners.DeOperationsListener;
+import org.opendaylight.transportpce.renderer.listeners.DeviceListener;
+import org.opendaylight.transportpce.renderer.listeners.LldpListener;
+import org.opendaylight.transportpce.renderer.listeners.TcaListener;
+import org.opendaylight.transportpce.renderer.mapping.PortMapping;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev161014.AlarmNotification;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev161014.OrgOpenroadmAlarmListener;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev161014.OrgOpenroadmDeOperationsListener;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.OrgOpenroadmDeviceListener;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.OrgOpenroadmLldpListener;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev161014.OrgOpenroadmTcaListener;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.NotificationsService;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.StreamNameType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RendererNotificationsImpl implements DataTreeChangeListener<Node> {
+
+ private final DataBroker dataBroker;
+ private final MountPointService mountService;
+ private static final Logger LOG = LoggerFactory.getLogger(RendererNotificationsImpl.class);
+ private ListenerRegistration<RendererNotificationsImpl> dataTreeChangeListenerRegistration;
+
+ private final Set<String> currentMountedDevice;
+ public static final InstanceIdentifier<Topology> NETCONF_TOPO_IID = InstanceIdentifier.create(NetworkTopology.class)
+ .child(Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));
+
+ LoadingCache<String, KeyedInstanceIdentifier<Node, NodeKey>> mountIds = CacheBuilder.newBuilder().maximumSize(20)
+ .build(new CacheLoader<String, KeyedInstanceIdentifier<Node, NodeKey>>() {
+ @Override
+ public KeyedInstanceIdentifier<Node, NodeKey> load(final String key) {
+ return NETCONF_TOPO_IID.child(Node.class, new NodeKey(new NodeId(key)));
+ }
+ });
+
+ public RendererNotificationsImpl(final DataBroker dataBroker, final MountPointService mountService,
+ Set<String> currentMountedDevice) {
+ this.dataBroker = dataBroker;
+ this.mountService = mountService;
+ this.currentMountedDevice = currentMountedDevice;
+ if (mountService == null) {
+ LOG.error("Mount service is null");
+
+ }
+ if (dataBroker != null) {
+ this.dataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
+ new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, NETCONF_TOPO_IID.child(Node.class)), this);
+ }
+ }
+
+ private void registerNotificationListener(final NodeId nodeId) {
+ final Optional<MountPoint> mountPoint;
+ try {
+ // Get mount point for specified device
+ mountPoint = mountService.getMountPoint(mountIds.get(nodeId.getValue()));
+ if (!mountPoint.isPresent()) {
+ LOG.error("Mount point for node {} doesn't exist", nodeId.getValue());
+ }
+ } catch (ExecutionException e) {
+ throw new IllegalArgumentException(e);
+ }
+
+ // Register notification service
+ final Optional<NotificationService> notificationService = mountPoint.get().getService(
+ NotificationService.class);
+ if (!notificationService.isPresent()) {
+ LOG.error("Failed to get RpcService for node {}", nodeId.getValue());
+ }
+
+ final OrgOpenroadmAlarmListener alarmListener;
+ alarmListener = new AlarmNotificationListener();
+ LOG.info("Registering notification listener on {} for node: {}", AlarmNotification.QNAME, nodeId);
+ // Register notification listener
+ final ListenerRegistration<OrgOpenroadmAlarmListener>
+ accessAlarmNotificationListenerRegistration =
+ notificationService.get().registerNotificationListener(alarmListener);
+
+ final OrgOpenroadmDeOperationsListener deOperationsListener;
+ deOperationsListener = new DeOperationsListener();
+ LOG.info("Registering notification listener on OrgOpenroadmDeOperationsListener for node: {}", nodeId);
+ // Register notification listener
+ final ListenerRegistration<OrgOpenroadmDeOperationsListener>
+ accessDeOperationasNotificationListenerRegistration =
+ notificationService.get().registerNotificationListener(deOperationsListener);
+
+ final OrgOpenroadmDeviceListener deviceListener;
+ deviceListener = new DeviceListener();
+ LOG.info("Registering notification listener on OrgOpenroadmDeviceListener for node: {}", nodeId);
+ // Register notification listener
+ final ListenerRegistration<OrgOpenroadmDeviceListener>
+ accessDeviceNotificationListenerRegistration = notificationService.get()
+ .registerNotificationListener(deviceListener);
+
+ final OrgOpenroadmLldpListener lldpListener;
+ lldpListener = new LldpListener();
+ LOG.info("Registering notification listener on OrgOpenroadmLldpListener for node: {}", nodeId);
+ // Register notification listener
+ final ListenerRegistration<OrgOpenroadmLldpListener> accessLldpNotificationListenerRegistration =
+ notificationService.get().registerNotificationListener(lldpListener);
+
+ final OrgOpenroadmTcaListener tcaListener;
+ tcaListener = new TcaListener();
+ LOG.info("Registering notification listener on OrgOpenroadmTcaListener for node: {}", nodeId);
+ // Register notification listener
+ final ListenerRegistration<OrgOpenroadmTcaListener> accessTcaNotificationListenerRegistration =
+ notificationService.get().registerNotificationListener(tcaListener);
+
+ // Listening to NETCONF datastream
+ final String streamName = "NETCONF";
+ final Optional<RpcConsumerRegistry> service = mountPoint.get().getService(RpcConsumerRegistry.class);
+ if (!service.isPresent()) {
+ LOG.error("Failed to get RpcService for node {}", nodeId.getValue());
+ }
+ final NotificationsService rpcService = service.get().getRpcService(NotificationsService.class);
+ final CreateSubscriptionInputBuilder createSubscriptionInputBuilder = new CreateSubscriptionInputBuilder();
+ createSubscriptionInputBuilder.setStream(new StreamNameType(streamName));
+ LOG.info("Triggering notification stream {} for node {}", streamName, nodeId);
+ final Future<RpcResult<Void>> subscription = rpcService.createSubscription(createSubscriptionInputBuilder
+ .build());
+ }
+
+ public void close() {
+ LOG.info("RenderernotificationsImpl Closed");
+ // Clean up the Data Change Listener registration
+ if (dataTreeChangeListenerRegistration != null) {
+ dataTreeChangeListenerRegistration.close();
+ }
+ }
+
+ @Override
+ public void onDataTreeChanged(Collection<DataTreeModification<Node>> changes) {
+
+ for (DataTreeModification<Node> change : changes) {
+
+ DataObjectModification<Node> rootNode = change.getRootNode();
+ String nodeId = rootNode.getDataAfter().getKey().getNodeId().getValue();
+ NetconfNode nnode = Preconditions.checkNotNull(rootNode.getDataAfter().getAugmentation(NetconfNode.class),
+ "Node not connected via Netconf protocol");
+ if (nnode != null) {
+
+ if (rootNode.getModificationType() == ModificationType.WRITE) {
+ LOG.info("Node added " + nodeId);
+
+ } else if (rootNode.getModificationType() == ModificationType.SUBTREE_MODIFIED) {
+
+ LOG.info("Node modified " + nodeId);
+ ConnectionStatus csts = nnode.getConnectionStatus();
+
+ switch (csts) {
+ case Connected: {
+ LOG.info("NETCONF Node: {} is fully connected", nodeId);
+ List<String> capabilities = nnode.getAvailableCapabilities().getAvailableCapability()
+ .stream().map(cp -> cp.getCapability()).collect(Collectors.toList());
+ LOG.info("Capabilities: {}", capabilities);
+ /*
+ * TODO: check for required
+ * capabilities to listen for notifications
+ * registerNotificationListener(rootNode.
+ * getDataAfter(). getNodeId());
+ */
+ currentMountedDevice.add(nodeId);
+ new PortMapping(dataBroker, mountService, nodeId).createMappingData();
+ break;
+ }
+ case Connecting: {
+ LOG.info("NETCONF Node: {} was disconnected", nodeId);
+ break;
+ }
+ case UnableToConnect: {
+ LOG.info("NETCONF Node: {} connection failed", nodeId);
+ break;
+ }
+ default:
+ LOG.warn("Unexpected connection status " + csts.getName());
+ }
+ } else if (rootNode.getModificationType() == ModificationType.DELETE) {
+ LOG.info("Node removed " + nodeId);
+ currentMountedDevice.remove(nodeId);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
/*
- * Copyright © 2016 Orange and others. All rights reserved.
+ * Copyright © 2017 AT&T and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
+
package org.opendaylight.transportpce.renderer;
+import java.util.HashSet;
+import java.util.Set;
+
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.MountPointService;
-
-
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRenderer;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.RendererService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RendererProvider {
private static final Logger LOG = LoggerFactory.getLogger(RendererProvider.class);
-
private final DataBroker dataBroker;
-
private final MountPointService mountPointService;
+ private final RpcProviderRegistry rpcProviderRegistry;
+ private RendererNotificationsImpl rendererNotificationImpl;
+ private RpcRegistration<RendererService> deviceRendererRegistration;
+ private final Set<String> currentMountedDevice;
- public RendererProvider(final DataBroker dataBroker, final MountPointService mountPointService) {
+ public RendererProvider(final DataBroker dataBroker, final MountPointService mountPointService,
+ final RpcProviderRegistry rpcProviderRegistry) {
this.dataBroker = dataBroker;
this.mountPointService = mountPointService;
+ this.rpcProviderRegistry = rpcProviderRegistry;
+ this.currentMountedDevice = new HashSet<>();
+ if (mountPointService == null) {
+ LOG.error("Mount service is null");
+ }
}
/**
*/
public void init() {
LOG.info("RendererProvider Session Initiated");
+ // Initializing Notification module
+ rendererNotificationImpl = new RendererNotificationsImpl(dataBroker, mountPointService,
+ currentMountedDevice);
+ //Register REST API RPC implementation for Renderer Service
+ deviceRendererRegistration = rpcProviderRegistry.addRpcImplementation(RendererService.class, new DeviceRenderer(
+ dataBroker, mountPointService, currentMountedDevice));
}
/**
*/
public void close() {
LOG.info("RendererProvider Closed");
+ // Clean up the RPC service registration
+ if (deviceRendererRegistration != null) {
+ deviceRendererRegistration.close();
+ }
+ // Clean up the RendererNotificationsImpl
+ if (rendererNotificationImpl != null) {
+ rendererNotificationImpl.close();
+ }
}
-}
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2017 AT&T and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.listeners;
+
+import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev161014.AlarmNotification;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev161014.OrgOpenroadmAlarmListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AlarmNotificationListener implements OrgOpenroadmAlarmListener {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AlarmNotificationListener.class);
+
+ /**
+ * Callback for alarm-notification.
+ *
+ * @param notification AlarmNotification object
+ */
+ @Override
+ public void onAlarmNotification(AlarmNotification notification) {
+ LOG.info("Notification {} received {}", AlarmNotification.QNAME, notification);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2017 AT&T and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.listeners;
+
+import org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev161014.OrgOpenroadmDeOperationsListener;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev161014.RestartNotification;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeOperationsListener implements OrgOpenroadmDeOperationsListener {
+
+ private static final Logger LOG = LoggerFactory.getLogger(DeOperationsListener.class);
+
+ /**
+ * Callback for restart-notification.
+ *
+ * @param notification RestartNotification object
+ */
+ @Override
+ public void onRestartNotification(RestartNotification notification) {
+ LOG.info("Notification {} received {}", RestartNotification.QNAME, notification);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2017 AT&T and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.listeners;
+
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.ChangeNotification;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.OrgOpenroadmDeviceListener;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.OtdrScanResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeviceListener implements OrgOpenroadmDeviceListener {
+
+ private static final Logger LOG = LoggerFactory.getLogger(OrgOpenroadmDeviceListener.class);
+
+ /**
+ * Callback for change-notification.
+ *
+ * @param notification ChangeNotification object
+ */
+ @Override
+ public void onChangeNotification(ChangeNotification notification) {
+
+ LOG.info("Notification {} received {}", ChangeNotification.QNAME, notification);
+ }
+
+ /**
+ * Callback for otdr-scan-result.
+ *
+ * @param notification OtdrScanResult object
+ */
+ @Override
+ public void onOtdrScanResult(OtdrScanResult notification) {
+
+ LOG.info("Notification {} received {}", OtdrScanResult.QNAME, notification);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2017 AT&T and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.listeners;
+
+import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.LldpNbrInfoChange;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.OrgOpenroadmLldpListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LldpListener implements OrgOpenroadmLldpListener {
+ private static final Logger LOG = LoggerFactory.getLogger(OrgOpenroadmLldpListener.class);
+
+ /**
+ * Callback for lldp-nbr-info-change.
+ *
+ * @param notification LldpNbrInfoChange object
+ */
+ @Override
+ public void onLldpNbrInfoChange(LldpNbrInfoChange notification) {
+
+ LOG.info("Notification {} received {}", LldpNbrInfoChange.QNAME, notification);
+
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2017 AT&T and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.listeners;
+
+import org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev161014.OrgOpenroadmTcaListener;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev161014.TcaNotification;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TcaListener implements OrgOpenroadmTcaListener {
+
+ private static final Logger LOG = LoggerFactory.getLogger(OrgOpenroadmTcaListener.class);
+
+ /**
+ * Callback for tca-notification.
+ *
+ * @param notification TcaNotification object
+ */
+ @Override
+ public void onTcaNotification(TcaNotification notification) {
+ LOG.info("Notification {} received {}", TcaNotification.QNAME, notification);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2017 AT&T and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.mapping;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.MountPoint;
+import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.circuit.pack.Ports;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.circuit.pack.PortsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.circuit.packs.CircuitPacks;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.circuit.packs.CircuitPacksKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.degree.ConnectionPorts;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.org.openroadm.device.container.OrgOpenroadmDevice;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.org.openroadm.device.container.org.openroadm.device.Degree;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.org.openroadm.device.container.org.openroadm.device.DegreeKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.org.openroadm.device.container.org.openroadm.device.Info;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.org.openroadm.device.container.org.openroadm.device.SharedRiskGroup;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.org.openroadm.device.container.org.openroadm.device.SharedRiskGroupKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.Network;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.NetworkBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.NodesKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.Mapping;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.MappingBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.MappingKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PortMapping {
+
+ private static final Logger LOG = LoggerFactory.getLogger(PortMapping.class);
+ private final DataBroker db;
+ private final MountPointService mps;
+
+ private final String nodeId;
+
+ public PortMapping(DataBroker db, MountPointService mps, String nodeId) {
+ this.db = db;
+ this.mps = mps;
+ this.nodeId = nodeId;
+
+ }
+
+ /**
+ * This method creates logical to physical port mapping
+ * for a given device.
+ * Instead of parsing all the circuit packs/ports in the device
+ * this methods does a selective read operation on degree/srg
+ * subtree to get circuit packs/ports that map to :
+ * DEGn-TTP-TX
+ * DEGn-TTP-RX
+ * DEGn-TTP-TXRX
+ * SRGn-PPp
+ * This methods skips the logical ports that are internal.
+ * if operation is successful the mapping gets stored in
+ * datastore corresponding to portmapping.yang data model.
+ *
+ * @return true/false based on status of operation
+ */
+ public boolean createMappingData() {
+
+ LOG.info(" Create Mapping Data for node " + nodeId);
+
+ DataBroker deviceDb = getDeviceDataBroker(nodeId, mps);
+ Info deviceInfo = getDeviceInfo(deviceDb);
+
+ InstanceIdentifier<Network> nodesIID = InstanceIdentifier.builder(Network.class).build();
+
+ NetworkBuilder nwBldr = new NetworkBuilder();
+ List<Mapping> portMapList = new ArrayList<>();
+ List<Nodes> nodesList = new ArrayList<>();
+
+ if (deviceDb != null && deviceInfo != null) {
+
+ // Creating mapping data for degree TTP's
+ List<ConnectionPorts> degreeConPorts = getDegreePorts(deviceDb, deviceInfo);
+
+ //Getting circuit-pack-name/port-name corresponding to TTP's
+ for (ConnectionPorts cp : degreeConPorts) {
+
+ InstanceIdentifier<Ports> portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(
+ CircuitPacks.class, new CircuitPacksKey(cp.getCircuitPackName())).child(Ports.class, new PortsKey(cp
+ .getPortName().toString()));
+ try {
+ LOG.info("Fetching logical Connection Point value for port " + cp.getPortName().toString()
+ + " at circuit pack " + cp.getCircuitPackName());
+ ReadOnlyTransaction rtx = deviceDb.newReadOnlyTransaction();
+ Optional<Ports> portObject = rtx.read(LogicalDatastoreType.OPERATIONAL, portIID).get();
+
+ if (portObject.isPresent()) {
+ Ports port = portObject.get();
+ if (port.getLogicalConnectionPoint() != null) {
+
+ LOG.info("Logical Connection Point for " + cp.getCircuitPackName() + " " + port
+ .getPortName() + " is " + port.getLogicalConnectionPoint());
+ MappingBuilder mpBldr = new MappingBuilder();
+ mpBldr.setKey(new MappingKey(port.getLogicalConnectionPoint())).setLogicalConnectionPoint(
+ port.getLogicalConnectionPoint()).setSupportingCircuitPackName(cp.getCircuitPackName())
+ .setSupportingPort(port.getPortName());
+ portMapList.add(mpBldr.build());
+
+ } else {
+
+ LOG.warn("Logical Connection Point value missing for " + cp.getCircuitPackName() + " "
+ + port.getPortName());
+ }
+ }
+ } catch (InterruptedException | ExecutionException ex) {
+ LOG.warn("Read failed for Logical Connection Point value missing for " + cp.getCircuitPackName()
+ + " " + cp.getPortName());
+ }
+ }
+ // Creating mapping data for degree PP's
+ List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.srg.CircuitPacks> srgCps = getSrgCps(
+ deviceDb, deviceInfo);
+
+ for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.srg.CircuitPacks cps : srgCps) {
+ InstanceIdentifier<CircuitPacks> cpIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(
+ CircuitPacks.class, new CircuitPacksKey(cps.getCircuitPackName()));
+ try {
+
+ ReadOnlyTransaction rtx = deviceDb.newReadOnlyTransaction();
+ Optional<CircuitPacks> circuitPackObject = rtx.read(LogicalDatastoreType.OPERATIONAL, cpIID).get();
+
+ if (circuitPackObject.isPresent()) {
+ CircuitPacks circuitPack = circuitPackObject.get();
+ if (!circuitPack.getPorts().isEmpty()) {
+ for (Ports port : circuitPack.getPorts()) {
+
+ if (port.getLogicalConnectionPoint() != null && port.getPortQual().getIntValue() == 2) {
+
+ LOG.info("Logical Connection Point for " + circuitPack.getCircuitPackName() + " "
+ + port.getPortName() + " is " + port.getLogicalConnectionPoint());
+ MappingBuilder mpBldr = new MappingBuilder();
+ mpBldr.setKey(new MappingKey(port.getLogicalConnectionPoint()))
+ .setLogicalConnectionPoint(port.getLogicalConnectionPoint())
+ .setSupportingCircuitPackName(circuitPack.getCircuitPackName())
+ .setSupportingPort(port.getPortName());
+ portMapList.add(mpBldr.build());
+
+ } else if (port.getPortQual().getIntValue() == 1) {
+
+ LOG.info("Port is internal, skipping Logical Connection Point missing for "
+ + circuitPack.getCircuitPackName() + " " + port.getPortName());
+
+ } else if (port.getLogicalConnectionPoint() == null) {
+
+ LOG.info("Value missing, Skipping Logical Connection Point missing for "
+ + circuitPack.getCircuitPackName() + " " + port.getPortName());
+ }
+
+ }
+
+ }
+
+ }
+ } catch (InterruptedException | ExecutionException ex) {
+ LOG.warn("Read failed for " + cps.getCircuitPackName());
+ }
+
+ }
+
+ NodesBuilder nodesBldr = new NodesBuilder();
+ nodesBldr.setKey(new NodesKey(deviceInfo.getNodeId())).setNodeId(deviceInfo.getNodeId());
+ nodesBldr.setMapping(portMapList);
+ nodesList.add(nodesBldr.build());
+ nwBldr.setNodes(nodesList);
+ final WriteTransaction writeTransaction = db.newWriteOnlyTransaction();
+ writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, nodesIID, nwBldr.build());
+ CheckedFuture<Void, TransactionCommitFailedException> submit = writeTransaction.submit();
+ try {
+ submit.checkedGet();
+ return true;
+
+ } catch (TransactionCommitFailedException e) {
+ LOG.warn("Failed to post {} ", nwBldr.build(), e);
+ return false;
+
+ }
+ } else {
+ LOG.info(" Unable to get Data broker for node " + nodeId);
+ return false;
+ }
+
+ }
+
+ /**
+ * This method does a get operation on info subtree
+ * of the netconf device's config datastore and returns
+ * info object.It is required to get device attributes such
+ * as maxDegrees,maxSrgs.
+ *
+ * @param deviceDb Reference to device's databroker
+ * @return Info object
+ *
+ */
+ public Info getDeviceInfo(DataBroker deviceDb) {
+ ReadOnlyTransaction rtx = deviceDb.newReadOnlyTransaction();
+ InstanceIdentifier<Info> infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class);
+ try {
+ Optional<Info> ordmInfoObject = rtx.read(LogicalDatastoreType.CONFIGURATION, infoIID).get();
+ if (ordmInfoObject.isPresent()) {
+ return ordmInfoObject.get();
+ } else {
+ LOG.info("Info subtree is not present");
+ }
+ } catch (InterruptedException | ExecutionException ex) {
+ LOG.info("Read failed on info subtree for");
+ return null;
+ }
+ return null;
+ }
+
+ /**
+ * This method does a get operation on degree subtree
+ * of the netconf device's config datastore and returns a list
+ * of all connection port objects.
+ * It is required for doing a selective get on ports that
+ * correspond to logical connection points of interest.
+ *
+ * @param deviceDb Reference to device's databroker
+ * @param ordmInfo Info subtree from the device
+ * @return List of connection ports object belonging to-
+ * degree subtree
+ */
+ public List<ConnectionPorts> getDegreePorts(DataBroker deviceDb, Info ordmInfo) {
+
+ List<ConnectionPorts> degreeConPorts = new ArrayList<>();
+ ReadOnlyTransaction rtx = deviceDb.newReadOnlyTransaction();
+ Integer maxDegree;
+
+ //Get value for max degree from info subtree, required for iteration
+ //if not present assume to be 20 (temporary)
+ if (ordmInfo.getMaxDegrees() != null) {
+ maxDegree = ordmInfo.getMaxDegrees();
+ } else {
+ maxDegree = 20;
+ }
+ Integer degreeCounter = 1;
+ while (degreeCounter <= maxDegree) {
+ LOG.info("Getting Connection ports for Degree Number " + degreeCounter);
+ InstanceIdentifier<Degree> deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(
+ Degree.class, new DegreeKey(degreeCounter));
+ try {
+ Optional<Degree> ordmDegreeObject = rtx.read(LogicalDatastoreType.CONFIGURATION, deviceIID).get();
+
+ if (ordmDegreeObject.isPresent()) {
+ degreeConPorts.addAll(new ArrayList<ConnectionPorts>(ordmDegreeObject.get().getConnectionPorts()));
+
+ } else {
+ LOG.info("Device has " + (degreeCounter - 1) + " degree");
+ break;
+ }
+ } catch (InterruptedException | ExecutionException ex) {
+ LOG.info("Failed to read degree " + degreeCounter);
+ break;
+
+ }
+ degreeCounter++;
+ }
+ return degreeConPorts;
+ }
+
+ /**
+ * This method does a get operation on shared risk group subtree
+ * of the netconf device's config datastore and returns a list
+ * of all circuit packs objects that are part of srgs.
+ * It is required to do a selective get on all the circuit packs
+ * that contain add/drop ports of interest.
+ *
+ * @param deviceDb Reference to device's databroker
+ * @param ordmInfo Info subtree from the device
+ * @return List of circuit packs object belonging to-
+ * shared risk group subtree
+ */
+
+ public List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.srg.CircuitPacks> getSrgCps(
+ DataBroker deviceDb, Info ordmInfo) {
+
+ List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.srg.CircuitPacks> srgCps =
+ new ArrayList<>();
+ ReadOnlyTransaction rtx = deviceDb.newReadOnlyTransaction();
+ Integer maxSrg;
+ //Get value for max Srg from info subtree, required for iteration
+ //if not present assume to be 20 (temporary)
+ if (ordmInfo.getMaxSrgs() != null) {
+ maxSrg = ordmInfo.getMaxSrgs();
+ } else {
+ maxSrg = 20;
+ }
+
+ Integer srgCounter = 1;
+ while (srgCounter <= maxSrg) {
+ LOG.info("Getting Circuitpacks for Srg Number " + srgCounter);
+ InstanceIdentifier<SharedRiskGroup> srgIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(
+ SharedRiskGroup.class, new SharedRiskGroupKey(srgCounter));
+ try {
+ Optional<SharedRiskGroup> ordmSrgObject = rtx.read(LogicalDatastoreType.CONFIGURATION, srgIID).get();
+
+ if (ordmSrgObject.isPresent()) {
+
+ srgCps.addAll(
+ new ArrayList<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.srg
+ .CircuitPacks>(ordmSrgObject.get().getCircuitPacks()));
+
+ } else {
+ LOG.info("Device has " + (srgCounter - 1) + " Srg");
+ break;
+ }
+ } catch (InterruptedException | ExecutionException ex) {
+ LOG.warn("Failed to read Srg " + srgCounter);
+ break;
+ }
+ srgCounter++;
+ }
+
+ return srgCps;
+ }
+
+ /**
+ * This static method returns the DataBroker for a netconf
+ * node.
+ *
+ * @param nodeId Unique identifier for the mounted netconf-
+ * node
+ * @param mps Reference to mount service
+ * @return Databroker for the given device
+ */
+
+ public static DataBroker getDeviceDataBroker(String nodeId, MountPointService mps) {
+ InstanceIdentifier<Node> netconfNodeIID = InstanceIdentifier.builder(NetworkTopology.class).child(
+ Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName()))).child(Node.class,
+ new NodeKey(new NodeId(nodeId))).build();
+
+ // Get the mount point for the specified node
+ final Optional<MountPoint> netconfNodeOptional = mps.getMountPoint(netconfNodeIID);
+ if (netconfNodeOptional.isPresent()) {
+ MountPoint netconfNode = netconfNodeOptional.get();
+ // Get the DataBroker for the mounted node
+ DataBroker netconfNodeDataBroker = netconfNode.getService(DataBroker.class).get();
+ return netconfNodeDataBroker;
+ } else {
+ LOG.info("Device Data broker not found for :" + nodeId);
+ }
+ return null;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2017 AT&T and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice;
+
+import com.google.common.util.concurrent.CheckedFuture;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.Future;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.transportpce.renderer.mapping.PortMapping;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.connection.DestinationBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.connection.SourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.interfaces.grp.Interface;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.interfaces.grp.InterfaceKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.org.openroadm.device.container.OrgOpenroadmDevice;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.org.openroadm.device.container.org.openroadm.device.RoadmConnections;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.RendererService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.service.path.input.Nodes;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeviceRenderer implements RendererService {
+
+ private final DataBroker db;
+ private final MountPointService mps;
+ private static final Logger LOG = LoggerFactory.getLogger(RendererService.class);
+ private final Set<String> currentMountedDevice;
+ private final Set<String> nodesProvisioned;
+
+ public DeviceRenderer(DataBroker db, MountPointService mps, Set<String> currentMountedDevice) {
+ this.db = db;
+ this.mps = mps;
+ this.currentMountedDevice = currentMountedDevice;
+ this.nodesProvisioned = new HashSet<>();
+ }
+
+ /**
+ * This method is the implementation of the 'service-path' RESTCONF service,
+ * which is one of the external APIs into the renderer application. The
+ * service provides two functions:
+ *
+ * <p>
+ * 1. Create
+ * This operation results in provisioning the device for a given wavelength and a
+ * list of nodes with each node listing its termination points.
+ *
+ * <p>
+ * 2. Delete
+ * This operation results in de-provisioning the device for a given wavelength and a
+ * list of nodes with each node listing its termination points.
+ *
+ * <p>
+ * The signature for this method was generated by yang tools from the
+ * renderer API model.
+ *
+ * @param input Input parameter from the service-path yang model
+ *
+ * @return Result of the request
+ */
+ @Override
+ public Future<RpcResult<ServicePathOutput>> servicePath(ServicePathInput input) {
+
+ if (input.getOperation().getIntValue() == 1) {
+ LOG.info("Create operation request received");
+ return RpcResultBuilder.success(setupServicePath(input)).buildFuture();
+ } else if (input.getOperation().getIntValue() == 2) {
+ LOG.info("Delete operation request received");
+ return RpcResultBuilder.success(deleteServicePath(input)).buildFuture();
+ }
+ return RpcResultBuilder.success(new ServicePathOutputBuilder().setResult("Invalid operation")).buildFuture();
+ }
+
+ /**
+ * This method set's wavelength path based on following steps:
+ * For each node:
+ *
+ * <p>
+ * 1. Create Och interface on source termination point.
+ * 2. Create Och interface on destination termination point.
+ * 3. Create cross connect between source and destination
+ * tps created in step 1 and 2.
+ *
+ * <p>
+ * Naming convention used for OCH interfaces name : tp-wavenumber
+ * Naming convention used for cross connect name : src-dest-wavenumber
+ *
+ * @param input Input parameter from the service-path yang model
+ *
+ * @return Result list of all nodes if request successful
+ * otherwise specific reason of failure.
+ */
+ public ServicePathOutputBuilder setupServicePath(ServicePathInput input) {
+
+ List<Nodes> nodes = input.getNodes();
+ ServicePathOutputBuilder setServBldr = new ServicePathOutputBuilder();
+ LOG.info(currentMountedDevice.toString());
+ for (Nodes n : nodes) {
+ LOG.info("Starting provisioning for node : " + n.getNodeId());
+ //if the node is currently mounted then proceed
+ if (currentMountedDevice.contains(n.getNodeId())) {
+ String srcTp = n.getSrcTp();
+ String destTp = n.getDestTp();
+ Long waveNumber = input.getWaveNumber();
+ String srcIf = new OpenRoadmInterfaces(db, mps, n.getNodeId(), srcTp).createOchInterface(waveNumber);
+ //if source interface creation was successful then proceed otherwise return.
+ if (srcIf == null) {
+ LOG.warn("Unable to create OCH interface on " + n.getNodeId() + " at " + srcTp);
+ return setServBldr.setResult("Unable to create OCH interface on " + n.getNodeId() + " at " + srcTp);
+ }
+ //if destination interface creation was then proceed otherwise return.
+ String dstIf = new OpenRoadmInterfaces(db, mps, n.getNodeId(), destTp).createOchInterface(waveNumber);
+ if (dstIf == null) {
+ LOG.warn("Unable to create OCH interface on " + n.getNodeId() + " at " + destTp);
+ return setServBldr.setResult("Unable to create OCH interface on " + n.getNodeId() + " at "
+ + destTp);
+ }
+ LOG.info("Creating cross connect between source :" + srcTp + " destination " + destTp + " for node " + n
+ .getNodeId());
+ //Build cross connect object
+ RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder();
+ rdmConnBldr.setConnectionNumber(srcTp + "-" + destTp + "-" + waveNumber);
+ rdmConnBldr.setWavelengthNumber(waveNumber);
+ rdmConnBldr.setOpticalControlMode(OpticalControlMode.Off);
+ rdmConnBldr.setSource(new SourceBuilder().setSrcIf(srcIf).build());
+ rdmConnBldr.setDestination(new DestinationBuilder().setDstIf(dstIf).build());
+ InstanceIdentifier<RoadmConnections> rdmConnectionIID = InstanceIdentifier.create(
+ OrgOpenroadmDevice.class).child(RoadmConnections.class, new RoadmConnectionsKey(rdmConnBldr
+ .getConnectionNumber()));
+ DataBroker netconfNodeDataBroker = PortMapping.getDeviceDataBroker(n.getNodeId(), mps);
+ if (netconfNodeDataBroker != null) {
+ final WriteTransaction writeTransaction = netconfNodeDataBroker.newWriteOnlyTransaction();
+ //post the cross connect on the device
+ writeTransaction.put(LogicalDatastoreType.CONFIGURATION, rdmConnectionIID, rdmConnBldr.build());
+ final CheckedFuture<Void, TransactionCommitFailedException> submit = writeTransaction.submit();
+ try {
+ submit.checkedGet();
+ nodesProvisioned.add(n.getNodeId());
+ LOG.info("Roadm-connection successfully created: " + srcTp + "-" + destTp);
+
+ } catch (TransactionCommitFailedException ex) {
+ LOG.warn("Failed to post {} ", rdmConnBldr.build(), ex);
+ return setServBldr.setResult("Unable to post Roadm-connection for node " + n.getNodeId());
+ }
+ } else {
+ LOG.error("Unable to get device broker for node " + n.getNodeId());
+ return setServBldr.setResult("Unable to get device broker for node " + n.getNodeId());
+ }
+ } else {
+ LOG.warn(n.getNodeId() + " is not mounted on the controller");
+ return setServBldr.setResult(n.getNodeId() + " is not mounted on the controller");
+ }
+ }
+ return setServBldr.setResult("Roadm-connection successfully created for nodes " + nodesProvisioned.toString());
+ }
+
+ /**
+ * This method removes wavelength path based on following steps:
+ * For each node:
+ *
+ * <p>
+ * 1. Delete Cross connect between source and destination tps.
+ * 2. Delete Och interface on source termination point.
+ * 3. Delete Och interface on destination termination point.
+ *
+ *<p>
+ * Naming convention used for OCH interfaces name : tp-wavenumber
+ * Naming convention used for cross connect name : src-dest-wavenumber
+ *
+ * @param input Input parameter from the service-path yang model
+ *
+ * @return Result result of the request.
+ */
+ public ServicePathOutputBuilder deleteServicePath(ServicePathInput input) {
+ List<Nodes> nodes = input.getNodes();
+ ServicePathOutputBuilder delServBldr = new ServicePathOutputBuilder();
+ LOG.info(currentMountedDevice.toString());
+ for (Nodes n : nodes) {
+ LOG.info("Deleting service setup on node " + n.getNodeId());
+ String srcTp = n.getSrcTp();
+ String destTp = n.getDestTp();
+ Long waveNumber = input.getWaveNumber();
+ //if the node is currently mounted then proceed.
+ if (currentMountedDevice.contains(n.getNodeId())) {
+ DataBroker netconfNodeDataBroker = PortMapping.getDeviceDataBroker(n.getNodeId(), mps);
+ if (netconfNodeDataBroker != null) {
+ // Deleting roadm connection
+ InstanceIdentifier<RoadmConnections> rdmConnectionIID = InstanceIdentifier.create(
+ OrgOpenroadmDevice.class).child(RoadmConnections.class, new RoadmConnectionsKey(srcTp + "-"
+ + destTp + "-" + waveNumber));
+ ReadWriteTransaction writeTx = netconfNodeDataBroker.newReadWriteTransaction();
+ writeTx.delete(LogicalDatastoreType.CONFIGURATION, rdmConnectionIID);
+ final CheckedFuture<Void, TransactionCommitFailedException> submit = writeTx.submit();
+ try {
+ submit.checkedGet();
+ LOG.info("Successfully deleted interface " + srcTp + "-" + destTp + "-" + waveNumber);
+
+ } catch (TransactionCommitFailedException ex) {
+ LOG.error("Failed to delete {} ", srcTp + "-" + destTp + "-" + waveNumber, ex);
+ }
+ // Deleting interface on source termination point
+ writeTx = netconfNodeDataBroker.newReadWriteTransaction();
+ InstanceIdentifier<Interface> srcInterfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
+ .child(Interface.class, new InterfaceKey(srcTp + "-" + waveNumber.toString()));
+ writeTx.delete(LogicalDatastoreType.CONFIGURATION, srcInterfacesIID);
+ final CheckedFuture<Void, TransactionCommitFailedException> submitSrcDel = writeTx.submit();
+
+ try {
+ submitSrcDel.checkedGet();
+ LOG.info("Successfully deleted " + srcTp + "-" + waveNumber.toString());
+ } catch (TransactionCommitFailedException ex) {
+ LOG.error("Failed to delete interface {} ", srcTp + "-" + waveNumber.toString(), ex);
+ }
+ // Deleting interface on destination termination point
+ writeTx = netconfNodeDataBroker.newReadWriteTransaction();
+ InstanceIdentifier<Interface> destInterfacesIID = InstanceIdentifier.create(
+ OrgOpenroadmDevice.class).child(Interface.class, new InterfaceKey(destTp + "-" + waveNumber
+ .toString()));
+ writeTx.delete(LogicalDatastoreType.CONFIGURATION, destInterfacesIID);
+ final CheckedFuture<Void, TransactionCommitFailedException> submitDestDel = writeTx.submit();
+
+ try {
+ submitDestDel.checkedGet();
+ LOG.info("Successfully deleted " + destTp + "-" + waveNumber.toString());
+
+ } catch (TransactionCommitFailedException ex) {
+ LOG.error("Failed to delete interface {} ", destTp + "-" + waveNumber.toString(), ex);
+ }
+ }
+ } else {
+ LOG.warn(n.getNodeId() + " is not mounted on the controller");
+ return delServBldr.setResult(n.getNodeId() + " is not mounted on the controller");
+ }
+ }
+ return delServBldr.setResult("Request processed");
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2017 AT&T and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+
+import java.util.concurrent.ExecutionException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.transportpce.renderer.mapping.PortMapping;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.circuit.pack.Ports;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.circuit.pack.PortsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.circuit.packs.CircuitPacks;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.circuit.packs.CircuitPacksKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.interfaces.grp.Interface;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.interfaces.grp.InterfaceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.interfaces.grp.InterfaceKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.org.openroadm.device.container.OrgOpenroadmDevice;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.port.Interfaces;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.OpticalChannel;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.Interface1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.Interface1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.och.container.OchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.Network;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.NodesKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.Mapping;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.MappingBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.MappingKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OpenRoadmInterfaces {
+
+ private final DataBroker db;
+ private final String nodeId;
+ private final String logicalConnPoint;
+ private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmInterfaces.class);
+ private final DataBroker netconfNodeDataBroker;
+
+ public OpenRoadmInterfaces(DataBroker db, MountPointService mps, String nodeId, String logicalConnPoint) {
+ this.db = db;
+ this.logicalConnPoint = logicalConnPoint;
+ this.nodeId = nodeId;
+ netconfNodeDataBroker = PortMapping.getDeviceDataBroker(nodeId, mps);
+
+ }
+
+ /**
+ * This methods creates an OCH interface on the ROADM nodes's termination point
+ * based on following steps:
+ *
+ * <p>
+ * 1. Get the physical mapping corresponding to logical port.
+ * 2. Create generic interface object based on data in mapping object.
+ * 3. Set the value for supporting interface (OMS) if present in the local mapping
+ * otherwise fetch it for the first time and update the local mapping.
+ * 4. Add Och interface specific augmentation such as waveNumber etc.
+ *
+ * @param waveNumber wavelength number of the Och interface.
+ *
+ * @return Name of the interface if successful, otherwise return null.
+ */
+ public String createOchInterface(Long waveNumber) {
+
+ // Add OOCH augmentation to the interface
+ Mapping portMap = getMapping(nodeId, logicalConnPoint);
+ if (portMap != null) {
+ InterfaceBuilder ifBuilder = intfBuilder(portMap);
+ // OCH interface specific data
+ OchBuilder ocIfBuilder = new OchBuilder();
+ ocIfBuilder.setWavelengthNumber(waveNumber);
+ Interface1Builder optbld1 = new Interface1Builder();
+ ifBuilder.setKey(new InterfaceKey(logicalConnPoint + "-" + waveNumber.toString()));
+ ifBuilder.addAugmentation(Interface1.class, optbld1.setOch(ocIfBuilder.build()).build());
+ ifBuilder.setName(logicalConnPoint + "-" + waveNumber.toString());
+ InstanceIdentifier<Interface> interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(
+ Interface.class, new InterfaceKey(logicalConnPoint + "-" + waveNumber.toString()));
+ if (logicalConnPoint.toUpperCase().contains("TTP") && StringUtils.isNotEmpty(portMap.getSupportingOms())) {
+ LOG.info("Oms interface present in local mapping for " + logicalConnPoint);
+ ifBuilder.setSupportingInterface(portMap.getSupportingOms());
+ } else if (logicalConnPoint.toUpperCase().contains("TTP") && StringUtils.isEmpty(portMap
+ .getSupportingOms())) {
+ Ports port = getPort(portMap);
+ if (port != null && port.getInterfaces() != null) {
+ LOG.info("Oms interface not present in local mapping, getting it for the first time for "
+ + logicalConnPoint);
+ LOG.info(port.toString());
+ for (Interfaces intf : port.getInterfaces()) {
+ LOG.info(intf.toString());
+ //TODO: This method assumes the name of the interface contains OMS substring in it
+ //update it to fetch OMS interface more efficiently.
+ if (intf.getInterfaceName().toUpperCase().contains("OMS")) {
+ String omsInterface = intf.getInterfaceName();
+ LOG.info("found oms interface for {} with name {}", logicalConnPoint, omsInterface);
+ ifBuilder.setSupportingInterface(omsInterface);
+ MappingBuilder mapBldr = new MappingBuilder();
+ InstanceIdentifier<Mapping> mapIID = InstanceIdentifier.create(Network.class).child(
+ Nodes.class, new NodesKey(nodeId)).child(Mapping.class, new MappingKey(portMap
+ .getLogicalConnectionPoint()));
+ mapBldr.setSupportingOms(omsInterface);
+ mapBldr.setKey(new MappingKey(portMap.getLogicalConnectionPoint()));
+ try {
+ final WriteTransaction writeTransaction = db.newWriteOnlyTransaction();
+ writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, mapIID, mapBldr.build());
+ CheckedFuture<Void, TransactionCommitFailedException> submit = writeTransaction
+ .submit();
+ LOG.info("Updated mapping for " + port.getPortName() + "at " + portMap
+ .getSupportingCircuitPackName() + " with support oms interface " + intf
+ .getInterfaceName());
+ submit.checkedGet();
+ break;
+ } catch (TransactionCommitFailedException ex) {
+ // TODO Auto-generated catch block
+ LOG.info("unable to save mapping for " + port.getPortName() + " at " + portMap
+ .getSupportingCircuitPackName());
+ }
+ }
+ }
+ } else {
+ LOG.error("Interface is missing for Port " + port.getPortName() + " @ " + portMap
+ .getSupportingCircuitPackName());
+ return null;
+ }
+ }
+ if (postInterface(interfacesIID, ifBuilder)) {
+ return ifBuilder.getName();
+ } else {
+ return null;
+ }
+ }
+
+ // TODO: implement OCH facility for xponder
+ return null;
+ }
+
+ public String createODU4Interface() {
+ // Add ODU4 augmentation to the interface
+
+ // TODO: implement this method
+ return null;
+
+ }
+
+ public String createOTU4Interface() {
+ // Add OTU4 augmentation to the interface
+
+ // TODO: implement this method
+
+ return null;
+ }
+
+ public String createETHInterface() {
+ // Add ETH augmentation to the interface
+
+ // TODO: implement this method
+
+ return null;
+
+ }
+
+ /**
+ * This methods does a get operation on the port subtree of the device's
+ * operational data store.This method will be called once for each Degree port
+ * in order to fetch the OMS interface for the first time.
+ *
+ * @param portMap Mapping object
+ *
+ * @return Ports object read from the device.
+ */
+ public Ports getPort(Mapping portMap) {
+ // Get Port subtree corresponding to the logical connection point
+ if (netconfNodeDataBroker != null) {
+ ReadOnlyTransaction rtx = netconfNodeDataBroker.newReadOnlyTransaction();
+ InstanceIdentifier<Ports> portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(
+ CircuitPacks.class, new CircuitPacksKey(portMap.getSupportingCircuitPackName())).child(Ports.class,
+ new PortsKey(portMap.getSupportingPort()));
+ Optional<Ports> portObject;
+ try {
+ portObject = rtx.read(LogicalDatastoreType.OPERATIONAL, portIID).get();
+ if (portObject.isPresent()) {
+ return portObject.get();
+ }
+ } catch (InterruptedException | ExecutionException ex) {
+ LOG.info("Error getting port subtree from the device ");
+ return null;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * This methods creates a generic interface builder object
+ * to set the value that are common irrespective of the interface type.
+ *
+ * @param portMap Mapping object containing attributes required to create
+ * interface on the device.
+ *
+ * @return InterfaceBuilder object with the data.
+ */
+ public InterfaceBuilder intfBuilder(Mapping portMap) {
+
+ InterfaceBuilder ifBuilder = new InterfaceBuilder();
+ ifBuilder.setType(OpticalChannel.class);
+ ifBuilder.setDescription(" TBD ");
+ ifBuilder.setCircuitId(" TBD ");
+ ifBuilder.setSupportingCircuitPackName(portMap.getSupportingCircuitPackName());
+ ifBuilder.setSupportingPort(portMap.getSupportingPort());
+ return ifBuilder;
+ }
+
+ /**
+ * This methods does an edit-config operation on the openROADM
+ * device in order to create the given interface.
+ *
+ * @param interfacesIID Instance identifier for the interfaces subtree in the device.
+ * @param ifBuilder Builder object containing the data to post.
+ *
+ * @return Result of operation true/false based on success/failure.
+ */
+ public boolean postInterface(InstanceIdentifier<Interface> interfacesIID, InterfaceBuilder ifBuilder) {
+ // Post interface with its specific augmentation to the device
+ if (netconfNodeDataBroker != null) {
+ final WriteTransaction writeTransaction = netconfNodeDataBroker.newWriteOnlyTransaction();
+ writeTransaction.put(LogicalDatastoreType.CONFIGURATION, interfacesIID, ifBuilder.build());
+ final CheckedFuture<Void, TransactionCommitFailedException> submit = writeTransaction.submit();
+ try {
+
+ submit.checkedGet();
+ LOG.info("Successfully posted interface " + ifBuilder.getName());
+ return true;
+ } catch (TransactionCommitFailedException ex) {
+ LOG.warn("Failed to post {} ", ifBuilder.getName());
+ return false;
+ }
+
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * This method for a given node's termination point returns the Mapping
+ * object based on portmapping.yang model stored in the MD-SAL
+ * data store which is created when the node is connected for the first time.
+ * The mapping object basically contains the following attributes of interest:
+ *
+ * <p>
+ * 1. Supporting circuit pack
+ * 2. Supporting port
+ * 3. Supporting OMS interface (if port on ROADM)
+ *
+ * @param nodeId unique Identifier for the node of interest.
+ * @param logicalConnPoint Name of the logical point
+ *
+ * @return Result Mapping object if success otherwise null.
+ */
+ public Mapping getMapping(String nodeId, String logicalConnPoint) {
+
+ // Getting circuit pack and port corresponding to logical connection
+ // point
+ InstanceIdentifier<Mapping> portMapping = InstanceIdentifier.builder(Network.class).child(Nodes.class,
+ new NodesKey(nodeId)).child(Mapping.class, new MappingKey(logicalConnPoint)).build();
+ ReadOnlyTransaction readTx = db.newReadOnlyTransaction();
+ Optional<Mapping> mapObject;
+ try {
+ mapObject = readTx.read(LogicalDatastoreType.CONFIGURATION, portMapping).get();
+ if (mapObject.isPresent()) {
+ LOG.info("Found mapping for the logical port " + mapObject.get().toString());
+ return mapObject.get();
+ } else {
+ LOG.info("Could not find mapping for logical connection point : " + logicalConnPoint + " for nodeId "
+ + nodeId);
+ return null;
+ }
+ } catch (InterruptedException | ExecutionException ex) {
+ LOG.info("Unable to read mapping for logical connection point : " + logicalConnPoint + " for nodeId "
+ + nodeId);
+ }
+ return null;
+ }
+}
\ No newline at end of file
odl:type="default" />
<reference id="mountPointService"
interface="org.opendaylight.controller.md.sal.binding.api.MountPointService" />
-
+ <reference id="rpcProviderRegistry"
+ interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry" />
<bean id="provider"
class="org.opendaylight.transportpce.renderer.RendererProvider"
init-method="init" destroy-method="close">
<argument ref="dataBroker" />
<argument ref="mountPointService" />
+ <argument ref="rpcProviderRegistry" />
</bean>
</blueprint>