struct isis_circuit *circuit = NULL;
struct isis_area *area = NULL;
- area = isis_area_lookup(tag);
- if (!area) {
+ if (!yang_dnode_exists(vty->candidate_config->dnode,
+ "/frr-isisd:isis/instance[area-tag='%s']",
+ tag)) {
vty_out(vty, "ISIS area %s not found.\n", tag);
return CMD_ERR_NOTHING_TODO;
}
nb_cli_enqueue_change(vty, ".", NB_OP_DELETE, NULL);
- if (area->circuit_list && listcount(area->circuit_list)) {
+ area = isis_area_lookup(tag);
+ if (area && area->circuit_list && listcount(area->circuit_list)) {
for (ALL_LIST_ELEMENTS(area->circuit_list, node, nnode,
circuit)) {
/* add callbacks to delete each of the circuits listed
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"
case IS_LEVEL_1_AND_2:
circ_type = "level-1-2";
break;
+ default:
+ /* just to silence compiler warnings */
+ return CMD_WARNING_CONFIG_FAILED;
}
nb_cli_enqueue_change(vty, "./frr-isisd:isis", NB_OP_CREATE,
NULL);
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"
case IS_LEVEL_1_AND_2:
circ_type = "level-1-2";
break;
+ default:
+ /* just to silence compiler warnings */
+ return CMD_WARNING_CONFIG_FAILED;
}
nb_cli_enqueue_change(vty, "./frr-isisd:isis", NB_OP_CREATE,
NULL);
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);
}
{
const struct lyd_node *dnode =
yang_dnode_get(running_config->dnode, VTY_CURR_XPATH);
- struct interface *ifp;
- struct isis_circuit *circuit = NULL;
-
- /* check for the existance of a circuit */
- if (dnode) {
- ifp = yang_dnode_get_entry(dnode, false);
- if (ifp)
- circuit = circuit_scan_by_ifp(ifp);
- }
/* if both ipv4 and ipv6 are off delete the interface isis container too
*/
if (!strncmp(ip, "ipv6", strlen("ipv6"))) {
- if (circuit && !circuit->ip_router)
+ if (dnode
+ && !yang_dnode_get_bool(dnode,
+ "./frr-isisd:isis/ipv4-routing"))
nb_cli_enqueue_change(vty, "./frr-isisd:isis",
NB_OP_DELETE, 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)
+ if (dnode
+ && !yang_dnode_get_bool(dnode,
+ "./frr-isisd:isis/ipv6-routing"))
nb_cli_enqueue_change(vty, "./frr-isisd:isis",
NB_OP_DELETE, NULL);
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");
}
* XPath: /frr-isisd:isis/instance/metric-style
*/
DEFPY(metric_style, metric_style_cmd,
- "metric-style <narrow|transition|wide>$style",
+ "metric-style <narrow|transition|wide>$style",
"Use old-style (ISO 10589) or new-style packet formats\n"
"Use old style of TLVs with narrow metric\n"
"Send and accept both styles of TLVs during transition\n"
}
DEFPY(no_metric_style, no_metric_style_cmd,
- "no metric-style [narrow|transition|wide]",
- NO_STR
- "Use old-style (ISO 10589) or new-style packet formats\n"
+ "no metric-style [narrow|transition|wide]",
+ NO_STR
+ "Use old-style (ISO 10589) or new-style packet formats\n"
"Use old style of TLVs with narrow metric\n"
"Send and accept both styles of TLVs during transition\n"
"Use new style of TLVs to carry wider metric\n")
DEFPY(no_spf_delay_ietf, no_spf_delay_ietf_cmd,
"no spf-delay-ietf [init-delay (0-60000) short-delay (0-60000) long-delay (0-60000) holddown (0-60000) time-to-learn (0-60000)]",
NO_STR
- "IETF SPF delay algorithm\n"
+ "IETF SPF delay algorithm\n"
"Delay used while in QUIET state\n"
"Delay used while in QUIET state in milliseconds\n"
"Delay used while in SHORT_WAIT state\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);
}
static void vty_print_def_origin(struct vty *vty, struct lyd_node *dnode,
- const char *family, const char *level, bool show_defaults)
+ const char *family, const char *level,
+ bool show_defaults)
{
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");
}