Add ietf-lisp-address-types model 94/89094/2
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 17 Apr 2020 12:18:08 +0000 (14:18 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 4 May 2020 08:45:18 +0000 (10:45 +0200)
This imports the model from draft-ietf-lisp-yang-06 from MD-SAL, as
lispflowmapping it its only user. This will proper maintenance and
future upgrade to the latest revision.

JIRA: MDSAL-535
Change-Id: I40803b4e4015a19b306d730364711fa42eafbadf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
features/odl-lispflowmapping-models/pom.xml
mappingservice/lisp-proto/pom.xml
mappingservice/lisp-proto/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/lisp/address/types/rev151105/SimpleAddressBuilder.java [new file with mode: 0644]
mappingservice/lisp-proto/src/main/yang/ietf-lisp-address-types.yang [new file with mode: 0644]

index cb403b3ec316648595258b70b200f76d4fcf432d..66e94421413e6c5e430192a5818150ec0618b986 100644 (file)
@@ -43,12 +43,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <type>xml</type>
       <classifier>features</classifier>
     </dependency>
-    <dependency>
-      <groupId>org.opendaylight.mdsal.model</groupId>
-      <artifactId>odl-mdsal-model-draft-ietf-lisp-lcaf-10</artifactId>
-      <type>xml</type>
-      <classifier>features</classifier>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.mdsal.model</groupId>
       <artifactId>odl-mdsal-model-draft-ietf-netmod-iana-afn-safi-00</artifactId>
index 0a8049f0d66a98c00c6bab50550687978af311cb..c57b7f00373c445738a223df05cec777fa260e46 100644 (file)
@@ -38,10 +38,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
       <artifactId>rfc6991-ietf-yang-types</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.opendaylight.mdsal.model</groupId>
-      <artifactId>ietf-lisp-address-types-2015-11-05</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.mdsal.model</groupId>
       <artifactId>iana-afn-safi</artifactId>
diff --git a/mappingservice/lisp-proto/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/lisp/address/types/rev151105/SimpleAddressBuilder.java b/mappingservice/lisp-proto/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/lisp/address/types/rev151105/SimpleAddressBuilder.java
new file mode 100644 (file)
index 0000000..b201f94
--- /dev/null
@@ -0,0 +1,67 @@
+package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105;
+
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefixBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
+
+
+/**
+ * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation.
+ * In some cases it is very difficult to automate it since there can be unions such as (uint32 - uint16), or (string - uint32).
+ *
+ * The reason behind putting it under src/main/java is:
+ * This class is generated in form of a stub and needs to be finished by the user. This class is generated only once to prevent
+ * loss of user code.
+ *
+ */
+public class SimpleAddressBuilder {
+
+    public static SimpleAddress getDefaultInstance(String defaultValue) {
+        SimpleAddress address = tryIpAddress(defaultValue);
+        if (address != null) {
+            return address;
+        }
+
+        address = tryIpPrefix(defaultValue);
+        if (address != null) {
+            return address;
+        }
+
+        address = tryMacAddress(defaultValue);
+        if (address != null) {
+            return address;
+        }
+
+        // XXX need support for MAC addresses and AS numbers
+        address = new SimpleAddress(new DistinguishedNameType(defaultValue));
+
+        return address;
+    }
+
+    private static SimpleAddress tryIpAddress(String defaultValue) {
+        try {
+            SimpleAddress address = new SimpleAddress(IpAddressBuilder.getDefaultInstance(defaultValue));
+            return address;
+        } catch (IllegalArgumentException e) {
+            return null;
+        }
+    }
+
+    private static SimpleAddress tryIpPrefix(String defaultValue) {
+        try {
+            SimpleAddress address = new SimpleAddress(IpPrefixBuilder.getDefaultInstance(defaultValue));
+            return address;
+        } catch (IllegalArgumentException e) {
+            return null;
+        }
+    }
+
+    private static SimpleAddress tryMacAddress(String defaultValue) {
+        try {
+            SimpleAddress address = new SimpleAddress(new MacAddress(defaultValue));
+            return address;
+        } catch (IllegalArgumentException e) {
+            return null;
+        }
+    }
+}
diff --git a/mappingservice/lisp-proto/src/main/yang/ietf-lisp-address-types.yang b/mappingservice/lisp-proto/src/main/yang/ietf-lisp-address-types.yang
new file mode 100644 (file)
index 0000000..22dddbf
--- /dev/null
@@ -0,0 +1,675 @@
+module ietf-lisp-address-types {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-lisp-address-types";
+  prefix laddr;
+  import ietf-inet-types {
+    prefix inet;
+    revision-date 2013-07-15;
+  }
+  import ietf-yang-types {
+    prefix yang;
+    revision-date 2013-07-15;
+  }
+  organization
+    "IETF LISP (Locator/ID Separation Protocol) Working Group";
+  contact
+    "lisp@ietf.org";
+  description
+    "This YANG module defines the LISP Canonical Address Formats
+     (LCAF) for LISP. The module can be extended by vendors to
+     define vendor-specific parameters.
+
+     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 6338; see
+     the RFC itself for full legal notices.
+
+    ";
+  revision 2015-11-05 {
+    description
+      "Initial revision.";
+    reference
+      "http://tools.ietf.org/html/draft-ietf-lisp-lcaf-10";
+  }
+  identity lisp-address-family {
+    description
+      "Base identity from which identities describing LISP address
+       families are derived.";
+  }
+  identity no-address-afi {
+    base lisp-address-family;
+    description
+      "IANA Reserved.";
+    }
+  identity ipv4-afi {
+    base lisp-address-family;
+    description
+      "IANA IPv4 address family.";
+  }
+  identity ipv4-prefix-afi {
+    base lisp-address-family;
+    description
+      "IANA IPv4 address family prefix.";
+  }
+  identity ipv6-afi {
+    base lisp-address-family;
+    description
+      "IANA IPv6 address family.";
+  }
+  identity ipv6-prefix-afi {
+    base lisp-address-family;
+    description
+      "IANA IPv6 address family prefix.";
+  }
+  identity mac-afi {
+    base lisp-address-family;
+    description
+      "IANA MAC address family.";
+  }
+  identity distinguished-name-afi {
+    base lisp-address-family;
+    description
+      "IANA Distinguished Name address family.";
+  }
+  identity as-number-afi {
+      base lisp-address-family;
+      description
+        "IANA AS Number address family.";
+  }
+  identity lcaf {
+    base lisp-address-family;
+    description
+      "IANA LISP Canonical Address Format address family.";
+  }
+  identity null-address-lcaf {
+    base lcaf;
+    description
+      "Null body LCAF type.";
+  }
+  identity afi-list-lcaf {
+    base lcaf;
+    description
+      "AFI-List LCAF type.";
+  }
+  identity instance-id-lcaf {
+    base lcaf;
+    description
+      "Instance-ID LCAF type.";
+  }
+  identity as-number-lcaf {
+    base lcaf;
+    description
+      "AS Number LCAF type.";
+  }
+  identity application-data-lcaf {
+    base lcaf;
+    description
+      "Application Data LCAF type.";
+  }
+  identity geo-coordinates-lcaf {
+    base lcaf;
+    description
+      "Geo-coordinates LCAF type.";
+  }
+  identity opaque-key-lcaf {
+    base lcaf;
+    description
+      "Opaque Key LCAF type.";
+  }
+  identity nat-traversal-lcaf {
+    base lcaf;
+    description
+      "NAT-Traversal LCAF type.";
+  }
+  identity nonce-locator-lcaf {
+    base lcaf;
+    description
+      "Nonce-Locator LCAF type.";
+  }
+  identity multicast-info-lcaf {
+    base lcaf;
+    description
+      "Multicast Info LCAF type.";
+  }
+  identity explicit-locator-path-lcaf {
+    base lcaf;
+    description
+      "Explicit Locator Path LCAF type.";
+  }
+  identity security-key-lcaf {
+    base lcaf;
+    description
+      "Security Key LCAF type.";
+  }
+  identity source-dest-key-lcaf {
+    base lcaf;
+    description
+      "Source/Dest LCAF type.";
+  }
+  identity replication-list-lcaf {
+    base lcaf;
+    description
+      "Replication-List LCAF type.";
+  }
+  identity json-data-model-lcaf {
+    base lcaf;
+    description
+      "JSON Data Model LCAF type.";
+  }
+  identity key-value-address-lcaf {
+    base lcaf;
+    description
+      "Key/Value Address LCAF type.";
+  }
+  identity encapsulation-format-lcaf {
+    base lcaf;
+    description
+      "Encapsulation Format LCAF type.";
+  }
+  identity service-path-lcaf {
+    base lcaf;
+    description
+      "Service Path LCAF type.";
+  }
+  typedef instance-id-type {
+    type uint32 {
+      range "0..16777215";
+    }
+    description
+      "Defines the range of values for an Instance ID.";
+  }
+  typedef service-path-id-type {
+    type uint32 {
+      range "0..16777215";
+    }
+    description
+      "Defines the range of values for a Service Path ID.";
+  }
+   typedef distinguished-name-type {
+    type string;
+    description
+      "Distinguished Name address.";
+    reference
+      "http://www.iana.org/assignments/address-family-numbers/
+       address-family-numbers.xhtml";
+  }
+  typedef simple-address {
+    type union {
+      type inet:ip-address;
+      type inet:ip-prefix;
+      type yang:mac-address;
+      type distinguished-name-type;
+      type inet:as-number;
+    }
+    description
+      "Union of address types that can be part of LCAFs.";
+  }
+
+  typedef lisp-address-family-ref {
+    type identityref {
+      base lisp-address-family;
+    }
+    description
+      "LISP address family reference.";
+  }
+  typedef lcaf-ref {
+    type identityref {
+      base lcaf;
+    }
+    description
+      "LCAF types reference.";
+  }
+
+  grouping lisp-address {
+    description
+      "Generic LISP address.";
+    leaf address-type {
+      type lisp-address-family-ref;
+      mandatory true;
+      description
+        "Type of the LISP address.";
+    }
+    leaf virtual-network-id {
+      type instance-id-type;
+      description
+        "Virtual Network Identifier (instance-id) of the address.";
+    }
+    choice address {
+      description
+        "Various LISP address types, including IP, MAC, and LCAF.";
+
+      leaf no-address {
+        when "../address-type = 'laddr:no-addr-afi'" {
+          description
+            "When AFI is 0.";
+        }
+        type empty;
+        description
+          "No address.";
+      }
+      leaf ipv4 {
+        when "../address-type = 'laddr:ipv4-afi'" {
+          description
+            "When AFI is IPv4.";
+        }
+        type inet:ipv4-address;
+        description
+          "IPv4 address.";
+      }
+      leaf ipv4-prefix {
+        when "../address-type = 'laddr:ipv4-prefix-afi'" {
+          description
+            "When AFI is IPv4.";
+        }
+        type inet:ipv4-prefix;
+        description
+          "IPv4 prefix.";
+      }
+      leaf ipv6 {
+        when "../address-type = 'laddr:ipv6-afi'" {
+          description
+            "When AFI is IPv6.";
+        }
+        type inet:ipv6-address;
+        description
+          "IPv6 address.";
+      }
+      leaf ipv6-prefix {
+        when "../address-type = 'laddr:ipv6-prefix-afi'" {
+          description
+            "When AFI is IPv6.";
+        }
+        type inet:ipv6-prefix;
+        description
+          "IPv6 address.";
+      }
+      leaf mac {
+        when "../address-type = 'laddr:mac-afi'" {
+          description
+            "When AFI is MAC.";
+        }
+        type yang:mac-address;
+        description
+          "MAC address.";
+      }
+      leaf distinguished-name {
+        when "../address-type = 'laddr:distinguished-name-afi'" {
+          description
+            "When AFI is distinguished-name.";
+        }
+        type distinguished-name-type;
+        description
+          "Distinguished Name address.";
+      }
+      leaf as-number {
+        when "../address-type = 'laddr:as-number-afi'" {
+          description
+            "When AFI is as-number.";
+        }
+        type inet:as-number;
+        description
+          "AS Number.";
+      }
+      container null-address {
+        when "../address-type = 'laddr:null-address-lcaf'" {
+          description
+            "When LCAF type is null.";
+        }
+        description
+          "Null body LCAF type";
+        leaf address {
+          type empty;
+          description
+            "AFI address.";
+        }
+      }
+      container afi-list {
+        when "../address-type = 'laddr:afi-list-lcaf'" {
+          description
+            "When LCAF type is AFI-List.";
+        }
+        description
+          "AFI-List LCAF type.";
+        reference
+          "http://tools.ietf.org/html/draft-ietf-lisp-lcaf-10
+           #section-4.16.1";
+        leaf-list address-list {
+          type simple-address;
+          description
+            "List of AFI addresses.";
+        }
+      }
+      container instance-id {
+        when "../address-type = 'laddr:instance-id-lcaf'" {
+          description
+            "When LCAF type is Instance-ID";
+        }
+        description
+          "Instance ID LCAF type.";
+        reference
+          "http://tools.ietf.org/html/draft-ietf-lisp-lcaf-10
+           #section-4.2";
+        leaf iid {
+          type instance-id-type;
+          description
+            "Instance ID value.";
+        }
+        leaf mask-length {
+            type uint8;
+            description
+              "Mask length.";
+        }
+        leaf address {
+          type simple-address;
+          description
+            "AFI address.";
+        }
+      }
+      container as-number-lcaf {
+        when "../address-type = 'laddr:as-number-lcaf'" {
+          description
+            "When LCAF type is AS-Number.";
+        }
+        description
+          "AS Number LCAF type.";
+        reference
+          "http://tools.ietf.org/html/draft-ietf-lisp-lcaf-10
+           #section-4.3";
+        leaf as {
+          type inet:as-number;
+          description
+            "AS number.";
+        }
+        leaf address {
+          type simple-address;
+          description
+            "AFI address.";
+        }
+      }
+      container application-data {
+        when "../address-type = 'laddr:application-data-lcaf'" {
+          description
+            "When LCAF type is Application Data.";
+        }
+        description
+          "Application Data LCAF type.";
+        reference
+          "http://tools.ietf.org/html/draft-ietf-lisp-lcaf-10
+           #section-4.4";
+        leaf address {
+            type simple-address;
+            description
+              "AFI address.";
+        }
+        leaf protocol {
+            type uint8;
+            description
+              "Protocol number.";
+        }
+        leaf ip-tos {
+            type int32;
+            description
+              "Type of service field.";
+        }
+        leaf local-port-low {
+            type inet:port-number;
+            description
+              "Low end of local port range.";
+        }
+        leaf local-port-high {
+            type inet:port-number;
+            description
+              "High end of local port range.";
+        }
+        leaf remote-port-low {
+            type inet:port-number;
+            description
+              "Low end of remote port range.";
+        }
+        leaf remote-port-high {
+            type inet:port-number;
+            description
+              "High end of remote port range.";
+        }
+      }
+      container geo-coordinates {
+        when "../address-type = 'laddr:geo-coordinates-lcaf'" {
+          description
+            "When LCAF type is Geo-coordinates.";
+        }
+        description
+          "Geo-coordinates LCAF type.";
+        reference
+          "http://tools.ietf.org/html/draft-ietf-lisp-lcaf-10
+           #section-4.5";
+        leaf latitude {
+          type bits {
+            bit N {
+              description
+                "Latitude bit.";
+            }
+          }
+          description
+            "Bit that selects between North and South latitude.";
+        }
+        leaf latitude-degrees {
+          type uint8 {
+            range "0 .. 90";
+          }
+          description
+            "Degrees of latitude.";
+        }
+        leaf latitude-minutes {
+          type uint8 {
+            range "0..59";
+          }
+          description
+            "Minutes of latitude.";
+        }
+        leaf latitude-seconds {
+          type uint8 {
+            range "0..59";
+          }
+          description
+            "Seconds of latitude.";
+        }
+        leaf longitude {
+          type bits {
+            bit E {
+              description
+                "Longitude bit.";
+            }
+          }
+          description
+            "Bit that selects between East and West longitude.";
+        }
+        leaf longitude-degrees {
+          type uint16 {
+            range "0 .. 180";
+          }
+          description
+            "Degrees of longitude.";
+        }
+        leaf longitude-minutes {
+          type uint8 {
+            range "0..59";
+          }
+          description
+            "Minutes of longitude.";
+        }
+        leaf longitude-seconds {
+          type uint8 {
+            range "0..59";
+          }
+          description
+            "Seconds of longitude.";
+        }
+        leaf altitude {
+          type int32;
+          description
+            "Height relative to sea level in meters.";
+        }
+        leaf address {
+          type simple-address;
+          description
+            "AFI address.";
+        }
+      }
+      container nat-traversal {
+        when "../address-type = 'laddr:nat-traversal-lcaf'" {
+          description
+            "When LCAF type is NAT-Traversal.";
+        }
+        description
+          "NAT-Traversal LCAF type.";
+        reference
+          "http://tools.ietf.org/html/draft-ietf-lisp-lcaf-10
+           #section-4.6";
+        leaf ms-udp-port {
+          type uint16;
+          description
+            "Map-Server UDP port (set to 4342).";
+        }
+        leaf etr-udp-port {
+          type uint16;
+          description
+            "ETR UDP port.";
+        }
+        leaf global-etr-rloc {
+          type simple-address;
+          description
+            "Global ETR RLOC address.";
+        }
+        leaf ms-rloc {
+          type simple-address;
+          description
+            "Map-Server RLOC address.";
+        }
+        leaf private-etr-rloc {
+          type simple-address;
+          description
+            "Private ETR RLOC address.";
+        }
+        leaf-list rtr-rlocs {
+          type simple-address;
+          description
+            "List of RTR RLOC addresses.";
+        }
+      }
+      container explicit-locator-path {
+        when "../address-type = 'laddr:explicit-locator-path-lcaf'" {
+          description
+            "When LCAF type type is Explicit Locator Path.";
+        }
+        description
+          "Explicit Locator Path LCAF type.";
+        reference
+          "http://tools.ietf.org/html/draft-ietf-lisp-lcaf-10
+           #section-4.9";
+        list hop {
+          key "hop-id";
+          ordered-by user;
+          description
+            "List of locator hops forming the explicit path.";
+          leaf hop-id {
+            type string;
+            description
+              "Unique identifier for the hop.";
+          }
+          leaf address {
+            type simple-address;
+            description
+              "AFI address.";
+          }
+          leaf lrs-bits {
+            type bits{
+              bit lookup {
+                description
+                  "Lookup bit.";
+              }
+              bit rloc-probe {
+                description
+                  "RLOC-probe bit.";
+              }
+              bit strict {
+                description
+                  "Strict bit.";
+              }
+            }
+            description
+              "Flag bits per hop.";
+          }
+        }
+      }
+      container source-dest-key {
+        when "../address-type = 'laddr:source-dest-key-lcaf'" {
+          description
+            "When LCAF type type is Source/Dest.";
+        }
+        description
+          "Source/Dest LCAF type.";
+        reference
+            "http://tools.ietf.org/html/draft-ietf-lisp-lcaf-10
+            #section-4.11";
+        leaf source {
+          type simple-address;
+          description
+            "Source address.";
+        }
+        leaf dest {
+          type simple-address;
+          description
+            "Destination address.";
+        }
+      }
+      container key-value-address {
+        when "../address-type = 'laddr:key-value-address-lcaf'" {
+          description
+            "When LCAF type type is Key/Value Address.";
+        }
+        description
+          "Key/Value Address LCAF type.";
+        reference
+          "http://tools.ietf.org/html/draft-ietf-lisp-lcaf-10
+           #section-4.11";
+        leaf key {
+          type simple-address;
+          description
+            "Address as Key.";
+        }
+        leaf value {
+          type simple-address;
+          description
+            "Address as Value.";
+        }
+      }
+      container service-path {
+        when "../address-type = 'laddr:service-path-lcaf'" {
+        description
+          "When LCAF type service path identifier.";
+            }
+        description
+          "Service Path LCAF type.";
+        reference
+          "http://tools.ietf.org/html/draft-ermagan-lisp-nsh-00";
+        leaf service-path-id {
+          type service-path-id-type;
+          description
+            "Service path identifier for the path for NSH header";
+        }
+        leaf service-index {
+          type uint8;
+          description
+            "Service path index for NSH header";
+        }
+      }
+    }
+  }
+}