summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/user/zebra.rst22
-rw-r--r--vtysh/vtysh.c10
-rw-r--r--yang/frr-zebra.yang1
-rw-r--r--zebra/interface.c92
-rw-r--r--zebra/zebra_nb.c7
-rw-r--r--zebra/zebra_nb.h2
-rw-r--r--zebra/zebra_nb_config.c92
7 files changed, 113 insertions, 113 deletions
diff --git a/doc/user/zebra.rst b/doc/user/zebra.rst
index c27819449c..9199404f3e 100644
--- a/doc/user/zebra.rst
+++ b/doc/user/zebra.rst
@@ -214,20 +214,14 @@ Link Parameters Commands
.. clicmd:: link-params
-
- Enter into the link parameters sub node. At least 'enable' must be
- set to activate the link parameters, and consequently routing
- information that could be used as part of Traffic Engineering on
- this interface. MPLS-TE must be enable at the OSPF
- (:ref:`ospf-traffic-engineering`) or ISIS
- (:ref:`isis-traffic-engineering`) router level in complement to
- this.
-
- Under link parameter statement, the following commands set the different TE values:
-
-.. clicmd:: enable
-
- Enable link parameters for this interface.
+ Enter into the link parameters sub node. This command activates the link
+ parameters and allows to configure routing information that could be used
+ as part of Traffic Engineering on this interface. MPLS-TE must be enabled at
+ the OSPF (:ref:`ospf-traffic-engineering`) or ISIS
+ (:ref:`isis-traffic-engineering`) router level in complement to this. To
+ disable link parameters, use the ``no`` version of this command.
+
+Under link parameter statement, the following commands set the different TE values:
.. clicmd:: metric (0-4294967295)
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index b1a53965cd..299165e2aa 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -1615,7 +1615,6 @@ struct cmd_node link_params_node = {
.node = LINK_PARAMS_NODE,
.parent_node = INTERFACE_NODE,
.prompt = "%s(config-link-params)# ",
- .no_xpath = true,
};
#ifdef HAVE_BGPD
@@ -3015,6 +3014,14 @@ DEFUNSH(VTYSH_ZEBRA, vtysh_link_params, vtysh_link_params_cmd, "link-params",
return CMD_SUCCESS;
}
+DEFUNSH_HIDDEN(VTYSH_ZEBRA, no_link_params_enable, no_link_params_enable_cmd,
+ "no enable", NO_STR "Disable link parameters on this interface\n")
+{
+ if (vty->node == LINK_PARAMS_NODE)
+ vty->node = INTERFACE_NODE;
+ return CMD_SUCCESS;
+}
+
DEFUNSH(VTYSH_ZEBRA, exit_link_params, exit_link_params_cmd, "exit-link-params",
"Exit from Link Params configuration node\n")
{
@@ -5064,6 +5071,7 @@ void vtysh_init_vty(void)
install_node(&link_params_node);
install_element(INTERFACE_NODE, &vtysh_link_params_cmd);
+ install_element(LINK_PARAMS_NODE, &no_link_params_enable_cmd);
install_element(LINK_PARAMS_NODE, &exit_link_params_cmd);
install_element(LINK_PARAMS_NODE, &vtysh_end_all_cmd);
install_element(LINK_PARAMS_NODE, &vtysh_exit_link_params_cmd);
diff --git a/yang/frr-zebra.yang b/yang/frr-zebra.yang
index 14c6ae5f77..a58546923d 100644
--- a/yang/frr-zebra.yang
+++ b/yang/frr-zebra.yang
@@ -2047,6 +2047,7 @@ module frr-zebra {
"Link bandwidth informational parameter, in megabits.";
}
container link-params {
+ presence "Activates link parameters on this interface.";
description
"link-params for Traffic-Engineering (TE) use in IGP extensions.";
choice admin-group-mode {
diff --git a/zebra/interface.c b/zebra/interface.c
index 06ba9488c0..ec38cc8e11 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -3809,7 +3809,7 @@ DEFPY_YANG (linkdetect,
{
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-detect",
NB_OP_CREATE, no ? "false" : "true");
-
+
return nb_cli_apply_changes(vty, NULL);
}
@@ -3890,7 +3890,6 @@ struct cmd_node link_params_node = {
.node = LINK_PARAMS_NODE,
.parent_node = INTERFACE_NODE,
.prompt = "%s(config-link-params)# ",
- .no_xpath = true,
};
static void link_param_cmd_set_uint32(struct interface *ifp, uint32_t *field,
@@ -3936,15 +3935,23 @@ static void link_param_cmd_unset(struct interface *ifp, uint32_t type)
zebra_interface_parameters_update(ifp);
}
-DEFUN_NOSH (link_params,
+DEFUN_YANG_NOSH (link_params,
link_params_cmd,
"link-params",
LINK_PARAMS_STR)
{
- /* vty->qobj_index stays the same @ interface pointer */
- vty->node = LINK_PARAMS_NODE;
+ int ret;
- return CMD_SUCCESS;
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-params", NB_OP_CREATE, NULL);
+
+ ret = nb_cli_apply_changes(vty, NULL);
+ if (ret == CMD_SUCCESS) {
+ char xpath[XPATH_MAXLEN];
+ snprintf(xpath, sizeof(xpath), "%s/frr-zebra:zebra/link-params", VTY_CURR_XPATH);
+ VTY_PUSH_XPATH(LINK_PARAMS_NODE, xpath);
+ }
+
+ return ret;
}
DEFUN_NOSH (exit_link_params,
@@ -3952,70 +3959,49 @@ DEFUN_NOSH (exit_link_params,
"exit-link-params",
"Exit from Link Params configuration mode\n")
{
- if (vty->node == LINK_PARAMS_NODE)
- vty->node = INTERFACE_NODE;
+ cmd_exit(vty);
return CMD_SUCCESS;
}
+DEFUN_YANG (no_link_params,
+ no_link_params_cmd,
+ "no link-params",
+ NO_STR
+ LINK_PARAMS_STR)
+{
+ nb_cli_enqueue_change(vty, "./frr-zebra:zebra/link-params", NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
/* Specific Traffic Engineering parameters commands */
-DEFUN (link_params_enable,
+DEFUN_HIDDEN (link_params_enable,
link_params_enable_cmd,
"enable",
"Activate link parameters on this interface\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
-
- /* This command could be issue at startup, when activate MPLS TE */
- /* on a new interface or after a ON / OFF / ON toggle */
- /* In all case, TE parameters are reset to their default factory */
- if (IS_ZEBRA_DEBUG_EVENT || IS_ZEBRA_DEBUG_MPLS)
- zlog_debug(
- "Link-params: enable TE link parameters on interface %s",
- ifp->name);
-
- if (!if_link_params_get(ifp))
- if_link_params_enable(ifp);
-
- /* force protocols to update LINK STATE due to parameters change */
- if (if_is_operative(ifp))
- zebra_interface_parameters_update(ifp);
+ vty_out(vty, "This command is deprecated. Link parameters are activated when \"link-params\" node is entered.\n");
return CMD_SUCCESS;
}
-DEFUN (no_link_params_enable,
+DEFUN_NOSH (no_link_params_enable,
no_link_params_enable_cmd,
"no enable",
NO_STR
"Disable link parameters on this interface\n")
{
- char xpath[XPATH_MAXLEN];
int ret;
- VTY_DECLVAR_CONTEXT(interface, ifp);
- if (IS_ZEBRA_DEBUG_EVENT || IS_ZEBRA_DEBUG_MPLS)
- zlog_debug("MPLS-TE: disable TE link parameters on interface %s",
- ifp->name);
+ vty_out(vty, "This command is deprecated. To disable link parameters use \"no link-params\" in the interface node.\n");
- if_link_params_free(ifp);
-
- snprintf(
- xpath, sizeof(xpath),
- "/frr-interface:lib/interface[name='%s']/frr-zebra:zebra/link-params/affinities",
- ifp->name);
- if (yang_dnode_exists(running_config->dnode, xpath))
- nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
+ nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
ret = nb_cli_apply_changes(vty, NULL);
+ if (ret == CMD_SUCCESS)
+ cmd_exit(vty);
- if (ret != CMD_SUCCESS)
- return ret;
-
- /* force protocols to update LINK STATE due to parameters change */
- if (if_is_operative(ifp))
- zebra_interface_parameters_update(ifp);
-
- return CMD_SUCCESS;
+ return ret;
}
/* STANDARD TE metrics */
@@ -4199,7 +4185,7 @@ DEFPY_YANG(link_params_admin_grp, link_params_admin_grp_cmd,
snprintf(value_str, sizeof(value_str), "%ld", value);
nb_cli_enqueue_change(
- vty, "./frr-zebra:zebra/link-params/legacy-admin-group",
+ vty, "./legacy-admin-group",
NB_OP_MODIFY, value_str);
return nb_cli_apply_changes(vty, NULL);
@@ -4210,7 +4196,7 @@ DEFPY_YANG(no_link_params_admin_grp, no_link_params_admin_grp_cmd,
NO_STR "Disable Administrative group membership on this interface\n")
{
nb_cli_enqueue_change(
- vty, "./frr-zebra:zebra/link-params/legacy-admin-group",
+ vty, "./legacy-admin-group",
NB_OP_DESTROY, NULL);
return nb_cli_apply_changes(vty, NULL);
@@ -4655,7 +4641,7 @@ DEFPY_YANG(link_params_affinity, link_params_affinity_cmd,
"Affinity names\n")
{
return ag_change(vty, argc, argv,
- "./frr-zebra:zebra/link-params/affinities/affinity",
+ "./affinities/affinity",
no, no ? 2 : 1);
}
@@ -4671,7 +4657,7 @@ DEFPY_YANG(link_params_affinity_mode, link_params_affinity_mode_cmd,
"Extended Admin-Group only RFC7308 (default)\n"
"Standard and extended Admin-Group format\n")
{
- const char *xpath = "./frr-zebra:zebra/link-params/affinity-mode";
+ const char *xpath = "./affinity-mode";
nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, affmode);
@@ -4686,7 +4672,7 @@ DEFPY_YANG(no_link_params_affinity_mode, no_link_params_affinity_mode_cmd,
"Extended Admin-Group only RFC7308 (default)\n"
"Standard and extended Admin-Group format\n")
{
- const char *xpath = "./frr-zebra:zebra/link-params/affinity-mode";
+ const char *xpath = "./affinity-mode";
nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, "extended");
@@ -5017,7 +5003,6 @@ static int link_params_config_write(struct vty *vty, struct interface *ifp)
struct if_link_params *iflp = ifp->link_params;
vty_out(vty, " link-params\n");
- vty_out(vty, " enable\n");
if (IS_PARAM_SET(iflp, LP_TE_METRIC) && iflp->te_metric != ifp->metric)
vty_out(vty, " metric %u\n", iflp->te_metric);
if (IS_PARAM_SET(iflp, LP_MAX_BW) && iflp->max_bw != iflp->default_bw)
@@ -5183,6 +5168,7 @@ void zebra_if_init(void)
install_element(INTERFACE_NODE, &ip_address_peer_cmd);
install_element(INTERFACE_NODE, &ipv6_address_cmd);
install_element(INTERFACE_NODE, &link_params_cmd);
+ install_element(INTERFACE_NODE, &no_link_params_cmd);
install_default(LINK_PARAMS_NODE);
install_element(LINK_PARAMS_NODE, &link_params_enable_cmd);
install_element(LINK_PARAMS_NODE, &no_link_params_enable_cmd);
diff --git a/zebra/zebra_nb.c b/zebra/zebra_nb.c
index ddb2e8f325..a62f6b4280 100644
--- a/zebra/zebra_nb.c
+++ b/zebra/zebra_nb.c
@@ -359,6 +359,13 @@ const struct frr_yang_module_info frr_zebra_info = {
}
},
{
+ .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params",
+ .cbs = {
+ .create = lib_interface_zebra_link_params_create,
+ .destroy = lib_interface_zebra_link_params_destroy,
+ }
+ },
+ {
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/legacy-admin-group",
.cbs = {
.modify = lib_interface_zebra_legacy_admin_group_modify,
diff --git a/zebra/zebra_nb.h b/zebra/zebra_nb.h
index 13d42d41d2..044a9c00d7 100644
--- a/zebra/zebra_nb.h
+++ b/zebra/zebra_nb.h
@@ -101,6 +101,8 @@ int lib_interface_zebra_bandwidth_modify(struct nb_cb_modify_args *args);
int lib_interface_zebra_bandwidth_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_mpls_modify(struct nb_cb_modify_args *args);
int lib_interface_zebra_mpls_destroy(struct nb_cb_destroy_args *args);
+int lib_interface_zebra_link_params_create(struct nb_cb_create_args *args);
+int lib_interface_zebra_link_params_destroy(struct nb_cb_destroy_args *args);
int lib_interface_zebra_legacy_admin_group_modify(
struct nb_cb_modify_args *args);
int lib_interface_zebra_legacy_admin_group_destroy(
diff --git a/zebra/zebra_nb_config.c b/zebra/zebra_nb_config.c
index c704f79bca..1aae749e7c 100644
--- a/zebra/zebra_nb_config.c
+++ b/zebra/zebra_nb_config.c
@@ -1272,6 +1272,39 @@ int lib_interface_zebra_bandwidth_destroy(struct nb_cb_destroy_args *args)
}
/*
+ * XPath: /frr-interface:lib/interface/frr-zebra:zebra/link-params
+ */
+int lib_interface_zebra_link_params_create(struct nb_cb_create_args *args)
+{
+ struct interface *ifp;
+
+ if (args->event != NB_EV_APPLY)
+ return NB_OK;
+
+ ifp = nb_running_get_entry(args->dnode, NULL, true);
+ if_link_params_enable(ifp);
+ if (if_is_operative(ifp))
+ zebra_interface_parameters_update(ifp);
+
+ return NB_OK;
+}
+
+int lib_interface_zebra_link_params_destroy(struct nb_cb_destroy_args *args)
+{
+ struct interface *ifp;
+
+ if (args->event != NB_EV_APPLY)
+ return NB_OK;
+
+ ifp = nb_running_get_entry(args->dnode, NULL, true);
+ if_link_params_free(ifp);
+ if (if_is_operative(ifp))
+ zebra_interface_parameters_update(ifp);
+
+ return NB_OK;
+}
+
+/*
* XPath:
* /frr-interface:lib/interface/frr-zebra:zebra/link-params/legacy-admin-group
*/
@@ -1282,22 +1315,16 @@ int lib_interface_zebra_legacy_admin_group_modify(
struct if_link_params *iflp;
uint32_t admin_group_value;
- ifp = nb_running_get_entry(args->dnode, NULL, true);
admin_group_value = yang_dnode_get_uint32(args->dnode, ".");
- if (!ifp)
- return NB_ERR_RESOURCE;
-
- iflp = if_link_params_get(ifp);
-
switch (args->event) {
case NB_EV_VALIDATE:
case NB_EV_PREPARE:
case NB_EV_ABORT:
break;
case NB_EV_APPLY:
- if (!iflp)
- iflp = if_link_params_enable(ifp);
+ ifp = nb_running_get_entry(args->dnode, NULL, true);
+ iflp = if_link_params_get(ifp);
iflp->admin_grp = admin_group_value;
SET_PARAM(iflp, LP_ADM_GRP);
@@ -1318,21 +1345,14 @@ int lib_interface_zebra_legacy_admin_group_destroy(
struct interface *ifp;
struct if_link_params *iflp;
- ifp = nb_running_get_entry(args->dnode, NULL, true);
-
- if (!ifp)
- return NB_ERR_RESOURCE;
-
- iflp = if_link_params_get(ifp);
-
switch (args->event) {
case NB_EV_VALIDATE:
case NB_EV_PREPARE:
case NB_EV_ABORT:
break;
case NB_EV_APPLY:
- if (!iflp)
- iflp = if_link_params_enable(ifp);
+ ifp = nb_running_get_entry(args->dnode, NULL, true);
+ iflp = if_link_params_get(ifp);
iflp->admin_grp = 0;
UNSET_PARAM(iflp, LP_ADM_GRP);
@@ -1356,25 +1376,18 @@ int lib_interface_zebra_affinity_create(struct nb_cb_create_args *args)
struct affinity_map *affmap;
enum affinity_mode affinity_mode;
-
- ifp = nb_running_get_entry(args->dnode, NULL, true);
affname = yang_dnode_get_string(args->dnode, ".");
affinity_mode = yang_dnode_get_enum(args->dnode, "../../affinity-mode");
- if (!ifp)
- return NB_ERR_RESOURCE;
-
- affmap = affinity_map_get(affname);
- iflp = if_link_params_get(ifp);
-
switch (args->event) {
case NB_EV_VALIDATE:
case NB_EV_PREPARE:
case NB_EV_ABORT:
break;
case NB_EV_APPLY:
- if (!iflp)
- iflp = if_link_params_enable(ifp);
+ ifp = nb_running_get_entry(args->dnode, NULL, true);
+ iflp = if_link_params_get(ifp);
+ affmap = affinity_map_get(affname);
if (affmap->bit_position < 32 &&
(affinity_mode == AFFINITY_MODE_STANDARD ||
@@ -1404,24 +1417,19 @@ int lib_interface_zebra_affinity_destroy(struct nb_cb_destroy_args *args)
struct affinity_map *affmap;
enum affinity_mode affinity_mode;
- ifp = nb_running_get_entry(args->dnode, NULL, true);
affname = yang_dnode_get_string(args->dnode, ".");
affinity_mode = yang_dnode_get_enum(args->dnode, "../../affinity-mode");
- if (!ifp)
- return NB_ERR_RESOURCE;
-
- affmap = affinity_map_get(affname);
- iflp = if_link_params_get(ifp);
-
switch (args->event) {
case NB_EV_VALIDATE:
case NB_EV_PREPARE:
case NB_EV_ABORT:
break;
case NB_EV_APPLY:
- if (!iflp)
- return NB_OK;
+ ifp = nb_running_get_entry(args->dnode, NULL, true);
+ iflp = if_link_params_get(ifp);
+ affmap = affinity_map_get(affname);
+
if (affmap->bit_position < 32 &&
(affinity_mode == AFFINITY_MODE_STANDARD ||
affinity_mode == AFFINITY_MODE_BOTH)) {
@@ -1454,23 +1462,17 @@ int lib_interface_zebra_affinity_mode_modify(struct nb_cb_modify_args *args)
struct if_link_params *iflp;
enum affinity_mode affinity_mode;
-
- ifp = nb_running_get_entry(args->dnode, NULL, true);
affinity_mode = yang_dnode_get_enum(args->dnode, ".");
- if (!ifp)
- return NB_ERR_RESOURCE;
-
- iflp = if_link_params_get(ifp);
-
switch (args->event) {
case NB_EV_VALIDATE:
case NB_EV_PREPARE:
case NB_EV_ABORT:
break;
case NB_EV_APPLY:
- if (!iflp)
- iflp = if_link_params_enable(ifp);
+ ifp = nb_running_get_entry(args->dnode, NULL, true);
+ iflp = if_link_params_get(ifp);
+
if (affinity_mode == AFFINITY_MODE_STANDARD) {
if (!IS_PARAM_SET(iflp, LP_ADM_GRP) &&
IS_PARAM_SET(iflp, LP_EXTEND_ADM_GRP)) {