char temp_xpath[XPATH_MAXLEN];
const char *circ_type;
struct isis_area *area;
+ struct interface *ifp;
+ const struct lyd_node *dnode =
+ yang_dnode_get(running_config->dnode, VTY_CURR_XPATH);
/* area will be created if it is not present. make sure the yang model
* is synced with FRR and call the appropriate NB cb.
nb_cli_enqueue_change(vty, "./frr-isisd:isis/area-tag",
NB_OP_MODIFY, tag);
nb_cli_enqueue_change(vty, "./frr-isisd:isis/ipv4-routing",
- NB_OP_CREATE, NULL);
+ NB_OP_MODIFY, "true");
nb_cli_enqueue_change(
vty, "./frr-isisd:isis/circuit-type", NB_OP_MODIFY,
listcount(isis->area_list) == 0 ? "level-1-2"
nb_cli_enqueue_change(vty, "./frr-isisd:isis/area-tag",
NB_OP_MODIFY, tag);
nb_cli_enqueue_change(vty, "./frr-isisd:isis/ipv4-routing",
- NB_OP_CREATE, NULL);
+ NB_OP_MODIFY, "true");
nb_cli_enqueue_change(vty, "./frr-isisd:isis/circuit-type",
NB_OP_MODIFY, circ_type);
}
+ /* check if the interface is a loopback and if so set it as passive */
+ ifp = yang_dnode_get_entry(dnode, false);
+ if (ifp && if_is_loopback(ifp))
+ nb_cli_enqueue_change(vty, "./frr-isisd:isis/passive",
+ NB_OP_MODIFY, "true");
+
return nb_cli_apply_changes(vty, NULL);
}
char temp_xpath[XPATH_MAXLEN];
const char *circ_type;
struct isis_area *area;
+ struct interface *ifp;
+ const struct lyd_node *dnode =
+ yang_dnode_get(running_config->dnode, VTY_CURR_XPATH);
/* area will be created if it is not present. make sure the yang model
* is synced with FRR and call the appropriate NB cb.
nb_cli_enqueue_change(vty, "./frr-isisd:isis/area-tag",
NB_OP_MODIFY, tag);
nb_cli_enqueue_change(vty, "./frr-isisd:isis/ipv6-routing",
- NB_OP_CREATE, NULL);
+ NB_OP_MODIFY, "true");
nb_cli_enqueue_change(
vty, "./frr-isisd:isis/circuit-type", NB_OP_MODIFY,
listcount(isis->area_list) == 0 ? "level-1-2"
nb_cli_enqueue_change(vty, "./frr-isisd:isis/area-tag",
NB_OP_MODIFY, tag);
nb_cli_enqueue_change(vty, "./frr-isisd:isis/ipv6-routing",
- NB_OP_CREATE, NULL);
+ NB_OP_MODIFY, "true");
nb_cli_enqueue_change(vty, "./frr-isisd:isis/circuit-type",
NB_OP_MODIFY, circ_type);
}
+ /* check if the interface is a loopback and if so set it as passive */
+ ifp = yang_dnode_get_entry(dnode, false);
+ if (ifp && if_is_loopback(ifp))
+ nb_cli_enqueue_change(vty, "./frr-isisd:isis/passive",
+ NB_OP_MODIFY, "true");
+
return nb_cli_apply_changes(vty, NULL);
}
else
nb_cli_enqueue_change(vty,
"./frr-isisd:isis/ipv6-routing",
- NB_OP_DELETE, NULL);
+ NB_OP_MODIFY, "false");
} else { /* no ipv4 */
if (circuit && !circuit->ipv6_router)
nb_cli_enqueue_change(vty, "./frr-isisd:isis",
else
nb_cli_enqueue_change(vty,
"./frr-isisd:isis/ipv4-routing",
- NB_OP_DELETE, NULL);
+ NB_OP_MODIFY, "false");
}
return nb_cli_apply_changes(vty, NULL);
void cli_show_ip_isis_ipv4(struct vty *vty, struct lyd_node *dnode,
bool show_defaults)
{
+ if (!yang_dnode_get_bool(dnode, NULL))
+ vty_out(vty, " no");
vty_out(vty, " ip router isis %s\n",
yang_dnode_get_string(dnode, "../area-tag"));
}
void cli_show_ip_isis_ipv6(struct vty *vty, struct lyd_node *dnode,
bool show_defaults)
{
+ if (!yang_dnode_get_bool(dnode, NULL))
+ vty_out(vty, " no");
vty_out(vty, " ipv6 router isis %s\n",
yang_dnode_get_string(dnode, "../area-tag"));
}
"Reset overload bit to accept transit traffic\n"
"Set overload bit to avoid any transit traffic\n")
{
- nb_cli_enqueue_change(vty, "./overload",
- no ? NB_OP_DELETE : NB_OP_CREATE, NULL);
+ nb_cli_enqueue_change(vty, "./overload", NB_OP_MODIFY,
+ no ? "false" : "true");
return nb_cli_apply_changes(vty, NULL);
}
void cli_show_isis_overload(struct vty *vty, struct lyd_node *dnode,
bool show_defaults)
{
+ if (!yang_dnode_get_bool(dnode, NULL))
+ vty_out(vty, " no");
vty_out(vty, " set-overload-bit\n");
}
"Reset attached bit\n"
"Set attached bit to identify as L1/L2 router for inter-area traffic\n")
{
- nb_cli_enqueue_change(vty, "./attached",
- no ? NB_OP_DELETE : NB_OP_CREATE, NULL);
+ nb_cli_enqueue_change(vty, "./attached", NB_OP_MODIFY,
+ no ? "false" : "true");
return nb_cli_apply_changes(vty, NULL);
}
void cli_show_isis_attached(struct vty *vty, struct lyd_node *dnode,
bool show_defaults)
{
+ if (!yang_dnode_get_bool(dnode, NULL))
+ vty_out(vty, " no");
vty_out(vty, " set-attached-bit\n");
}
DEFPY(area_purge_originator, area_purge_originator_cmd, "[no] purge-originator",
NO_STR "Use the RFC 6232 purge-originator\n")
{
- nb_cli_enqueue_change(vty, "./purge-originator",
- no ? NB_OP_DELETE : NB_OP_CREATE, NULL);
+ nb_cli_enqueue_change(vty, "./purge-originator", NB_OP_MODIFY,
+ no ? "false" : "true");
return nb_cli_apply_changes(vty, NULL);
}
void cli_show_isis_purge_origin(struct vty *vty, struct lyd_node *dnode,
bool show_defaults)
{
+ if (!yang_dnode_get_bool(dnode, NULL))
+ vty_out(vty, " no");
vty_out(vty, " purge-originator\n");
}
nb_cli_enqueue_change(vty, ".", NB_OP_DELETE, NULL);
else {
nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
- nb_cli_enqueue_change(vty, "./always",
- always ? NB_OP_CREATE : NB_OP_DELETE,
- NULL);
+ nb_cli_enqueue_change(vty, "./always", NB_OP_MODIFY,
+ always ? "true" : "false");
nb_cli_enqueue_change(vty, "./route-map",
rmap ? NB_OP_MODIFY : NB_OP_DELETE,
rmap ? rmap : NULL);
const char *metric;
vty_out(vty, " default-information originate %s %s", family, level);
- if (yang_dnode_exists(dnode, "./always"))
+ if (yang_dnode_get_bool(dnode, "./always"))
vty_out(vty, " always");
if (yang_dnode_exists(dnode, "./route-map"))
nb_cli_enqueue_change(vty, ".", NB_OP_DELETE, NULL);
else {
nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
- nb_cli_enqueue_change(vty, "./overload",
- overload ? NB_OP_CREATE : NB_OP_DELETE,
- NULL);
+ nb_cli_enqueue_change(vty, "./overload", NB_OP_MODIFY,
+ overload ? "true" : "false");
}
return nb_cli_apply_changes(vty, base_xpath);
bool show_defaults)
{
vty_out(vty, " topology ipv4-multicast");
- if (yang_dnode_exists(dnode, "./overload"))
+ if (yang_dnode_get_bool(dnode, "./overload"))
vty_out(vty, " overload");
vty_out(vty, "\n");
}
bool show_defaults)
{
vty_out(vty, " topology ipv4-mgmt");
- if (yang_dnode_exists(dnode, "./overload"))
+ if (yang_dnode_get_bool(dnode, "./overload"))
vty_out(vty, " overload");
vty_out(vty, "\n");
}
bool show_defaults)
{
vty_out(vty, " topology ipv6-unicast");
- if (yang_dnode_exists(dnode, "./overload"))
+ if (yang_dnode_get_bool(dnode, "./overload"))
vty_out(vty, " overload");
vty_out(vty, "\n");
}
bool show_defaults)
{
vty_out(vty, " topology ipv6-multicast");
- if (yang_dnode_exists(dnode, "./overload"))
+ if (yang_dnode_get_bool(dnode, "./overload"))
vty_out(vty, " overload");
vty_out(vty, "\n");
}
bool show_defaults)
{
vty_out(vty, " topology ipv6-mgmt");
- if (yang_dnode_exists(dnode, "./overload"))
+ if (yang_dnode_get_bool(dnode, "./overload"))
vty_out(vty, " overload");
vty_out(vty, "\n");
}
bool show_defaults)
{
vty_out(vty, " topology ipv6-dstsrc");
- if (yang_dnode_exists(dnode, "./overload"))
+ if (yang_dnode_get_bool(dnode, "./overload"))
vty_out(vty, " overload");
vty_out(vty, "\n");
}
"IS-IS routing protocol\n"
"Configure the passive mode for interface\n")
{
- nb_cli_enqueue_change(vty, "./frr-isisd:isis/passive",
- no ? NB_OP_DELETE : NB_OP_CREATE, NULL);
+ nb_cli_enqueue_change(vty, "./frr-isisd:isis/passive", NB_OP_MODIFY,
+ no ? "false" : "true");
return nb_cli_apply_changes(vty, NULL);
}
void cli_show_ip_isis_passive(struct vty *vty, struct lyd_node *dnode,
bool show_defaults)
{
+ if (!yang_dnode_get_bool(dnode, NULL))
+ vty_out(vty, " no");
vty_out(vty, " isis passive\n");
}
{
nb_cli_enqueue_change(vty,
"./frr-isisd:isis/disable-three-way-handshake",
- no ? NB_OP_CREATE : NB_OP_DELETE, NULL);
+ NB_OP_MODIFY, no ? "true" : "false");
return nb_cli_apply_changes(vty, NULL);
}
void cli_show_ip_isis_threeway_shake(struct vty *vty, struct lyd_node *dnode,
bool show_defaults)
{
- vty_out(vty, " no isis three-way-handshake\n");
+ if (yang_dnode_get_bool(dnode, NULL))
+ vty_out(vty, " no");
+ vty_out(vty, " isis three-way-handshake\n");
}
/*
DEFPY(log_adj_changes, log_adj_changes_cmd, "[no] log-adjacency-changes",
NO_STR "Log changes in adjacency state\n")
{
- nb_cli_enqueue_change(vty, "./log-adjacency-changes",
- no ? NB_OP_DELETE : NB_OP_CREATE, NULL);
+ nb_cli_enqueue_change(vty, "./log-adjacency-changes", NB_OP_MODIFY,
+ no ? "false" : "true");
return nb_cli_apply_changes(vty, NULL);
}
void cli_show_isis_log_adjacency(struct vty *vty, struct lyd_node *dnode,
bool show_defaults)
{
+ if (!yang_dnode_get_bool(dnode, NULL))
+ vty_out(vty, " no");
vty_out(vty, " log-adjacency-changes\n");
}
/*
* 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)
{
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 = 1;
-
- return NB_OK;
-}
-
-static int
-isis_instance_log_adjacency_changes_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->log_adj_changes = 0;
+ area->log_adj_changes = log ? 1 : 0;
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;
+ bool ipv4, 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;
- 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;
- 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;
+ bool ipv4, ipv6;
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;
}
/*
* 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;
-
- return NB_OK;
-}
-
-static int lib_interface_isis_disable_three_way_handshake_delete(
- enum nb_event event, const struct lyd_node *dnode)
-{
- struct isis_circuit *circuit;
-
- if (event != NB_EV_APPLY)
- return NB_OK;
-
- circuit = yang_dnode_get_entry(dnode, true);
- circuit->disable_threeway_adj = false;
+ circuit->disable_threeway_adj = yang_dnode_get_bool(dnode, NULL);
return NB_OK;
}
},
{
.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-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/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,
},
{