[ONOS-5990] L3VPN device model YANG files
Change-Id: Ia1640c7745eb1f977e0fddc85c7b85704fc46a13
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-bgp-l3vpn@2016-09-09.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-bgp-l3vpn@2016-09-09.yang
new file mode 100644
index 0000000..276a59f
--- /dev/null
+++ b/apps/l3vpn/yangmodel/src/main/yang/ietf-bgp-l3vpn@2016-09-09.yang
@@ -0,0 +1,723 @@
+module ietf-bgp-l3vpn {
+ namespace "urn:ietf:params:xml:ns:yang:ietf-bgp-l3vpn";
+ // replace with IANA namespace when assigned
+ prefix l3vpn ;
+
+ import ietf-network-instance {
+ prefix ni;
+ revision-date 2016-06-23;
+ }
+
+ import ietf-interfaces {
+ prefix if;
+ }
+
+// TODO: TBD for bgp-info
+// import ietf-bgp {
+// prefix bgp;
+// revision-date 2016-06-21;
+// }
+
+ organization
+ "IETF BGP Enabled Services WG";
+
+ contact
+ "BESS working group - bess@ietf.org";
+ description
+ "This YANG module defines a YANG data model to configure and
+ manage BGP Layer3 VPNs. It augments the IETF bgp yang model
+ and IETF network instance model to add L3VPN specific
+ configuration and operational knobs.
+
+
+ Terms and Acronyms
+
+ AF : Address Family
+
+ AS : Autonomous System
+
+ ASBR : Autonomous Systems Border Router
+
+ BGP (bgp) : Border Gateway Protocol
+
+ CE : Customer Edge
+
+ IP (ip) : Internet Protocol
+
+ IPv4 (ipv4):Internet Protocol Version 4
+
+ IPv6 (ipv6): Internet Protocol Version 6
+
+ L3VPN: Layer 3 VPN
+
+ PE : Provider Edge
+
+ RT : Route Target
+
+ RD : Route Distinguisher
+
+ VPN : Virtual Private Network
+
+ VRF : Virtual Routing and Forwarding
+
+ ";
+
+ revision 2016-09-09 {
+ description
+ "Initial revision.";
+ reference
+ "RFC XXXX: A YANG Data Model for BGP L3VPN config management";
+ }
+
+ //RD
+ grouping route-distinguisher-params {
+ description "BGP route distinguisher";
+ container route-distinguisher {
+ description "Route distinguisher value as per RFC4364";
+ container config {
+ description
+ "Configuration parameters for route distinguisher";
+ leaf rd {
+ type string;
+ description "Route distinguisher value as per RFC4364";
+ }
+ }
+ container state {
+ config "false" ;
+ description
+ "State information for route distinguisher";
+ leaf rd {
+ type string;
+ description "Route distinguisher value";
+ }
+ }
+ }
+ }
+
+ //Label mode
+ typedef bgp-label-mode {
+ type enumeration {
+ enum per-ce {
+ description "Allocate labels per CE";
+ }
+ enum per-route {
+ description "Allocate labels per prefix";
+ }
+ enum per-vpn {
+ description "Allocate labels per VRF";
+ }
+ }
+ description "BGP label allocation mode";
+ }
+
+ //Fwding mode
+ typedef fwd-mode-type {
+ type enumeration {
+ enum mpls {
+ description "Forwarding mode mpls";
+ }
+ }
+ description
+ "Enable forwarding mode under ASBR facing interface";
+ }
+
+ grouping forwarding-mode {
+ description "Forwarding mode of interface for ASBR scenario";
+ container forwarding-mode {
+ description "Forwarding mode of interface for ASBR scenario";
+ container config {
+ description "Configuration of Forwarding mode";
+ leaf forwarding-mode {
+ type fwd-mode-type;
+ description "Forwarding mode for this interface";
+ }
+ }
+ container state {
+ config "false";
+ description "State information of Forwarding mode";
+ leaf forwarding-mode {
+ type fwd-mode-type;
+ description "Forwarding mode for this interface";
+ }
+ }
+ }
+ }
+
+ grouping label-security {
+ description "Mpls label security for ASBR option B scenario";
+ container mpls-label-security {
+ description "MPLS label secruity";
+ container config {
+ description "Configuration parameters";
+ leaf rpf {
+ type boolean;
+ description "Enable MPLS label security rpf on interface";
+ }
+ }
+ container state {
+ config "false";
+ description "State information";
+ leaf rpf {
+ type boolean;
+ description "MPLS label security rpf on interface";
+ }
+ }
+ }
+ }
+
+
+ //per VPN instance table limit under BGP
+ grouping prefix-limit {
+ description
+ "The prefix limit command sets a limit on the maximum
+ number of prefixes supported in the existing VPN
+ instance, preventing the PE from importing excessive
+ VPN route prefixes.
+ ";
+
+ leaf prefix-limit-number {
+ type uint32 {
+ range "1..4294967295";
+ }
+ description
+ "Specifies the maximum number of prefixes supported in the
+ VPN instance IPv4 or IPv6 address family.";
+ }
+
+ choice prefix-limit-action {
+ description ".";
+ case enable-alert-percent {
+ leaf alert-percent-value {
+ type uint8 {
+ range "1..100";
+ }
+ description
+ "Specifies the proportion of the alarm threshold to the
+ maximum number of prefixes.";
+ }
+ leaf route-unchanged {
+ type boolean;
+ default "false";
+ description
+ "Indicates that the routing table remains unchanged.
+ By default, route-unchanged is not configured. When
+ the number of prefixes in the routing table is
+ greater than the value of the parameter number,
+ routes are processed as follows:
+ (1)If route-unchanged is configured, routes in the
+ routing table remain unchanged.
+ (2)If route-unchanged is not configured, all routes
+ in the routing table are deleted and then
+ re-added.";
+ }
+ }
+ case enable-simple-alert {
+ leaf simple-alert {
+ type boolean;
+ default "false";
+ description
+ "Indicates that when the number of VPN route prefixes
+ exceeds number, prefixes can still join the VPN
+ routing table and alarms are displayed.";
+ }
+ }
+ }
+ }
+
+ grouping vpn-pfx-limit {
+ description "Per VPN instance table limit under BGP";
+ container vpn-prefix-limit {
+ description "Prefix limit for this table";
+ container config {
+ description "Config parameters";
+ uses prefix-limit;
+ }
+ container state {
+ config "false";
+ description "State parameters";
+ uses prefix-limit;
+ }
+ }
+ }
+
+ grouping route-target-set {
+ description
+ "Extended community route-target set ";
+ list rts {
+ key "rt" ;
+ description
+ "List of route-targets" ;
+ leaf rt {
+ type string {
+ pattern '([0-9]+:[0-9]+)';
+ }
+ description "Route target extended community as per RFC4360";
+ }
+ leaf rt-type {
+ type enumeration {
+ enum import {
+ description "Route target is for import routes";
+ }
+ enum export {
+ description "Route target is for export routes";
+ }
+ enum both {
+ description
+ "Route target is for both import and export routes";
+ }
+ }
+ description "Route target type";
+ }
+ }
+ leaf route-policy {
+ type string;
+ description
+ "Reference to the policy containing set of routes.
+ TBD: leafref to policy entry in IETF policy model";
+ }
+ }
+
+ grouping import-from-gbl {
+ description "Import from global routing table";
+ leaf enable {
+ type boolean;
+ description "Enable";
+ }
+ leaf advertise-as-vpn {
+ type boolean;
+ description
+ "Advertise routes imported from global table as VPN routes";
+ }
+ leaf route-policy {
+ type string;
+ description "Route policy as filter for importing routes";
+ }
+
+ leaf bgp-valid-route {
+ type boolean;
+ description
+ "Enable all valid routes (including non-best paths) to be
+ candidate for import";
+ }
+
+ leaf protocol {
+ type enumeration {
+ enum ALL {
+ value "0";
+ description "ALL:";
+ }
+ enum Direct {
+ value "1";
+ description "Direct:";
+ }
+ enum OSPF {
+ value "2";
+ description "OSPF:";
+ }
+ enum ISIS {
+ value "3";
+ description "ISIS:";
+ }
+ enum Static {
+ value "4";
+ description "Static:";
+ }
+ enum RIP {
+ value "5";
+ description "RIP:";
+ }
+ enum BGP {
+ value "6";
+ description "BGP:";
+ }
+ enum OSPFV3 {
+ value "7";
+ description "OSPFV3:";
+ }
+ enum RIPNG {
+ value "8";
+ description "RIPNG:";
+ }
+ }
+ description
+ "Specifies the protocol from which routes are imported.
+ At present, In the IPv4 unicast address family view,
+ the protocol can be IS-IS,static, direct and BGP.";
+ }
+
+ leaf instance {
+ type string;
+ description
+ "Specifies the instance id of the protocol";
+ }
+ }
+ grouping global-imports {
+ description "Grouping for imports from global routing table";
+ container import-from-global {
+ description "Import from global routing table";
+ container config {
+ description "Configuration";
+ uses import-from-gbl;
+ }
+ container state {
+ config "false";
+ description "State";
+ uses import-from-gbl;
+ }
+ }
+ }
+
+
+ grouping export-to-gbl {
+ description "Export routes to default VRF";
+ leaf enable {
+ type boolean;
+ description "Enable";
+ }
+ }
+
+ grouping global-exports {
+ description "Grouping for exports routes to global table";
+ container export-to-global {
+ description "Export to global routing table";
+ container config {
+ description "Configuration";
+ uses export-to-gbl;
+ }
+ container state {
+ config "false";
+ description "State";
+ uses export-to-gbl;
+ }
+ }
+ }
+
+ grouping route-target-params {
+ description "Grouping to specify rules for route import and export";
+ container route-targets {
+ description
+ "Set of route-targets to match for import and export routes
+ to/from VRF";
+ container config {
+ description
+ "Configuration of route targets";
+ uses route-target-set ;
+ }
+ container state {
+ config "false" ;
+ description
+ "State information for route targets";
+ uses route-target-set ;
+ }
+ }
+ }
+
+ grouping route-tbl-limit-params {
+ description "Grouping for VPN table prefix limit config";
+ leaf routing-table-limit-number {
+ type uint32 {
+ range "1..4294967295";
+ }
+ description
+ "Specifies the maximum number of routes supported by a
+ VPN instance. ";
+ }
+
+ choice routing-table-limit-action {
+ description ".";
+ case enable-alert-percent {
+ leaf alert-percent-value {
+ type uint8 {
+ range "1..100";
+ }
+ description
+ "Specifies the percentage of the maximum number of
+ routes. When the maximum number of routes that join
+ the VPN instance is up to the value
+ (number*alert-percent)/100, the system prompts
+ alarms. The VPN routes can be still added to the
+ routing table, but after the number of routes
+ reaches number, the subsequent routes are
+ dropped.";
+ }
+ }
+ case enable-simple-alert {
+ leaf simple-alert {
+ type boolean;
+ description
+ "Indicates that when VPN routes exceed number, routes
+ can still be added into the routing table, but the
+ system prompts alarms.
+ However, after the total number of VPN routes and
+ network public routes reaches the unicast route limit
+ specified in the License, the subsequent VPN routes
+ are dropped.";
+ }
+ }
+ }
+ }
+
+ grouping routing-tbl-limit {
+ description ".";
+ container routing-table-limit {
+ description
+ "The routing-table limit command sets a limit on the maximum
+ number of routes that the IPv4 or IPv6 address family of a
+ VPN instance can support.
+ By default, there is no limit on the maximum number of
+ routes that the IPv4 or IPv6 address family of a VPN
+ instance can support, but the total number of private
+ network and public network routes on a device cannot
+ exceed the allowed maximum number of unicast routes.";
+ container config {
+ description "Config parameters";
+ uses route-tbl-limit-params;
+ }
+ container state {
+ config "false";
+ description "State parameters";
+ uses route-tbl-limit-params;
+ }
+ }
+ }
+
+ // Tunnel policy parameters
+ grouping tunnel-params {
+ description "Tunnel parameters";
+ container tunnel-params {
+ description "Tunnel config parameters";
+ container config {
+ description "configuration parameters";
+ leaf tunnel-policy {
+ type string;
+ description
+ "Tunnel policy name.";
+ }
+ }
+ container state {
+ config "false";
+ description "state parameters";
+ leaf tunnel-policy {
+ type string;
+ description
+ "Tunnel policy name.";
+ }
+ }
+ }
+ }
+
+ // Grouping for the L3vpn specific parameters under VRF
+ // (network-instance)
+ grouping l3vpn-vrf-params {
+ description "Specify route filtering rules for import/export";
+ container ipv4 {
+ description
+ "Specify route filtering rules for import/export";
+ container unicast {
+ description
+ "Specify route filtering rules for import/export";
+ uses route-target-params;
+ uses global-imports;
+ uses global-exports;
+ uses routing-tbl-limit;
+ uses tunnel-params;
+ }
+ }
+ container ipv6 {
+ description
+ "Ipv6 address family specific rules for import/export";
+ container unicast {
+ description "Ipv6 unicast address family";
+ uses route-target-params;
+ uses global-imports;
+ uses global-exports;
+ uses routing-tbl-limit;
+ uses tunnel-params;
+ }
+ }
+ }
+
+ grouping bgp-label-mode {
+ description "MPLS/VPN label allocation mode";
+ container config {
+ description
+ "Configuration parameters for label allocation mode";
+ leaf label-mode {
+ type bgp-label-mode;
+ description "Label allocation mode";
+ }
+ }
+ container state {
+ config "false" ;
+ description "State information for label allocation mode";
+ leaf label-mode {
+ type bgp-label-mode;
+ description "Label allocation mode";
+ }
+ }
+ }
+
+ grouping retain-route-targets {
+ description "Grouping for route target accept";
+ container retain-route-targets {
+ description "Control route target acceptance behavior for ASBRs";
+ container config {
+ description
+ "Configuration parameters for retaining route targets";
+ leaf all {
+ type empty;
+ description "Disable filtering of all route-targets";
+ }
+ leaf route-policy {
+ type string;
+ description "Filter routes as per filter policy name
+ TBD: leafref to IETF routing policy model";
+ }
+ }
+ container state {
+ config "false" ;
+ description "State information for retaining route targets";
+ leaf all {
+ type empty;
+ description "Disable filtering of all route-targets";
+ }
+ leaf route-policy {
+ type string;
+ description "Filter routes as per filter policy name";
+ }
+ }
+ }
+ }
+
+ grouping nexthop-opts {
+ description "Next hop control options for inter-as route exchange";
+ leaf next-hop-self {
+ type boolean;
+ description
+ "Set nexthop of the route to self when advertising routes";
+ }
+ leaf next-hop-unchanged {
+ type boolean;
+ description "Enforce no nexthop change when advertising routes";
+ }
+ }
+
+ grouping asbr-nexthop-options {
+ description "Nexthop parameters for inter-as VPN options ";
+ container nexthop-options {
+ description "Nexthop related options for inter-as options";
+ container config {
+ description "Configuration parameters for nexthop options";
+ uses nexthop-opts;
+ }
+ container state {
+ config "false";
+ description "State information for nexthop options" ;
+ uses nexthop-opts;
+ }
+ }
+ }
+
+ //
+ // VRF specific parameters.
+ // RD and RTs and route import-export rules are added under
+ // network instance container in network instance model, hence
+ // per VRF scoped
+ augment "/ni:devices/ni:device/ni:network-instances/ni:network-instance" {
+ description
+ "Augment network instance for per VRF L3vpn parameters";
+ container l3vpn {
+ //Enable this check once network instance model has
+ //identify defined for VRF type
+ //when "../type='rt:vrf-network-instance'" {
+ // description
+ // "This container is only valid for vrf routing instance.";
+ //}
+ description "Configuration of L3VPN specific parameters";
+
+ uses route-distinguisher-params;
+ uses l3vpn-vrf-params ;
+ }
+ }
+
+ // bgp mpls forwarding enable required for inter-as option AB.
+ augment "/if:devices/if:device/if:interfaces/if:interface" {
+ description
+ "BGP mpls forwarding mode configuration on interface for
+ ASBR scenario";
+ uses forwarding-mode ;
+ uses label-security;
+ }
+
+ //
+ // BGP Specific Paramters
+ //
+
+ //
+ // Retain route-target for inter-as option ASBR knob.
+ // vpn prefix limits
+ // vpnv4/vpnv6 address-family only.
+ //augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
+ // "bgp:afi-safi/bgp:l3vpn-ipv4-unicast" {
+ // description "Retain route targets for ASBR scenario";
+ // uses retain-route-targets;
+ // uses vpn-pfx-limit;
+ // }
+
+ // augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
+ // "bgp:afi-safi/bgp:l3vpn-ipv6-unicast" {
+ // description "Retain route targets for ASBR scenario";
+ // uses retain-route-targets;
+ // uses vpn-pfx-limit;
+ // }
+
+ // Label allocation mode configuration. Certain AFs only.
+ // augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
+ // "bgp:afi-safi/bgp:ipv4-unicast" {
+ // description
+ // "Augment BGP global AF mode for label allocation mode
+ // configuration";
+ // uses bgp-label-mode ;
+ // uses routing-tbl-limit;
+ // }
+
+ // augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
+ // "bgp:afi-safi/bgp:ipv6-unicast" {
+ // description
+ // "Augment BGP global AF mode for label allocation mode
+ // configuration";
+ // uses bgp-label-mode ;
+ // uses routing-tbl-limit;
+ // }
+
+
+ // Nexthop options for the inter-as ASBR peering.
+ // augment "/bgp:bgp/bgp:neighbors/bgp:neighbor" {
+ // description
+ // "Augment BGP NBR mode with nexthop options for inter-as ASBRs";
+ // uses asbr-nexthop-options;
+ // }
+
+ // augment "/bgp:bgp/bgp:peer-groups/bgp:peer-group" {
+ // description
+ // "Augment BGP peer-group mode with nexthop options for inter-as
+ // ASBRs";
+ // uses asbr-nexthop-options;
+ // }
+
+ // augment "/bgp:bgp/bgp:neighbors/bgp:neighbor/" +
+ // "bgp:afi-safis/bgp:afi-safi" {
+ // description
+ // "Augment BGP NBR AF mode with nexthop options for inter-as
+ // ASBRs";
+ // uses asbr-nexthop-options;
+ // }
+
+ // augment "/bgp:bgp/bgp:peer-groups/bgp:peer-group/" +
+ // "bgp:afi-safis/bgp:afi-safi" {
+ // description
+ // "Augment BGP peer-group AF mode with nexthop options for inter-as
+ // ASBRs";
+ // uses asbr-nexthop-options;
+ // }
+}
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-interfaces@2014-05-08.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-interfaces@2014-05-08.yang
new file mode 100644
index 0000000..2171a5a
--- /dev/null
+++ b/apps/l3vpn/yangmodel/src/main/yang/ietf-interfaces@2014-05-08.yang
@@ -0,0 +1,704 @@
+module ietf-interfaces {
+
+ namespace "urn:ietf:params:xml:ns:yang:ietf-interfaces";
+ prefix if;
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ organization
+ "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+ contact
+ "WG Web: <http://tools.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+
+ WG Chair: Thomas Nadeau
+ <mailto:tnadeau@lucidvision.com>
+
+ WG Chair: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+
+ Editor: Martin Bjorklund
+ <mailto:mbj@tail-f.com>";
+
+ description
+ "This module contains a collection of YANG definitions for
+ managing network interfaces.
+
+ Copyright (c) 2014 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (http://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 7223; see
+ the RFC itself for full legal notices.";
+ revision 2014-05-08 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 7223: A YANG Data Model for Interface Management";
+ }
+
+ /*
+ * Typedefs
+ */
+
+ typedef interface-ref {
+ type leafref {
+ path "/if:devices/if:device/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:devices/if:device/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 devices {
+ list device {
+ key deviceid;
+ leaf deviceid {
+ type string;
+ }
+ 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 of a
+ /interfaces-state/interface list. If the configuration
+ 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 touse some mechanism to handle the
+ differences in sizeand 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/apps/l3vpn/yangmodel/src/main/yang/ietf-ip@2014-06-16.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-ip@2014-06-16.yang
new file mode 100644
index 0000000..0446258
--- /dev/null
+++ b/apps/l3vpn/yangmodel/src/main/yang/ietf-ip@2014-06-16.yang
@@ -0,0 +1,740 @@
+module ietf-ip {
+
+ yang-version 1;
+
+ namespace
+ "urn:ietf:params:xml:ns:yang:ietf-ip";
+
+ prefix ip;
+
+ import ietf-interfaces {
+ prefix if;
+ }
+ import ietf-inet-types {
+ prefix inet;
+ }
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ organization
+ "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+ contact
+ "WG Web: <http://tools.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+
+ WG Chair: Thomas Nadeau
+ <mailto:tnadeau@lucidvision.com>
+
+ WG Chair: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+
+ Editor: Martin Bjorklund
+ <mailto:mbj@tail-f.com>";
+
+ description
+ "This module contains a collection of YANG definitions for
+ configuring IP implementations.
+
+ 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 7277; see
+ the RFC itself for full legal notices.";
+
+ revision "2014-06-16" {
+ description "Initial revision.";
+ reference
+ "RFC 7277: A YANG Data Model for IP Management";
+
+ }
+
+ feature ipv4-non-contiguous-netmasks {
+ description
+ "Indicates support for configuring non-contiguous
+ subnet masks.";
+ }
+
+ feature ipv6-privacy-autoconf {
+ description
+ "Indicates support for Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6.";
+ reference
+ "RFC 4941: Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6";
+ }
+
+ typedef ip-address-origin {
+ type enumeration {
+ enum "other" {
+ value 0;
+ description
+ "None of the following.";
+ }
+ enum "static" {
+ value 1;
+ description
+ "Indicates that the address has been statically
+ configured - for example, using NETCONF or a Command Line
+ Interface.";
+ }
+ enum "dhcp" {
+ value 2;
+ description
+ "Indicates an address that has been assigned to this
+ system by a DHCP server.";
+ }
+ enum "link-layer" {
+ value 3;
+ description
+ "Indicates an address created by IPv6 stateless
+ autoconfiguration that embeds a link-layer address in its
+ interface identifier.";
+ }
+ enum "random" {
+ value 4;
+ description
+ "Indicates an address chosen by the system at
+
+ random, e.g., an IPv4 address within 169.254/16, an
+ RFC 4941 temporary address, or an RFC 7217 semantically
+ opaque address.";
+ reference
+ "RFC 4941: Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6
+ RFC 7217: A Method for Generating Semantically Opaque
+ Interface Identifiers with IPv6 Stateless
+ Address Autoconfiguration (SLAAC)";
+ }
+ }
+ description
+ "The origin of an address.";
+ }
+
+ typedef neighbor-origin {
+ type enumeration {
+ enum "other" {
+ value 0;
+ description
+ "None of the following.";
+ }
+ enum "static" {
+ value 1;
+ description
+ "Indicates that the mapping has been statically
+ configured - for example, using NETCONF or a Command Line
+ Interface.";
+ }
+ enum "dynamic" {
+ value 2;
+ description
+ "Indicates that the mapping has been dynamically resolved
+ using, e.g., IPv4 ARP or the IPv6 Neighbor Discovery
+ protocol.";
+ }
+ }
+ description
+ "The origin of a neighbor entry.";
+ }
+
+ augment /if:devices/if:device/if:interfaces/if:interface {
+ description
+ "Parameters for configuring IP on interfaces.
+
+ If an interface is not capable of running IP, the server
+ must not allow the client to configure these parameters.";
+ container ipv4 {
+ presence
+ "Enables IPv4 unless the 'enabled' leaf
+ (which defaults to 'true') is set to 'false'";
+ description
+ "Parameters for the IPv4 address family.";
+ leaf enabled {
+ type boolean;
+ default true;
+ description
+ "Controls whether IPv4 is enabled or disabled on this
+ interface. When IPv4 is enabled, this interface is
+ connected to an IPv4 stack, and the interface can send
+ and receive IPv4 packets.";
+ }
+
+ leaf forwarding {
+ type boolean;
+ default false;
+ description
+ "Controls IPv4 packet forwarding of datagrams received by,
+ but not addressed to, this interface. IPv4 routers
+ forward datagrams. IPv4 hosts do not (except those
+ source-routed via the host).";
+ }
+
+ leaf mtu {
+ type uint16 {
+ range "68..max";
+ }
+ units "octets";
+ description
+ "The size, in octets, of the largest IPv4 packet that the
+ interface will send and receive.
+
+ The server may restrict the allowed values for this leaf,
+ depending on the interface's type.
+
+ If this leaf is not configured, the operationally used MTU
+ depends on the interface's type.";
+ reference
+ "RFC 791: Internet Protocol";
+
+ }
+
+ list address {
+ key "ip";
+ description
+ "The list of configured IPv4 addresses on the interface.";
+ leaf ip {
+ type inet:ipv4-address-no-zone;
+ description
+ "The IPv4 address on the interface.";
+ }
+
+ choice subnet {
+ mandatory true;
+ description
+ "The subnet can be specified as a prefix-length, or,
+ if the server supports non-contiguous netmasks, as
+ a netmask.";
+ leaf prefix-length {
+ type uint8 {
+ range "0..32";
+ }
+ description
+ "The length of the subnet prefix.";
+ }
+ leaf netmask {
+ if-feature ipv4-non-contiguous-netmasks;
+ type yang:dotted-quad;
+ description
+ "The subnet specified as a netmask.";
+ }
+ } // choice subnet
+ } // list address
+
+ list neighbor {
+ key "ip";
+ description
+ "A list of mappings from IPv4 addresses to
+ link-layer addresses.
+
+ Entries in this list are used as static entries in the
+ ARP Cache.";
+ reference
+ "RFC 826: An Ethernet Address Resolution Protocol";
+
+ leaf ip {
+ type inet:ipv4-address-no-zone;
+ description
+ "The IPv4 address of the neighbor node.";
+ }
+
+ leaf link-layer-address {
+ type yang:phys-address;
+ mandatory true;
+ description
+ "The link-layer address of the neighbor node.";
+ }
+ } // list neighbor
+ } // container ipv4
+
+ container ipv6 {
+ presence
+ "Enables IPv6 unless the 'enabled' leaf
+ (which defaults to 'true') is set to 'false'";
+ description
+ "Parameters for the IPv6 address family.";
+ leaf enabled {
+ type boolean;
+ default true;
+ description
+ "Controls whether IPv6 is enabled or disabled on this
+ interface. When IPv6 is enabled, this interface is
+ connected to an IPv6 stack, and the interface can send
+ and receive IPv6 packets.";
+ }
+
+ leaf forwarding {
+ type boolean;
+ default false;
+ description
+ "Controls IPv6 packet forwarding of datagrams received by,
+ but not addressed to, this interface. IPv6 routers
+ forward datagrams. IPv6 hosts do not (except those
+ source-routed via the host).";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+ Section 6.2.1, IsRouter";
+
+ }
+
+ leaf mtu {
+ type uint32 {
+ range "1280..max";
+ }
+ units "octets";
+ description
+ "The size, in octets, of the largest IPv6 packet that the
+ interface will send and receive.
+
+ The server may restrict the allowed values for this leaf,
+ depending on the interface's type.
+
+ If this leaf is not configured, the operationally used MTU
+ depends on the interface's type.";
+ reference
+ "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+ Section 5";
+
+ }
+
+ list address {
+ key "ip";
+ description
+ "The list of configured IPv6 addresses on the interface.";
+ leaf ip {
+ type inet:ipv6-address-no-zone;
+ description
+ "The IPv6 address on the interface.";
+ }
+
+ leaf prefix-length {
+ type uint8 {
+ range "0..128";
+ }
+ mandatory true;
+ description
+ "The length of the subnet prefix.";
+ }
+ } // list address
+
+ list neighbor {
+ key "ip";
+ description
+ "A list of mappings from IPv6 addresses to
+ link-layer addresses.
+
+ Entries in this list are used as static entries in the
+ Neighbor Cache.";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)";
+
+ leaf ip {
+ type inet:ipv6-address-no-zone;
+ description
+ "The IPv6 address of the neighbor node.";
+ }
+
+ leaf link-layer-address {
+ type yang:phys-address;
+ mandatory true;
+ description
+ "The link-layer address of the neighbor node.";
+ }
+ } // list neighbor
+
+ leaf dup-addr-detect-transmits {
+ type uint32;
+ default 1;
+ description
+ "The number of consecutive Neighbor Solicitation messages
+ sent while performing Duplicate Address Detection on a
+ tentative address. A value of zero indicates that
+ Duplicate Address Detection is not performed on
+ tentative addresses. A value of one indicates a single
+ transmission with no follow-up retransmissions.";
+ reference
+ "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+
+ }
+
+ container autoconf {
+ description
+ "Parameters to control the autoconfiguration of IPv6
+ addresses, as described in RFC 4862.";
+ reference
+ "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+
+ leaf create-global-addresses {
+ type boolean;
+ default true;
+ description
+ "If enabled, the host creates global addresses as
+ described in RFC 4862.";
+ reference
+ "RFC 4862: IPv6 Stateless Address Autoconfiguration
+ Section 5.5";
+
+ }
+
+ leaf create-temporary-addresses {
+ if-feature ipv6-privacy-autoconf;
+ type boolean;
+ default false;
+ description
+ "If enabled, the host creates temporary addresses as
+ described in RFC 4941.";
+ reference
+ "RFC 4941: Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6";
+
+ }
+
+ leaf temporary-valid-lifetime {
+ if-feature ipv6-privacy-autoconf;
+ type uint32;
+ units "seconds";
+ default 604800;
+ description
+ "The time period during which the temporary address
+ is valid.";
+ reference
+ "RFC 4941: Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6
+ - TEMP_VALID_LIFETIME";
+
+ }
+
+ leaf temporary-preferred-lifetime {
+ if-feature ipv6-privacy-autoconf;
+ type uint32;
+ units "seconds";
+ default 86400;
+ description
+ "The time period during which the temporary address is
+ preferred.";
+ reference
+ "RFC 4941: Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6
+ - TEMP_PREFERRED_LIFETIME";
+
+ }
+ } // container autoconf
+ } // container ipv6
+ }
+
+ augment /if:devices/if:device/if:interfaces-state/if:interface {
+ description
+ "Data nodes for the operational state of IP on interfaces.";
+ container ipv4 {
+ presence
+ "Present if IPv4 is enabled on this interface";
+ config false;
+ description
+ "Interface-specific parameters for the IPv4 address family.";
+ leaf forwarding {
+ type boolean;
+ description
+ "Indicates whether IPv4 packet forwarding is enabled or
+ disabled on this interface.";
+ }
+
+ leaf mtu {
+ type uint16 {
+ range "68..max";
+ }
+ units "octets";
+ description
+ "The size, in octets, of the largest IPv4 packet that the
+ interface will send and receive.";
+ reference
+ "RFC 791: Internet Protocol";
+
+ }
+
+ list address {
+ key "ip";
+ description
+ "The list of IPv4 addresses on the interface.";
+ leaf ip {
+ type inet:ipv4-address-no-zone;
+ description
+ "The IPv4 address on the interface.";
+ }
+
+ choice subnet {
+ description
+ "The subnet can be specified as a prefix-length, or,
+ if the server supports non-contiguous netmasks, as
+ a netmask.";
+ leaf prefix-length {
+ type uint8 {
+ range "0..32";
+ }
+ description
+ "The length of the subnet prefix.";
+ }
+ leaf netmask {
+ if-feature ipv4-non-contiguous-netmasks;
+ type yang:dotted-quad;
+ description
+ "The subnet specified as a netmask.";
+ }
+ } // choice subnet
+
+ leaf origin {
+ type ip-address-origin;
+ description
+ "The origin of this address.";
+ }
+ } // list address
+
+ list neighbor {
+ key "ip";
+ description
+ "A list of mappings from IPv4 addresses to
+ link-layer addresses.
+
+ This list represents the ARP Cache.";
+ reference
+ "RFC 826: An Ethernet Address Resolution Protocol";
+
+ leaf ip {
+ type inet:ipv4-address-no-zone;
+ description
+ "The IPv4 address of the neighbor node.";
+ }
+
+ leaf link-layer-address {
+ type yang:phys-address;
+ description
+ "The link-layer address of the neighbor node.";
+ }
+
+ leaf origin {
+ type neighbor-origin;
+ description
+ "The origin of this neighbor entry.";
+ }
+ } // list neighbor
+ } // container ipv4
+
+ container ipv6 {
+ presence
+ "Present if IPv6 is enabled on this interface";
+ config false;
+ description
+ "Parameters for the IPv6 address family.";
+ leaf forwarding {
+ type boolean;
+ default false;
+ description
+ "Indicates whether IPv6 packet forwarding is enabled or
+ disabled on this interface.";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+ Section 6.2.1, IsRouter";
+
+ }
+
+ leaf mtu {
+ type uint32 {
+ range "1280..max";
+ }
+ units "octets";
+ description
+ "The size, in octets, of the largest IPv6 packet that the
+ interface will send and receive.";
+ reference
+ "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+ Section 5";
+
+ }
+
+ list address {
+ key "ip";
+ description
+ "The list of IPv6 addresses on the interface.";
+ leaf ip {
+ type inet:ipv6-address-no-zone;
+ description
+ "The IPv6 address on the interface.";
+ }
+
+ leaf prefix-length {
+ type uint8 {
+ range "0..128";
+ }
+ mandatory true;
+ description
+ "The length of the subnet prefix.";
+ }
+
+ leaf origin {
+ type ip-address-origin;
+ description
+ "The origin of this address.";
+ }
+
+ leaf status {
+ type enumeration {
+ enum "preferred" {
+ value 0;
+ description
+ "This is a valid address that can appear as the
+ destination or source address of a packet.";
+ }
+ enum "deprecated" {
+ value 1;
+ description
+ "This is a valid but deprecated address that should
+ no longer be used as a source address in new
+ communications, but packets addressed to such an
+ address are processed as expected.";
+ }
+ enum "invalid" {
+ value 2;
+ description
+ "This isn't a valid address, and it shouldn't appear
+ as the destination or source address of a packet.";
+ }
+ enum "inaccessible" {
+ value 3;
+ description
+ "The address is not accessible because the interface
+ to which this address is assigned is not
+ operational.";
+ }
+ enum "unknown" {
+ value 4;
+ description
+ "The status cannot be determined for some reason.";
+ }
+ enum "tentative" {
+ value 5;
+ description
+ "The uniqueness of the address on the link is being
+ verified. Addresses in this state should not be
+ used for general communication and should only be
+ used to determine the uniqueness of the address.";
+ }
+ enum "duplicate" {
+ value 6;
+ description
+ "The address has been determined to be non-unique on
+ the link and so must not be used.";
+ }
+ enum "optimistic" {
+ value 7;
+ description
+ "The address is available for use, subject to
+ restrictions, while its uniqueness on a link is
+ being verified.";
+ }
+ }
+ description
+ "The status of an address. Most of the states correspond
+ to states from the IPv6 Stateless Address
+ Autoconfiguration protocol.";
+ reference
+ "RFC 4293: Management Information Base for the
+ Internet Protocol (IP)
+ - IpAddressStatusTC
+ RFC 4862: IPv6 Stateless Address Autoconfiguration";
+
+ }
+ } // list address
+
+ list neighbor {
+ key "ip";
+ description
+ "A list of mappings from IPv6 addresses to
+ link-layer addresses.
+
+ This list represents the Neighbor Cache.";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)";
+
+ leaf ip {
+ type inet:ipv6-address-no-zone;
+ description
+ "The IPv6 address of the neighbor node.";
+ }
+
+ leaf link-layer-address {
+ type yang:phys-address;
+ description
+ "The link-layer address of the neighbor node.";
+ }
+
+ leaf origin {
+ type neighbor-origin;
+ description
+ "The origin of this neighbor entry.";
+ }
+
+ leaf is-router {
+ type empty;
+ description
+ "Indicates that the neighbor node acts as a router.";
+ }
+
+ leaf state {
+ type enumeration {
+ enum "incomplete" {
+ value 0;
+ description
+ "Address resolution is in progress, and the link-layer
+ address of the neighbor has not yet been
+ determined.";
+ }
+ enum "reachable" {
+ value 1;
+ description
+ "Roughly speaking, the neighbor is known to have been
+ reachable recently (within tens of seconds ago).";
+ }
+ enum "stale" {
+ value 2;
+ description
+ "The neighbor is no longer known to be reachable, but
+ until traffic is sent to the neighbor no attempt
+ should be made to verify its reachability.";
+ }
+ enum "delay" {
+ value 3;
+ description
+ "The neighbor is no longer known to be reachable, and
+ traffic has recently been sent to the neighbor.
+ Rather than probe the neighbor immediately, however,
+ delay sending probes for a short while in order to
+ give upper-layer protocols a chance to provide
+ reachability confirmation.";
+ }
+ enum "probe" {
+ value 4;
+ description
+ "The neighbor is no longer known to be reachable, and
+ unicast Neighbor Solicitation probes are being sent
+ to verify reachability.";
+ }
+ }
+ description
+ "The Neighbor Unreachability Detection state of this
+ entry.";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+ Section 7.3.2";
+
+ }
+ } // list neighbor
+ } // container ipv6
+ }
+ } // module ietf-ip
+
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-network-instance@2016-06-23.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-network-instance@2016-06-23.yang
new file mode 100644
index 0000000..57eebdc
--- /dev/null
+++ b/apps/l3vpn/yangmodel/src/main/yang/ietf-network-instance@2016-06-23.yang
@@ -0,0 +1,241 @@
+module ietf-network-instance {
+
+ yang-version "1";
+
+ // namespace
+ namespace "urn:ietf:params:xml:ns:yang:ietf-network-instance";
+
+ prefix "ni";
+
+ // import some basic types
+ import ietf-interfaces {
+ prefix if;
+ }
+
+ import ietf-ip {
+ prefix ip;
+ }
+
+ // meta
+ organization "IETF Routing Area Working Group (rtgwg)";
+
+ contact
+ "Routing Area Working Group - <rtgwg@ietf.org>";
+
+
+ description
+ "This module is used to support multiple network instances
+ within a single physical or virtual device. Network
+ instances are commonly know as VRFs (virtual routing
+ and forwarding) and VSIs (virtual switching instances).";
+
+ revision "2016-06-23" {
+ description
+ "Initial revision.";
+ reference "RFC TBD";
+ }
+
+ // extension statements
+
+ feature bind-network-instance-name {
+ description
+ "Network Instance to which an interface instance is bound";
+ }
+
+ // identity statements
+
+ identity network-instance-type {
+ description
+ "Base identity from which identities describing
+ network instance types are derived.";
+ }
+
+ identity ipv4-interface-protocol-type {
+ description
+ "Base identity for derivation of IPv4 interface
+ protocols";
+ }
+
+ identity ipv6-interface-protocol-type {
+ description
+ "Base identity for derivation of IPv6 interface
+ protocols";
+ }
+
+ // typedef statements
+
+ // grouping statements
+
+ grouping interface-ip-common {
+ description
+ "interface-specific configuration for IP interfaces, IPv4 and
+ IPv6";
+
+ }
+
+ grouping ipv4-interface-protocols {
+ container ipv4-interface-protocols {
+ list ipv4-interface-protocol {
+ key "type";
+ leaf type {
+ type identityref {
+ base ipv4-interface-protocol-type;
+ }
+ mandatory true;
+ description
+ "ARP, ICMP, VRRP, DHCP Client, etc.";
+ }
+ description
+ "List of IPv4 protocols configured
+ on an interface";
+ }
+ description
+ "Container for list of IPv4 protocols configured
+ on an interface";
+ }
+ description
+ "Grouping for IPv4 protocols configured on an interface";
+ }
+
+ grouping ipv6-interface-protocols {
+ description
+ "Grouping for IPv6 protocols configured on
+ an interface.";
+ container ipv6-interface-protocols {
+ description
+ "Container for list of IPv6 protocols configured
+ on an interface.";
+ list ipv6-interface-protocol {
+ key "type";
+ description
+ "List of IPv6 protocols configured
+ on an interface";
+ leaf type {
+ type identityref {
+ base ipv6-interface-protocol-type;
+ }
+ mandatory true;
+ description
+ "ND, ICMPv6, VRRP, DHCPv6 Client, etc.";
+ }
+ }
+ }
+ }
+
+ grouping network-instance-policy {
+ description
+ "Network instance policies such as route
+ distinguisher, route targets, VPLS ID and neighbor,
+ Ethernet ID, etc. ";
+ reference
+ "RFC 4364 - BGP/MPLS Virtual Private Networks (VPNs)
+ RFC 6074 - Provisioning, Auto-Discovery, and Signaling
+ in Layer 2 Virtual Private Networks (L2VPNs)
+ RFC 7432 - BGP MPLS-Based Ethernet VPN";
+ container network-instance-policy {
+ description "Network Instance Policy -- details TBD";
+ }
+ }
+
+ // top level device definition statements
+ container devices {
+ list device {
+ key deviceid;
+ leaf deviceid {
+ type string;
+ }
+ container network-instances {
+ description "Network instances each of which have
+ and protocol instantiations. For layer 3,
+ this consistent with the routing-instance
+ definition in ietf-routing";
+ reference "draft-ietf-netmod-routing-cfg";
+ list network-instance {
+ key name;
+ description "List of network-instances";
+ leaf name {
+ type string;
+ description "device scoped
+ identifier for the network
+ instance";
+ }
+ leaf type {
+ type identityref {
+ base network-instance-type;
+ }
+ description
+ "The network instance type -- details TBD
+ Likely types include core, L3-VRF, VPLS,
+ L2-cross-connect, L2-VSI, etc.";
+ }
+ leaf enabled {
+ type boolean;
+ default "true";
+ description
+ "Flag indicating whether or not the network
+ instance is enabled.";
+ }
+ leaf description {
+ type string;
+ description
+ "Description of the network instance
+ and its intended purpose";
+ }
+ uses network-instance-policy;
+ // leaf root {
+ // type schema-mount;
+ // description "Root for models supported per
+ // network instance";
+ // }
+ }
+ }
+ }
+ }
+
+ // augment statements
+ augment "/if:devices/if:device/if:interfaces/if:interface" {
+ description
+ "Add a node for the identification of the logical network
+ instance (which is within the interface's identified logical
+ network element) associated with the IP information
+ configured on an interface";
+
+ leaf bind-network-instance-name {
+ type string;
+ description
+ "Network Instance to which an interface is bound";
+ }
+ }
+
+ augment "/if:devices/if:device/if:interfaces/if:interface/ip:ipv4" {
+ description
+ "Add a node for the identification of the logical
+ network instance (which is within the interface's
+ identified physical or virtual device) associated with
+ the IP information configured on an interface";
+
+ leaf bind-network-instance-name {
+ type string;
+ description
+ "Network Instance to which IPv4 interface is bound";
+
+ }
+ }
+
+ augment "/if:devices/if:device/if:interfaces/if:interface/ip:ipv6" {
+ description
+ "Add a node for the identification of the logical
+ network instance (which is within the interface's
+ identified physical or virtual device) associated with
+ the IP information configured on an interface";
+
+ leaf bind-network-instance-name {
+ type string;
+ description
+ "Network Instance to which IPv6 interface is bound";
+
+ }
+ }
+ // rpc statements
+ // notification statements
+ }
\ No newline at end of file