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-ipv4-unicast-routing.yang | 421 +++++++++++++++++++++ 1 file changed, 421 insertions(+) create mode 100644 routing/routing-api/src/main/yang/ietf-ipv4-unicast-routing.yang (limited to 'routing/routing-api/src/main/yang/ietf-ipv4-unicast-routing.yang') diff --git a/routing/routing-api/src/main/yang/ietf-ipv4-unicast-routing.yang b/routing/routing-api/src/main/yang/ietf-ipv4-unicast-routing.yang new file mode 100644 index 000000000..ed320fd2d --- /dev/null +++ b/routing/routing-api/src/main/yang/ietf-ipv4-unicast-routing.yang @@ -0,0 +1,421 @@ +module ietf-ipv4-unicast-routing { + + namespace "urn:ietf:params:xml:ns:yang:ietf-ipv4-unicast-routing"; + + prefix "v4ur"; + + import ietf-routing { + prefix "rt"; + } + + import ietf-inet-types { + prefix "inet"; + } + + //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 IPv4 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-24 { + description + "Initial revision."; + reference + "RFC XXXX: A YANG Data Model for Routing Management"; + } + + /* Identities */ + + identity ipv4-unicast { + base rt:ipv4; + description + "This identity represents the IPv4 unicast address family."; + } + + /* Operational state data */ + + augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { + when "../../rt:address-family = 'v4ur:ipv4-unicast'" { + description + "This augment is valid only for IPv4 unicast."; + } + description + "This leaf augments an IPv4 unicast route."; + leaf destination-prefix { + type inet:ipv4-prefix; + description + "IPv4 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 = 'v4ur:ipv4-unicast'" { + description + "This augment is valid only for IPv4 unicast."; + } + description + "This leaf augments the 'simple-next-hop' case of IPv4 unicast + routes."; + leaf next-hop { + type inet:ipv4-address; + description + "IPv4 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 = 'v4ur:ipv4-unicast'" { + description + "This augment is valid only for IPv4 unicast."; + } + if-feature rt:multipath-routes; + description + "This leaf augments the 'next-hop-list' case of IPv4 unicast + routes."; + leaf address { + type inet:ipv4-address; + description + "IPv4 address of the next-hop."; + } + } + + //NODE Added same augmentation for operation 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 IPv4 unicast."; + container ipv4 { + 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:ipv4-prefix; + mandatory "true"; + description + "IPv4 destination prefix."; + } + choice next-hop-options { + mandatory "true"; + description + "Options for expressing the next-hop in static routes."; + case special-next-hop { + uses rt:special-next-hop-grouping; + } + case simple-next-hop { + leaf next-hop { + type inet:ipv4-address; + description + "IPv4 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:ipv4-address; + description + "IPv4 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-ipv4-route-state{ + uses vpp-r:vpp-routing-state-attributes; + } + } + } + } + + + /* Configuration data */ + + 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 IPv4 unicast."; + container ipv4 { + 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:ipv4-prefix; + mandatory "true"; + description + "IPv4 destination prefix."; + } + choice next-hop-options { + mandatory "true"; + description + "Options for expressing the next-hop in static routes."; + case special-next-hop { + uses rt:special-next-hop-grouping; + } + case simple-next-hop { + leaf next-hop { + type inet:ipv4-address; + description + "IPv4 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:ipv4-address; + description + "IPv4 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-ipv4-route{ + uses vpp-r:vpp-routing-attributes; + } + } + } + } + + /* RPC methods */ + + augment "/rt:active-route/rt:input/rt:destination-address" { + when "rt:address-family='v4ur:ipv4-unicast'" { + description + "This augment is valid only for IPv4 unicast."; + } + description + "This leaf augments the 'rt:destination-address' parameter of + the 'rt:active-route' operation."; + leaf address { + type inet:ipv4-address; + description + "IPv4 destination address."; + } + } + + augment "/rt:active-route/rt:output/rt:route" { + when "rt:address-family='v4ur:ipv4-unicast'" { + description + "This augment is valid only for IPv4 unicast."; + } + description + "This leaf augments the reply to the 'rt:active-route' + operation."; + leaf destination-prefix { + type inet:ipv4-prefix; + description + "IPv4 destination prefix."; + } + } + + augment "/rt:active-route/rt:output/rt:route/rt:next-hop-options/" + + "rt:simple-next-hop" { + when "rt:address-family='v4ur:ipv4-unicast'" { + description + "This augment is valid only for IPv4 unicast."; + } + description + "This leaf augments the 'simple-next-hop' case in the reply to + the 'rt:active-route' operation."; + leaf next-hop { + type inet:ipv4-address; + description + "IPv4 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='v4ur:ipv4-unicast'" { + description + "This augment is valid only for IPv4 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:ipv4-address; + description + "IPv4 address of the next-hop."; + } + } +} \ No newline at end of file -- cgit 1.2.3-korg