diff options
Diffstat (limited to 'zebra/interface.c')
| -rw-r--r-- | zebra/interface.c | 83 |
1 files changed, 62 insertions, 21 deletions
diff --git a/zebra/interface.c b/zebra/interface.c index 52e6bc81df..32703b59bc 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -3277,14 +3277,8 @@ DEFUN (link_params_enable, "Link-params: enable TE link parameters on interface %s", ifp->name); - if (!if_link_params_get(ifp)) { - if (IS_ZEBRA_DEBUG_EVENT || IS_ZEBRA_DEBUG_MPLS) - zlog_debug( - "Link-params: failed to init TE link parameters %s", - ifp->name); - - return CMD_WARNING_CONFIG_FAILED; - } + 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)) @@ -3328,6 +3322,9 @@ DEFUN (link_params_metric, metric = strtoul(argv[idx_number]->arg, NULL, 10); + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update TE metric if needed */ link_param_cmd_set_uint32(ifp, &iflp->te_metric, LP_TE_METRIC, metric); @@ -3368,17 +3365,20 @@ DEFUN (link_params_maxbw, /* Check that Maximum bandwidth is not lower than other bandwidth * parameters */ - if ((bw <= iflp->max_rsv_bw) || (bw <= iflp->unrsv_bw[0]) - || (bw <= iflp->unrsv_bw[1]) || (bw <= iflp->unrsv_bw[2]) - || (bw <= iflp->unrsv_bw[3]) || (bw <= iflp->unrsv_bw[4]) - || (bw <= iflp->unrsv_bw[5]) || (bw <= iflp->unrsv_bw[6]) - || (bw <= iflp->unrsv_bw[7]) || (bw <= iflp->ava_bw) - || (bw <= iflp->res_bw) || (bw <= iflp->use_bw)) { + if (iflp && ((bw <= iflp->max_rsv_bw) || (bw <= iflp->unrsv_bw[0]) || + (bw <= iflp->unrsv_bw[1]) || (bw <= iflp->unrsv_bw[2]) || + (bw <= iflp->unrsv_bw[3]) || (bw <= iflp->unrsv_bw[4]) || + (bw <= iflp->unrsv_bw[5]) || (bw <= iflp->unrsv_bw[6]) || + (bw <= iflp->unrsv_bw[7]) || (bw <= iflp->ava_bw) || + (bw <= iflp->res_bw) || (bw <= iflp->use_bw))) { vty_out(vty, "Maximum Bandwidth could not be lower than others bandwidth\n"); return CMD_WARNING_CONFIG_FAILED; } + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update Maximum Bandwidth if needed */ link_param_cmd_set_float(ifp, &iflp->max_bw, LP_MAX_BW, bw); @@ -3404,13 +3404,16 @@ DEFUN (link_params_max_rsv_bw, /* Check that bandwidth is not greater than maximum bandwidth parameter */ - if (bw > iflp->max_bw) { + if (iflp && bw > iflp->max_bw) { vty_out(vty, "Maximum Reservable Bandwidth could not be greater than Maximum Bandwidth (%g)\n", iflp->max_bw); return CMD_WARNING_CONFIG_FAILED; } + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update Maximum Reservable Bandwidth if needed */ link_param_cmd_set_float(ifp, &iflp->max_rsv_bw, LP_MAX_RSV_BW, bw); @@ -3446,13 +3449,16 @@ DEFUN (link_params_unrsv_bw, /* Check that bandwidth is not greater than maximum bandwidth parameter */ - if (bw > iflp->max_bw) { + if (iflp && bw > iflp->max_bw) { vty_out(vty, "UnReserved Bandwidth could not be greater than Maximum Bandwidth (%g)\n", iflp->max_bw); return CMD_WARNING_CONFIG_FAILED; } + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update Unreserved Bandwidth if needed */ link_param_cmd_set_float(ifp, &iflp->unrsv_bw[priority], LP_UNRSV_BW, bw); @@ -3477,6 +3483,9 @@ DEFUN (link_params_admin_grp, return CMD_WARNING_CONFIG_FAILED; } + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update Administrative Group if needed */ link_param_cmd_set_uint32(ifp, &iflp->admin_grp, LP_ADM_GRP, value); @@ -3519,6 +3528,9 @@ DEFUN (link_params_inter_as, return CMD_WARNING_CONFIG_FAILED; } + if (!iflp) + iflp = if_link_params_enable(ifp); + as = strtoul(argv[idx_number]->arg, NULL, 10); /* Update Remote IP and Remote AS fields if needed */ @@ -3546,6 +3558,9 @@ DEFUN (no_link_params_inter_as, VTY_DECLVAR_CONTEXT(interface, ifp); struct if_link_params *iflp = if_link_params_get(ifp); + if (!iflp) + return CMD_SUCCESS; + /* Reset Remote IP and AS neighbor */ iflp->rmt_as = 0; iflp->rmt_ip.s_addr = 0; @@ -3593,13 +3608,17 @@ DEFUN (link_params_delay, * Therefore, it is also allowed that the average * delay be equal to the min delay or max delay. */ - if (IS_PARAM_SET(iflp, LP_MM_DELAY) - && (delay < iflp->min_delay || delay > iflp->max_delay)) { + if (iflp && IS_PARAM_SET(iflp, LP_MM_DELAY) && + (delay < iflp->min_delay || delay > iflp->max_delay)) { vty_out(vty, "Average delay should be in range Min (%d) - Max (%d) delay\n", iflp->min_delay, iflp->max_delay); return CMD_WARNING_CONFIG_FAILED; } + + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update delay if value is not set or change */ if (IS_PARAM_UNSET(iflp, LP_DELAY) || iflp->av_delay != delay) { iflp->av_delay = delay; @@ -3624,6 +3643,10 @@ DEFUN (link_params_delay, low, high); return CMD_WARNING_CONFIG_FAILED; } + + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update Delays if needed */ if (IS_PARAM_UNSET(iflp, LP_DELAY) || IS_PARAM_UNSET(iflp, LP_MM_DELAY) @@ -3654,6 +3677,9 @@ DEFUN (no_link_params_delay, VTY_DECLVAR_CONTEXT(interface, ifp); struct if_link_params *iflp = if_link_params_get(ifp); + if (!iflp) + return CMD_SUCCESS; + /* Unset Delays */ iflp->av_delay = 0; UNSET_PARAM(iflp, LP_DELAY); @@ -3681,6 +3707,9 @@ DEFUN (link_params_delay_var, value = strtoul(argv[idx_number]->arg, NULL, 10); + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update Delay Variation if needed */ link_param_cmd_set_uint32(ifp, &iflp->delay_var, LP_DELAY_VAR, value); @@ -3721,6 +3750,9 @@ DEFUN (link_params_pkt_loss, if (fval > MAX_PKT_LOSS) fval = MAX_PKT_LOSS; + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update Packet Loss if needed */ link_param_cmd_set_float(ifp, &iflp->pkt_loss, LP_PKT_LOSS, fval); @@ -3760,13 +3792,16 @@ DEFUN (link_params_res_bw, /* Check that bandwidth is not greater than maximum bandwidth parameter */ - if (bw > iflp->max_bw) { + if (iflp && bw > iflp->max_bw) { vty_out(vty, "Residual Bandwidth could not be greater than Maximum Bandwidth (%g)\n", iflp->max_bw); return CMD_WARNING_CONFIG_FAILED; } + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update Residual Bandwidth if needed */ link_param_cmd_set_float(ifp, &iflp->res_bw, LP_RES_BW, bw); @@ -3806,13 +3841,16 @@ DEFUN (link_params_ava_bw, /* Check that bandwidth is not greater than maximum bandwidth parameter */ - if (bw > iflp->max_bw) { + if (iflp && bw > iflp->max_bw) { vty_out(vty, "Available Bandwidth could not be greater than Maximum Bandwidth (%g)\n", iflp->max_bw); return CMD_WARNING_CONFIG_FAILED; } + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update Residual Bandwidth if needed */ link_param_cmd_set_float(ifp, &iflp->ava_bw, LP_AVA_BW, bw); @@ -3852,13 +3890,16 @@ DEFUN (link_params_use_bw, /* Check that bandwidth is not greater than maximum bandwidth parameter */ - if (bw > iflp->max_bw) { + if (iflp && bw > iflp->max_bw) { vty_out(vty, "Utilised Bandwidth could not be greater than Maximum Bandwidth (%g)\n", iflp->max_bw); return CMD_WARNING_CONFIG_FAILED; } + if (!iflp) + iflp = if_link_params_enable(ifp); + /* Update Utilized Bandwidth if needed */ link_param_cmd_set_float(ifp, &iflp->use_bw, LP_USE_BW, bw); |
