summaryrefslogtreecommitdiffstats
path: root/srv6/srv6-api/src/main/yang/hc2vpp-ietf-srv6-base@2018-03-01.yang
diff options
context:
space:
mode:
Diffstat (limited to 'srv6/srv6-api/src/main/yang/hc2vpp-ietf-srv6-base@2018-03-01.yang')
-rw-r--r--srv6/srv6-api/src/main/yang/hc2vpp-ietf-srv6-base@2018-03-01.yang666
1 files changed, 666 insertions, 0 deletions
diff --git a/srv6/srv6-api/src/main/yang/hc2vpp-ietf-srv6-base@2018-03-01.yang b/srv6/srv6-api/src/main/yang/hc2vpp-ietf-srv6-base@2018-03-01.yang
new file mode 100644
index 000000000..4d41b4566
--- /dev/null
+++ b/srv6/srv6-api/src/main/yang/hc2vpp-ietf-srv6-base@2018-03-01.yang
@@ -0,0 +1,666 @@
+module hc2vpp-ietf-srv6-base {
+
+ namespace "urn:ietf:params:xml:ns:yang:ietf-srv6-base";
+ prefix srv6;
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import ietf-inet-types {
+ prefix inet;
+ }
+
+ import ietf-yang-types {
+ prefix "yang";
+ }
+
+ // TODO: hc2vpp-298 - Renamed imports, because hc2vpp uses modified versions of these models.
+ import hc2vpp-ietf-routing-types {
+ prefix "rt-types";
+ }
+
+
+ // TODO: hc2vpp-298 - Renamed imports, because hc2vpp uses modified versions of these models.
+ import hc2vpp-ietf-routing {
+ prefix "rt";
+ }
+
+ import ietf-srv6-types {
+ prefix srv6-types;
+ }
+
+ organization
+ "IETF SPRING Working Group";
+ contact
+ "WG Web: <http://tools.ietf.org/wg/spring/>
+ WG List: <mailto:spring@ietf.org>
+
+ Editor: Kamran Raza
+ <mailto:skraza@cisco.com>
+
+ Editor: Jaganbabu Rajamanickam
+ <maito:jrajaman@cisco.com>
+
+ Editor: Xufeng Liu
+ <mailto:Xufeng_Liu@jabil.com>
+
+ Editor: Zhibo Hu
+ <mailto:huzhibo@huawei.com>
+
+ Editor: Iftekhar Hussain
+ <mailto:IHussain@infinera.com>
+
+ Editor: Himanshu Shah
+ <mailto:hshah@ciena.com>
+
+ Editor: Daniel Voyer
+ <mailto:daniel.voyer@bell.ca>
+
+ Editor: Hani Elmalky
+ <mailto:hani.elmalky@ericsson.com>
+
+ Editor: Satoru Matsushima
+ <mailto:satoru.matsushima@gmail.com>
+
+ Editor: Katsuhiro Horiba
+ <mailto:katsuhiro.horiba@g.softbank.co.jp>
+
+ Editor: Ahmed AbdelSalam
+ <mailto:ahmed.abdelsalam@gssi.it>
+
+ ";
+
+ description
+ "This YANG module defines the essential elements for the
+ management of Segment-Routing with IPv6 dataplane (SRv6).
+
+ Copyright (c) 2017 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).";
+
+ reference "RFC XXXX";
+
+ revision 2018-03-01 {
+ description
+ "Updated to align with SRv6 network programming draft rev 04";
+ reference
+ "RFC XXXX: YANG Data Model for SRv6";
+ }
+
+ revision 2017-11-12 {
+ description
+ "Initial revision.";
+ reference
+ "RFC XXXX: YANG Data Model for SRv6";
+ }
+
+/*
+ * Common
+ */
+
+ grouping path-attrs-cmn {
+ description
+ "Path properties -common for v4/v6";
+
+ leaf weight {
+ type uint32;
+ description
+ "This value is used to compute a loadshare to perform un-equal
+ load balancing when multiple outgoing path(s) are specified. A
+ share is computed as a ratio of this number to the total under
+ all configured path(s).";
+ }
+
+ leaf role {
+
+ type enumeration {
+ enum PRIMARY { description "Path as primary traffic carrying"; }
+ enum BACKUP { description "Path acts as a backup"; }
+ enum PRIMARY_AND_BACKUP { description
+ "Path acts as primary and backup simultaneously"; }
+ }
+ description "The path role";
+ }
+
+ leaf backup-path-index {
+ type uint8;
+ description "Index of the protecting (backup) path";
+ }
+ }
+
+ grouping path-out-sids {
+ description "Grouping for path's SID stack";
+
+ list out-sid {
+ key "sid";
+ description "Out SID";
+
+ leaf sid {
+ type srv6-types:srv6-sid;
+ description "SID value";
+ }
+ }
+
+ }
+
+ grouping path-out-labels {
+ description "Grouping for path's label stack";
+
+ list out-label {
+ key "label";
+ description "Out label";
+
+ leaf label {
+ type rt-types:mpls-label;
+ description "Label value";
+ }
+ }
+
+ }
+
+ /*
+ * Config and State
+ */
+
+ grouping srv6-encap {
+ description "Grouping for encap param config.";
+
+ container encapsulation {
+ description "Configure encapsulation related parameters";
+ leaf source-address {
+ type inet:ipv6-address;
+ description "Specify a source address (for T.Encap). The address must locally exists
+ and be routable";
+ }
+ leaf ip-ttl-propagation {
+ type boolean;
+ default false;
+ description "IP TTL propagation from encapsulated packet to encapsulating outer
+ IPv6 header. When configured on decapsulation side, this refers to
+ propagating IP TTL from outer IPv6 header to inner header after decap";
+ }
+
+ }
+ }
+
+ grouping srv6-locator-state {
+ description "SRv6 grouping Locastateor ";
+
+ leaf operational-status {
+ type srv6-types:srv6-status-type;
+ config false;
+ description "Indicates whether locator state is UP";
+ }
+
+ leaf is-in-address-conflict {
+ type boolean;
+ config false;
+ description "Indicates whether locator address conflicts with
+ some other IPv6 address on the box";
+ }
+ }
+
+ grouping srv6-locators {
+ description "SRv6 locator grouping";
+
+ container locators {
+ description "SRv6 locators";
+
+ list locator {
+ key "name";
+ description "Configure a SRv6 locator";
+
+
+ leaf name {
+ type string;
+ description "Locator name";
+ }
+
+ leaf enable {
+ type boolean;
+ default false;
+ description "Enable a SRv6 locator";
+ }
+ leaf is-default {
+ type boolean;
+ mandatory true;
+ description "Indicates if the locator is a default locator";
+ }
+
+ container prefix {
+ description "Specify locator prefix value";
+ leaf address {
+ type inet:ipv6-address;
+ mandatory true;
+ description "IPv6 address";
+ }
+ leaf length {
+ type srv6-types:srv6-locator-len;
+ mandatory true;
+ description "Locator (prefix) length";
+ }
+ }
+ uses srv6-locator-state;
+ }
+ }
+ }
+
+ grouping srv6-stats-in {
+ description "Grouping for inbound stats";
+
+ leaf in-pkts {
+ type yang:counter64;
+ description
+ "A cumulative counter of the total number of packets received";
+ }
+
+ leaf in-octets {
+ type yang:counter64;
+ description
+ "A cumulative counter of the total bytes received.";
+ }
+
+ }
+
+ grouping srv6-stats-out {
+ description "Grouping for inbound stats";
+
+ leaf out-pkts {
+ type yang:counter64;
+ description
+ "A cumulative counter of the total number of packets transmitted";
+ }
+
+ leaf out-octets {
+ type yang:counter64;
+ description
+ "A cumulative counter of the total bytes transmitted.";
+ }
+ }
+
+ grouping path-out-sids-choice {
+ description "Grouping for Out-SID choices";
+ choice encap-type {
+ description "Out-SID encap-based choice";
+ case srv6 {
+ uses path-out-sids;
+ }
+ case mpls {
+ uses path-out-labels;
+ }
+ }
+ }
+
+ grouping local-sid-fwd-state {
+ description "SRv6 local-SID forwarding state grouping";
+
+ container forwarding {
+ description "SRv6 local-SID forwarding state";
+
+ leaf is-installed {
+ type boolean;
+ description "Indicates whether SID is installed in forwarding";
+ }
+
+ leaf next-hop-type {
+ type srv6-types:srv6-nexthop-type;
+ description "Forwarding next-hop types";
+ }
+
+ container paths {
+
+ when "../is-installed = 'true'" {
+ description "This container is valid only when the local-SID is installed
+ in forwarding";
+ }
+
+ list path {
+ key path-index;
+ description "The list of paths associated with the SID";
+
+ leaf path-index {
+ type uint8;
+ description "Index of the path";
+ }
+
+ container l2 {
+ when "../../../next-hop-type = 'l2'" {
+ description "This container is valid only for L2 type of NHs";
+ }
+
+ leaf interface {
+ type if:interface-ref;
+ description "The outgoing Layer2 interface";
+ }
+
+ description "L2 information";
+ }
+
+ container l3 {
+ when "../../../next-hop-type != 'l2'" {
+ description "This container is valid only for L3 type of NHs";
+ }
+
+ leaf interface {
+ type if:interface-ref;
+ description "The outgoing Layer3 interface";
+ }
+
+ leaf next-hop {
+ type inet:ip-address;
+ description "The IP address of the next-hop";
+ }
+
+ uses path-attrs-cmn;
+
+ description "L3 information";
+ }
+ uses path-out-sids-choice;
+ }
+
+ description "Forwarding paths";
+ }
+ }
+ }
+
+ grouping srv6-state-sid {
+ description "SRv6 SID state grouping";
+
+ container local-sids {
+ config false;
+ description "Local-SID state";
+
+ container counters {
+ description "SRv6 counters";
+
+ container cnt3 {
+ description "Counts SRv6 traffic received/dropped on local prefix not instantiated as local-SID";
+ uses srv6-stats-in;
+ }
+ }
+
+ list local-sid {
+ key "sid";
+ description "Per-localSID Counters";
+
+ leaf sid {
+ type srv6-types:srv6-sid;
+ description "Local SID value";
+ }
+
+ uses srv6-locator-ref;
+
+ leaf is-reserved {
+ type boolean;
+ description "Set to true if SID comes from reserved pool";
+ }
+
+ leaf end-behavior-type {
+ type identityref {
+ base srv6-types:srv6-endpoint-type;
+ }
+ description "Type of SRv6 end behavior.";
+ }
+
+ leaf alloc-type {
+ type srv6-types:sid-alloc-type;
+ description
+ "Type of sid allocation.";
+
+ }
+
+ list owner {
+ key "type instance";
+ description "SID Owner clients";
+ leaf type {
+ type identityref {
+ base srv6-types:srv6-sid-owner-type;
+ }
+ description "SID owner/client type";
+ }
+ leaf instance {
+ type string;
+ description "Client instance";
+ }
+ leaf is-winner {
+ type boolean;
+ description "Is this client/owner the winning in terms of forwarding";
+ }
+ }
+
+ uses local-sid-fwd-state;
+
+ container counters {
+ description "SRv6 per local-SID counters";
+
+ container cnt1 {
+ description "Counts SRv6 traffic received on local-SID prefix and processed successfully";
+ uses srv6-stats-in;
+ }
+ }
+ }
+ }
+ }
+
+ grouping srv6-support-ends {
+ description "SRv6 End behavior support grouping";
+
+ list end-behavior {
+ key "type";
+ description "End behavior support";
+
+ leaf type {
+ type identityref {
+ base srv6-types:srv6-endpoint-type;
+ }
+ description "End behavior (End*) type";
+ }
+
+ leaf supported {
+ type boolean;
+ mandatory true;
+ description "True if supported";
+ }
+ }
+ }
+
+ grouping srv6-support-transits {
+ description "SRv6 Transit behavior support grouping";
+
+ list transit-behavior {
+ key "type";
+ description "Transit behavior support";
+
+ leaf type {
+ type srv6-types:srv6-transit-type;
+ description "Transit behavior (T*) type";
+ }
+ leaf supported {
+ type boolean;
+ mandatory true;
+ description "True if supported";
+ }
+ }
+ }
+
+ grouping srv6-support-signaled {
+ description "SRv6 signaled parameter support grouping";
+
+ container signaled-parameters {
+ description "SRv6 signaled parameter support";
+
+ leaf max-sl {
+ type uint8;
+ //mandatory true;
+ description "Maximum value of the SL field in the SRH of
+ a received packet before applying the function
+ associated with a SID";
+ }
+ leaf max-end-pop-srh {
+ type uint8;
+ //mandatory true;
+ description "Maximum number of SIDs in the top SRH in an
+ SRH stack to which the router can apply
+ PSP or USP flavors";
+ }
+ leaf max-t_insert {
+
+ type uint8;
+ //mandatory true;
+ description "Maximum number of SIDs that can be inserted as
+ part of the T.insert behavior";
+ }
+ leaf max-t_encap {
+ type uint8;
+ //mandatory true;
+ description "Maximum number of SIDs that can be inserted as
+ part of the T.Encap behavior";
+ }
+ leaf max-end_d {
+ type uint8;
+ //mandatory true;
+ description "Maximum number of SIDs in an SRH when applying
+ End.DX6 and End.DT6 functions";
+ }
+ }
+ }
+
+ grouping srv6-support-security-rules {
+ description "SRv6 Security rules grouping";
+
+ list security-rule {
+ key "type";
+ description "Security rule support";
+
+ leaf type {
+ type srv6-types:srv6-security-rule-type;
+ description "Security rule type";
+ }
+ leaf supported {
+ type boolean;
+ mandatory true;
+ description "True if supported";
+ }
+ }
+ }
+
+ grouping srv6-support-counters {
+ description "SRv6 Counters grouping";
+
+ list counters {
+ key "type";
+ description "SRv6 counter support";
+
+ leaf type {
+ type srv6-types:srv6-counter-type;
+
+ description "Counter type";
+ }
+ leaf supported {
+ type boolean;
+ mandatory true;
+ description "True if supported";
+ }
+ }
+ }
+
+ grouping srv6-state-capabilities {
+ description "SRv6 node capabilities grouping";
+ container node-capabilities {
+ config false;
+ description "Node's SRv6 capabilities";
+
+ uses srv6-support-ends;
+ uses srv6-support-transits;
+ uses srv6-support-signaled;
+ uses srv6-support-security-rules;
+ uses srv6-support-counters;
+ }
+ }
+
+ augment "/rt:routing" {
+ description
+ "This augments routing-instance configuration with segment-routing SRv6.";
+
+ container srv6 {
+ description "Segment Routing with IPv6 dataplane";
+
+ /* config */
+ leaf enable {
+ type boolean;
+ default false;
+ description "Enable SRv6";
+ }
+
+ uses srv6-encap;
+ uses srv6-locators;
+ uses srv6-state-capabilities;
+ uses srv6-state-sid;
+ }
+ }
+
+ /* Notifications */
+
+ grouping srv6-locator-ref {
+
+ description
+ "An absolute reference to an SRv6 locator";
+ leaf locator-ref {
+ type leafref {
+ path "/rt:routing/srv6:srv6/srv6:locators/srv6:locator/srv6:name";
+ }
+ description
+ "Reference to a SRv6 locator.";
+ }
+ }
+
+ notification srv6-locator-status-event {
+ description
+ "Notification event for a change of SRv6 locator operational status.";
+ leaf operational-status {
+ type srv6-types:srv6-status-type;
+ description "Operational status";
+ }
+ uses srv6-locator-ref;
+ }
+
+ notification srv6-sid-collision-event {
+ description
+ "Notification event for an SRv6 SID collision - i.e., attempt to bind an already
+ bound SID to a new context";
+ leaf sid {
+ type srv6-types:srv6-sid;
+ description "SRv6 SID";
+ }
+ container existing {
+ description "Current assignment / bind";
+ leaf end-behavior-type {
+ type identityref {
+ base srv6-types:srv6-endpoint-type;
+ }
+ description "End type";
+ }
+ // TODO: More
+ }
+ container requested {
+ description "Requested assignment / bind";
+
+ leaf end-behavior-type {
+ type identityref {
+ base srv6-types:srv6-endpoint-type;
+ }
+ description "End type";
+ }
+
+ }
+
+ }
+
+} // module