From 164845a3470a2a441b4aeaab256bac9f26197da9 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 7 Mar 2019 16:10:16 +0100 Subject: [PATCH] Add RFC8529 Network Instances This adds packaging for RFC8529 model, so that it can be reused by downstreams. Change-Id: I0e6cbf9b1c45122d75b639b4be9a329cedb2a252 Signed-off-by: Robert Varga --- artifacts/pom.xml | 14 + docs/pom.xml | 4 + features/features-mdsal/pom.xml | 6 + features/odl-mdsal-model-rfc8529/pom.xml | 43 +++ features/pom.xml | 1 + model/ietf/pom.xml | 3 + model/ietf/rfc8529/pom.xml | 39 +++ .../ietf-network-instance@2019-01-21.yang | 282 ++++++++++++++++++ 8 files changed, 392 insertions(+) create mode 100644 features/odl-mdsal-model-rfc8529/pom.xml create mode 100644 model/ietf/rfc8529/pom.xml create mode 100644 model/ietf/rfc8529/src/main/yang/ietf-network-instance@2019-01-21.yang diff --git a/artifacts/pom.xml b/artifacts/pom.xml index a276aad091..49d8572bd9 100644 --- a/artifacts/pom.xml +++ b/artifacts/pom.xml @@ -650,6 +650,13 @@ 1.0.7-SNAPSHOT + + + org.opendaylight.mdsal.binding.model.ietf + rfc8529 + 1.0.7-SNAPSHOT + + @@ -829,6 +836,13 @@ features xml + + org.opendaylight.mdsal.model + odl-mdsal-model-rfc8529 + 1.0.7-SNAPSHOT + features + xml + org.opendaylight.mdsal.model diff --git a/docs/pom.xml b/docs/pom.xml index 6329b8eb37..0369d7fa95 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -307,6 +307,10 @@ org.opendaylight.mdsal.binding.model.ietf rfc8528 + + org.opendaylight.mdsal.binding.model.ietf + rfc8529 + org.opendaylight.mdsal.model ietf-restconf diff --git a/features/features-mdsal/pom.xml b/features/features-mdsal/pom.xml index b3aefe448c..d29d6d2672 100644 --- a/features/features-mdsal/pom.xml +++ b/features/features-mdsal/pom.xml @@ -227,6 +227,12 @@ features xml + + org.opendaylight.mdsal.model + odl-mdsal-model-rfc8529 + features + xml + org.opendaylight.mdsal.model diff --git a/features/odl-mdsal-model-rfc8529/pom.xml b/features/odl-mdsal-model-rfc8529/pom.xml new file mode 100644 index 0000000000..d8d02e5d37 --- /dev/null +++ b/features/odl-mdsal-model-rfc8529/pom.xml @@ -0,0 +1,43 @@ + + + + 4.0.0 + + org.opendaylight.mdsal + feature-parent + 3.0.7-SNAPSHOT + ../feature-parent + + + org.opendaylight.mdsal.model + odl-mdsal-model-rfc8529 + 1.0.7-SNAPSHOT + feature + OpenDaylight :: MD-SAL :: Model :: RFC8529 + Models from RFC8529 + + + + org.opendaylight.mdsal.model + odl-mdsal-model-rfc8344 + features + xml + + + org.opendaylight.mdsal.model + odl-mdsal-model-rfc8528 + features + xml + + + org.opendaylight.mdsal.binding.model.ietf + rfc8529 + + + diff --git a/features/pom.xml b/features/pom.xml index 8f047f6658..b84ac4ede8 100644 --- a/features/pom.xml +++ b/features/pom.xml @@ -80,6 +80,7 @@ odl-mdsal-model-rfc8348-non-nmda odl-mdsal-model-rfc8349 odl-mdsal-model-rfc8528 + odl-mdsal-model-rfc8529 odl-mdsal-model-draft-bierman-netconf-restconf-02 diff --git a/model/ietf/pom.xml b/model/ietf/pom.xml index 0ae09a4a08..34af8ddf51 100644 --- a/model/ietf/pom.xml +++ b/model/ietf/pom.xml @@ -81,6 +81,9 @@ rfc8528 + + rfc8529 + ietf-packet-fields ietf-access-control-list ietf-lisp-address-types diff --git a/model/ietf/rfc8529/pom.xml b/model/ietf/rfc8529/pom.xml new file mode 100644 index 0000000000..70cdffe31c --- /dev/null +++ b/model/ietf/rfc8529/pom.xml @@ -0,0 +1,39 @@ + + + + + 4.0.0 + + org.opendaylight.mdsal + binding-parent + 3.0.7-SNAPSHOT + ../../../binding/binding-parent + + + org.opendaylight.mdsal.binding.model.ietf + rfc8529 + 1.0.7-SNAPSHOT + bundle + + ${project.artifactId} + RFC8529 Network Instances + + + + org.opendaylight.mdsal.binding.model.ietf + rfc8344 + + + org.opendaylight.mdsal.binding.model.ietf + rfc8528 + + + diff --git a/model/ietf/rfc8529/src/main/yang/ietf-network-instance@2019-01-21.yang b/model/ietf/rfc8529/src/main/yang/ietf-network-instance@2019-01-21.yang new file mode 100644 index 0000000000..dfde7fbe8e --- /dev/null +++ b/model/ietf/rfc8529/src/main/yang/ietf-network-instance@2019-01-21.yang @@ -0,0 +1,282 @@ +module ietf-network-instance { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-network-instance"; + prefix ni; + + // import some basic types + + import ietf-interfaces { + prefix if; + reference + "RFC 8343: A YANG Data Model for Interface Management"; + } + import ietf-ip { + prefix ip; + reference + "RFC 8344: A YANG Data Model for IP Management"; + } + import ietf-yang-schema-mount { + prefix yangmnt; + reference + "RFC 8528: YANG Schema Mount"; + } + + organization + "IETF Routing Area (rtgwg) Working Group"; + contact + "WG Web: + WG List: + + Author: Lou Berger + + Author: Christian Hopps + + Author: Acee Lindem + + Author: Dean Bogdanovic + "; + description + "This module is used to support multiple network instances + within a single physical or virtual device. Network + instances are commonly known as VRFs (VPN Routing and + Forwarding) and VSIs (Virtual Switching Instances). + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', + 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', + 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document + are to be interpreted as described in BCP 14 (RFC 2119) + (RFC 8174) when, and only when, they appear in all capitals, + as shown here. + + Copyright (c) 2019 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 + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8529; see + the RFC itself for full legal notices."; + + revision 2019-01-21 { + description + "Initial revision."; + reference + "RFC 8529"; + } + + // top-level device definition statements + + container network-instances { + description + "Network instances, each of which consists of + VRFs and/or VSIs."; + reference + "RFC 8349: A YANG Data Model for Routing Management"; + list network-instance { + key "name"; + description + "List of network instances."; + leaf name { + type string; + mandatory true; + description + "device-scoped identifier for the network + instance."; + } + 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."; + } + choice ni-type { + description + "This node serves as an anchor point for different types + of network instances. Each 'case' is expected to + differ in terms of the information needed in the + parent/core to support the NI and may differ in their + mounted-schema definition. When the mounted schema is + not expected to be the same for a specific type of NI, + a mount point should be defined."; + } + choice root-type { + mandatory true; + description + "Well-known mount points."; + container vrf-root { + description + "Container for mount point."; + yangmnt:mount-point "vrf-root" { + description + "Root for L3VPN-type models. This will typically + not be an inline-type mount point."; + } + } + container vsi-root { + description + "Container for mount point."; + yangmnt:mount-point "vsi-root" { + description + "Root for L2VPN-type models. This will typically + not be an inline-type mount point."; + } + } + container vv-root { + description + "Container for mount point."; + yangmnt:mount-point "vv-root" { + description + "Root models that support both L2VPN-type bridging + and L3VPN-type routing. This will typically + not be an inline-type mount point."; + } + } + } + } + } + + // augment statements + + augment "/if:interfaces/if:interface" { + description + "Add a node for the identification of the network + instance associated with the information configured + on a interface. + + Note that a standard error will be returned if the + identified leafref isn't present. If an interface cannot + be assigned for any other reason, the operation SHALL fail + with an error-tag of 'operation-failed' and an + error-app-tag of 'ni-assignment-failed'. A meaningful + error-info that indicates the source of the assignment + failure SHOULD also be provided."; + leaf bind-ni-name { + type leafref { + path "/network-instances/network-instance/name"; + } + description + "Network instance to which an interface is bound."; + } + } + augment "/if:interfaces/if:interface/ip:ipv4" { + description + "Add a node for the identification of the network + instance associated with the information configured + on an IPv4 interface. + + Note that a standard error will be returned if the + identified leafref isn't present. If an interface cannot + be assigned for any other reason, the operation SHALL fail + with an error-tag of 'operation-failed' and an + error-app-tag of 'ni-assignment-failed'. A meaningful + error-info that indicates the source of the assignment + failure SHOULD also be provided."; + leaf bind-ni-name { + type leafref { + path "/network-instances/network-instance/name"; + } + description + "Network instance to which IPv4 interface is bound."; + } + } + augment "/if:interfaces/if:interface/ip:ipv6" { + description + "Add a node for the identification of the network + instance associated with the information configured + on an IPv6 interface. + + Note that a standard error will be returned if the + identified leafref isn't present. If an interface cannot + be assigned for any other reason, the operation SHALL fail + with an error-tag of 'operation-failed' and an + error-app-tag of 'ni-assignment-failed'. A meaningful + error-info that indicates the source of the assignment + failure SHOULD also be provided."; + leaf bind-ni-name { + type leafref { + path "/network-instances/network-instance/name"; + } + description + "Network instance to which IPv6 interface is bound."; + } + } + + // notification statements + + notification bind-ni-name-failed { + description + "Indicates an error in the association of an interface to an + NI. Only generated after success is initially returned when + bind-ni-name is set. + + Note: Some errors may need to be reported for multiple + associations, e.g., a single error may need to be reported + for an IPv4 and an IPv6 bind-ni-name. + + At least one container with a bind-ni-name leaf MUST be + included in this notification."; + leaf name { + type leafref { + path "/if:interfaces/if:interface/if:name"; + } + mandatory true; + description + "Contains the interface name associated with the + failure."; + } + container interface { + description + "Generic interface type."; + leaf bind-ni-name { + type leafref { + path "/if:interfaces/if:interface" + + "/ni:bind-ni-name"; + } + description + "Contains the bind-ni-name associated with the + failure."; + } + } + container ipv4 { + description + "IPv4 interface type."; + leaf bind-ni-name { + type leafref { + path "/if:interfaces/if:interface/ip:ipv4/ni:bind-ni-name"; + } + description + "Contains the bind-ni-name associated with the + failure."; + } + } + container ipv6 { + description + "IPv6 interface type."; + leaf bind-ni-name { + type leafref { + path "/if:interfaces/if:interface/ip:ipv6" + + "/ni:bind-ni-name"; + } + description + "Contains the bind-ni-name associated with the + failure."; + } + } + leaf error-info { + type string; + description + "Optionally, indicates the source of the assignment + failure."; + } + } +} -- 2.36.6