From 92a58a3b66d2e6313db01d99d7db5a2036767f63 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 17 Apr 2020 14:18:08 +0200 Subject: [PATCH] Add ietf-lisp-address-types model 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 --- features/odl-lispflowmapping-models/pom.xml | 6 - mappingservice/lisp-proto/pom.xml | 4 - .../types/rev151105/SimpleAddressBuilder.java | 67 ++ .../main/yang/ietf-lisp-address-types.yang | 675 ++++++++++++++++++ 4 files changed, 742 insertions(+), 10 deletions(-) create mode 100644 mappingservice/lisp-proto/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/lisp/address/types/rev151105/SimpleAddressBuilder.java create mode 100644 mappingservice/lisp-proto/src/main/yang/ietf-lisp-address-types.yang diff --git a/features/odl-lispflowmapping-models/pom.xml b/features/odl-lispflowmapping-models/pom.xml index cb403b3ec..66e944214 100644 --- a/features/odl-lispflowmapping-models/pom.xml +++ b/features/odl-lispflowmapping-models/pom.xml @@ -43,12 +43,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html xml features - - org.opendaylight.mdsal.model - odl-mdsal-model-draft-ietf-lisp-lcaf-10 - xml - features - org.opendaylight.mdsal.model odl-mdsal-model-draft-ietf-netmod-iana-afn-safi-00 diff --git a/mappingservice/lisp-proto/pom.xml b/mappingservice/lisp-proto/pom.xml index 0a8049f0d..c57b7f003 100644 --- a/mappingservice/lisp-proto/pom.xml +++ b/mappingservice/lisp-proto/pom.xml @@ -38,10 +38,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.mdsal.binding.model.ietf rfc6991-ietf-yang-types - - org.opendaylight.mdsal.model - ietf-lisp-address-types-2015-11-05 - org.opendaylight.mdsal.model iana-afn-safi 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 index 000000000..b201f9419 --- /dev/null +++ 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 @@ -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 index 000000000..22dddbf10 --- /dev/null +++ b/mappingservice/lisp-proto/src/main/yang/ietf-lisp-address-types.yang @@ -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"; + } + } + } + } +} -- 2.36.6