/*
* XPath: /frr-isisd:isis/instance/attached
*/
-static int isis_instance_attached_create(enum nb_event event,
+static int isis_instance_attached_modify(enum nb_event event,
const struct lyd_node *dnode,
union nb_resource *resource)
{
struct isis_area *area;
+ bool attached;
if (event != NB_EV_APPLY)
return NB_OK;
area = yang_dnode_get_entry(dnode, true);
- isis_area_attached_bit_set(area, true);
-
- return NB_OK;
-}
-
-static int isis_instance_attached_delete(enum nb_event event,
- const struct lyd_node *dnode)
-{
- struct isis_area *area;
-
- if (event != NB_EV_APPLY)
- return NB_OK;
-
- area = yang_dnode_get_entry(dnode, true);
- isis_area_attached_bit_set(area, false);
+ attached = yang_dnode_get_bool(dnode, NULL);
+ isis_area_attached_bit_set(area, attached);
return NB_OK;
}
/*
* XPath: /frr-isisd:isis/instance/overload
*/
-static int isis_instance_overload_create(enum nb_event event,
+static int isis_instance_overload_modify(enum nb_event event,
const struct lyd_node *dnode,
union nb_resource *resource)
{
struct isis_area *area;
+ bool overload;
if (event != NB_EV_APPLY)
return NB_OK;
area = yang_dnode_get_entry(dnode, true);
- isis_area_overload_bit_set(area, true);
-
- return NB_OK;
-}
-
-static int isis_instance_overload_delete(enum nb_event event,
- const struct lyd_node *dnode)
-{
- struct isis_area *area;
-
- if (event != NB_EV_APPLY)
- return NB_OK;
-
- area = yang_dnode_get_entry(dnode, true);
- isis_area_overload_bit_set(area, false);
+ overload = yang_dnode_get_bool(dnode, NULL);
+ isis_area_overload_bit_set(area, overload);
return NB_OK;
}
/*
* XPath: /frr-isisd:isis/instance/purge-originator
*/
-static int isis_instance_purge_originator_create(enum nb_event event,
+static int isis_instance_purge_originator_modify(enum nb_event event,
const struct lyd_node *dnode,
union nb_resource *resource)
{
return NB_OK;
area = yang_dnode_get_entry(dnode, true);
- area->purge_originator = true;
-
- return NB_OK;
-}
-
-static int isis_instance_purge_originator_delete(enum nb_event event,
- const struct lyd_node *dnode)
-{
- struct isis_area *area;
-
- if (event != NB_EV_APPLY)
- return NB_OK;
-
- area = yang_dnode_get_entry(dnode, true);
- area->purge_originator = false;
+ area->purge_originator = yang_dnode_get_bool(dnode, NULL);
return NB_OK;
}
struct isis_area *area = yang_dnode_get_entry(dnode, true);
int level = yang_dnode_get_enum(dnode, "./level");
- if (yang_dnode_exists(dnode, "./always")) {
+ if (yang_dnode_get_bool(dnode, "./always")) {
originate_type = DEFAULT_ORIGINATE_ALWAYS;
} else if (family == AF_INET6) {
zlog_warn(
/*
* XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/always
*/
-static int isis_instance_default_information_originate_ipv4_always_create(
+static int isis_instance_default_information_originate_ipv4_always_modify(
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
return NB_OK;
}
-static int isis_instance_default_information_originate_ipv4_always_delete(
- enum nb_event event, const struct lyd_node *dnode)
-{
- /* It's all done by default_info_origin_apply_finish */
- return NB_OK;
-}
-
/*
* XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/route-map
*/
/*
* XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/always
*/
-static int isis_instance_default_information_originate_ipv6_always_create(
+static int isis_instance_default_information_originate_ipv6_always_modify(
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
return NB_OK;
}
-static int isis_instance_default_information_originate_ipv6_always_delete(
- enum nb_event event, const struct lyd_node *dnode)
-{
- /* It's all done by default_info_origin_apply_finish */
- return NB_OK;
-}
-
/*
* XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/route-map
*/
static int isis_multi_topology_overload_common(enum nb_event event,
const struct lyd_node *dnode,
- const char *topology,
- bool create)
+ const char *topology)
{
struct isis_area *area;
struct isis_area_mt_setting *setting;
area = yang_dnode_get_entry(dnode, true);
setting = area_get_mt_setting(area, mtid);
- setting->overload = create;
+ setting->overload = yang_dnode_get_bool(dnode, NULL);
if (setting->enabled)
lsp_regenerate_schedule(area, IS_LEVEL_1 | IS_LEVEL_2, 0);
/*
* XPath: /frr-isisd:isis/instance/multi-topology/ipv4-multicast/overload
*/
-static int isis_instance_multi_topology_ipv4_multicast_overload_create(
+static int isis_instance_multi_topology_ipv4_multicast_overload_modify(
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
return isis_multi_topology_overload_common(event, dnode,
- "ipv4-multicast", true);
-}
-
-static int isis_instance_multi_topology_ipv4_multicast_overload_delete(
- enum nb_event event, const struct lyd_node *dnode)
-{
- return isis_multi_topology_overload_common(event, dnode,
- "ipv4-multicast", false);
+ "ipv4-multicast");
}
/*
/*
* XPath: /frr-isisd:isis/instance/multi-topology/ipv4-management/overload
*/
-static int isis_instance_multi_topology_ipv4_management_overload_create(
+static int isis_instance_multi_topology_ipv4_management_overload_modify(
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
- return isis_multi_topology_overload_common(event, dnode, "ipv4-mgmt",
- true);
-}
-
-static int isis_instance_multi_topology_ipv4_management_overload_delete(
- enum nb_event event, const struct lyd_node *dnode)
-{
- return isis_multi_topology_overload_common(event, dnode, "ipv4-mgmt",
- false);
+ return isis_multi_topology_overload_common(event, dnode, "ipv4-mgmt");
}
/*
/*
* XPath: /frr-isisd:isis/instance/multi-topology/ipv6-unicast/overload
*/
-static int isis_instance_multi_topology_ipv6_unicast_overload_create(
+static int isis_instance_multi_topology_ipv6_unicast_overload_modify(
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
- return isis_multi_topology_overload_common(event, dnode, "ipv6-unicast",
- true);
-}
-
-static int isis_instance_multi_topology_ipv6_unicast_overload_delete(
- enum nb_event event, const struct lyd_node *dnode)
-{
- return isis_multi_topology_overload_common(event, dnode, "ipv6-unicast",
- false);
+ return isis_multi_topology_overload_common(event, dnode,
+ "ipv6-unicast");
}
/*
/*
* XPath: /frr-isisd:isis/instance/multi-topology/ipv6-multicast/overload
*/
-static int isis_instance_multi_topology_ipv6_multicast_overload_create(
+static int isis_instance_multi_topology_ipv6_multicast_overload_modify(
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
return isis_multi_topology_overload_common(event, dnode,
- "ipv6-multicast", true);
-}
-
-static int isis_instance_multi_topology_ipv6_multicast_overload_delete(
- enum nb_event event, const struct lyd_node *dnode)
-{
- return isis_multi_topology_overload_common(event, dnode,
- "ipv6-multicast", false);
+ "ipv6-multicast");
}
/*
/*
* XPath: /frr-isisd:isis/instance/multi-topology/ipv6-management/overload
*/
-static int isis_instance_multi_topology_ipv6_management_overload_create(
+static int isis_instance_multi_topology_ipv6_management_overload_modify(
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
- return isis_multi_topology_overload_common(event, dnode, "ipv6-mgmt",
- true);
-}
-
-static int isis_instance_multi_topology_ipv6_management_overload_delete(
- enum nb_event event, const struct lyd_node *dnode)
-{
- return isis_multi_topology_overload_common(event, dnode, "ipv6-mgmt",
- false);
+ return isis_multi_topology_overload_common(event, dnode, "ipv6-mgmt");
}
/*
/*
* XPath: /frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload
*/
-static int isis_instance_multi_topology_ipv6_dstsrc_overload_create(
+static int isis_instance_multi_topology_ipv6_dstsrc_overload_modify(
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
- return isis_multi_topology_overload_common(event, dnode, "ipv6-dstsrc",
- true);
-}
-
-static int isis_instance_multi_topology_ipv6_dstsrc_overload_delete(
- enum nb_event event, const struct lyd_node *dnode)
-{
- return isis_multi_topology_overload_common(event, dnode, "ipv6-dstsrc",
- false);
+ return isis_multi_topology_overload_common(event, dnode, "ipv6-dstsrc");
}
/*
* XPath: /frr-isisd:isis/instance/log-adjacency-changes
*/
static int
-isis_instance_log_adjacency_changes_create(enum nb_event event,
+isis_instance_log_adjacency_changes_modify(enum nb_event event,
const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
- return NB_OK;
-}
+ struct isis_area *area;
+ bool log = yang_dnode_get_bool(dnode, NULL);
+
+ if (event != NB_EV_APPLY)
+ return NB_OK;
+
+ area = yang_dnode_get_entry(dnode, true);
+ area->log_adj_changes = log ? 1 : 0;
-static int
-isis_instance_log_adjacency_changes_delete(enum nb_event event,
- const struct lyd_node *dnode)
-{
- /* TODO: implement me. */
return NB_OK;
}
/*
* XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv4-routing
*/
-static int lib_interface_isis_ipv4_routing_create(enum nb_event event,
+static int lib_interface_isis_ipv4_routing_modify(enum nb_event event,
const struct lyd_node *dnode,
union nb_resource *resource)
{
- bool ipv6;
- struct isis_circuit *circuit;
-
- if (event != NB_EV_APPLY)
- return NB_OK;
-
- circuit = yang_dnode_get_entry(dnode, true);
- ipv6 = yang_dnode_exists(dnode, "../ipv6-routing");
- isis_circuit_af_set(circuit, true, ipv6);
-
- return NB_OK;
-}
-
-static int lib_interface_isis_ipv4_routing_delete(enum nb_event event,
- const struct lyd_node *dnode)
-{
- bool ipv6;
+ bool ipv4, ipv6;
struct isis_circuit *circuit;
if (event != NB_EV_APPLY)
return NB_OK;
circuit = yang_dnode_get_entry(dnode, true);
- if (circuit && circuit->area) {
- ipv6 = yang_dnode_exists(dnode, "../ipv6-routing");
- isis_circuit_af_set(circuit, false, ipv6);
- }
+ ipv4 = yang_dnode_get_bool(dnode, NULL);
+ ipv6 = yang_dnode_get_bool(dnode, "../ipv6-routing");
+ isis_circuit_af_set(circuit, ipv4, ipv6);
return NB_OK;
}
/*
* XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv6-routing
*/
-static int lib_interface_isis_ipv6_routing_create(enum nb_event event,
+static int lib_interface_isis_ipv6_routing_modify(enum nb_event event,
const struct lyd_node *dnode,
union nb_resource *resource)
{
- bool ipv4;
+ bool ipv4, ipv6;
struct isis_circuit *circuit;
if (event != NB_EV_APPLY)
return NB_OK;
circuit = yang_dnode_get_entry(dnode, true);
- ipv4 = yang_dnode_exists(dnode, "../ipv6-routing");
- isis_circuit_af_set(circuit, ipv4, true);
-
- return NB_OK;
-}
-
-static int lib_interface_isis_ipv6_routing_delete(enum nb_event event,
- const struct lyd_node *dnode)
-{
- bool ipv4;
- struct isis_circuit *circuit;
-
- if (event != NB_EV_APPLY)
- return NB_OK;
-
- circuit = yang_dnode_get_entry(dnode, true);
- if (circuit->area) {
- ipv4 = yang_dnode_exists(dnode, "../ipv4-routing");
- isis_circuit_af_set(circuit, ipv4, false);
- }
+ ipv4 = yang_dnode_exists(dnode, "../ipv4-routing");
+ ipv6 = yang_dnode_get_bool(dnode, NULL);
+ isis_circuit_af_set(circuit, ipv4, ipv6);
return NB_OK;
}
const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
+ struct isis_circuit *circuit;
+
+ if (event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = yang_dnode_get_entry(dnode, true);
+ circuit->csnp_interval[0] = yang_dnode_get_uint16(dnode, NULL);
+
return NB_OK;
}
const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
+ struct isis_circuit *circuit;
+
+ if (event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = yang_dnode_get_entry(dnode, true);
+ circuit->csnp_interval[1] = yang_dnode_get_uint16(dnode, NULL);
+
return NB_OK;
}
const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
+ struct isis_circuit *circuit;
+
+ if (event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = yang_dnode_get_entry(dnode, true);
+ circuit->psnp_interval[0] = yang_dnode_get_uint16(dnode, NULL);
+
return NB_OK;
}
const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
+ struct isis_circuit *circuit;
+
+ if (event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = yang_dnode_get_entry(dnode, true);
+ circuit->psnp_interval[1] = yang_dnode_get_uint16(dnode, NULL);
+
return NB_OK;
}
const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
+ struct isis_circuit *circuit;
+
+ if (event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = yang_dnode_get_entry(dnode, true);
+ circuit->priority[0] = yang_dnode_get_uint8(dnode, NULL);
+
return NB_OK;
}
const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
+ struct isis_circuit *circuit;
+
+ if (event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = yang_dnode_get_entry(dnode, true);
+ circuit->priority[1] = yang_dnode_get_uint8(dnode, NULL);
+
return NB_OK;
}
const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
- return NB_OK;
-}
+ struct isis_circuit *circuit;
+ int net_type = yang_dnode_get_enum(dnode, NULL);
+
+ switch (event) {
+ case NB_EV_VALIDATE:
+ circuit = yang_dnode_get_entry(dnode, false);
+ if (!circuit)
+ break;
+ if (circuit->circ_type == CIRCUIT_T_LOOPBACK
+ || circuit->circ_type == CIRCUIT_T_UNKNOWN) {
+ flog_warn(
+ EC_LIB_NB_CB_CONFIG_VALIDATE,
+ "Cannot change network type on unknown or loopback interface");
+ return NB_ERR_VALIDATION;
+ }
+ if (net_type == CIRCUIT_T_BROADCAST
+ && circuit->state == C_STATE_UP
+ && !if_is_broadcast(circuit->interface)) {
+ flog_warn(
+ EC_LIB_NB_CB_CONFIG_VALIDATE,
+ "Cannot configure non-broadcast interface for broadcast operation");
+ return NB_ERR_VALIDATION;
+ }
+ break;
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ break;
+ case NB_EV_APPLY:
+ circuit = yang_dnode_get_entry(dnode, true);
+ isis_circuit_circ_type_set(circuit, net_type);
+ break;
+ }
-static int lib_interface_isis_network_type_delete(enum nb_event event,
- const struct lyd_node *dnode)
-{
- /* TODO: implement me. */
return NB_OK;
}
/*
* XPath: /frr-interface:lib/interface/frr-isisd:isis/passive
*/
-static int lib_interface_isis_passive_create(enum nb_event event,
+static int lib_interface_isis_passive_modify(enum nb_event event,
const struct lyd_node *dnode,
union nb_resource *resource)
{
struct isis_circuit *circuit;
struct isis_area *area;
-
- if (event != NB_EV_APPLY)
- return NB_OK;
-
- circuit = yang_dnode_get_entry(dnode, true);
- if (circuit->state != C_STATE_UP) {
- circuit->is_passive = true;
- } else {
- area = circuit->area;
- isis_csm_state_change(ISIS_DISABLE, circuit, area);
- circuit->is_passive = true;
- isis_csm_state_change(ISIS_ENABLE, circuit, area);
- }
-
- return NB_OK;
-}
-
-static int lib_interface_isis_passive_delete(enum nb_event event,
- const struct lyd_node *dnode)
-{
- struct isis_circuit *circuit;
- struct isis_area *area;
struct interface *ifp;
+ bool passive = yang_dnode_get_bool(dnode, NULL);
- switch (event) {
- case NB_EV_VALIDATE:
+ /* validation only applies if we are setting passive to false */
+ if (!passive && event == NB_EV_VALIDATE) {
circuit = yang_dnode_get_entry(dnode, false);
if (!circuit)
- break;
+ return NB_OK;
ifp = circuit->interface;
if (!ifp)
- break;
+ return NB_OK;
if (if_is_loopback(ifp)) {
flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE,
"Loopback is always passive");
return NB_ERR_VALIDATION;
}
- break;
- case NB_EV_PREPARE:
- case NB_EV_ABORT:
- break;
- case NB_EV_APPLY:
- circuit = yang_dnode_get_entry(dnode, true);
- if (circuit->state != C_STATE_UP) {
- circuit->is_passive = false;
- } else {
- area = circuit->area;
- isis_csm_state_change(ISIS_DISABLE, circuit, area);
- circuit->is_passive = false;
- isis_csm_state_change(ISIS_ENABLE, circuit, area);
- }
- break;
+ }
+
+ if (event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = yang_dnode_get_entry(dnode, true);
+ if (circuit->state != C_STATE_UP) {
+ circuit->is_passive = passive;
+ } else {
+ area = circuit->area;
+ isis_csm_state_change(ISIS_DISABLE, circuit, area);
+ circuit->is_passive = passive;
+ isis_csm_state_change(ISIS_ENABLE, circuit, area);
}
return NB_OK;
* XPath:
* /frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake
*/
-static int lib_interface_isis_disable_three_way_handshake_create(
+static int lib_interface_isis_disable_three_way_handshake_modify(
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
return NB_OK;
circuit = yang_dnode_get_entry(dnode, true);
- circuit->disable_threeway_adj = true;
+ circuit->disable_threeway_adj = yang_dnode_get_bool(dnode, NULL);
return NB_OK;
}
-static int lib_interface_isis_disable_three_way_handshake_delete(
- enum nb_event event, const struct lyd_node *dnode)
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast
+ */
+static int lib_interface_isis_multi_topology_common(
+ enum nb_event event, const struct lyd_node *dnode, uint16_t mtid)
{
struct isis_circuit *circuit;
+ bool value;
- if (event != NB_EV_APPLY)
- return NB_OK;
-
- circuit = yang_dnode_get_entry(dnode, true);
- circuit->disable_threeway_adj = false;
+ switch (event) {
+ case NB_EV_VALIDATE:
+ circuit = yang_dnode_get_entry(dnode, false);
+ if (circuit && circuit->area && circuit->area->oldmetric) {
+ flog_warn(
+ EC_LIB_NB_CB_CONFIG_VALIDATE,
+ "Multi topology IS-IS can only be used with wide metrics");
+ return NB_ERR_VALIDATION;
+ }
+ break;
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ break;
+ case NB_EV_APPLY:
+ circuit = yang_dnode_get_entry(dnode, true);
+ value = yang_dnode_get_bool(dnode, NULL);
+ isis_circuit_mt_enabled_set(circuit, mtid, value);
+ break;
+ }
return NB_OK;
}
-/*
- * XPath:
- * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast
- */
static int lib_interface_isis_multi_topology_ipv4_unicast_modify(
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
- return NB_OK;
+ return lib_interface_isis_multi_topology_common(event, dnode,
+ ISIS_MT_IPV4_UNICAST);
}
/*
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
- return NB_OK;
+ return lib_interface_isis_multi_topology_common(event, dnode,
+ ISIS_MT_IPV4_MULTICAST);
}
/*
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
- return NB_OK;
+ return lib_interface_isis_multi_topology_common(event, dnode,
+ ISIS_MT_IPV4_MGMT);
}
/*
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
- return NB_OK;
+ return lib_interface_isis_multi_topology_common(event, dnode,
+ ISIS_MT_IPV6_UNICAST);
}
/*
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
- return NB_OK;
+ return lib_interface_isis_multi_topology_common(event, dnode,
+ ISIS_MT_IPV6_MULTICAST);
}
/*
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
- return NB_OK;
+ return lib_interface_isis_multi_topology_common(event, dnode,
+ ISIS_MT_IPV6_MGMT);
}
/*
enum nb_event event, const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
- return NB_OK;
+ return lib_interface_isis_multi_topology_common(event, dnode,
+ ISIS_MT_IPV6_DSTSRC);
+}
+
+/*
+ * NOTIFICATIONS
+ */
+static void notif_prep_instance_hdr(const char *xpath,
+ const struct isis_area *area,
+ const char *routing_instance,
+ struct list *args)
+{
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/routing-instance", xpath);
+ data = yang_data_new_string(xpath_arg, routing_instance);
+ listnode_add(args, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/routing-protocol-name",
+ xpath);
+ data = yang_data_new_string(xpath_arg, area->area_tag);
+ listnode_add(args, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/isis-level", xpath);
+ data = yang_data_new_enum(xpath_arg, area->is_type);
+ listnode_add(args, data);
+}
+
+static void notif_prepr_iface_hdr(const char *xpath,
+ const struct isis_circuit *circuit,
+ struct list *args)
+{
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/interface-name", xpath);
+ data = yang_data_new_string(xpath_arg, circuit->interface->name);
+ listnode_add(args, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/interface-level", xpath);
+ data = yang_data_new_enum(xpath_arg, circuit->is_type);
+ listnode_add(args, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/extended-circuit-id", xpath);
+ /* we do not seem to have the extended version of the circuit_id */
+ data = yang_data_new_uint32(xpath_arg, (uint32_t)circuit->circuit_id);
+ listnode_add(args, data);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:database-overload
+ */
+void isis_notif_db_overload(const struct isis_area *area, bool overload)
+{
+ const char *xpath = "/frr-isisd:database-overload";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/overload", xpath);
+ data = yang_data_new_enum(xpath_arg, !!overload);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:lsp-too-large
+ */
+void isis_notif_lsp_too_large(const struct isis_circuit *circuit,
+ uint32_t pdu_size, const char *lsp_id)
+{
+ const char *xpath = "/frr-isisd:lsp-too-large";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/pdu-size", xpath);
+ data = yang_data_new_uint32(xpath_arg, pdu_size);
+ listnode_add(arguments, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath);
+ data = yang_data_new_string(xpath_arg, lsp_id);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:if-state-change
+ */
+void isis_notif_if_state_change(const struct isis_circuit *circuit, bool down)
+{
+ const char *xpath = "/frr-isisd:if-state-change";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/state", xpath);
+ data = yang_data_new_enum(xpath_arg, !!down);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:corrupted-lsp-detected
+ */
+void isis_notif_corrupted_lsp(const struct isis_area *area, const char *lsp_id)
+{
+ const char *xpath = "/frr-isisd:corrupted-lsp-detected";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath);
+ data = yang_data_new_string(xpath_arg, lsp_id);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:attempt-to-exceed-max-sequence
+ */
+void isis_notif_lsp_exceed_max(const struct isis_area *area, const char *lsp_id)
+{
+ const char *xpath = "/frr-isisd:attempt-to-exceed-max-sequence";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath);
+ data = yang_data_new_string(xpath_arg, lsp_id);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:max-area-addresses-mismatch
+ */
+void isis_notif_max_area_addr_mismatch(const struct isis_circuit *circuit,
+ uint8_t max_area_addrs,
+ const char *raw_pdu)
+{
+ const char *xpath = "/frr-isisd:max-area-addresses-mismatch";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/max-area-addresses", xpath);
+ data = yang_data_new_uint8(xpath_arg, max_area_addrs);
+ listnode_add(arguments, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/raw-pdu", xpath);
+ data = yang_data_new(xpath_arg, raw_pdu);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:authentication-type-failure
+ */
+void isis_notif_authentication_type_failure(const struct isis_circuit *circuit,
+ const char *raw_pdu)
+{
+ const char *xpath = "/frr-isisd:authentication-type-failure";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/raw-pdu", xpath);
+ data = yang_data_new(xpath_arg, raw_pdu);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:authentication-failure
+ */
+void isis_notif_authentication_failure(const struct isis_circuit *circuit,
+ const char *raw_pdu)
+{
+ const char *xpath = "/frr-isisd:authentication-failure";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/raw-pdu", xpath);
+ data = yang_data_new(xpath_arg, raw_pdu);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:adjacency-state-change
+ */
+void isis_notif_adj_state_change(const struct isis_adjacency *adj,
+ int new_state, const char *reason)
+{
+ const char *xpath = "/frr-isisd:adjacency-state-change";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_circuit *circuit = adj->circuit;
+ struct isis_area *area = circuit->area;
+ struct isis_dynhn *dyn = dynhn_find_by_id(adj->sysid);
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ if (dyn) {
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/neighbor", xpath);
+ data = yang_data_new_string(xpath_arg, dyn->hostname);
+ listnode_add(arguments, data);
+ }
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/neighbor-system-id", xpath);
+ data = yang_data_new_string(xpath_arg, sysid_print(adj->sysid));
+ listnode_add(arguments, data);
+
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/state", xpath);
+ switch (new_state) {
+ case ISIS_ADJ_DOWN:
+ data = yang_data_new_string(xpath_arg, "down");
+ break;
+ case ISIS_ADJ_UP:
+ data = yang_data_new_string(xpath_arg, "up");
+ break;
+ case ISIS_ADJ_INITIALIZING:
+ data = yang_data_new_string(xpath_arg, "init");
+ break;
+ default:
+ data = yang_data_new_string(xpath_arg, "failed");
+ }
+ listnode_add(arguments, data);
+ if (new_state == ISIS_ADJ_DOWN) {
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/reason", xpath);
+ data = yang_data_new_string(xpath_arg, reason);
+ listnode_add(arguments, data);
+ }
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:rejected-adjacency
+ */
+void isis_notif_reject_adjacency(const struct isis_circuit *circuit,
+ const char *reason, const char *raw_pdu)
+{
+ const char *xpath = "/frr-isisd:rejected-adjacency";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/reason", xpath);
+ data = yang_data_new_string(xpath_arg, reason);
+ listnode_add(arguments, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/raw-pdu", xpath);
+ data = yang_data_new(xpath_arg, raw_pdu);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:area-mismatch
+ */
+void isis_notif_area_mismatch(const struct isis_circuit *circuit,
+ const char *raw_pdu)
+{
+ const char *xpath = "/frr-isisd:area-mismatch";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/raw-pdu", xpath);
+ data = yang_data_new(xpath_arg, raw_pdu);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:lsp-received
+ */
+void isis_notif_lsp_received(const struct isis_circuit *circuit,
+ const char *lsp_id, uint32_t seqno,
+ uint32_t timestamp, const char *sys_id)
+{
+ const char *xpath = "/frr-isisd:lsp-received";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath);
+ data = yang_data_new_string(xpath_arg, lsp_id);
+ listnode_add(arguments, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/sequence", xpath);
+ data = yang_data_new_uint32(xpath_arg, seqno);
+ listnode_add(arguments, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/received-timestamp", xpath);
+ data = yang_data_new_uint32(xpath_arg, timestamp);
+ listnode_add(arguments, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/neighbor-system-id", xpath);
+ data = yang_data_new_string(xpath_arg, sys_id);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:lsp-generation
+ */
+void isis_notif_lsp_gen(const struct isis_area *area, const char *lsp_id,
+ uint32_t seqno, uint32_t timestamp)
+{
+ const char *xpath = "/frr-isisd:lsp-generation";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath);
+ data = yang_data_new_string(xpath_arg, lsp_id);
+ listnode_add(arguments, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/sequence", xpath);
+ data = yang_data_new_uint32(xpath_arg, seqno);
+ listnode_add(arguments, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/send-timestamp", xpath);
+ data = yang_data_new_uint32(xpath_arg, timestamp);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:id-len-mismatch
+ */
+void isis_notif_id_len_mismatch(const struct isis_circuit *circuit,
+ uint8_t rcv_id_len, const char *raw_pdu)
+{
+ const char *xpath = "/frr-isisd:id-len-mismatch";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/pdu-field-len", xpath);
+ data = yang_data_new_uint8(xpath_arg, rcv_id_len);
+ listnode_add(arguments, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/raw-pdu", xpath);
+ data = yang_data_new(xpath_arg, raw_pdu);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:version-skew
+ */
+void isis_notif_version_skew(const struct isis_circuit *circuit,
+ uint8_t version, const char *raw_pdu)
+{
+ const char *xpath = "/frr-isisd:version-skew";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/protocol-version", xpath);
+ data = yang_data_new_uint8(xpath_arg, version);
+ listnode_add(arguments, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/raw-pdu", xpath);
+ data = yang_data_new(xpath_arg, raw_pdu);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:lsp-error-detected
+ */
+void isis_notif_lsp_error(const struct isis_circuit *circuit,
+ const char *lsp_id, const char *raw_pdu,
+ __attribute__((unused)) uint32_t offset,
+ __attribute__((unused)) uint8_t tlv_type)
+{
+ const char *xpath = "/frr-isisd:lsp-error-detected";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath);
+ data = yang_data_new_string(xpath_arg, lsp_id);
+ listnode_add(arguments, data);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/raw-pdu", xpath);
+ data = yang_data_new(xpath_arg, raw_pdu);
+ listnode_add(arguments, data);
+ /* ignore offset and tlv_type which cannot be set properly */
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:sequence-number-skipped
+ */
+void isis_notif_seqno_skipped(const struct isis_circuit *circuit,
+ const char *lsp_id)
+{
+ const char *xpath = "/frr-isisd:sequence-number-skipped";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath);
+ data = yang_data_new_string(xpath_arg, lsp_id);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
+}
+
+/*
+ * XPath:
+ * /frr-isisd:own-lsp-purge
+ */
+void isis_notif_own_lsp_purge(const struct isis_circuit *circuit,
+ const char *lsp_id)
+{
+ const char *xpath = "/frr-isisd:own-lsp-purge";
+ struct list *arguments = yang_data_list_new();
+ char xpath_arg[XPATH_MAXLEN];
+ struct yang_data *data;
+ struct isis_area *area = circuit->area;
+
+ notif_prep_instance_hdr(xpath, area, "default", arguments);
+ notif_prepr_iface_hdr(xpath, circuit, arguments);
+ snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath);
+ data = yang_data_new_string(xpath_arg, lsp_id);
+ listnode_add(arguments, data);
+
+ nb_notification_send(xpath, arguments);
}
/* clang-format off */
},
{
.xpath = "/frr-isisd:isis/instance/attached",
- .cbs.create = isis_instance_attached_create,
- .cbs.delete = isis_instance_attached_delete,
+ .cbs.modify = isis_instance_attached_modify,
.cbs.cli_show = cli_show_isis_attached,
},
{
.xpath = "/frr-isisd:isis/instance/overload",
- .cbs.create = isis_instance_overload_create,
- .cbs.delete = isis_instance_overload_delete,
+ .cbs.modify = isis_instance_overload_modify,
.cbs.cli_show = cli_show_isis_overload,
},
{
},
{
.xpath = "/frr-isisd:isis/instance/purge-originator",
- .cbs.create = isis_instance_purge_originator_create,
- .cbs.delete = isis_instance_purge_originator_delete,
+ .cbs.modify = isis_instance_purge_originator_modify,
.cbs.cli_show = cli_show_isis_purge_origin,
},
{
},
{
.xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4/always",
- .cbs.create = isis_instance_default_information_originate_ipv4_always_create,
- .cbs.delete = isis_instance_default_information_originate_ipv4_always_delete,
+ .cbs.modify = isis_instance_default_information_originate_ipv4_always_modify,
},
{
.xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4/route-map",
},
{
.xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6/always",
- .cbs.create = isis_instance_default_information_originate_ipv6_always_create,
- .cbs.delete = isis_instance_default_information_originate_ipv6_always_delete,
+ .cbs.modify = isis_instance_default_information_originate_ipv6_always_modify,
},
{
.xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6/route-map",
},
{
.xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-multicast/overload",
- .cbs.create = isis_instance_multi_topology_ipv4_multicast_overload_create,
- .cbs.delete = isis_instance_multi_topology_ipv4_multicast_overload_delete,
+ .cbs.modify = isis_instance_multi_topology_ipv4_multicast_overload_modify,
},
{
.xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-management",
},
{
.xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-management/overload",
- .cbs.create = isis_instance_multi_topology_ipv4_management_overload_create,
- .cbs.delete = isis_instance_multi_topology_ipv4_management_overload_delete,
+ .cbs.modify = isis_instance_multi_topology_ipv4_management_overload_modify,
},
{
.xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-unicast",
},
{
.xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-unicast/overload",
- .cbs.create = isis_instance_multi_topology_ipv6_unicast_overload_create,
- .cbs.delete = isis_instance_multi_topology_ipv6_unicast_overload_delete,
+ .cbs.modify = isis_instance_multi_topology_ipv6_unicast_overload_modify,
},
{
.xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-multicast",
},
{
.xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-multicast/overload",
- .cbs.create = isis_instance_multi_topology_ipv6_multicast_overload_create,
- .cbs.delete = isis_instance_multi_topology_ipv6_multicast_overload_delete,
+ .cbs.modify = isis_instance_multi_topology_ipv6_multicast_overload_modify,
},
{
.xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-management",
},
{
.xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-management/overload",
- .cbs.create = isis_instance_multi_topology_ipv6_management_overload_create,
- .cbs.delete = isis_instance_multi_topology_ipv6_management_overload_delete,
+ .cbs.modify = isis_instance_multi_topology_ipv6_management_overload_modify,
},
{
.xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc",
},
{
.xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload",
- .cbs.create = isis_instance_multi_topology_ipv6_dstsrc_overload_create,
- .cbs.delete = isis_instance_multi_topology_ipv6_dstsrc_overload_delete,
+ .cbs.modify = isis_instance_multi_topology_ipv6_dstsrc_overload_modify,
},
{
.xpath = "/frr-isisd:isis/instance/log-adjacency-changes",
- .cbs.create = isis_instance_log_adjacency_changes_create,
- .cbs.delete = isis_instance_log_adjacency_changes_delete,
+ .cbs.modify = isis_instance_log_adjacency_changes_modify,
+ .cbs.cli_show = cli_show_isis_log_adjacency,
},
{
.xpath = "/frr-isisd:isis/mpls-te",
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/circuit-type",
.cbs.modify = lib_interface_isis_circuit_type_modify,
+ .cbs.cli_show = cli_show_ip_isis_circ_type,
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/ipv4-routing",
- .cbs.create = lib_interface_isis_ipv4_routing_create,
- .cbs.delete = lib_interface_isis_ipv4_routing_delete,
+ .cbs.modify = lib_interface_isis_ipv4_routing_modify,
.cbs.cli_show = cli_show_ip_isis_ipv4,
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/ipv6-routing",
- .cbs.create = lib_interface_isis_ipv6_routing_create,
- .cbs.delete = lib_interface_isis_ipv6_routing_delete,
+ .cbs.modify = lib_interface_isis_ipv6_routing_modify,
.cbs.cli_show = cli_show_ip_isis_ipv6,
},
+ {
+ .xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval",
+ .cbs.cli_show = cli_show_ip_isis_csnp_interval,
+ },
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1",
.cbs.modify = lib_interface_isis_csnp_interval_level_1_modify,
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2",
.cbs.modify = lib_interface_isis_csnp_interval_level_2_modify,
},
+ {
+ .xpath = "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval",
+ .cbs.cli_show = cli_show_ip_isis_psnp_interval,
+ },
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1",
.cbs.modify = lib_interface_isis_psnp_interval_level_1_modify,
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/metric/level-2",
.cbs.modify = lib_interface_isis_metric_level_2_modify,
},
+ {
+ .xpath = "/frr-interface:lib/interface/frr-isisd:isis/priority",
+ .cbs.cli_show = cli_show_ip_isis_priority,
+ },
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/priority/level-1",
.cbs.modify = lib_interface_isis_priority_level_1_modify,
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/network-type",
.cbs.modify = lib_interface_isis_network_type_modify,
- .cbs.delete = lib_interface_isis_network_type_delete,
+ .cbs.cli_show = cli_show_ip_isis_network_type,
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/passive",
- .cbs.create = lib_interface_isis_passive_create,
- .cbs.delete = lib_interface_isis_passive_delete,
+ .cbs.modify = lib_interface_isis_passive_modify,
.cbs.cli_show = cli_show_ip_isis_passive,
},
{
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake",
- .cbs.create = lib_interface_isis_disable_three_way_handshake_create,
- .cbs.delete = lib_interface_isis_disable_three_way_handshake_delete,
+ .cbs.modify = lib_interface_isis_disable_three_way_handshake_modify,
.cbs.cli_show = cli_show_ip_isis_threeway_shake,
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast",
.cbs.modify = lib_interface_isis_multi_topology_ipv4_unicast_modify,
+ .cbs.cli_show = cli_show_ip_isis_mt_ipv4_unicast,
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-multicast",
.cbs.modify = lib_interface_isis_multi_topology_ipv4_multicast_modify,
+ .cbs.cli_show = cli_show_ip_isis_mt_ipv4_multicast,
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-management",
.cbs.modify = lib_interface_isis_multi_topology_ipv4_management_modify,
+ .cbs.cli_show = cli_show_ip_isis_mt_ipv4_mgmt,
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-unicast",
.cbs.modify = lib_interface_isis_multi_topology_ipv6_unicast_modify,
+ .cbs.cli_show = cli_show_ip_isis_mt_ipv6_unicast,
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-multicast",
.cbs.modify = lib_interface_isis_multi_topology_ipv6_multicast_modify,
+ .cbs.cli_show = cli_show_ip_isis_mt_ipv6_multicast,
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-management",
.cbs.modify = lib_interface_isis_multi_topology_ipv6_management_modify,
+ .cbs.cli_show = cli_show_ip_isis_mt_ipv6_mgmt,
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-dstsrc",
.cbs.modify = lib_interface_isis_multi_topology_ipv6_dstsrc_modify,
+ .cbs.cli_show = cli_show_ip_isis_mt_ipv6_dstsrc,
},
{
.xpath = NULL,