From: Dhruv Bhardwaj Date: Wed, 8 Mar 2017 06:56:45 +0000 (+0200) Subject: Added code for renderer to: X-Git-Tag: v0.2.0~137 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=commitdiff_plain;h=c90116eb48dcad47f42b5444ade3c940effead1b Added code for renderer to: 1. create a logical to physical port mapping 2. setup cross connects/och facility on a list of roadm nodes and their tp's 3. delete cross connect/och faclity for a lsit of roadm nodes 4. create subcription to listen to notifations from the device Signed-off-by: Dhruv Bhardwaj Change-Id: If495dd0b482fb788299570fcd5d5fb4c77de1a0e --- diff --git a/api/src/main/yang/portmapping.yang b/api/src/main/yang/portmapping.yang new file mode 100644 index 000000000..5a0a36545 --- /dev/null +++ b/api/src/main/yang/portmapping.yang @@ -0,0 +1,43 @@ +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 diff --git a/api/src/main/yang/renderer.yang b/api/src/main/yang/renderer.yang new file mode 100644 index 000000000..0606a7b3a --- /dev/null +++ b/api/src/main/yang/renderer.yang @@ -0,0 +1,47 @@ +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 diff --git a/features/src/main/features/features.xml b/features/src/main/features/features.xml index 6332365db..cb9fcc19b 100644 --- a/features/src/main/features/features.xml +++ b/features/src/main/features/features.xml @@ -42,7 +42,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html odl-transportpce-rest odl-mdsal-apidocs odl-mdsal-xsql - odl-dlux-yangui + odl-dlux-core odl-transportpce diff --git a/ordmodels/pom.xml b/ordmodels/pom.xml index 2f87c1ab1..a63a34278 100644 --- a/ordmodels/pom.xml +++ b/ordmodels/pom.xml @@ -24,12 +24,34 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.mdsal.model - ietf-inet-types + ietf-inet-types-2013-07-15 org.opendaylight.mdsal.model - ietf-yang-types + iana-afn-safi + 2013.07.04.9.3-SNAPSHOT + + + org.opendaylight.mdsal.model + ietf-access-control-list + + + org.opendaylight.mdsal.model + iana-if-type-2014-05-08 + 2014.05.08.9.3-SNAPSHOT + + + org.opendaylight.mdsal.model + ietf-yang-types-20130715 + + + org.opendaylight.mdsal.model + ietf-interfaces + 2014.05.08.9.3-SNAPSHOT + + + org.opendaylight.mdsal.model + ietf-packet-fields - - + \ No newline at end of file diff --git a/ordmodels/src/main/yang/iana-afn-safi@2013-07-04.yang b/ordmodels/src/main/yang/iana-afn-safi@2013-07-04.yang deleted file mode 100644 index 5e684e99a..000000000 --- a/ordmodels/src/main/yang/iana-afn-safi@2013-07-04.yang +++ /dev/null @@ -1,526 +0,0 @@ -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. - "; - } - - 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. - "; - } -} \ No newline at end of file diff --git a/ordmodels/src/main/yang/iana-if-type@2014-05-08.yang b/ordmodels/src/main/yang/iana-if-type@2014-05-08.yang deleted file mode 100644 index 8ce0301a9..000000000 --- a/ordmodels/src/main/yang/iana-if-type@2014-05-08.yang +++ /dev/null @@ -1,1547 +0,0 @@ -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 - "; - 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. - "; - - 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 diff --git a/ordmodels/src/main/yang/ietf-access-control-list@2016-02-18.yang b/ordmodels/src/main/yang/ietf-access-control-list@2016-02-18.yang deleted file mode 100644 index 90681653a..000000000 --- a/ordmodels/src/main/yang/ietf-access-control-list@2016-02-18.yang +++ /dev/null @@ -1,209 +0,0 @@ -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 diff --git a/ordmodels/src/main/yang/ietf-inet-types@2010-09-24.yang b/ordmodels/src/main/yang/ietf-inet-types@2010-09-24.yang deleted file mode 100644 index a9fc2c8b9..000000000 --- a/ordmodels/src/main/yang/ietf-inet-types@2010-09-24.yang +++ /dev/null @@ -1,418 +0,0 @@ -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: - WG List: - - WG Chair: David Partain - - - WG Chair: David Kessens - - - Editor: Juergen Schoenwaelder - "; - - 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 . - - 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 diff --git a/ordmodels/src/main/yang/ietf-inet-types@2013-07-15.yang b/ordmodels/src/main/yang/ietf-inet-types@2013-07-15.yang deleted file mode 100644 index 0ca56288a..000000000 --- a/ordmodels/src/main/yang/ietf-inet-types@2013-07-15.yang +++ /dev/null @@ -1,457 +0,0 @@ -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: - WG List: - - WG Chair: David Kessens - - - WG Chair: Juergen Schoenwaelder - - - Editor: Juergen Schoenwaelder - "; - - 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 . - - 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 diff --git a/ordmodels/src/main/yang/ietf-interfaces@2014-05-08.yang b/ordmodels/src/main/yang/ietf-interfaces@2014-05-08.yang deleted file mode 100644 index dc2be088c..000000000 --- a/ordmodels/src/main/yang/ietf-interfaces@2014-05-08.yang +++ /dev/null @@ -1,726 +0,0 @@ -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: - WG List: - - WG Chair: Thomas Nadeau - - - WG Chair: Juergen Schoenwaelder - - - Editor: Martin Bjorklund - "; - - 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 diff --git a/ordmodels/src/main/yang/ietf-netconf-monitoring-extension@2013-12-10.yang b/ordmodels/src/main/yang/ietf-netconf-monitoring-extension.yang similarity index 100% rename from ordmodels/src/main/yang/ietf-netconf-monitoring-extension@2013-12-10.yang rename to ordmodels/src/main/yang/ietf-netconf-monitoring-extension.yang diff --git a/ordmodels/src/main/yang/ietf-netconf-monitoring@2010-10-04.yang b/ordmodels/src/main/yang/ietf-netconf-monitoring.yang similarity index 100% rename from ordmodels/src/main/yang/ietf-netconf-monitoring@2010-10-04.yang rename to ordmodels/src/main/yang/ietf-netconf-monitoring.yang diff --git a/ordmodels/src/main/yang/ietf-netconf-notifications@2012-02-06.yang b/ordmodels/src/main/yang/ietf-netconf-notifications@2012-02-06.yang deleted file mode 100644 index 94e3ac89d..000000000 --- a/ordmodels/src/main/yang/ietf-netconf-notifications@2012-02-06.yang +++ /dev/null @@ -1,363 +0,0 @@ -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: - WG List: - - WG Chair: Bert Wijnen - - - WG Chair: Mehmet Ersue - - - Editor: Andy Bierman - "; - - 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 - or 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 datastore has changed."; - } - enum startup { - description "The 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 - protocol operation."; - } - enum "killed" { - description - "The session was terminated in abnormal - fashion, e.g., by the NETCONF - 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 message or - messages."; - } - - - - enum "bad-hello" { - description - "The client's 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 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 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 diff --git a/ordmodels/src/main/yang/ietf-netconf@2011-06-01.yang b/ordmodels/src/main/yang/ietf-netconf.yang similarity index 100% rename from ordmodels/src/main/yang/ietf-netconf@2011-06-01.yang rename to ordmodels/src/main/yang/ietf-netconf.yang diff --git a/ordmodels/src/main/yang/ietf-network-topology@2015-06-08.yang b/ordmodels/src/main/yang/ietf-network-topology@2015-06-08.yang deleted file mode 100644 index 9ea86a88e..000000000 --- a/ordmodels/src/main/yang/ietf-network-topology@2015-06-08.yang +++ /dev/null @@ -1,243 +0,0 @@ -module ietf-network-topology { - yang-version 1; - namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology"; - prefix lnk; - - import ietf-inet-types { - prefix inet; - } - import ietf-network { - prefix nd; - } - - organization "TBD"; - contact - "WILL-BE-DEFINED-LATER"; - description - "This module defines a common base model for network topology, - augmenting the base network model with links to connect nodes, - as well as termination points to terminate links on nodes."; - - revision 2015-06-08 { - description - "Initial revision."; - reference "draft-ietf-i2rs-yang-network-topo-01"; - } - - typedef link-id { - type inet:uri; - description - "An identifier for a link in a topology. - The identifier may be opaque. - The identifier SHOULD be chosen such that the same link in a - real network topology will always be identified through the - same identifier, even if the model is instantiated in - separate datastores. An implementation MAY choose to capture - semantics in the identifier, for example to indicate the type - of link and/or the type of topology that the link is a part - of."; - } - - typedef tp-id { - type inet:uri; - description - "An identifier for termination points on a node. - The identifier may be opaque. - The identifier SHOULD be chosen such that the same TP in a - real network topology will always be identified through the - same identifier, even if the model is instantiated in - separate datastores. An implementation MAY choose to capture - semantics in the identifier, for example to indicate the type - of TP and/or the type of node and topology that the TP is a - part of."; - } - - grouping link-ref { - description - "References a link in a specific network."; - leaf link-ref { - type leafref { - path "/nd:network[nd:network-id=current()/../"+ - "nd:network-ref]/link/link-id"; - } - description - "A type for an absolute reference a link instance. - (This type should not be used for relative references. - In such a case, a relative path should be used instead.)"; - } - uses nd:network-ref; - } - - grouping tp-ref { - description - "References a termination point in a specific node."; - leaf tp-ref { - type leafref { - path "/nd:network[nd:network-id=current()/../"+ - "nd:network-ref]/nd:node[nd:node-id=current()/../"+ - "nd:node-ref]/termination-point/tp-id"; - } - description - "A type for an absolute reference to a termination point. - (This type should not be used for relative references. - In such a case, a relative path should be used instead.)"; - } - uses nd:node-ref; - } - - augment "/nd:network" { - description - "Add links to the network model."; - list link { - key "link-id"; - description - "A Network Link connects a by Local (Source) node and - a Remote (Destination) Network Nodes via a set of the - nodes' termination points. - As it is possible to have several links between the same - source and destination nodes, and as a link could - potentially be re-homed between termination points, to - ensure that we would always know to distinguish between - links, every link is identified by a dedicated link - identifier. - Note that a link models a point-to-point link, not a - multipoint link. - Layering dependencies on links in underlay topologies are - not represented as the layering information of nodes and of - termination points is sufficient."; - container source { - description - "This container holds the logical source of a particular - link."; - leaf source-node { - type leafref { - path "../../../nd:node/nd:node-id"; - } - mandatory true; - description - "Source node identifier, must be in same topology."; - } - leaf source-tp { - type leafref { - path "../../../nd:node[nd:node-id=current()/../"+ - "source-node]/termination-point/tp-id"; - } - description - "Termination point within source node that terminates - the link."; - } - } - container destination { - description - "This container holds the logical destination of a - particular link."; - leaf dest-node { - type leafref { - path "../../../nd:node/nd:node-id"; - } - mandatory true; - description - "Destination node identifier, must be in the same - network."; - } - leaf dest-tp { - type leafref { - path "../../../nd:node[nd:node-id=current()/../"+ - "dest-node]/termination-point/tp-id"; - } - description - "Termination point within destination node that - terminates the link."; - } - } - leaf link-id { - type link-id; - description - "The identifier of a link in the topology. - A link is specific to a topology to which it belongs."; - } - list supporting-link { - key "network-ref link-ref"; - description - "Identifies the link, or links, that this link - is dependent on."; - leaf network-ref { - type leafref { - path "../../../nd:supporting-network/nd:network-ref"; - } - description - "This leaf identifies in which underlay topology - supporting link is present."; - } - leaf link-ref { - type leafref { - path "/nd:network[nd:network-id=current()/.."+ - "/network-ref]/link/link-id"; - } - description - "This leaf identifies a link which is a part - of this link's underlay. Reference loops, in which - a link identifies itself as its underlay, either - directly or transitively, are not allowed."; - } - } - } - } - augment "/nd:network/nd:node" { - description - "Augment termination points which terminate links. - Termination points can ultimately be mapped to interfaces."; - list termination-point { - key "tp-id"; - description - "A termination point can terminate a link. - Depending on the type of topology, a termination point - could, for example, refer to a port or an interface."; - leaf tp-id { - type tp-id; - description - "Termination point identifier."; - } - list supporting-termination-point { - key "network-ref node-ref tp-ref"; - description - "The leaf list identifies any termination points that - the termination point is dependent on, or maps onto. - Those termination points will themselves be contained - in a supporting node. - This dependency information can be inferred from - the dependencies between links. For this reason, - this item is not separately configurable. Hence no - corresponding constraint needs to be articulated. - The corresponding information is simply provided by the - implementing system."; - leaf network-ref { - type leafref { - path "../../../nd:supporting-node/nd:network-ref"; - } - description - "This leaf identifies in which topology the - supporting termination point is present."; - } - leaf node-ref { - type leafref { - path "../../../nd:supporting-node/nd:node-ref"; - } - description - "This leaf identifies in which node the supporting - termination point is present."; - } - leaf tp-ref { - type leafref { - path "/nd:network[nd:network-id=current()/../"+ - "network-ref]/nd:node[nd:node-id=current()/../"+ - "node-ref]/termination-point/tp-id"; - } - description - "Reference to the underlay node, must be in a - different topology"; - } - } - } - } -} \ No newline at end of file diff --git a/ordmodels/src/main/yang/ietf-network@2015-06-08.yang b/ordmodels/src/main/yang/ietf-network@2015-06-08.yang deleted file mode 100644 index 8748714e1..000000000 --- a/ordmodels/src/main/yang/ietf-network@2015-06-08.yang +++ /dev/null @@ -1,144 +0,0 @@ -module ietf-network { - yang-version 1; - namespace "urn:ietf:params:xml:ns:yang:ietf-network"; - prefix nd; - - import ietf-inet-types { - prefix inet; - } - - organization "TBD"; - contact - "WILL-BE-DEFINED-LATER"; - description - "This module defines a common base model for a collection - of nodes in a network. Node definitions s are further used - in network topologies and inventories."; - - revision 2015-06-08 { - description - "Initial revision."; - reference "draft-ietf-i2rs-yang-network-topo-01"; - } - - typedef node-id { - type inet:uri; - description - "Identifier for a node."; - } - - typedef network-id { - type inet:uri; - description - "Identifier for a network."; - } - - grouping network-ref { - description - "Contains the information necessary to reference a network, - for example an underlay network."; - leaf network-ref { - type leafref { - path "/network/network-id"; - } - description - "Used to reference a network, for example an underlay - network."; - } - } - - grouping node-ref { - description - "Contains the information necessary to reference a node."; - leaf node-ref { - type leafref { - path "/network[network-id=current()/../network-ref]"+ - "/node/node-id"; - } - description - "Used to reference a node. - Nodes are identified relative to the network they are - contained in."; - } - uses network-ref; - } - - list network { - key "network-id"; - description - "Describes a network. - A network typically contains an inventory of nodes, - topological information (augmented through - network-topology model), as well as layering - information."; - container network-types { - description - "Serves as an augmentation target. - The network type is indicated through corresponding - presence containers augmented into this container."; - } - leaf network-id { - type network-id; - description - "Identifies a network."; - } - leaf server-provided { - type boolean; - config false; - description - "Indicates whether the information concerning this - particular network is populated by the server - (server-provided true, the general case for network - information discovered from the server), - or whether it is configured by a client - (server-provided true, possible e.g. for - service overlays managed through a controller)."; - } - list supporting-network { - key "network-ref"; - description - "An underlay network, used to represent layered network - topologies."; - leaf network-ref { - type leafref { - path "/network/network-id"; - } - description - "References the underlay network."; - } - } - list node { - key "node-id"; - description - "The inventory of nodes of this network."; - leaf node-id { - type node-id; - description - "Identifies a node uniquely within the containing - network."; - } - list supporting-node { - key "network-ref node-ref"; - description - "Represents another node, in an underlay network, that - this node is supported by. Used to represent layering - structure."; - leaf network-ref { - type leafref { - path "../../../supporting-network/network-ref"; - } - description - "References the underlay network that the - underlay node is part of."; - } - leaf node-ref { - type leafref { - path "/network/node/node-id"; - } - description - "References the underlay node itself."; - } - } - } - } -} \ No newline at end of file diff --git a/ordmodels/src/main/yang/ietf-packet-fields@2016-02-18.yang b/ordmodels/src/main/yang/ietf-packet-fields@2016-02-18.yang deleted file mode 100644 index 0ca86a890..000000000 --- a/ordmodels/src/main/yang/ietf-packet-fields@2016-02-18.yang +++ /dev/null @@ -1,195 +0,0 @@ -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 diff --git a/ordmodels/src/main/yang/ietf-restconf-monitoring@2016-08-15.yang b/ordmodels/src/main/yang/ietf-restconf-monitoring@2016-08-15.yang deleted file mode 100644 index 66c22b69b..000000000 --- a/ordmodels/src/main/yang/ietf-restconf-monitoring@2016-08-15.yang +++ /dev/null @@ -1,148 +0,0 @@ -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: - WG List: - Author: Andy Bierman - - Author: Martin Bjorklund - - Author: Kent Watsen - "; - - 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, 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, element."; - } - - leaf description { - type string; - description "Description of stream content"; - reference - "RFC 5277, Section 3.4, 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, 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, - 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 diff --git a/ordmodels/src/main/yang/ietf-restconf@2013-10-19.yang b/ordmodels/src/main/yang/ietf-restconf.yang similarity index 100% rename from ordmodels/src/main/yang/ietf-restconf@2013-10-19.yang rename to ordmodels/src/main/yang/ietf-restconf.yang diff --git a/ordmodels/src/main/yang/ietf-restconf@2016-08-15.yang b/ordmodels/src/main/yang/ietf-restconf@2016-08-15.yang deleted file mode 100644 index 310b99271..000000000 --- a/ordmodels/src/main/yang/ietf-restconf@2016-08-15.yang +++ /dev/null @@ -1,256 +0,0 @@ -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: - WG List: - Author: Andy Bierman - - Author: Martin Bjorklund - - Author: Kent Watsen - "; - - 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: - - 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 diff --git a/ordmodels/src/main/yang/ietf-yang-types@2010-09-24.yang b/ordmodels/src/main/yang/ietf-yang-types@2010-09-24.yang deleted file mode 100644 index 5fe4cedd8..000000000 --- a/ordmodels/src/main/yang/ietf-yang-types@2010-09-24.yang +++ /dev/null @@ -1,396 +0,0 @@ -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: - WG List: - - WG Chair: David Partain - - - WG Chair: David Kessens - - - Editor: Juergen Schoenwaelder - "; - - 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 diff --git a/ordmodels/src/main/yang/ietf-yang-types@2013-07-15.yang b/ordmodels/src/main/yang/ietf-yang-types@2013-07-15.yang deleted file mode 100644 index bdff18cc4..000000000 --- a/ordmodels/src/main/yang/ietf-yang-types@2013-07-15.yang +++ /dev/null @@ -1,467 +0,0 @@ -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: - WG List: - WG Chair: David Kessens - - - WG Chair: Juergen Schoenwaelder - - - Editor: Juergen Schoenwaelder - "; - - 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 diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererNotificationsImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererNotificationsImpl.java new file mode 100644 index 000000000..90b12a93e --- /dev/null +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererNotificationsImpl.java @@ -0,0 +1,232 @@ +/* + * 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 { + + private final DataBroker dataBroker; + private final MountPointService mountService; + private static final Logger LOG = LoggerFactory.getLogger(RendererNotificationsImpl.class); + private ListenerRegistration dataTreeChangeListenerRegistration; + + private final Set currentMountedDevice; + public static final InstanceIdentifier NETCONF_TOPO_IID = InstanceIdentifier.create(NetworkTopology.class) + .child(Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName()))); + + LoadingCache> mountIds = CacheBuilder.newBuilder().maximumSize(20) + .build(new CacheLoader>() { + @Override + public KeyedInstanceIdentifier 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 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; + 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 = 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 + 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 + 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 + 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 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 accessTcaNotificationListenerRegistration = + notificationService.get().registerNotificationListener(tcaListener); + + // Listening to NETCONF datastream + final String streamName = "NETCONF"; + final Optional 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> 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> changes) { + + for (DataTreeModification change : changes) { + + DataObjectModification 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 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 diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererProvider.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererProvider.java index 66eee2251..2f6ede412 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererProvider.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererProvider.java @@ -1,30 +1,44 @@ /* - * 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 deviceRendererRegistration; + private final Set 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"); + } } /** @@ -32,6 +46,12 @@ public class RendererProvider { */ 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)); } /** @@ -39,5 +59,13 @@ public class RendererProvider { */ 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 diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/AlarmNotificationListener.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/AlarmNotificationListener.java new file mode 100644 index 000000000..8102abeeb --- /dev/null +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/AlarmNotificationListener.java @@ -0,0 +1,29 @@ +/* + * 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 diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/DeOperationsListener.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/DeOperationsListener.java new file mode 100644 index 000000000..2292b2fd9 --- /dev/null +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/DeOperationsListener.java @@ -0,0 +1,29 @@ +/* + * 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 diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/DeviceListener.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/DeviceListener.java new file mode 100644 index 000000000..4b0f45c05 --- /dev/null +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/DeviceListener.java @@ -0,0 +1,42 @@ +/* + * 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 diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/LldpListener.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/LldpListener.java new file mode 100644 index 000000000..7b18f09a9 --- /dev/null +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/LldpListener.java @@ -0,0 +1,30 @@ +/* + * 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 diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/TcaListener.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/TcaListener.java new file mode 100644 index 000000000..b9b92c757 --- /dev/null +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/listeners/TcaListener.java @@ -0,0 +1,29 @@ +/* + * 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 diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/mapping/PortMapping.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/mapping/PortMapping.java new file mode 100644 index 000000000..c8fc2a1ac --- /dev/null +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/mapping/PortMapping.java @@ -0,0 +1,374 @@ +/* + * 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 nodesIID = InstanceIdentifier.builder(Network.class).build(); + + NetworkBuilder nwBldr = new NetworkBuilder(); + List portMapList = new ArrayList<>(); + List nodesList = new ArrayList<>(); + + if (deviceDb != null && deviceInfo != null) { + + // Creating mapping data for degree TTP's + List degreeConPorts = getDegreePorts(deviceDb, deviceInfo); + + //Getting circuit-pack-name/port-name corresponding to TTP's + for (ConnectionPorts cp : degreeConPorts) { + + InstanceIdentifier 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 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 srgCps = getSrgCps( + deviceDb, deviceInfo); + + for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev161014.srg.CircuitPacks cps : srgCps) { + InstanceIdentifier cpIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child( + CircuitPacks.class, new CircuitPacksKey(cps.getCircuitPackName())); + try { + + ReadOnlyTransaction rtx = deviceDb.newReadOnlyTransaction(); + Optional 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 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 infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class); + try { + Optional 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 getDegreePorts(DataBroker deviceDb, Info ordmInfo) { + + List 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 deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child( + Degree.class, new DegreeKey(degreeCounter)); + try { + Optional ordmDegreeObject = rtx.read(LogicalDatastoreType.CONFIGURATION, deviceIID).get(); + + if (ordmDegreeObject.isPresent()) { + degreeConPorts.addAll(new ArrayList(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 getSrgCps( + DataBroker deviceDb, Info ordmInfo) { + + List 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 srgIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child( + SharedRiskGroup.class, new SharedRiskGroupKey(srgCounter)); + try { + Optional ordmSrgObject = rtx.read(LogicalDatastoreType.CONFIGURATION, srgIID).get(); + + if (ordmSrgObject.isPresent()) { + + srgCps.addAll( + new ArrayList(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 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 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 diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRenderer.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRenderer.java new file mode 100644 index 000000000..e5fb17932 --- /dev/null +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRenderer.java @@ -0,0 +1,260 @@ +/* + * 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 currentMountedDevice; + private final Set nodesProvisioned; + + public DeviceRenderer(DataBroker db, MountPointService mps, Set 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: + * + *

+ * 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. + * + *

+ * 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. + * + *

+ * 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> 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: + * + *

+ * 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. + * + *

+ * 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 = 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 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 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: + * + *

+ * 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. + * + *

+ * 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 = 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 rdmConnectionIID = InstanceIdentifier.create( + OrgOpenroadmDevice.class).child(RoadmConnections.class, new RoadmConnectionsKey(srcTp + "-" + + destTp + "-" + waveNumber)); + ReadWriteTransaction writeTx = netconfNodeDataBroker.newReadWriteTransaction(); + writeTx.delete(LogicalDatastoreType.CONFIGURATION, rdmConnectionIID); + final CheckedFuture 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 srcInterfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) + .child(Interface.class, new InterfaceKey(srcTp + "-" + waveNumber.toString())); + writeTx.delete(LogicalDatastoreType.CONFIGURATION, srcInterfacesIID); + final CheckedFuture 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 destInterfacesIID = InstanceIdentifier.create( + OrgOpenroadmDevice.class).child(Interface.class, new InterfaceKey(destTp + "-" + waveNumber + .toString())); + writeTx.delete(LogicalDatastoreType.CONFIGURATION, destInterfacesIID); + final CheckedFuture 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 diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OpenRoadmInterfaces.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OpenRoadmInterfaces.java new file mode 100644 index 000000000..39e64da57 --- /dev/null +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OpenRoadmInterfaces.java @@ -0,0 +1,296 @@ +/* + * 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: + * + *

+ * 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 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 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 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 portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child( + CircuitPacks.class, new CircuitPacksKey(portMap.getSupportingCircuitPackName())).child(Ports.class, + new PortsKey(portMap.getSupportingPort())); + Optional 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 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 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: + * + *

+ * 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 portMapping = InstanceIdentifier.builder(Network.class).child(Nodes.class, + new NodesKey(nodeId)).child(Mapping.class, new MappingKey(logicalConnPoint)).build(); + ReadOnlyTransaction readTx = db.newReadOnlyTransaction(); + Optional 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 diff --git a/renderer/src/main/resources/org/opendaylight/blueprint/renderer-blueprint.xml b/renderer/src/main/resources/org/opendaylight/blueprint/renderer-blueprint.xml index 5b669199a..97260f5f9 100644 --- a/renderer/src/main/resources/org/opendaylight/blueprint/renderer-blueprint.xml +++ b/renderer/src/main/resources/org/opendaylight/blueprint/renderer-blueprint.xml @@ -16,12 +16,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html odl:type="default" /> - + +