summaryrefslogtreecommitdiff
path: root/zebra/interface.c
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2016-12-06 19:51:33 +0000
committerQuentin Young <qlyoung@cumulusnetworks.com>2016-12-06 19:51:33 +0000
commit6fd800be4ac4da8ec034f2a858e0183b8ae9bb01 (patch)
treee1a77a68567f6496415b6476a6bed52c77d64619 /zebra/interface.c
parent3d6e734154e6da17423e9054b5443774cacfdd51 (diff)
parent9dec6b446c5487623ad04fdaa8160e3338f12799 (diff)
Merge remote-tracking branch 'osr/master' into vtysh-grammar
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com> Conflicts: lib/command_match.c
Diffstat (limited to 'zebra/interface.c')
-rw-r--r--zebra/interface.c118
1 files changed, 42 insertions, 76 deletions
diff --git a/zebra/interface.c b/zebra/interface.c
index e9cbd72af9..8eddd3062a 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -59,6 +59,20 @@ const char *rtadv_pref_strs[] = { "medium", "high", "INVALID", "low", 0 };
static void if_down_del_nbr_connected (struct interface *ifp);
+static void
+zebra_if_node_destroy (route_table_delegate_t *delegate,
+ struct route_table *table, struct route_node *node)
+{
+ if (node->info)
+ list_delete (node->info);
+ route_node_destroy (delegate, table, node);
+}
+
+route_table_delegate_t zebra_if_table_delegate = {
+ .create_node = route_node_create,
+ .destroy_node = zebra_if_node_destroy
+};
+
/* Called when new interface is added. */
static int
if_zebra_new_hook (struct interface *ifp)
@@ -101,7 +115,7 @@ if_zebra_new_hook (struct interface *ifp)
#endif /* HAVE_RTADV */
/* Initialize installed address chains tree. */
- zebra_if->ipv4_subnets = route_table_init ();
+ zebra_if->ipv4_subnets = route_table_init_with_delegate (&zebra_if_table_delegate);
ifp->info = zebra_if;
@@ -1025,7 +1039,7 @@ if_dump_vty (struct vty *vty, struct interface *ifp)
zebra_ptm_show_status(vty, ifp);
- vrf = vrf_lookup(ifp->vrf_id);
+ vrf = vrf_lookup_by_id (ifp->vrf_id);
vty_out (vty, " vrf: %s%s", vrf->name, VTY_NEWLINE);
if (ifp->desc)
@@ -1243,35 +1257,6 @@ struct cmd_node interface_node =
1
};
-#if 0
-/* Wrapper hook point for zebra daemon so that ifindex can be set
- * DEFUN macro not used as extract.pl HAS to ignore this
- * See also interface_cmd in lib/if.c
- */
-DEFUN_NOSH (zebra_vrf,
- zebra_vrf_cmd,
- "vrf NAME",
- "Select a VRF to configure\n"
- "VRF's name\n")
-{
- // VTY_DECLVAR_CONTEXT (vrf, vrfp);
- int ret;
-
- /* Call lib vrf() */
- if ((ret = vrf_cmd.func (self, vty, argc, argv)) != CMD_SUCCESS)
- return ret;
-
- return ret;
-}
-#endif
-
-struct cmd_node vrf_node =
-{
- VRF_NODE,
- "%s(config-vrf)# ",
- 1
-};
-
/* Show all interfaces to vty. */
DEFUN (show_interface,
show_interface_cmd,
@@ -1305,15 +1290,15 @@ DEFUN (show_interface_vrf_all,
"Interface status and configuration\n"
VRF_ALL_CMD_HELP_STR)
{
+ struct vrf *vrf;
struct listnode *node;
struct interface *ifp;
- vrf_iter_t iter;
interface_update_stats ();
/* All interface print. */
- for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
- for (ALL_LIST_ELEMENTS_RO (vrf_iter2iflist (iter), node, ifp))
+ RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
+ for (ALL_LIST_ELEMENTS_RO (vrf->iflist, node, ifp))
if_dump_vty (vty, ifp);
return CMD_SUCCESS;
@@ -1361,17 +1346,17 @@ DEFUN (show_interface_name_vrf_all,
VRF_ALL_CMD_HELP_STR)
{
int idx_ifname = 2;
+ struct vrf *vrf;
struct interface *ifp;
- vrf_iter_t iter;
int found = 0;
interface_update_stats ();
/* All interface print. */
- for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
+ RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
{
/* Specified interface print. */
- ifp = if_lookup_by_name_vrf (argv[idx_ifname]->arg, vrf_iter2id (iter));
+ ifp = if_lookup_by_name_vrf (argv[idx_ifname]->arg, vrf->vrf_id);
if (ifp)
{
if_dump_vty (vty, ifp);
@@ -1456,15 +1441,14 @@ DEFUN (show_interface_desc_vrf_all,
"Interface description\n"
VRF_ALL_CMD_HELP_STR)
{
- vrf_iter_t iter;
+ struct vrf *vrf;
- for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
- if (!list_isempty (vrf_iter2iflist (iter)))
+ RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
+ if (!list_isempty (vrf->iflist))
{
- vty_out (vty, "%s\tVRF %u%s%s", VTY_NEWLINE,
- vrf_iter2id (iter),
- VTY_NEWLINE, VTY_NEWLINE);
- if_show_description (vty, vrf_iter2id (iter));
+ vty_out (vty, "%s\tVRF %u%s%s", VTY_NEWLINE, vrf->vrf_id,
+ VTY_NEWLINE, VTY_NEWLINE);
+ if_show_description (vty, vrf->vrf_id);
}
return CMD_SUCCESS;
@@ -1801,7 +1785,7 @@ DEFUN (link_params_metric,
VTY_GET_ULONG("metric", metric, argv[idx_number]->arg);
/* Update TE metric if needed */
- link_param_cmd_set_uint32 (ifp, &iflp->te_metric, LP_TE, metric);
+ link_param_cmd_set_uint32 (ifp, &iflp->te_metric, LP_TE | LP_TE_METRIC, metric);
return CMD_SUCCESS;
}
@@ -1815,7 +1799,7 @@ DEFUN (no_link_params_metric,
VTY_DECLVAR_CONTEXT (interface, ifp);
/* Unset TE Metric */
- link_param_cmd_unset(ifp, LP_TE);
+ link_param_cmd_unset(ifp, LP_TE | LP_TE_METRIC);
return CMD_SUCCESS;
}
@@ -2753,20 +2737,21 @@ link_params_config_write (struct vty *vty, struct interface *ifp)
vty_out (vty, " link-params%s", VTY_NEWLINE);
vty_out(vty, " enable%s", VTY_NEWLINE);
- if (IS_PARAM_SET(iflp, LP_TE))
+ if (IS_PARAM_SET(iflp, LP_TE) && IS_PARAM_SET(iflp, LP_TE_METRIC))
vty_out(vty, " metric %u%s",iflp->te_metric, VTY_NEWLINE);
- if (IS_PARAM_SET(iflp, LP_MAX_BW))
+ if (IS_PARAM_SET(iflp, LP_MAX_BW) && iflp->max_bw != iflp->default_bw)
vty_out(vty, " max-bw %g%s", iflp->max_bw, VTY_NEWLINE);
- if (IS_PARAM_SET(iflp, LP_MAX_RSV_BW))
+ if (IS_PARAM_SET(iflp, LP_MAX_RSV_BW) && iflp->max_rsv_bw != iflp->default_bw)
vty_out(vty, " max-rsv-bw %g%s", iflp->max_rsv_bw, VTY_NEWLINE);
if (IS_PARAM_SET(iflp, LP_UNRSV_BW))
{
for (i = 0; i < 8; i++)
- vty_out(vty, " unrsv-bw %d %g%s",
- i, iflp->unrsv_bw[i], VTY_NEWLINE);
+ if (iflp->unrsv_bw[i] != iflp->default_bw)
+ vty_out(vty, " unrsv-bw %d %g%s",
+ i, iflp->unrsv_bw[i], VTY_NEWLINE);
}
if (IS_PARAM_SET(iflp, LP_ADM_GRP))
- vty_out(vty, " admin-grp %u%s", iflp->admin_grp, VTY_NEWLINE);
+ vty_out(vty, " admin-grp 0x%x%s", iflp->admin_grp, VTY_NEWLINE);
if (IS_PARAM_SET(iflp, LP_DELAY))
{
vty_out(vty, " delay %u", iflp->av_delay);
@@ -2797,14 +2782,14 @@ link_params_config_write (struct vty *vty, struct interface *ifp)
static int
if_config_write (struct vty *vty)
{
+ struct vrf *vrf;
struct listnode *node;
struct interface *ifp;
- vrf_iter_t iter;
zebra_ptm_write (vty);
- for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
- for (ALL_LIST_ELEMENTS_RO (vrf_iter2iflist (iter), node, ifp))
+ RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
+ for (ALL_LIST_ELEMENTS_RO (vrf->iflist, node, ifp))
{
struct zebra_if *if_data;
struct listnode *addrnode;
@@ -2813,7 +2798,7 @@ if_config_write (struct vty *vty)
struct vrf *vrf;
if_data = ifp->info;
- vrf = vrf_lookup(ifp->vrf_id);
+ vrf = vrf_lookup_by_id (ifp->vrf_id);
if (ifp->vrf_id == VRF_DEFAULT)
vty_out (vty, "interface %s%s", ifp->name, VTY_NEWLINE);
@@ -2881,23 +2866,6 @@ if_config_write (struct vty *vty)
return 0;
}
-static int
-vrf_config_write (struct vty *vty)
-{
- struct listnode *node;
- struct zebra_vrf *zvrf;
-
- for (ALL_LIST_ELEMENTS_RO (zvrf_list, node, zvrf))
- {
- if (strcmp(zvrf->name, VRF_DEFAULT_NAME))
- {
- vty_out (vty, "vrf %s%s", zvrf->name, VTY_NEWLINE);
- vty_out (vty, "!%s", VTY_NEWLINE);
- }
- }
- return 0;
-}
-
/* Allocate and initialize interface vector. */
void
zebra_if_init (void)
@@ -2909,7 +2877,6 @@ zebra_if_init (void)
/* Install configuration write function. */
install_node (&interface_node, if_config_write);
install_node (&link_params_node, NULL);
- install_node (&vrf_node, vrf_config_write);
if_cmd_init ();
install_element (VIEW_NODE, &show_interface_cmd);
@@ -2942,6 +2909,7 @@ zebra_if_init (void)
install_element(LINK_PARAMS_NODE, &link_params_enable_cmd);
install_element(LINK_PARAMS_NODE, &no_link_params_enable_cmd);
install_element(LINK_PARAMS_NODE, &link_params_metric_cmd);
+ install_element(LINK_PARAMS_NODE, &no_link_params_metric_cmd);
install_element(LINK_PARAMS_NODE, &link_params_maxbw_cmd);
install_element(LINK_PARAMS_NODE, &link_params_max_rsv_bw_cmd);
install_element(LINK_PARAMS_NODE, &link_params_unrsv_bw_cmd);
@@ -2962,6 +2930,4 @@ zebra_if_init (void)
install_element(LINK_PARAMS_NODE, &link_params_use_bw_cmd);
install_element(LINK_PARAMS_NODE, &no_link_params_use_bw_cmd);
install_element(LINK_PARAMS_NODE, &exit_link_params_cmd);
-
- vrf_cmd_init();
}