diff options
| author | Renato Westphal <renato@opensourcerouting.org> | 2020-08-31 15:34:06 -0300 | 
|---|---|---|
| committer | Renato Westphal <renato@opensourcerouting.org> | 2020-10-14 16:27:37 -0300 | 
| commit | ed5d70327989fe8dd9e72f011de04a9a56fe7db6 (patch) | |
| tree | 7efc21024463bcdf906938d64c3b1388165a047f | |
| parent | 6431621e4eb11c4b85d6c29f79d060d59b0ed5d2 (diff) | |
yang, isisd: add TI-LFA YANG nodes and corresponding skeleton callbacks
Add CLI wrapper commands as well...
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
| -rw-r--r-- | isisd/isis_cli.c | 98 | ||||
| -rw-r--r-- | isisd/isis_nb.c | 30 | ||||
| -rw-r--r-- | isisd/isis_nb.h | 10 | ||||
| -rw-r--r-- | isisd/isis_nb_config.c | 77 | ||||
| -rw-r--r-- | yang/frr-isisd.yang | 34 | 
5 files changed, 249 insertions, 0 deletions
diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c index d303cbe98d..a270636dde 100644 --- a/isisd/isis_cli.c +++ b/isisd/isis_cli.c @@ -2368,6 +2368,102 @@ void cli_show_ip_isis_priority(struct vty *vty, struct lyd_node *dnode,  }  /* + * XPath: /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/ti-lfa/enable + */ +DEFPY(isis_ti_lfa, isis_ti_lfa_cmd, +      "[no] isis fast-reroute ti-lfa [level-1|level-2]$level [node-protection$node_protection]", +      NO_STR +      "IS-IS routing protocol\n" +      "Interface IP Fast-reroute configuration\n" +      "Enable TI-LFA computation\n" +      "Enable TI-LFA computation for Level 1 only\n" +      "Enable TI-LFA computation for Level 2 only\n" +      "Protect against node failures\n") +{ +	if (!level || strmatch(level, "level-1")) { +		if (no) { +			nb_cli_enqueue_change( +				vty, +				"./frr-isisd:isis/fast-reroute/level-1/ti-lfa/enable", +				NB_OP_MODIFY, "false"); +			nb_cli_enqueue_change( +				vty, +				"./frr-isisd:isis/fast-reroute/level-1/ti-lfa/node-protection", +				NB_OP_MODIFY, "false"); +		} else { +			nb_cli_enqueue_change( +				vty, +				"./frr-isisd:isis/fast-reroute/level-1/ti-lfa/enable", +				NB_OP_MODIFY, "true"); +			nb_cli_enqueue_change( +				vty, +				"./frr-isisd:isis/fast-reroute/level-1/ti-lfa/node-protection", +				NB_OP_MODIFY, +				node_protection ? "true" : "false"); +		} +	} +	if (!level || strmatch(level, "level-2")) { +		if (no) { +			nb_cli_enqueue_change( +				vty, +				"./frr-isisd:isis/fast-reroute/level-2/ti-lfa/enable", +				NB_OP_MODIFY, "false"); +			nb_cli_enqueue_change( +				vty, +				"./frr-isisd:isis/fast-reroute/level-2/ti-lfa/node-protection", +				NB_OP_MODIFY, "false"); +		} else { +			nb_cli_enqueue_change( +				vty, +				"./frr-isisd:isis/fast-reroute/level-2/ti-lfa/enable", +				NB_OP_MODIFY, "true"); +			nb_cli_enqueue_change( +				vty, +				"./frr-isisd:isis/fast-reroute/level-2/ti-lfa/node-protection", +				NB_OP_MODIFY, +				node_protection ? "true" : "false"); +		} +	} + +	return nb_cli_apply_changes(vty, NULL); +} + +void cli_show_ip_isis_ti_lfa(struct vty *vty, struct lyd_node *dnode, +			     bool show_defaults) +{ +	bool l1_enabled, l2_enabled; +	bool l1_node_protection, l2_node_protection; + +	l1_enabled = yang_dnode_get_bool(dnode, "./level-1/ti-lfa/enable"); +	l2_enabled = yang_dnode_get_bool(dnode, "./level-2/ti-lfa/enable"); +	l1_node_protection = +		yang_dnode_get_bool(dnode, "./level-1/ti-lfa/node-protection"); +	l2_node_protection = +		yang_dnode_get_bool(dnode, "./level-2/ti-lfa/node-protection"); + +	if (l1_enabled == l2_enabled +	    && l1_node_protection == l2_node_protection) { +		vty_out(vty, " isis fast-reroute ti-lfa"); +		if (l1_node_protection) +			vty_out(vty, " node-protection"); +		vty_out(vty, "\n"); +	} else { +		if (l1_enabled) { +			vty_out(vty, " isis fast-reroute ti-lfa level-1"); +			if (l1_node_protection) +				vty_out(vty, " node-protection"); +			vty_out(vty, "\n"); +		} +		if (l2_enabled) { +			vty_out(vty, " isis fast-reroute ti-lfa level-2"); +			if (l2_node_protection) +				vty_out(vty, " node-protection"); +			vty_out(vty, "\n"); +		} +	} +} + +/*   * XPath: /frr-isisd:isis/instance/log-adjacency-changes   */  DEFPY_YANG(log_adj_changes, log_adj_changes_cmd, "[no] log-adjacency-changes", @@ -2661,6 +2757,8 @@ void isis_cli_init(void)  	install_element(INTERFACE_NODE, &isis_priority_cmd);  	install_element(INTERFACE_NODE, &no_isis_priority_cmd); +	install_element(INTERFACE_NODE, &isis_ti_lfa_cmd); +  	install_element(ISIS_NODE, &log_adj_changes_cmd);  	install_element(ISIS_NODE, &isis_mpls_ldp_sync_cmd); diff --git a/isisd/isis_nb.c b/isisd/isis_nb.c index 14ea1170c4..d04012c4da 100644 --- a/isisd/isis_nb.c +++ b/isisd/isis_nb.c @@ -819,6 +819,36 @@ const struct frr_yang_module_info frr_isisd_info = {  			},  		},  		{ +			.xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute", +			.cbs = { +				.cli_show = cli_show_ip_isis_ti_lfa, +			} +		}, +		{ +			.xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/ti-lfa/enable", +			.cbs = { +				.modify = lib_interface_isis_fast_reroute_level_1_ti_lfa_enable_modify, +			} +		}, +		{ +			.xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/ti-lfa/node-protection", +			.cbs = { +				.modify = lib_interface_isis_fast_reroute_level_1_ti_lfa_node_protection_modify, +			} +		}, +		{ +			.xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/ti-lfa/enable", +			.cbs = { +				.modify = lib_interface_isis_fast_reroute_level_2_ti_lfa_enable_modify, +			} +		}, +		{ +			.xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/ti-lfa/node-protection", +			.cbs = { +				.modify = lib_interface_isis_fast_reroute_level_2_ti_lfa_node_protection_modify, +			} +		}, +		{  			.xpath = "/frr-interface:lib/interface/state/frr-isisd:isis",  			.cbs = {  				.get_elem = lib_interface_state_isis_get_elem, diff --git a/isisd/isis_nb.h b/isisd/isis_nb.h index 8a6d24b845..303a7b4696 100644 --- a/isisd/isis_nb.h +++ b/isisd/isis_nb.h @@ -256,6 +256,14 @@ int lib_interface_isis_multi_topology_ipv6_dstsrc_modify(  int lib_interface_isis_mpls_ldp_sync_modify(struct nb_cb_modify_args *args);  int lib_interface_isis_mpls_holddown_modify(struct nb_cb_modify_args *args);  int lib_interface_isis_mpls_holddown_destroy(struct nb_cb_destroy_args *args); +int lib_interface_isis_fast_reroute_level_1_ti_lfa_enable_modify( +	struct nb_cb_modify_args *args); +int lib_interface_isis_fast_reroute_level_1_ti_lfa_node_protection_modify( +	struct nb_cb_modify_args *args); +int lib_interface_isis_fast_reroute_level_2_ti_lfa_enable_modify( +	struct nb_cb_modify_args *args); +int lib_interface_isis_fast_reroute_level_2_ti_lfa_node_protection_modify( +	struct nb_cb_modify_args *args);  struct yang_data *  lib_interface_state_isis_get_elem(struct nb_cb_get_elem_args *args);  const void *lib_interface_state_isis_adjacencies_adjacency_get_next( @@ -432,6 +440,8 @@ void cli_show_ip_isis_mt_ipv6_mgmt(struct vty *vty, struct lyd_node *dnode,  				   bool show_defaults);  void cli_show_ip_isis_mt_ipv6_dstsrc(struct vty *vty, struct lyd_node *dnode,  				     bool show_defaults); +void cli_show_ip_isis_ti_lfa(struct vty *vty, struct lyd_node *dnode, +			     bool show_defaults);  void cli_show_ip_isis_circ_type(struct vty *vty, struct lyd_node *dnode,  				bool show_defaults);  void cli_show_ip_isis_network_type(struct vty *vty, struct lyd_node *dnode, diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c index d5f4c605c4..50c409ecb0 100644 --- a/isisd/isis_nb_config.c +++ b/isisd/isis_nb_config.c @@ -2934,5 +2934,82 @@ int lib_interface_isis_mpls_holddown_destroy(struct nb_cb_destroy_args *args)  			ldp_sync_info->holddown = LDP_IGP_SYNC_HOLDDOWN_DEFAULT;  		break;  	} + +	return NB_OK; +} + +/* + * XPath: + * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/ti-lfa/enable + */ +int lib_interface_isis_fast_reroute_level_1_ti_lfa_enable_modify( +	struct nb_cb_modify_args *args) +{ +	switch (args->event) { +	case NB_EV_VALIDATE: +	case NB_EV_PREPARE: +	case NB_EV_ABORT: +	case NB_EV_APPLY: +		/* TODO: implement me. */ +		break; +	} + +	return NB_OK; +} + +/* + * XPath: + * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/ti-lfa/node-protection + */ +int lib_interface_isis_fast_reroute_level_1_ti_lfa_node_protection_modify( +	struct nb_cb_modify_args *args) +{ +	switch (args->event) { +	case NB_EV_VALIDATE: +	case NB_EV_PREPARE: +	case NB_EV_ABORT: +	case NB_EV_APPLY: +		/* TODO: implement me. */ +		break; +	} + +	return NB_OK; +} + +/* + * XPath: + * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/ti-lfa/enable + */ +int lib_interface_isis_fast_reroute_level_2_ti_lfa_enable_modify( +	struct nb_cb_modify_args *args) +{ +	switch (args->event) { +	case NB_EV_VALIDATE: +	case NB_EV_PREPARE: +	case NB_EV_ABORT: +	case NB_EV_APPLY: +		/* TODO: implement me. */ +		break; +	} + +	return NB_OK; +} + +/* + * XPath: + * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/ti-lfa/node-protection + */ +int lib_interface_isis_fast_reroute_level_2_ti_lfa_node_protection_modify( +	struct nb_cb_modify_args *args) +{ +	switch (args->event) { +	case NB_EV_VALIDATE: +	case NB_EV_PREPARE: +	case NB_EV_ABORT: +	case NB_EV_APPLY: +		/* TODO: implement me. */ +		break; +	} +  	return NB_OK;  } diff --git a/yang/frr-isisd.yang b/yang/frr-isisd.yang index 79941a50e7..06d1a793b5 100644 --- a/yang/frr-isisd.yang +++ b/yang/frr-isisd.yang @@ -336,6 +336,26 @@ module frr-isisd {      }    } +  grouping interface-config-ti-lfa { +    container ti-lfa { +      description +        "TI-LFA configuration."; +      leaf enable { +        type boolean; +        default false; +        description +          "Enables TI-LFA computation."; +      } +      leaf node-protection { +        type boolean; +        must ". = 'false' or ../enable = 'true'"; +        default false; +        description +          "Node protection is provided by the alternate."; +      } +    } +  } +    grouping interface-config {      description        "Interface configuration grouping"; @@ -638,6 +658,20 @@ module frr-isisd {        }      } +    container fast-reroute { +      description +        "Interface IP Fast-reroute configuration."; +      container level-1 { +        description +          "Level-1 IP Fast-reroute configuration."; +        uses interface-config-ti-lfa; +      } +      container level-2 { +        description +          "Level-2 IP Fast-reroute configuration."; +        uses interface-config-ti-lfa; +      } +    }    }    grouping adjacency-state {  | 
