]> git.puffer.fish Git - matthieu/frr.git/commitdiff
isisd: changed to output the LAN-adjacency-sid in yang format
authorkanaya516 <abcs516tk1@gmail.com>
Wed, 4 Jan 2023 15:47:43 +0000 (15:47 +0000)
committerkanaya516 <abcs516tk1@gmail.com>
Wed, 4 Jan 2023 15:47:43 +0000 (15:47 +0000)
Signed-off-by: kanaya516 <abcs516tk1@gmail.com>
isisd/isis_nb.c
isisd/isis_nb.h
isisd/isis_nb_state.c
yang/frr-isisd.yang

index 6dac12b0455ee887b290db5f943b318593d5b918..c5653d034806f5971b510a3eedd87fd746ea39a9 100644 (file)
@@ -1136,6 +1136,36 @@ const struct frr_yang_module_info frr_isisd_info = {
                                .get_elem = lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_protection_requested_get_elem,
                        }
                },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid",
+                       .cbs = {
+                               .get_next = lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_get_next,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/af",
+                       .cbs = {
+                               .get_elem = lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_af_get_elem,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/value",
+                       .cbs = {
+                               .get_elem = lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_value_get_elem,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/weight",
+                       .cbs = {
+                               .get_elem = lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_weight_get_elem,
+                       }
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/protection-requested",
+                       .cbs = {
+                               .get_elem = lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_protection_requested_get_elem,
+                       }
+               },
                {
                        .xpath = "/frr-interface:lib/interface/state/frr-isisd:isis/event-counters/adjacency-changes",
                        .cbs = {
index 49c67870bb5f2d351282e416df1783fae0ad21c0..380ce4f2519cd5345714a342a736003a38fa59f5 100644 (file)
@@ -369,15 +369,35 @@ lib_interface_state_isis_adjacencies_adjacency_neighbor_priority_get_elem(
        struct nb_cb_get_elem_args *args);
 struct yang_data *lib_interface_state_isis_adjacencies_adjacency_state_get_elem(
        struct nb_cb_get_elem_args *args);
-const void *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_get_next(
+const void *
+lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_get_next(
        struct nb_cb_get_next_args *args);
-struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_af_get_elem(
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_af_get_elem(
        struct nb_cb_get_elem_args *args);
-struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_value_get_elem(
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_value_get_elem(
        struct nb_cb_get_elem_args *args);
-struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_weight_get_elem(
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_weight_get_elem(
        struct nb_cb_get_elem_args *args);
-struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_protection_requested_get_elem(
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_protection_requested_get_elem(
+       struct nb_cb_get_elem_args *args);
+const void *
+lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_get_next(
+       struct nb_cb_get_next_args *args);
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_af_get_elem(
+       struct nb_cb_get_elem_args *args);
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_value_get_elem(
+       struct nb_cb_get_elem_args *args);
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_weight_get_elem(
+       struct nb_cb_get_elem_args *args);
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_protection_requested_get_elem(
        struct nb_cb_get_elem_args *args);
 struct yang_data *
 lib_interface_state_isis_event_counters_adjacency_changes_get_elem(
index 8bd2ed54386cc6ac30d133a4f95da112da48bfb8..5b1fc6e1d2ebe18345b2bbc93503157928a03980 100644 (file)
@@ -218,7 +218,8 @@ struct yang_data *lib_interface_state_isis_adjacencies_adjacency_state_get_elem(
  * XPath:
  * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/adjacency-sids/adjacency-sid
  */
-const void *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_get_next(
+const void *
+lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_get_next(
        struct nb_cb_get_next_args *args)
 {
        const struct isis_adjacency *adj = args->parent_list_entry;
@@ -241,7 +242,8 @@ const void *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjace
  * XPath:
  * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/adjacency-sids/adjacency-sid/af
  */
-struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_af_get_elem(
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_af_get_elem(
        struct nb_cb_get_elem_args *args)
 {
        const struct sr_adjacency *sra = args->list_entry;
@@ -261,7 +263,8 @@ struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_
  * XPath:
  * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/adjacency-sids/adjacency-sid/value
  */
-struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_value_get_elem(
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_value_get_elem(
        struct nb_cb_get_elem_args *args)
 {
        const struct sr_adjacency *sra = args->list_entry;
@@ -281,7 +284,8 @@ struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_
  * XPath:
  * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/adjacency-sids/adjacency-sid/weight
  */
-struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_weight_get_elem(
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_weight_get_elem(
        struct nb_cb_get_elem_args *args)
 {
        const struct sr_adjacency *sra = args->list_entry;
@@ -301,7 +305,8 @@ struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_
  * XPath:
  * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/adjacency-sids/adjacency-sid/protection-requested
  */
-struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_protection_requested_get_elem(
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_protection_requested_get_elem(
        struct nb_cb_get_elem_args *args)
 {
        const struct sr_adjacency *sra = args->list_entry;
@@ -311,7 +316,121 @@ struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_
                /* Adjacency SID is not published with circuit type Broadcast */
                return NULL;
        case CIRCUIT_T_P2P:
-               return yang_data_new_bool(args->xpath, sra->u.adj_sid->flags & EXT_SUBTLV_LINK_ADJ_SID_BFLG);
+               return yang_data_new_bool(args->xpath,
+                                         sra->u.adj_sid->flags &
+                                                 EXT_SUBTLV_LINK_ADJ_SID_BFLG);
+       }
+
+       return NULL;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid
+ */
+const void *
+lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_get_next(
+       struct nb_cb_get_next_args *args)
+{
+       const struct isis_adjacency *adj = args->parent_list_entry;
+       const struct sr_adjacency *sra = args->list_entry, *sra_next = NULL;
+       struct listnode *node, *node_next;
+
+       if (args->list_entry == NULL)
+               sra_next = listnode_head(adj->adj_sids);
+       else {
+               node = listnode_lookup(adj->adj_sids, sra);
+               node_next = listnextnode(node);
+               if (node_next)
+                       sra_next = listgetdata(node_next);
+       }
+
+       return sra_next;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/af
+ */
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_af_get_elem(
+       struct nb_cb_get_elem_args *args)
+{
+       const struct sr_adjacency *sra = args->list_entry;
+
+       switch (sra->adj->circuit->circ_type) {
+       case CIRCUIT_T_BROADCAST:
+               return yang_data_new_uint8(args->xpath,
+                                          sra->u.ladj_sid->family);
+       case CIRCUIT_T_P2P:
+               /* LAN adjacency SID is not published with circuit type P2P */
+               return NULL;
+       }
+
+       return NULL;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/value
+ */
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_value_get_elem(
+       struct nb_cb_get_elem_args *args)
+{
+       const struct sr_adjacency *sra = args->list_entry;
+
+       switch (sra->adj->circuit->circ_type) {
+       case CIRCUIT_T_BROADCAST:
+               return yang_data_new_uint32(args->xpath, sra->u.ladj_sid->sid);
+       case CIRCUIT_T_P2P:
+               /* LAN adjacency SID is not published with circuit type P2P */
+               return NULL;
+       }
+
+       return NULL;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/weight
+ */
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_weight_get_elem(
+       struct nb_cb_get_elem_args *args)
+{
+       const struct sr_adjacency *sra = args->list_entry;
+
+       switch (sra->adj->circuit->circ_type) {
+       case CIRCUIT_T_BROADCAST:
+               return yang_data_new_uint8(args->xpath,
+                                          sra->u.ladj_sid->weight);
+       case CIRCUIT_T_P2P:
+               /* LAN adjacency SID is not published with circuit type P2P */
+               return NULL;
+       }
+
+       return NULL;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/protection-requested
+ */
+struct yang_data *
+lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_protection_requested_get_elem(
+       struct nb_cb_get_elem_args *args)
+{
+       const struct sr_adjacency *sra = args->list_entry;
+
+       switch (sra->adj->circuit->circ_type) {
+       case CIRCUIT_T_BROADCAST:
+               return yang_data_new_bool(args->xpath,
+                                         sra->u.ladj_sid->flags &
+                                                 EXT_SUBTLV_LINK_ADJ_SID_BFLG);
+       case CIRCUIT_T_P2P:
+               /* LAN adjacency SID is not published with circuit type P2P */
+               return NULL;
        }
 
        return NULL;
index 28b578739021b881fc8c294327600d2501d4a492..5483410d04f73a3236e443ae5f3a8013c0d03eed 100644 (file)
@@ -883,6 +883,7 @@ module frr-isisd {
         }
 
         uses adjacency-sids;
+        uses lan-adjacency-sids;
       }
     }
   }
@@ -1041,6 +1042,41 @@ module frr-isisd {
     }
   }
 
+  grouping lan-adjacency-sids {
+    description
+      "IS-IS segment routing LAN adjacency SID grouping.";
+    container lan-adjacency-sids {
+      description
+        "This container lists the information of LAN adjacency SID.";
+      list lan-adjacency-sid {
+        leaf af {
+          type uint8;
+          description
+            "This leaf describes the protocol-family associated with the
+              LAN adjacency SID.";
+        }
+
+        leaf value {
+          type uint32;
+          description
+            "This leaf describes the value of LAN adjacency SID.";
+        }
+
+        leaf weight {
+          type uint8;
+          description
+            "This leaf describes the weight of the LAN adjacency SID.";
+        }
+
+        leaf protection-requested {
+          type boolean;
+          description
+            "This leaf describes if the LAN adjacency SID must be protected.";
+        }
+      }
+    }
+  }
+
   container isis {
     description
       "Configuration of the IS-IS routing daemon.";