]> git.puffer.fish Git - matthieu/frr.git/commitdiff
isisd: add segment-routing YANG nodes and skeleton callbacks
authorRenato Westphal <renato@opensourcerouting.org>
Wed, 7 Aug 2019 16:35:07 +0000 (13:35 -0300)
committerOlivier Dugeon <olivier.dugeon@orange.com>
Thu, 30 Apr 2020 09:37:38 +0000 (11:37 +0200)
Most definitions were borrowed from the IETF IS-IS SR YANG module,
with a few adaptations. Of particular notice are the following:
* No support for the configuration of multiple SRGBs.
* No distinction between local and connected Prefix-SIDs, both are
  configured the same way.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
isisd/isis_nb.c
isisd/isis_nb.h
isisd/isis_nb_config.c
yang/frr-isisd.yang

index da4322bd4401d9545cb93d2584cc16c420b89b3c..bdfa71091ea4b1d6799032f7df776154043a3c6c 100644 (file)
@@ -454,6 +454,56 @@ const struct frr_yang_module_info frr_isisd_info = {
                                .modify = isis_instance_mpls_te_router_address_modify,
                        },
                },
+               {
+                       .xpath = "/frr-isisd:isis/instance/segment-routing/enabled",
+                       .cbs = {
+                               .modify = isis_instance_segment_routing_enabled_modify,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/segment-routing/srgb/lower-bound",
+                       .cbs = {
+                               .modify = isis_instance_segment_routing_srgb_lower_bound_modify,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/segment-routing/srgb/upper-bound",
+                       .cbs = {
+                               .modify = isis_instance_segment_routing_srgb_upper_bound_modify,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/segment-routing/msd/node-msd",
+                       .cbs = {
+                               .modify = isis_instance_segment_routing_msd_node_msd_modify,
+                               .destroy = isis_instance_segment_routing_msd_node_msd_destroy,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/segment-routing/prefix-sid-map/prefix-sid",
+                       .cbs = {
+                               .create = isis_instance_segment_routing_prefix_sid_map_prefix_sid_create,
+                               .destroy = isis_instance_segment_routing_prefix_sid_map_prefix_sid_destroy,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/segment-routing/prefix-sid-map/prefix-sid/sid-value-type",
+                       .cbs = {
+                               .modify = isis_instance_segment_routing_prefix_sid_map_prefix_sid_sid_value_type_modify,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/segment-routing/prefix-sid-map/prefix-sid/sid-value",
+                       .cbs = {
+                               .modify = isis_instance_segment_routing_prefix_sid_map_prefix_sid_sid_value_modify,
+                       },
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/segment-routing/prefix-sid-map/prefix-sid/last-hop-behavior",
+                       .cbs = {
+                               .modify = isis_instance_segment_routing_prefix_sid_map_prefix_sid_last_hop_behavior_modify,
+                       },
+               },
                {
                        .xpath = "/frr-interface:lib/interface/frr-isisd:isis",
                        .cbs = {
index 65aa95cd6925de8fb49f00a2b842fe7992af59d5..43ee361ca89f325ee6b8bfa65d9d9977b131c242 100644 (file)
@@ -172,6 +172,28 @@ int lib_interface_isis_ipv4_routing_modify(struct nb_cb_modify_args *args);
 int lib_interface_isis_ipv6_routing_modify(struct nb_cb_modify_args *args);
 int lib_interface_isis_circuit_type_modify(struct nb_cb_modify_args *args);
 int lib_interface_isis_bfd_monitoring_modify(struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_enabled_modify(
+       struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_enabled_modify(
+       struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_srgb_lower_bound_modify(
+       struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_srgb_upper_bound_modify(
+       struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_msd_node_msd_modify(
+       struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_msd_node_msd_destroy(
+       struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_create(
+       struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_destroy(
+       struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_sid_value_type_modify(
+       struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_sid_value_modify(
+       struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_last_hop_behavior_modify(
+       struct nb_cb_modify_args *args);
 int lib_interface_isis_csnp_interval_level_1_modify(
        struct nb_cb_modify_args *args);
 int lib_interface_isis_csnp_interval_level_2_modify(
index 2f56fac18668b3648acde709654dd5d9bec1f619..f97202c9a81c5bb51baa0498d97911bce7c3c0cb 100644 (file)
@@ -1402,6 +1402,191 @@ int isis_instance_mpls_te_router_address_destroy(
        return NB_OK;
 }
 
+/*
+ * XPath: /frr-isisd:isis/instance/segment-routing/enabled
+ */
+int isis_instance_segment_routing_enabled_modify(enum nb_event event,
+                                                const struct lyd_node *dnode,
+                                                union nb_resource *resource)
+{
+       switch (event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/segment-routing/srgb/lower-bound
+ */
+int isis_instance_segment_routing_srgb_lower_bound_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       switch (event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/segment-routing/srgb/upper-bound
+ */
+int isis_instance_segment_routing_srgb_upper_bound_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       switch (event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/segment-routing/msd/node-msd
+ */
+int isis_instance_segment_routing_msd_node_msd_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       switch (event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
+int isis_instance_segment_routing_msd_node_msd_destroy(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       switch (event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/segment-routing/prefix-sid-map/prefix-sid
+ */
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       switch (event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_destroy(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       switch (event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-isisd:isis/instance/segment-routing/prefix-sid-map/prefix-sid/sid-value-type
+ */
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_sid_value_type_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       switch (event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-isisd:isis/instance/segment-routing/prefix-sid-map/prefix-sid/sid-value
+ */
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_sid_value_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       switch (event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-isisd:isis/instance/segment-routing/prefix-sid-map/prefix-sid/last-hop-behavior
+ */
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_last_hop_behavior_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       switch (event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
 /*
  * XPath: /frr-interface:lib/interface/frr-isisd:isis
  */
index 57f81892e03ce807e46244c16ecc92cc90032603..fc0110c24a4daa4112b2e1b8b514c6410fc63592 100644 (file)
@@ -1161,6 +1161,107 @@ module frr-isisd {
             "Stable IP address of the advertising router.";
         }
       }
+
+      container segment-routing {
+        description
+          "Segment Routing global configuration.";
+        leaf enabled {
+          type boolean;
+          default "false";
+          description
+            "Enables segment-routing protocol extensions.";
+        }
+        container srgb {
+          description
+            "Global blocks to be advertised.";
+          must "./upper-bound > ./lower-bound";
+          leaf lower-bound {
+              type uint32;
+              default "16000";
+              description
+                "Lower value in the label range.";
+          }
+          leaf upper-bound {
+              type uint32;
+              default "23999";
+              description
+                "Upper value in the label range.";
+          }
+        }
+        container msd {
+          description
+            "MSD configuration.";
+          leaf node-msd {
+            type uint8;
+            description
+              "Node MSD is the lowest MSD supported by the node.";
+          }
+        }
+        container prefix-sid-map {
+          description
+            "Prefix SID configuration.";
+          list prefix-sid {
+            key "prefix";
+            unique "sid-value-type sid-value";
+            description
+              "List of prefix SID mapped to IPv4/IPv6
+               local prefixes.";
+            leaf prefix {
+              type inet:ip-prefix;
+              description
+                "Connected prefix sid.";
+            }
+            leaf sid-value-type {
+              type enumeration {
+                enum "index" {
+                  value 0;
+                  description
+                    "The value will be interpreted as an index.";
+                }
+                enum "absolute" {
+                  value 1;
+                  description
+                    "The value will become interpreted as an absolute
+                     value.";
+                }
+              }
+              default "index";
+              description
+                "This leaf defines how value must be interpreted.";
+            }
+            leaf sid-value {
+              type uint32;
+              mandatory true;
+              description
+                "Value associated with prefix. The value must be
+                 interpreted in the context of sid-value-type.";
+            }
+            leaf last-hop-behavior {
+              type enumeration {
+                enum "explicit-null" {
+                  value 0;
+                  description
+                    "Use explicit-null for the SID.";
+                }
+                enum "no-php" {
+                  value 1;
+                  description
+                    "Do not use Penultimate Hop Popping (PHP)
+                     for the SID.";
+                }
+                enum "php" {
+                  value 2;
+                  description
+                    "Use PHP for the SID.";
+                }
+              }
+              default "php";
+              description
+                "Configure last hop behavior.";
+            }
+          }
+        }
+      }
     }
   }