vty_out(vty, "\n");
}
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/passive
+ */
+DEFPY(isis_passive, isis_passive_cmd, "[no] isis passive",
+ NO_STR
+ "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);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+void cli_show_ip_isis_passive(struct vty *vty, struct lyd_node *dnode,
+ bool show_defaults)
+{
+ vty_out(vty, " isis passive\n");
+}
+
void isis_cli_init(void)
{
install_element(CONFIG_NODE, &router_isis_cmd);
install_element(ISIS_NODE, &isis_redistribute_cmd);
install_element(ISIS_NODE, &isis_topology_cmd);
+
+ install_element(INTERFACE_NODE, &isis_passive_cmd);
}
#endif /* ifndef FABRICD */
bool show_defaults);
void cli_show_isis_mt_ipv6_dstsrc(struct vty *vty, struct lyd_node *dnode,
bool show_defaults);
+void cli_show_ip_isis_passive(struct vty *vty, struct lyd_node *dnode,
+ bool show_defaults);
#endif /* ISISD_ISIS_CLI_H_ */
const struct lyd_node *dnode,
union nb_resource *resource)
{
- /* TODO: implement me. */
+ 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)
{
- /* TODO: implement me. */
+ struct isis_circuit *circuit;
+ struct isis_area *area;
+ struct interface *ifp;
+
+ switch (event) {
+ case NB_EV_VALIDATE:
+ circuit = yang_dnode_get_entry(dnode, false);
+ if (!circuit)
+ break;
+ ifp = circuit->interface;
+ if (!ifp)
+ break;
+ 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;
+ }
+
return NB_OK;
}
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/passive",
.cbs.create = lib_interface_isis_passive_create,
.cbs.delete = lib_interface_isis_passive_delete,
+ .cbs.cli_show = cli_show_ip_isis_passive,
},
{
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/password",
return circuit;
}
-DEFUN (isis_passive,
- isis_passive_cmd,
- PROTO_NAME " passive",
- PROTO_HELP
- "Configure the passive mode for interface\n")
-{
- struct isis_circuit *circuit = isis_circuit_lookup(vty);
- if (!circuit)
- return CMD_ERR_NO_MATCH;
-
- CMD_FERR_RETURN(isis_circuit_passive_set(circuit, 1),
- "Cannot set passive: $ERR");
- return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_passive,
- no_isis_passive_cmd,
- "no " PROTO_NAME " passive",
- NO_STR
- PROTO_HELP
- "Configure the passive mode for interface\n")
-{
- struct isis_circuit *circuit = isis_circuit_lookup(vty);
- if (!circuit)
- return CMD_ERR_NO_MATCH;
-
- CMD_FERR_RETURN(isis_circuit_passive_set(circuit, 0),
- "Cannot set no passive: $ERR");
- return CMD_SUCCESS;
-}
-
DEFUN (isis_passwd,
isis_passwd_cmd,
PROTO_NAME " password <md5|clear> WORD",
void isis_vty_init(void)
{
- install_element(INTERFACE_NODE, &isis_passive_cmd);
- install_element(INTERFACE_NODE, &no_isis_passive_cmd);
-
install_element(INTERFACE_NODE, &isis_passwd_cmd);
install_element(INTERFACE_NODE, &no_isis_passwd_cmd);
return CMD_SUCCESS;
}
+DEFUN (isis_passive,
+ isis_passive_cmd,
+ PROTO_NAME " passive",
+ PROTO_HELP
+ "Configure the passive mode for interface\n")
+{
+ struct isis_circuit *circuit = isis_circuit_lookup(vty);
+ if (!circuit)
+ return CMD_ERR_NO_MATCH;
+
+ CMD_FERR_RETURN(isis_circuit_passive_set(circuit, 1),
+ "Cannot set passive: $ERR");
+ return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_passive,
+ no_isis_passive_cmd,
+ "no " PROTO_NAME " passive",
+ NO_STR
+ PROTO_HELP
+ "Configure the passive mode for interface\n")
+{
+ struct isis_circuit *circuit = isis_circuit_lookup(vty);
+ if (!circuit)
+ return CMD_ERR_NO_MATCH;
+
+ CMD_FERR_RETURN(isis_circuit_passive_set(circuit, 0),
+ "Cannot set no passive: $ERR");
+ return CMD_SUCCESS;
+}
+
void isis_vty_daemon_init(void)
{
install_element(ROUTER_NODE, &fabric_tier_cmd);
install_element(ROUTER_NODE, &no_spf_delay_ietf_cmd);
install_element(ROUTER_NODE, &area_purge_originator_cmd);
+
+ install_element(INTERFACE_NODE, &isis_passive_cmd);
+ install_element(INTERFACE_NODE, &no_isis_passive_cmd);
}