From 1813bf59fa53e8eb913d34b212d45b227dead799 Mon Sep 17 00:00:00 2001 From: Jan Srnicek Date: Thu, 10 Nov 2016 09:48:40 +0100 Subject: HONEYCOMB-58 - Routing Api Change-Id: Id887c12bea1983c0d185689c633902b691cf52f6 Signed-off-by: Jan Srnicek --- .../src/main/yang/ietf-ipv6-unicast-routing.yang | 822 +++++++++++++++++++++ 1 file changed, 822 insertions(+) create mode 100644 routing/routing-api/src/main/yang/ietf-ipv6-unicast-routing.yang (limited to 'routing/routing-api/src/main/yang/ietf-ipv6-unicast-routing.yang') diff --git a/routing/routing-api/src/main/yang/ietf-ipv6-unicast-routing.yang b/routing/routing-api/src/main/yang/ietf-ipv6-unicast-routing.yang new file mode 100644 index 000000000..93de395d6 --- /dev/null +++ b/routing/routing-api/src/main/yang/ietf-ipv6-unicast-routing.yang @@ -0,0 +1,822 @@ +module ietf-ipv6-unicast-routing { + + namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing"; + + prefix "v6ur"; + + import ietf-routing { + prefix "rt"; + } + + import ietf-inet-types { + prefix "inet"; + } + + import ietf-interfaces { + prefix "if"; + } + + import ietf-ip { + prefix "ip"; + } + + //TODO modification needed because of yangtools bug(unable to proceed augmentation in separate model of augmentation in this model) + import vpp-routing { + prefix vpp-r; + } + + organization + "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; + + contact + "WG Web: + WG List: + + WG Chair: Thomas Nadeau + + + WG Chair: Juergen Schoenwaelder + + + Editor: Ladislav Lhotka + "; + + description + "This YANG module augments the 'ietf-routing' module with basic + configuration and operational state data for IPv6 unicast + routing. + + 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 XXXX; see the + RFC itself for full legal notices."; + + revision 2014-05-25 { + description + "Initial revision."; + reference + "RFC XXXX: A YANG Data Model for Routing Management"; + } + + /* Identities */ + + identity ipv6-unicast { + base rt:ipv6; + description + "This identity represents the IPv6 unicast address family."; + } + + /* Operational state data */ + + augment "/rt:routing-state/rt:routing-instance/rt:interfaces/" + + "rt:interface" { + description + "IPv6-specific parameters of router interfaces."; + container ipv6-router-advertisements { + description + "Parameters of IPv6 Router Advertisements."; + leaf send-advertisements { + type boolean; + description + "A flag indicating whether or not the router sends periodic + Router Advertisements and responds to Router + Solicitations."; + } + leaf max-rtr-adv-interval { + type uint16 { + range "4..1800"; + } + units "seconds"; + description + "The maximum time allowed between sending unsolicited + multicast Router Advertisements from the interface."; + } + leaf min-rtr-adv-interval { + type uint16 { + range "3..1350"; + } + units "seconds"; + description + "The minimum time allowed between sending unsolicited + multicast Router Advertisements from the interface."; + } + leaf managed-flag { + type boolean; + description + "The value that is placed in the 'Managed address + configuration' flag field in the Router Advertisement."; + } + leaf other-config-flag { + type boolean; + description + "The value that is placed in the 'Other configuration' flag + field in the Router Advertisement."; + } + leaf link-mtu { + type uint32; + description + "The value that is placed in MTU options sent by the + router. A value of zero indicates that no MTU options are + sent."; + } + leaf reachable-time { + type uint32 { + range "0..3600000"; + } + units "milliseconds"; + description + "The value that is placed in the Reachable Time field in + the Router Advertisement messages sent by the router. A + value of zero means unspecified (by this router)."; + } + leaf retrans-timer { + type uint32; + units "milliseconds"; + description + "The value that is placed in the Retrans Timer field in the + Router Advertisement messages sent by the router. A value + of zero means unspecified (by this router)."; + } + leaf cur-hop-limit { + type uint8; + description + "The value that is placed in the Cur Hop Limit field in the + Router Advertisement messages sent by the router. A value + of zero means unspecified (by this router)."; + } + leaf default-lifetime { + type uint16 { + range "0..9000"; + } + units "seconds"; + description + "The value that is placed in the Router Lifetime field of + Router Advertisements sent from the interface, in seconds. + A value of zero indicates that the router is not to be + used as a default router."; + } + container prefix-list { + description + "A list of prefixes that are placed in Prefix Information + options in Router Advertisement messages sent from the + interface. + + By default, these are all prefixes that the router + advertises via routing protocols as being on-link for the + interface from which the advertisement is sent."; + list prefix { + key "prefix-spec"; + description + "Advertised prefix entry and its parameters."; + leaf prefix-spec { + type inet:ipv6-prefix; + description + "IPv6 address prefix."; + } + leaf valid-lifetime { + type uint32; + units "seconds"; + description + "The value that is placed in the Valid Lifetime in the + Prefix Information option. The designated value of all + 1's (0xffffffff) represents infinity."; + } + leaf on-link-flag { + type boolean; + description + "The value that is placed in the on-link flag ('L-bit') + field in the Prefix Information option."; + } + leaf preferred-lifetime { + type uint32; + units "seconds"; + description + "The value that is placed in the Preferred Lifetime in + the Prefix Information option, in seconds. The + designated value of all 1's (0xffffffff) represents + infinity."; + } + leaf autonomous-flag { + type boolean; + description + "The value that is placed in the Autonomous Flag field + in the Prefix Information option."; + } + } + } + } + } + + augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { + when "../../rt:address-family = 'v6ur:ipv6-unicast'" { + description + "This augment is valid only for IPv6 unicast."; + } + description + "This leaf augments an IPv6 unicast route."; + leaf destination-prefix { + type inet:ipv6-prefix; + description + "IPv6 destination prefix."; + } + } + + augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" + + "rt:next-hop-options/rt:simple-next-hop" { + when "../../rt:address-family = 'v6ur:ipv6-unicast'" { + description + "This augment is valid only for IPv6 unicast."; + } + description + "This leaf augments the 'simple-next-hop' case of IPv6 unicast + routes."; + leaf next-hop { + type inet:ipv6-address; + description + "IPv6 address of the next-hop."; + } + } + + augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" + + "rt:next-hop-options/rt:next-hop-list/rt:next-hop-list/" + + "rt:next-hop" { + when "../../../../rt:address-family = 'v6ur:ipv6-unicast'" { + description + "This augment is valid only for IPv6 unicast."; + } + if-feature rt:multipath-routes; + description + "This leaf augments the 'next-hop-list' case of IPv6 unicast + routes."; + leaf address { + type inet:ipv6-address; + description + "IPv6 address of the next-hop."; + } + } + + /* Configuration data */ + + augment + "/rt:routing/rt:routing-instance/rt:interfaces/rt:interface" { + when "/if:interfaces/if:interface[if:name=current()/rt:name]/" + + "ip:ipv6/ip:enabled='true'" { + description + "This augment is only valid for router interfaces with + enabled IPv6."; + } + description + "Configuration of IPv6-specific parameters of router + interfaces."; + container ipv6-router-advertisements { + description + "Configuration of IPv6 Router Advertisements."; + leaf send-advertisements { + type boolean; + default "false"; + description + "A flag indicating whether or not the router sends periodic + Router Advertisements and responds to Router + Solicitations."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - + AdvSendAdvertisements."; + } + leaf max-rtr-adv-interval { + type uint16 { + range "4..1800"; + } + units "seconds"; + default "600"; + description + "The maximum time allowed between sending unsolicited + multicast Router Advertisements from the interface."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - + MaxRtrAdvInterval."; + } + leaf min-rtr-adv-interval { + type uint16 { + range "3..1350"; + } + units "seconds"; + must ". <= 0.75 * ../max-rtr-adv-interval" { + description + "The value MUST NOT be greater than 75 % of + 'max-rtr-adv-interval'."; + } + description + "The minimum time allowed between sending unsolicited + multicast Router Advertisements from the interface. + + The default value to be used operationally if this leaf is + not configured is determined as follows: + + - if max-rtr-adv-interval >= 9 seconds, the default value + is 0.33 * max-rtr-adv-interval; + + - otherwise it is 0.75 * max-rtr-adv-interval."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - + MinRtrAdvInterval."; + } + leaf managed-flag { + type boolean; + default "false"; + description + "The value to be placed in the 'Managed address + configuration' flag field in the Router Advertisement."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - + AdvManagedFlag."; + } + leaf other-config-flag { + type boolean; + default "false"; + description + "The value to be placed in the 'Other configuration' flag + field in the Router Advertisement."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - + AdvOtherConfigFlag."; + } + leaf link-mtu { + type uint32; + default "0"; + description + "The value to be placed in MTU options sent by the router. + A value of zero indicates that no MTU options are sent."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - + AdvLinkMTU."; + } + leaf reachable-time { + type uint32 { + range "0..3600000"; + } + units "milliseconds"; + default "0"; + description + "The value to be placed in the Reachable Time field in the + Router Advertisement messages sent by the router. A value + of zero means unspecified (by this router)."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - + AdvReachableTime."; + } + leaf retrans-timer { + type uint32; + units "milliseconds"; + default "0"; + description + "The value to be placed in the Retrans Timer field in the + Router Advertisement messages sent by the router. A value + of zero means unspecified (by this router)."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - + AdvRetransTimer."; + } + leaf cur-hop-limit { + type uint8; + description + "The value to be placed in the Cur Hop Limit field in the + Router Advertisement messages sent by the router. A value + of zero means unspecified (by this router). + + If this parameter is not configured, the device SHOULD use + the value specified in IANA Assigned Numbers that was in + effect at the time of implementation."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - + AdvCurHopLimit. + + IANA: IP Parameters, + http://www.iana.org/assignments/ip-parameters"; + } + leaf default-lifetime { + type uint16 { + range "0..9000"; + } + units "seconds"; + description + "The value to be placed in the Router Lifetime field of + Router Advertisements sent from the interface, in seconds. + It MUST be either zero or between max-rtr-adv-interval and + 9000 seconds. A value of zero indicates that the router is + not to be used as a default router. These limits may be + overridden by specific documents that describe how IPv6 + operates over different link layers. + + If this parameter is not configured, the device SHOULD use + a value of 3 * max-rtr-adv-interval."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - + AdvDefaultLifeTime."; + } + container prefix-list { + description + "Configuration of prefixes to be placed in Prefix + Information options in Router Advertisement messages sent + from the interface. + + Prefixes that are advertised by default but do not have + their entries in the child 'prefix' list are advertised + with the default values of all parameters. + + The link-local prefix SHOULD NOT be included in the list + of advertised prefixes."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) - + AdvPrefixList."; + list prefix { + key "prefix-spec"; + description + "Configuration of an advertised prefix entry."; + leaf prefix-spec { + type inet:ipv6-prefix; + description + "IPv6 address prefix."; + } + choice control-adv-prefixes { + default "advertise"; + description + "The prefix either may be explicitly removed from the + set of advertised prefixes, or parameters with which + it is advertised may be specified (default case)."; + leaf no-advertise { + type empty; + description + "The prefix will not be advertised. + + This can be used for removing the prefix from the + default set of advertised prefixes."; + } + case advertise { + leaf valid-lifetime { + type uint32; + units "seconds"; + default "2592000"; + description + "The value to be placed in the Valid Lifetime in + the Prefix Information option. The designated + value of all 1's (0xffffffff) represents + infinity."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 + (IPv6) - AdvValidLifetime."; + } + leaf on-link-flag { + type boolean; + default "true"; + description + "The value to be placed in the on-link flag + ('L-bit') field in the Prefix Information + option."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 + (IPv6) - AdvOnLinkFlag."; + } + leaf preferred-lifetime { + type uint32; + units "seconds"; + must ". <= ../valid-lifetime" { + description + "This value MUST NOT be greater than + valid-lifetime."; + } + default "604800"; + description + "The value to be placed in the Preferred Lifetime + in the Prefix Information option. The designated + value of all 1's (0xffffffff) represents + infinity."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 + (IPv6) - AdvPreferredLifetime."; + } + leaf autonomous-flag { + type boolean; + default "true"; + description + "The value to be placed in the Autonomous Flag + field in the Prefix Information option."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 + (IPv6) - AdvAutonomousFlag."; + } + } + } + } + } + } + } + + //NOTE - added same augmentation for operational state + + augment "/rt:routing-state/rt:routing-instance/rt:routing-protocols/rt:routing-protocol/rt:static-routes" { + description + "This augment defines the configuration of the 'static' + pseudo-protocol with data specific to IPv6 unicast."; + container ipv6 { + description + "Configuration of a 'static' pseudo-protocol instance + consists of a list of routes."; + list route { + key "id"; + ordered-by "user"; + description + "A user-ordered list of static routes."; + leaf id { + type uint32 { + //WARNING - range changed from 1..max to be mappable on vpp table ids + range "0..max"; + } + description + "Unique numeric identifier of the route. + + This value is unrelated to system-assigned 'id' + parameters of routes in RIBs."; + } + leaf description { + type string; + description + "Textual description of the route."; + } + leaf destination-prefix { + type inet:ipv6-prefix; + mandatory "true"; + description + "IPv6 destination prefix."; + } + choice next-hop-options { + mandatory "true"; + description + "Options for expressing the next-hop in static routes."; + case special-next-hop { + //WARNING - changed, see ietf-routing.yang + uses rt:special-next-hop-grouping; + } + case simple-next-hop { + leaf next-hop { + type inet:ipv6-address; + description + "IPv6 address of the next-hop."; + } + //TODO - temporarily set to absolute path until https://bugs.opendaylight.org/show_bug.cgi?id=6881 is resolved + leaf outgoing-interface { + type leafref { + path "/rt:routing/rt:routing-instance/rt:interfaces/rt:interface/" + + "rt:name"; + } + description + "Name of the outgoing interface. + + Only interfaces configured for the ancestor routing + instance can be given."; + } + } + case next-hop-list { + if-feature rt:multipath-routes; + container next-hop-list { + description + "Configuration of multiple next-hops."; + list next-hop { + key "id"; + description + "An entry of a next-hop list."; + leaf id { + type uint32; + description + "Unique numeric identifier of the entry. + + This value is unrelated to system-assigned 'id' + parameters of next-hops in RIBs."; + } + leaf address { + type inet:ipv6-address; + description + "IPv6 address of the next-hop."; + } + //TODO - temporarily set to absolute path until https://bugs.opendaylight.org/show_bug.cgi?id=6881 is resolved + leaf outgoing-interface { + type leafref { + path "/rt:routing/rt:routing-instance/rt:interfaces/rt:interface/" + + "rt:name"; + } + description + "Name of the outgoing interface. + + Only interfaces configured for the ancestor + routing instance can be given."; + } + uses rt:next-hop-classifiers { + refine "priority" { + default "primary"; + } + refine "weight" { + default "0"; + } + } + } + } + } + } + + //TODO modification needed because of yangtools bug(unable to proceed augmentation in separate model of augmentation in this model) + container vpp-ipv6-route-state{ + uses vpp-r:vpp-routing-state-attributes; + } + } + } + } + + augment "/rt:routing/rt:routing-instance/rt:routing-protocols/rt:routing-protocol/rt:static-routes" { + description + "This augment defines the configuration of the 'static' + pseudo-protocol with data specific to IPv6 unicast."; + container ipv6 { + description + "Configuration of a 'static' pseudo-protocol instance + consists of a list of routes."; + list route { + key "id"; + ordered-by "user"; + description + "A user-ordered list of static routes."; + leaf id { + type uint32 { + //WARNING - range changed from 1..max to be mappable on vpp table ids + range "0..max"; + } + description + "Unique numeric identifier of the route. + + This value is unrelated to system-assigned 'id' + parameters of routes in RIBs."; + } + leaf description { + type string; + description + "Textual description of the route."; + } + leaf destination-prefix { + type inet:ipv6-prefix; + mandatory "true"; + description + "IPv6 destination prefix."; + } + choice next-hop-options { + mandatory "true"; + description + "Options for expressing the next-hop in static routes."; + case special-next-hop { + //WARNING - changed, see ietf-routing.yang + uses rt:special-next-hop-grouping; + } + case simple-next-hop { + leaf next-hop { + type inet:ipv6-address; + description + "IPv6 address of the next-hop."; + } + //TODO - temporarily set to absolute path until https://bugs.opendaylight.org/show_bug.cgi?id=6881 is resolved + leaf outgoing-interface { + type leafref { + path "/rt:routing/rt:routing-instance/rt:interfaces/rt:interface/" + + "rt:name"; + } + description + "Name of the outgoing interface. + + Only interfaces configured for the ancestor routing + instance can be given."; + } + } + case next-hop-list { + if-feature rt:multipath-routes; + container next-hop-list { + description + "Configuration of multiple next-hops."; + list next-hop { + key "id"; + description + "An entry of a next-hop list."; + leaf id { + type uint32; + description + "Unique numeric identifier of the entry. + + This value is unrelated to system-assigned 'id' + parameters of next-hops in RIBs."; + } + leaf address { + type inet:ipv6-address; + description + "IPv6 address of the next-hop."; + } + //TODO - temporarily set to absolute path until https://bugs.opendaylight.org/show_bug.cgi?id=6881 is resolved + leaf outgoing-interface { + type leafref { + path "/rt:routing/rt:routing-instance/rt:interfaces/rt:interface/" + + "rt:name"; + } + description + "Name of the outgoing interface. + + Only interfaces configured for the ancestor + routing instance can be given."; + } + uses rt:next-hop-classifiers { + refine "priority" { + default "primary"; + } + refine "weight" { + default "0"; + } + } + } + } + } + } + + //TODO modification needed because of yangtools bug(unable to proceed augmentation in separate model of augmentation in this model) + container vpp-ipv6-route{ + uses vpp-r:vpp-routing-attributes; + } + } + } + } + + /* RPC methods */ + + augment "/rt:active-route/rt:input/rt:destination-address" { + when "rt:address-family='v6ur:ipv6-unicast'" { + description + "This augment is valid only for IPv6 unicast."; + } + description + "This leaf augments the 'rt:destination-address' parameter of + the 'rt:active-route' operation."; + leaf address { + type inet:ipv6-address; + description + "IPv6 destination address."; + } + } + + augment "/rt:active-route/rt:output/rt:route" { + when "rt:address-family='v6ur:ipv6-unicast'" { + description + "This augment is valid only for IPv6 unicast."; + } + description + "This leaf augments the reply to the 'rt:active-route' + operation."; + leaf destination-prefix { + type inet:ipv6-prefix; + description + "IPv6 destination prefix."; + } + } + + augment "/rt:active-route/rt:output/rt:route/rt:next-hop-options/" + + "rt:simple-next-hop" { + when "rt:address-family='v6ur:ipv6-unicast'" { + description + "This augment is valid only for IPv6 unicast."; + } + description + "This leaf augments the 'simple-next-hop' case in the reply to + the 'rt:active-route' operation."; + leaf next-hop { + type inet:ipv6-address; + description + "IPv6 address of the next-hop."; + } + } + + augment "/rt:active-route/rt:output/rt:route/rt:next-hop-options/" + + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" { + when "../../rt:address-family='v6ur:ipv6-unicast'" { + description + "This augment is valid only for IPv6 unicast."; + } + if-feature rt:multipath-routes; + description + "This leaf augments the 'next-hop-list' case in the reply to + the 'rt:active-route' operation."; + leaf address { + type inet:ipv6-address; + description + "IPv6 address of the next-hop."; + } + } +} \ No newline at end of file -- cgit 1.2.3-korg