From 58ac32e2d598b5dc45fa05b7a8a85b107571d697 Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Tue, 1 Nov 2016 18:57:53 -0200 Subject: zebra/lib: plug several memleaks Signed-off-by: Renato Westphal --- zebra/interface.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'zebra/interface.c') diff --git a/zebra/interface.c b/zebra/interface.c index b87f61f920..422368852d 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; -- cgit v1.2.3 From f30c50b99223be343b7fe1ae9e374602ec0d93d5 Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Fri, 28 Oct 2016 22:32:07 -0200 Subject: zebra/lib: move some code around * move netlink code from zebra_nc.c to kernel_netlink.c; * move vrf CLI commands from if.c/interface.c to vrf.c/zebra_vrf.c; * move declaration of the 'ns' structure to a header file. Signed-off-by: Renato Westphal --- lib/if.c | 54 -------------------------------------------------- lib/ns.c | 16 --------------- lib/ns.h | 16 +++++++++++++++ lib/vrf.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ zebra/interface.c | 49 --------------------------------------------- zebra/kernel_netlink.c | 15 ++++++++++---- zebra/zebra_ns.c | 10 ---------- zebra/zebra_vrf.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 131 insertions(+), 133 deletions(-) (limited to 'zebra/interface.c') diff --git a/lib/if.c b/lib/if.c index 6ae8500291..70304e584c 100644 --- a/lib/if.c +++ b/lib/if.c @@ -840,60 +840,6 @@ ALIAS (no_interface, "Interface's name\n" VRF_CMD_HELP_STR) -DEFUN (vrf, - vrf_cmd, - "vrf NAME", - "Select a VRF to configure\n" - "VRF's name\n") -{ - struct vrf *vrfp; - size_t sl; - - if ((sl = strlen(argv[0])) > VRF_NAMSIZ) - { - vty_out (vty, "%% VRF name %s is invalid: length exceeds " - "%d characters%s", - argv[0], VRF_NAMSIZ, VTY_NEWLINE); - return CMD_WARNING; - } - - vrfp = vrf_get (VRF_UNKNOWN, argv[0]); - - VTY_PUSH_CONTEXT_COMPAT (VRF_NODE, vrfp); - - return CMD_SUCCESS; -} - -DEFUN_NOSH (no_vrf, - no_vrf_cmd, - "no vrf NAME", - NO_STR - "Delete a pseudo VRF's configuration\n" - "VRF's name\n") -{ - struct vrf *vrfp; - - vrfp = vrf_list_lookup_by_name (argv[0]); - - if (vrfp == NULL) - { - vty_out (vty, "%% VRF %s does not exist%s", argv[0], VTY_NEWLINE); - return CMD_WARNING; - } - - if (CHECK_FLAG (vrfp->status, VRF_ACTIVE)) - { - vty_out (vty, "%% Only inactive VRFs can be deleted%s", - VTY_NEWLINE); - return CMD_WARNING; - } - - vrf_delete(vrfp); - - return CMD_SUCCESS; -} - - /* For debug purpose. */ DEFUN (show_address, show_address_cmd, diff --git a/lib/ns.c b/lib/ns.c index 07e6ec5b9a..904fc6999c 100644 --- a/lib/ns.c +++ b/lib/ns.c @@ -91,22 +91,6 @@ static int have_netns(void) #endif } -struct ns -{ - /* Identifier, same as the vector index */ - ns_id_t ns_id; - /* Name */ - char *name; - /* File descriptor */ - int fd; - - /* Master list of interfaces belonging to this NS */ - struct list *iflist; - - /* User data */ - void *info; -}; - /* Holding NS hooks */ struct ns_master { diff --git a/lib/ns.h b/lib/ns.h index c96f1b2743..74616cd62f 100644 --- a/lib/ns.h +++ b/lib/ns.h @@ -33,6 +33,22 @@ typedef u_int16_t ns_id_t; /* Default netns directory (Linux) */ #define NS_RUN_DIR "/var/run/netns" +struct ns +{ + /* Identifier, same as the vector index */ + ns_id_t ns_id; + /* Name */ + char *name; + /* File descriptor */ + int fd; + + /* Master list of interfaces belonging to this NS */ + struct list *iflist; + + /* User data */ + void *info; +}; + /* * NS hooks */ diff --git a/lib/vrf.c b/lib/vrf.c index 63adea4aec..d87e38ebe8 100644 --- a/lib/vrf.c +++ b/lib/vrf.c @@ -740,6 +740,60 @@ vrf_socket (int domain, int type, int protocol, vrf_id_t vrf_id) return ret; } +/* vrf CLI commands */ +DEFUN (vrf, + vrf_cmd, + "vrf NAME", + "Select a VRF to configure\n" + "VRF's name\n") +{ + struct vrf *vrfp; + size_t sl; + + if ((sl = strlen(argv[0])) > VRF_NAMSIZ) + { + vty_out (vty, "%% VRF name %s is invalid: length exceeds " + "%d characters%s", + argv[0], VRF_NAMSIZ, VTY_NEWLINE); + return CMD_WARNING; + } + + vrfp = vrf_get (VRF_UNKNOWN, argv[0]); + + VTY_PUSH_CONTEXT_COMPAT (VRF_NODE, vrfp); + + return CMD_SUCCESS; +} + +DEFUN_NOSH (no_vrf, + no_vrf_cmd, + "no vrf NAME", + NO_STR + "Delete a pseudo VRF's configuration\n" + "VRF's name\n") +{ + struct vrf *vrfp; + + vrfp = vrf_list_lookup_by_name (argv[0]); + + if (vrfp == NULL) + { + vty_out (vty, "%% VRF %s does not exist%s", argv[0], VTY_NEWLINE); + return CMD_WARNING; + } + + if (CHECK_FLAG (vrfp->status, VRF_ACTIVE)) + { + vty_out (vty, "%% Only inactive VRFs can be deleted%s", + VTY_NEWLINE); + return CMD_WARNING; + } + + vrf_delete(vrfp); + + return CMD_SUCCESS; +} + /* * Debug CLI for vrf's */ diff --git a/zebra/interface.c b/zebra/interface.c index 422368852d..dd1f8a146b 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -1289,33 +1289,6 @@ struct cmd_node interface_node = 1 }; -/* 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; -} - -struct cmd_node vrf_node = -{ - VRF_NODE, - "%s(config-vrf)# ", - 1 -}; - /* Show all interfaces to vty. */ DEFUN (show_interface, show_interface_cmd, "show interface", @@ -2929,23 +2902,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) @@ -2957,7 +2913,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); install_element (VIEW_NODE, &show_interface_cmd); install_element (VIEW_NODE, &show_interface_vrf_cmd); @@ -3020,8 +2975,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); - - install_element (CONFIG_NODE, &zebra_vrf_cmd); - install_element (CONFIG_NODE, &no_vrf_cmd); - install_default (VRF_NODE); } diff --git a/zebra/kernel_netlink.c b/zebra/kernel_netlink.c index 378327ab46..9f9a62f384 100644 --- a/zebra/kernel_netlink.c +++ b/zebra/kernel_netlink.c @@ -716,11 +716,18 @@ kernel_init (struct zebra_ns *zns) { unsigned long groups; - groups = RTMGRP_LINK | RTMGRP_IPV4_ROUTE | RTMGRP_IPV4_IFADDR; -#ifdef HAVE_IPV6 - groups |= RTMGRP_IPV6_ROUTE | RTMGRP_IPV6_IFADDR; -#endif /* HAVE_IPV6 */ + /* Initialize netlink sockets */ + groups = RTMGRP_LINK | RTMGRP_IPV4_ROUTE | RTMGRP_IPV4_IFADDR | + RTMGRP_IPV6_ROUTE | RTMGRP_IPV6_IFADDR; + + snprintf (zns->netlink.name, sizeof (zns->netlink.name), + "netlink-listen (NS %u)", zns->ns_id); + zns->netlink.sock = -1; netlink_socket (&zns->netlink, groups, zns->ns_id); + + snprintf (zns->netlink_cmd.name, sizeof (zns->netlink_cmd.name), + "netlink-cmd (NS %u)", zns->ns_id); + zns->netlink_cmd.sock = -1; netlink_socket (&zns->netlink_cmd, 0, zns->ns_id); /* Register kernel socket. */ diff --git a/zebra/zebra_ns.c b/zebra/zebra_ns.c index 4499901021..642d2700a4 100644 --- a/zebra/zebra_ns.c +++ b/zebra/zebra_ns.c @@ -50,16 +50,6 @@ zebra_ns_enable (ns_id_t ns_id, void **info) rtadv_init (zns); #endif -#ifdef HAVE_NETLINK - /* Initialize netlink sockets */ - snprintf (zns->netlink.name, sizeof (zns->netlink.name), - "netlink-listen (NS %u)", ns_id); - zns->netlink.sock = -1; - - snprintf (zns->netlink_cmd.name, sizeof (zns->netlink_cmd.name), - "netlink-cmd (NS %u)", ns_id); - zns->netlink_cmd.sock = -1; -#endif zns->if_table = route_table_init (); kernel_init (zns); interface_list (zns); diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c index ab825281e4..a4e5eabbc8 100644 --- a/zebra/zebra_vrf.c +++ b/zebra/zebra_vrf.c @@ -23,6 +23,7 @@ #include "log.h" #include "linklist.h" +#include "command.h" #include "memory.h" #include "zebra/debug.h" @@ -427,6 +428,50 @@ zebra_vrf_other_route_table (afi_t afi, u_int32_t table_id, vrf_id_t vrf_id) return zvrf->table[afi][SAFI_UNICAST]; } +/* 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; +} + +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; +} + +struct cmd_node vrf_node = +{ + VRF_NODE, + "%s(config-vrf)# ", + 1 +}; + /* Zebra VRF initialization. */ void zebra_vrf_init (void) @@ -439,4 +484,9 @@ zebra_vrf_init (void) zvrf_list = list_new (); vrf_init (); + + install_node (&vrf_node, vrf_config_write); + install_default (VRF_NODE); + install_element (CONFIG_NODE, &zebra_vrf_cmd); + install_element (CONFIG_NODE, &no_vrf_cmd); } -- cgit v1.2.3 From 1a1a70655c869a1b66e363894e5aba19f4aa08f3 Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Sat, 29 Oct 2016 14:37:11 -0200 Subject: lib: convert vrf code to use red-black trees as well Signed-off-by: Renato Westphal --- lib/if.c | 35 ++++----- lib/vrf.c | 199 ++++++++----------------------------------------- lib/vrf.h | 45 ++--------- zebra/interface.c | 31 ++++---- zebra/irdp_main.c | 7 +- zebra/router-id.c | 6 +- zebra/rt_netlink.c | 6 +- zebra/rtadv.c | 6 +- zebra/zebra_ptm.c | 12 +-- zebra/zebra_rib.c | 65 ++++++++-------- zebra/zebra_routemap.c | 8 +- zebra/zebra_vrf.c | 5 +- zebra/zebra_vty.c | 120 ++++++++++++++--------------- zebra/zserv.c | 14 ++-- 14 files changed, 188 insertions(+), 371 deletions(-) (limited to 'zebra/interface.c') diff --git a/lib/if.c b/lib/if.c index 70304e584c..6df4942296 100644 --- a/lib/if.c +++ b/lib/if.c @@ -308,13 +308,11 @@ if_lookup_by_name_vrf (const char *name, vrf_id_t vrf_id) struct interface * if_lookup_by_name_all_vrf (const char *name) { + struct vrf *vrf; struct interface *ifp; - struct vrf *vrf = NULL; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - vrf = vrf_iter2vrf (iter); ifp = if_lookup_by_name_vrf (name, vrf->vrf_id); if (ifp) return ifp; @@ -490,18 +488,16 @@ struct interface * if_get_by_name_len_vrf (const char *name, size_t namelen, vrf_id_t vrf_id, int vty) { struct interface *ifp; + struct vrf *vrf; struct listnode *node; - struct vrf *vrf = NULL; - vrf_iter_t iter; ifp = if_lookup_by_name_len_vrf (name, namelen, vrf_id); if (ifp) return ifp; /* Didn't find the interface on that vrf. Defined on a different one? */ - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - vrf = vrf_iter2vrf(iter); for (ALL_LIST_ELEMENTS_RO (vrf_iflist (vrf->vrf_id), node, ifp)) { if (!memcmp(name, ifp->name, namelen) && (ifp->name[namelen] == '\0')) @@ -666,14 +662,13 @@ if_dump (const struct interface *ifp) void if_dump_all (void) { - struct list *intf_list; + struct vrf *vrf; struct listnode *node; void *p; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - if ((intf_list = vrf_iter2iflist (iter)) != NULL) - for (ALL_LIST_ELEMENTS_RO (intf_list, node, p)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if (vrf->iflist != NULL) + for (ALL_LIST_ELEMENTS_RO (vrf->iflist, node, p)) if_dump (p); } @@ -885,24 +880,22 @@ DEFUN (show_address_vrf_all, "address\n" VRF_ALL_CMD_HELP_STR) { - struct list *intf_list; + struct vrf *vrf; struct listnode *node; struct listnode *node2; struct interface *ifp; struct connected *ifc; struct prefix *p; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - intf_list = vrf_iter2iflist (iter); - if (!intf_list || !listcount (intf_list)) + if (!vrf->iflist || !listcount (vrf->iflist)) continue; - vty_out (vty, "%sVRF %u%s%s", VTY_NEWLINE, vrf_iter2id (iter), - VTY_NEWLINE, VTY_NEWLINE); + vty_out (vty, "%sVRF %u%s%s", VTY_NEWLINE, vrf->vrf_id, VTY_NEWLINE, + VTY_NEWLINE); - for (ALL_LIST_ELEMENTS_RO (intf_list, node, ifp)) + for (ALL_LIST_ELEMENTS_RO (vrf->iflist, node, ifp)) { for (ALL_LIST_ELEMENTS_RO (ifp->connected, node2, ifc)) { diff --git a/lib/vrf.c b/lib/vrf.c index 13884aba62..79885ff3e3 100644 --- a/lib/vrf.c +++ b/lib/vrf.c @@ -35,6 +35,12 @@ DEFINE_MTYPE_STATIC(LIB, VRF_BITMAP, "VRF bit-map") DEFINE_QOBJ_TYPE(vrf) +static __inline int vrf_id_compare (struct vrf *, struct vrf *); + +RB_GENERATE (vrf_id_head, vrf, id_entry, vrf_id_compare) + +struct vrf_id_head vrfs_by_id = RB_INITIALIZER (&vrfs_by_id); + /* * Turn on/off debug code * for vrf. @@ -50,9 +56,6 @@ struct vrf_master int (*vrf_disable_hook) (vrf_id_t, const char *, void **); } vrf_master = {0,}; -/* VRF table */ -struct route_table *vrf_table = NULL; - /* VRF is part of a list too to store it before its actually active */ struct list *vrf_list; @@ -75,13 +78,10 @@ vrf_list_lookup_by_name (const char *name) return NULL; } -/* Build the table key */ -static void -vrf_build_key (vrf_id_t vrf_id, struct prefix *p) +static __inline int +vrf_id_compare (struct vrf *a, struct vrf *b) { - p->family = AF_INET; - p->prefixlen = IPV4_MAX_BITLEN; - p->u.prefix4.s_addr = vrf_id; + return (a->vrf_id - b->vrf_id); } /* Get a VRF. If not found, create one. @@ -94,9 +94,7 @@ vrf_build_key (vrf_id_t vrf_id, struct prefix *p) struct vrf * vrf_get (vrf_id_t vrf_id, const char *name) { - struct prefix p; - struct route_node *rn = NULL; - struct vrf *vrf = NULL; + struct vrf *vrf; if (debug_vrf) zlog_debug ("VRF_GET: %s(%d)", name, vrf_id); @@ -156,17 +154,8 @@ vrf_get (vrf_id_t vrf_id, const char *name) if (vrf->vrf_id == vrf_id) return vrf; - /* - * Now we have a situation where we've had a - * vrf created, but not yet created the vrf_id route - * node, let's do so and match the code up. - */ - vrf_build_key (vrf_id, &p); - rn = route_node_get (vrf_table, &p); - - rn->info = vrf; - vrf->node = rn; vrf->vrf_id = vrf_id; + RB_INSERT (vrf_id_head, &vrfs_by_id, vrf); if (vrf_master.vrf_new_hook) (*vrf_master.vrf_new_hook) (vrf_id, name, &vrf->info); @@ -182,12 +171,9 @@ vrf_get (vrf_id_t vrf_id, const char *name) * We've already been told about the vrf_id * or we haven't. */ - vrf_build_key (vrf_id, &p); - rn = route_node_get (vrf_table, &p); - if (rn->info) + vrf = vrf_lookup (vrf_id); + if (vrf) { - vrf = rn->info; - route_unlock_node (rn); /* * We know at this point that the vrf->name is not * right because we would have caught it above. @@ -209,12 +195,10 @@ vrf_get (vrf_id_t vrf_id, const char *name) else { vrf = XCALLOC (MTYPE_VRF, sizeof (struct vrf)); - - rn->info = vrf; - vrf->node = rn; vrf->vrf_id = vrf_id; strcpy (vrf->name, name); listnode_add_sort (vrf_list, vrf); + RB_INSERT (vrf_id_head, &vrfs_by_id, vrf); if_init (&vrf->iflist); QOBJ_REG (vrf, vrf); if (vrf_master.vrf_new_hook) @@ -237,23 +221,18 @@ vrf_get (vrf_id_t vrf_id, const char *name) */ else if (!name) { - vrf_build_key (vrf_id, &p); - rn = route_node_get (vrf_table, &p); + vrf = vrf_lookup (vrf_id); if (debug_vrf) - zlog_debug("Vrf found: %p", rn->info); + zlog_debug("Vrf found: %p", vrf); - if (rn->info) - { - route_unlock_node (rn); - return (rn->info); - } + if (vrf) + return vrf; else { vrf = XCALLOC (MTYPE_VRF, sizeof (struct vrf)); - rn->info = vrf; - vrf->node = rn; vrf->vrf_id = vrf_id; if_init (&vrf->iflist); + RB_INSERT (vrf_id_head, &vrfs_by_id, vrf); QOBJ_REG (vrf, vrf); if (debug_vrf) zlog_debug("Vrf Created: %p", vrf); @@ -284,12 +263,8 @@ vrf_delete (struct vrf *vrf) QOBJ_UNREG (vrf); if_terminate (&vrf->iflist); - if (vrf->node) - { - vrf->node->info = NULL; - route_unlock_node(vrf->node); - } - + if (vrf->vrf_id != VRF_UNKNOWN) + RB_REMOVE (vrf_id_head, &vrfs_by_id, vrf); listnode_delete (vrf_list, vrf); XFREE (MTYPE_VRF, vrf); @@ -299,18 +274,9 @@ vrf_delete (struct vrf *vrf) struct vrf * vrf_lookup (vrf_id_t vrf_id) { - struct prefix p; - struct route_node *rn; - struct vrf *vrf = NULL; - - vrf_build_key (vrf_id, &p); - rn = route_node_lookup (vrf_table, &p); - if (rn) - { - vrf = (struct vrf *)rn->info; - route_unlock_node (rn); /* lookup */ - } - return vrf; + struct vrf vrf; + vrf.vrf_id = vrf_id; + return (RB_FIND (vrf_id_head, &vrfs_by_id, &vrf)); } /* @@ -401,112 +367,15 @@ vrf_add_hook (int type, int (*func)(vrf_id_t, const char *, void **)) } } -/* Return the iterator of the first VRF. */ -vrf_iter_t -vrf_first (void) -{ - struct route_node *rn; - - for (rn = route_top (vrf_table); rn; rn = route_next (rn)) - if (rn->info) - { - route_unlock_node (rn); /* top/next */ - return (vrf_iter_t)rn; - } - return VRF_ITER_INVALID; -} - -/* Return the next VRF iterator to the given iterator. */ -vrf_iter_t -vrf_next (vrf_iter_t iter) -{ - struct route_node *rn = NULL; - - /* Lock it first because route_next() will unlock it. */ - if (iter != VRF_ITER_INVALID) - rn = route_next (route_lock_node ((struct route_node *)iter)); - - for (; rn; rn = route_next (rn)) - if (rn->info) - { - route_unlock_node (rn); /* next */ - return (vrf_iter_t)rn; - } - return VRF_ITER_INVALID; -} - -/* Return the VRF iterator of the given VRF ID. If it does not exist, - * the iterator of the next existing VRF is returned. */ -vrf_iter_t -vrf_iterator (vrf_id_t vrf_id) -{ - struct prefix p; - struct route_node *rn; - - vrf_build_key (vrf_id, &p); - rn = route_node_get (vrf_table, &p); - if (rn->info) - { - /* OK, the VRF exists. */ - route_unlock_node (rn); /* get */ - return (vrf_iter_t)rn; - } - - /* Find the next VRF. */ - for (rn = route_next (rn); rn; rn = route_next (rn)) - if (rn->info) - { - route_unlock_node (rn); /* next */ - return (vrf_iter_t)rn; - } - - return VRF_ITER_INVALID; -} - -/* Obtain the VRF ID from the given VRF iterator. */ -vrf_id_t -vrf_iter2id (vrf_iter_t iter) -{ - struct route_node *rn = (struct route_node *) iter; - return (rn && rn->info) ? ((struct vrf *)rn->info)->vrf_id : VRF_DEFAULT; -} - -struct vrf * -vrf_iter2vrf (vrf_iter_t iter) -{ - struct route_node *rn = (struct route_node *) iter; - return (rn && rn->info) ? (struct vrf *)rn->info : NULL; -} - -/* Obtain the data pointer from the given VRF iterator. */ -void * -vrf_iter2info (vrf_iter_t iter) -{ - struct route_node *rn = (struct route_node *) iter; - return (rn && rn->info) ? ((struct vrf *)rn->info)->info : NULL; -} - -/* Obtain the interface list from the given VRF iterator. */ -struct list * -vrf_iter2iflist (vrf_iter_t iter) -{ - struct route_node *rn = (struct route_node *) iter; - return (rn && rn->info) ? ((struct vrf *)rn->info)->iflist : NULL; -} - /* Look up a VRF by name. */ struct vrf * vrf_lookup_by_name (const char *name) { - struct vrf *vrf = NULL; - vrf_iter_t iter; + struct vrf *vrf; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - { - vrf = vrf_iter2vrf (iter); - if (vrf && !strcmp(vrf->name, name)) - return vrf; - } + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if (!strcmp(vrf->name, name)) + return vrf; return NULL; } @@ -693,9 +562,6 @@ vrf_init (void) vrf_list = list_new (); vrf_list->cmp = (int (*)(void *, void *))vrf_cmp_func; - /* Allocate VRF table. */ - vrf_table = route_table_init (); - /* The default VRF always exists. */ default_vrf = vrf_get (VRF_DEFAULT, VRF_DEFAULT_NAME); if (!default_vrf) @@ -716,18 +582,13 @@ vrf_init (void) void vrf_terminate (void) { - struct route_node *rn; struct vrf *vrf; if (debug_vrf) zlog_debug ("%s: Shutting down vrf subsystem", __PRETTY_FUNCTION__); - for (rn = route_top (vrf_table); rn; rn = route_next (rn)) - if ((vrf = rn->info) != NULL) - vrf_delete (vrf); - - route_table_finish (vrf_table); - vrf_table = NULL; + while ((vrf = RB_ROOT (&vrfs_by_id)) != NULL) + vrf_delete (vrf); } /* Create a socket for the VRF. */ diff --git a/lib/vrf.h b/lib/vrf.h index 127b7082e9..f093f4fbd8 100644 --- a/lib/vrf.h +++ b/lib/vrf.h @@ -23,6 +23,7 @@ #ifndef _ZEBRA_VRF_H #define _ZEBRA_VRF_H +#include "openbsd-tree.h" #include "linklist.h" #include "qobj.h" @@ -69,18 +70,18 @@ enum { struct vrf { + RB_ENTRY(vrf) id_entry; + /* Identifier, same as the vector index */ vrf_id_t vrf_id; - /* Name */ + /* Name */ char name[VRF_NAMSIZ + 1]; /* Zebra internal VRF status */ u_char status; #define VRF_ACTIVE (1 << 0) - struct route_node *node; - /* Master list of interfaces belonging to this VRF */ struct list *iflist; @@ -89,9 +90,12 @@ struct vrf QOBJ_FIELDS }; +RB_HEAD (vrf_id_head, vrf); +RB_PROTOTYPE (vrf_id_head, vrf, id_entry, vrf_id_compare) DECLARE_QOBJ_TYPE(vrf) +extern struct vrf_id_head vrfs_by_id; extern struct list *vrf_list; /* @@ -104,13 +108,6 @@ extern struct list *vrf_list; */ extern void vrf_add_hook (int, int (*)(vrf_id_t, const char *, void **)); -/* - * VRF iteration - */ - -typedef void * vrf_iter_t; -#define VRF_ITER_INVALID NULL /* invalid value of the iterator */ - extern struct vrf *vrf_lookup (vrf_id_t); extern struct vrf *vrf_lookup_by_name (const char *); extern struct vrf *vrf_list_lookup_by_name (const char *); @@ -135,34 +132,6 @@ extern vrf_id_t vrf_name_to_id (const char *); (V) = vrf->vrf_id; \ } while (0) -/* - * VRF iteration utilities. Example for the usage: - * - * vrf_iter_t iter = vrf_first(); - * for (; iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - * - * or - * - * vrf_iter_t iter = vrf_iterator (); - * for (; iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - */ - -/* Return the iterator of the first VRF. */ -extern vrf_iter_t vrf_first (void); -/* Return the next VRF iterator to the given iterator. */ -extern vrf_iter_t vrf_next (vrf_iter_t); -/* Return the VRF iterator of the given VRF ID. If it does not exist, - * the iterator of the next existing VRF is returned. */ -extern vrf_iter_t vrf_iterator (vrf_id_t); - -/* - * VRF iterator to properties - */ -extern vrf_id_t vrf_iter2id (vrf_iter_t); -extern struct vrf *vrf_iter2vrf (vrf_iter_t); -extern void *vrf_iter2info (vrf_iter_t); -extern struct list *vrf_iter2iflist (vrf_iter_t); - /* * Utilities to obtain the user data */ diff --git a/zebra/interface.c b/zebra/interface.c index dd1f8a146b..75040a87f0 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -1325,15 +1325,15 @@ DEFUN (show_interface_vrf_all, show_interface_vrf_all_cmd, "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_id_head, &vrfs_by_id) + for (ALL_LIST_ELEMENTS_RO (vrf->iflist, node, ifp)) if_dump_vty (vty, ifp); return CMD_SUCCESS; @@ -1378,17 +1378,17 @@ DEFUN (show_interface_name_vrf_all, show_interface_name_vrf_all_cmd, "Interface name\n" VRF_ALL_CMD_HELP_STR) { + 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_id_head, &vrfs_by_id) { /* Specified interface print. */ - ifp = if_lookup_by_name_vrf (argv[0], vrf_iter2id (iter)); + ifp = if_lookup_by_name_vrf (argv[0], vrf->vrf_id); if (ifp) { if_dump_vty (vty, ifp); @@ -1484,15 +1484,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_id_head, &vrfs_by_id) + 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; @@ -2818,14 +2817,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_id_head, &vrfs_by_id) + for (ALL_LIST_ELEMENTS_RO (vrf->iflist, node, ifp)) { struct zebra_if *if_data; struct listnode *addrnode; diff --git a/zebra/irdp_main.c b/zebra/irdp_main.c index cc3a4abaf3..7fa4ad4cbe 100644 --- a/zebra/irdp_main.c +++ b/zebra/irdp_main.c @@ -304,17 +304,16 @@ void process_solicit (struct interface *ifp) void irdp_finish() { - + struct vrf *vrf; struct listnode *node, *nnode; struct interface *ifp; struct zebra_if *zi; struct irdp_interface *irdp; - vrf_iter_t iter; zlog_info("IRDP: Received shutdown notification."); - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - for (ALL_LIST_ELEMENTS (vrf_iter2iflist (iter), node, nnode, ifp)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + for (ALL_LIST_ELEMENTS (vrf->iflist, node, nnode, ifp)) { zi = ifp->info; diff --git a/zebra/router-id.c b/zebra/router-id.c index d5d9652c59..155a8e3939 100644 --- a/zebra/router-id.c +++ b/zebra/router-id.c @@ -195,11 +195,11 @@ router_id_del_address (struct connected *ifc) void router_id_write (struct vty *vty) { + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - if ((zvrf = vrf_iter2info (iter)) != NULL) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if ((zvrf = vrf->info) != NULL) if (zvrf->rid_user_assigned.u.prefix4.s_addr) { if (zvrf->vrf_id == VRF_DEFAULT) diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index f16fd55c98..b18bf1ef7a 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -98,12 +98,12 @@ Pending: create an efficient table_id (in a tree/hash) based lookup) static vrf_id_t vrf_lookup_by_table (u_int32_t table_id) { + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (zvrf->table_id != table_id)) continue; diff --git a/zebra/rtadv.c b/zebra/rtadv.c index 3e0a198702..1ab7ac147c 100644 --- a/zebra/rtadv.c +++ b/zebra/rtadv.c @@ -373,7 +373,7 @@ static int rtadv_timer (struct thread *thread) { struct zebra_ns *zns = THREAD_ARG (thread); - vrf_iter_t iter; + struct vrf *vrf; struct listnode *node, *nnode; struct interface *ifp; struct zebra_if *zif; @@ -391,8 +391,8 @@ rtadv_timer (struct thread *thread) rtadv_event (zns, RTADV_TIMER_MSEC, 10 /* 10 ms */); } - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - for (ALL_LIST_ELEMENTS (vrf_iter2iflist (iter), node, nnode, ifp)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + for (ALL_LIST_ELEMENTS (vrf->iflist, node, nnode, ifp)) { if (if_is_loopback (ifp) || CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_VRF_LOOPBACK) || diff --git a/zebra/zebra_ptm.c b/zebra/zebra_ptm.c index 28e6c42ec6..4fc1173241 100644 --- a/zebra/zebra_ptm.c +++ b/zebra/zebra_ptm.c @@ -258,15 +258,15 @@ DEFUN (zebra_ptm_enable, "ptm-enable", "Enable neighbor check with specified topology\n") { + struct vrf *vrf; struct listnode *i; struct interface *ifp; struct zebra_if *if_data; - vrf_iter_t iter; ptm_cb.ptm_enable = ZEBRA_IF_PTM_ENABLE_ON; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - for (ALL_LIST_ELEMENTS_RO (vrf_iter2iflist (iter), i, ifp)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + for (ALL_LIST_ELEMENTS_RO (vrf->iflist, i, ifp)) if (!ifp->ptm_enable) { if_data = (struct zebra_if *)ifp->info; @@ -1112,13 +1112,13 @@ zebra_ptm_send_status_req(void) void zebra_ptm_reset_status(int ptm_disable) { + struct vrf *vrf; struct listnode *i; struct interface *ifp; int send_linkup; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - for (ALL_LIST_ELEMENTS_RO (vrf_iter2iflist (iter), i, ifp)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + for (ALL_LIST_ELEMENTS_RO (vrf->iflist, i, ifp)) { send_linkup = 0; if (ifp->ptm_enable) diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index 394469950d..ec7d1e7fde 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -2052,24 +2052,24 @@ process_subq (struct list * subq, u_char qindex) static void meta_queue_process_complete (struct work_queue *dummy) { - vrf_iter_t iter; + struct vrf *vrf; struct zebra_vrf *zvrf; /* Evaluate nexthops for those VRFs which underwent route processing. This * should limit the evaluation to the necessary VRFs in most common * situations. */ - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if (((zvrf = vrf_iter2info (iter)) != NULL) && - (zvrf->flags & ZEBRA_VRF_RIB_SCHEDULED)) - { - zvrf->flags &= ~ZEBRA_VRF_RIB_SCHEDULED; - zebra_evaluate_rnh(zvrf->vrf_id, AF_INET, 0, RNH_NEXTHOP_TYPE, NULL); - zebra_evaluate_rnh(zvrf->vrf_id, AF_INET, 0, RNH_IMPORT_CHECK_TYPE, NULL); - zebra_evaluate_rnh(zvrf->vrf_id, AF_INET6, 0, RNH_NEXTHOP_TYPE, NULL); - zebra_evaluate_rnh(zvrf->vrf_id, AF_INET6, 0, RNH_IMPORT_CHECK_TYPE, NULL); - } + zvrf = vrf->info; + if (zvrf == NULL || !(zvrf->flags & ZEBRA_VRF_RIB_SCHEDULED)) + continue; + + zvrf->flags &= ~ZEBRA_VRF_RIB_SCHEDULED; + zebra_evaluate_rnh(zvrf->vrf_id, AF_INET, 0, RNH_NEXTHOP_TYPE, NULL); + zebra_evaluate_rnh(zvrf->vrf_id, AF_INET, 0, RNH_IMPORT_CHECK_TYPE, NULL); + zebra_evaluate_rnh(zvrf->vrf_id, AF_INET6, 0, RNH_NEXTHOP_TYPE, NULL); + zebra_evaluate_rnh(zvrf->vrf_id, AF_INET6, 0, RNH_IMPORT_CHECK_TYPE, NULL); } /* Schedule LSPs for processing, if needed. */ @@ -3037,11 +3037,11 @@ rib_weed_table (struct route_table *table) void rib_weed_tables (void) { - vrf_iter_t iter; + struct vrf *vrf; struct zebra_vrf *zvrf; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - if ((zvrf = vrf_iter2info (iter)) != NULL) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if ((zvrf = vrf->info) != NULL) { rib_weed_table (zvrf->table[AFI_IP][SAFI_UNICAST]); rib_weed_table (zvrf->table[AFI_IP6][SAFI_UNICAST]); @@ -3078,11 +3078,11 @@ rib_sweep_table (struct route_table *table) void rib_sweep_route (void) { - vrf_iter_t iter; + struct vrf *vrf; struct zebra_vrf *zvrf; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - if ((zvrf = vrf_iter2info (iter)) != NULL) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if ((zvrf = vrf->info) != NULL) { rib_sweep_table (zvrf->table[AFI_IP][SAFI_UNICAST]); rib_sweep_table (zvrf->table[AFI_IP6][SAFI_UNICAST]); @@ -3118,12 +3118,12 @@ rib_score_proto_table (u_char proto, u_short instance, struct route_table *table unsigned long rib_score_proto (u_char proto, u_short instance) { - vrf_iter_t iter; + struct vrf *vrf; struct zebra_vrf *zvrf; unsigned long cnt = 0; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - if ((zvrf = vrf_iter2info (iter)) != NULL) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if ((zvrf = vrf->info) != NULL) cnt += rib_score_proto_table (proto, instance, zvrf->table[AFI_IP][SAFI_UNICAST]) +rib_score_proto_table (proto, instance, zvrf->table[AFI_IP6][SAFI_UNICAST]); @@ -3157,20 +3157,20 @@ rib_close_table (struct route_table *table) void rib_close (void) { - vrf_iter_t iter; + struct vrf *vrf; struct zebra_vrf *zvrf; struct listnode *node; struct interface *ifp; u_int32_t table_id; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) != NULL) + if ((zvrf = vrf->info) != NULL) { rib_close_table (zvrf->table[AFI_IP][SAFI_UNICAST]); rib_close_table (zvrf->table[AFI_IP6][SAFI_UNICAST]); } - for (ALL_LIST_ELEMENTS_RO (vrf_iter2iflist (iter), node, ifp)) + for (ALL_LIST_ELEMENTS_RO (vrf->iflist, node, ifp)) if_nbr_ipv6ll_to_ipv4ll_neigh_del_all(ifp); } @@ -3207,17 +3207,16 @@ rib_init (void) static inline int vrf_id_get_next (vrf_id_t vrf_id, vrf_id_t *next_id_p) { - vrf_iter_t iter = vrf_iterator (vrf_id); - struct zebra_vrf *zvrf = vrf_iter2info (iter); + struct vrf *vrf; - /* The same one ? Then find out the next. */ - if (zvrf && (zvrf->vrf_id == vrf_id)) - zvrf = vrf_iter2info (vrf_next (iter)); - - if (zvrf) + vrf = vrf_lookup (vrf_id); + if (vrf) { - *next_id_p = zvrf->vrf_id; - return 1; + vrf = RB_NEXT (vrf_id_head, &vrfs_by_id, vrf); + if (vrf) { + *next_id_p = vrf->vrf_id; + return 1; + } } return 0; diff --git a/zebra/zebra_routemap.c b/zebra/zebra_routemap.c index 25091a3eab..3075a61c4a 100644 --- a/zebra/zebra_routemap.c +++ b/zebra/zebra_routemap.c @@ -633,7 +633,7 @@ DEFUN (set_src, struct interface *pif = NULL; int family; struct prefix p; - vrf_iter_t iter; + struct vrf *vrf; if (inet_pton(AF_INET, argv[0], &src.ipv4) != 1) { @@ -660,14 +660,14 @@ DEFUN (set_src, return CMD_WARNING; } - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { if (family == AF_INET) pif = if_lookup_exact_address_vrf ((void *)&src.ipv4, AF_INET, - vrf_iter2id (iter)); + vrf->vrf_id); else if (family == AF_INET6) pif = if_lookup_exact_address_vrf ((void *)&src.ipv6, AF_INET6, - vrf_iter2id (iter)); + vrf->vrf_id); if (pif != NULL) break; diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c index 915849c057..4c1bbbb1a0 100644 --- a/zebra/zebra_vrf.c +++ b/zebra/zebra_vrf.c @@ -68,11 +68,10 @@ void zebra_vrf_update_all (struct zserv *client) { struct vrf *vrf; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((vrf = vrf_iter2vrf (iter)) && vrf->vrf_id) + if (vrf->vrf_id) zsend_vrf_add (client, vrf_info_lookup (vrf->vrf_id)); } } diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index 74f64dd057..444d251357 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -2569,11 +2569,11 @@ DEFUN (show_ip_nht_vrf_all, "IP nexthop tracking table\n" VRF_ALL_CMD_HELP_STR) { + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - if ((zvrf = vrf_iter2info (iter)) != NULL) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if ((zvrf = vrf->info) != NULL) { vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf->name, VTY_NEWLINE); zebra_print_rnh_table(zvrf->vrf_id, AF_INET, vty, RNH_NEXTHOP_TYPE); @@ -2614,11 +2614,11 @@ DEFUN (show_ipv6_nht_vrf_all, "IPv6 nexthop tracking table\n" VRF_ALL_CMD_HELP_STR) { + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - if ((zvrf = vrf_iter2info (iter)) != NULL) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if ((zvrf = vrf->info) != NULL) { vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf->name, VTY_NEWLINE); zebra_print_rnh_table(zvrf->vrf_id, AF_INET6, vty, RNH_NEXTHOP_TYPE); @@ -3287,14 +3287,14 @@ DEFUN (show_ip_route_vrf_all, struct route_table *table; struct route_node *rn; struct rib *rib; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; int first = 1; int vrf_header = 1; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) continue; @@ -3334,8 +3334,8 @@ DEFUN (show_ip_route_vrf_all_tag, struct route_table *table; struct route_node *rn; struct rib *rib; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; int first = 1; int vrf_header = 1; route_tag_t tag = 0; @@ -3343,9 +3343,9 @@ DEFUN (show_ip_route_vrf_all_tag, if (argv[0]) tag = atol(argv[0]); - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) continue; @@ -3388,8 +3388,8 @@ DEFUN (show_ip_route_vrf_all_prefix_longer, struct route_node *rn; struct rib *rib; struct prefix p; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; int ret; int first = 1; int vrf_header = 1; @@ -3401,9 +3401,9 @@ DEFUN (show_ip_route_vrf_all_prefix_longer, return CMD_WARNING; } - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) continue; @@ -3443,15 +3443,15 @@ DEFUN (show_ip_route_vrf_all_supernets, struct route_table *table; struct route_node *rn; struct rib *rib; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; u_int32_t addr; int first = 1; int vrf_header = 1; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) continue; @@ -3498,8 +3498,8 @@ DEFUN (show_ip_route_vrf_all_protocol, struct route_table *table; struct route_node *rn; struct rib *rib; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; int first = 1; int vrf_header = 1; @@ -3510,9 +3510,9 @@ DEFUN (show_ip_route_vrf_all_protocol, return CMD_WARNING; } - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) continue; @@ -3553,8 +3553,8 @@ DEFUN (show_ip_route_vrf_all_addr, struct prefix_ipv4 p; struct route_table *table; struct route_node *rn; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; ret = str2prefix_ipv4 (argv[0], &p); if (ret <= 0) @@ -3563,9 +3563,9 @@ DEFUN (show_ip_route_vrf_all_addr, return CMD_WARNING; } - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) continue; @@ -3594,8 +3594,8 @@ DEFUN (show_ip_route_vrf_all_prefix, struct prefix_ipv4 p; struct route_table *table; struct route_node *rn; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; ret = str2prefix_ipv4 (argv[0], &p); if (ret <= 0) @@ -3604,9 +3604,9 @@ DEFUN (show_ip_route_vrf_all_prefix, return CMD_WARNING; } - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) continue; @@ -3636,11 +3636,11 @@ DEFUN (show_ip_route_vrf_all_summary, VRF_ALL_CMD_HELP_STR "Summary of all routes\n") { + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - if ((zvrf = vrf_iter2info (iter)) != NULL) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if ((zvrf = vrf->info) != NULL) vty_show_ip_route_summary (vty, zvrf->table[AFI_IP][SAFI_UNICAST]); return CMD_SUCCESS; @@ -3656,11 +3656,11 @@ DEFUN (show_ip_route_vrf_all_summary_prefix, "Summary of all routes\n" "Prefix routes\n") { + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - if ((zvrf = vrf_iter2info (iter)) != NULL) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if ((zvrf = vrf->info) != NULL) vty_show_ip_route_summary_prefix (vty, zvrf->table[AFI_IP][SAFI_UNICAST]); return CMD_SUCCESS; @@ -5416,14 +5416,14 @@ DEFUN (show_ipv6_route_vrf_all, struct route_table *table; struct route_node *rn; struct rib *rib; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; int first = 1; int vrf_header = 1; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) continue; @@ -5463,8 +5463,8 @@ DEFUN (show_ipv6_route_vrf_all_tag, struct route_table *table; struct route_node *rn; struct rib *rib; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; int first = 1; int vrf_header = 1; route_tag_t tag = 0; @@ -5472,9 +5472,9 @@ DEFUN (show_ipv6_route_vrf_all_tag, if (argv[0]) tag = atol(argv[0]); - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) continue; @@ -5518,8 +5518,8 @@ DEFUN (show_ipv6_route_vrf_all_prefix_longer, struct route_node *rn; struct rib *rib; struct prefix p; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; int ret; int first = 1; int vrf_header = 1; @@ -5531,9 +5531,9 @@ DEFUN (show_ipv6_route_vrf_all_prefix_longer, return CMD_WARNING; } - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) continue; @@ -5574,8 +5574,8 @@ DEFUN (show_ipv6_route_vrf_all_protocol, struct route_table *table; struct route_node *rn; struct rib *rib; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; int first = 1; int vrf_header = 1; @@ -5586,9 +5586,9 @@ DEFUN (show_ipv6_route_vrf_all_protocol, return CMD_WARNING; } - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) continue; @@ -5629,8 +5629,8 @@ DEFUN (show_ipv6_route_vrf_all_addr, struct prefix_ipv6 p; struct route_table *table; struct route_node *rn; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; ret = str2prefix_ipv6 (argv[0], &p); if (ret <= 0) @@ -5639,9 +5639,9 @@ DEFUN (show_ipv6_route_vrf_all_addr, return CMD_WARNING; } - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) continue; @@ -5670,8 +5670,8 @@ DEFUN (show_ipv6_route_vrf_all_prefix, struct prefix_ipv6 p; struct route_table *table; struct route_node *rn; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; ret = str2prefix_ipv6 (argv[0], &p); if (ret <= 0) @@ -5680,9 +5680,9 @@ DEFUN (show_ipv6_route_vrf_all_prefix, return CMD_WARNING; } - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) continue; @@ -5712,11 +5712,11 @@ DEFUN (show_ipv6_route_vrf_all_summary, VRF_ALL_CMD_HELP_STR "Summary of all IPv6 routes\n") { + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - if ((zvrf = vrf_iter2info (iter)) != NULL) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if ((zvrf = vrf->info) != NULL) vty_show_ip_route_summary (vty, zvrf->table[AFI_IP6][SAFI_UNICAST]); return CMD_SUCCESS; @@ -5733,13 +5733,13 @@ DEFUN (show_ipv6_mroute_vrf_all, struct route_table *table; struct route_node *rn; struct rib *rib; + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; int first = 1; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) == NULL || + if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) continue; @@ -5768,11 +5768,11 @@ DEFUN (show_ipv6_route_vrf_all_summary_prefix, "Summary of all IPv6 routes\n" "Prefix routes\n") { + struct vrf *vrf; struct zebra_vrf *zvrf; - vrf_iter_t iter; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) - if ((zvrf = vrf_iter2info (iter)) != NULL) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + if ((zvrf = vrf->info) != NULL) vty_show_ip_route_summary_prefix (vty, zvrf->table[AFI_IP6][SAFI_UNICAST]); return CMD_SUCCESS; diff --git a/zebra/zserv.c b/zebra/zserv.c index 0b69af5124..76fdebb3a5 100644 --- a/zebra/zserv.c +++ b/zebra/zserv.c @@ -1005,18 +1005,16 @@ zsend_router_id_update (struct zserv *client, struct prefix *p, static int zread_interface_add (struct zserv *client, u_short length, struct zebra_vrf *zvrf) { + struct vrf *vrf; struct listnode *ifnode, *ifnnode; - vrf_iter_t iter; struct interface *ifp; - struct zebra_vrf *zvrf_iter; /* Interface information is needed. */ vrf_bitmap_set (client->ifinfo, zvrf->vrf_id); - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - zvrf_iter = vrf_iter2info (iter); - for (ALL_LIST_ELEMENTS (vrf_iflist (zvrf_iter->vrf_id), ifnode, ifnnode, ifp)) + for (ALL_LIST_ELEMENTS (vrf->iflist, ifnode, ifnnode, ifp)) { /* Skip pseudo interface. */ if (! CHECK_FLAG (ifp->status, ZEBRA_INTERFACE_ACTIVE)) @@ -1724,12 +1722,12 @@ zread_mpls_labels (int command, struct zserv *client, u_short length, static void zebra_client_close_cleanup_rnh (struct zserv *client) { - vrf_iter_t iter; + struct vrf *vrf; struct zebra_vrf *zvrf; - for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter)) + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - if ((zvrf = vrf_iter2info (iter)) != NULL) + if ((zvrf = vrf->info) != NULL) { zebra_cleanup_rnh_client(zvrf->vrf_id, AF_INET, client, RNH_NEXTHOP_TYPE); zebra_cleanup_rnh_client(zvrf->vrf_id, AF_INET6, client, RNH_NEXTHOP_TYPE); -- cgit v1.2.3 From 5f3d1bdf3ce8ac030831ee8c4dd6655ce5172431 Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Wed, 2 Nov 2016 12:16:58 -0200 Subject: *: rename two vrf functions Since VRFs can be searched by vrf_id or name, make this explicit in the helper functions. s/vrf_lookup/vrf_lookup_by_id/ s/zebra_vrf_lookup/zebra_vrf_lookup_by_id/ Signed-off-by: Renato Westphal --- bgpd/bgp_main.c | 4 ++-- bgpd/bgpd.c | 2 +- bgpd/bgpd.h | 2 +- lib/vrf.c | 14 +++++++------- lib/vrf.h | 2 +- lib/zclient.c | 2 +- zebra/if_netlink.c | 4 ++-- zebra/interface.c | 4 ++-- zebra/zebra_rib.c | 4 ++-- zebra/zebra_rnh.c | 4 ++-- zebra/zebra_static.c | 2 +- zebra/zebra_vrf.c | 4 ++-- zebra/zebra_vrf.h | 2 +- zebra/zserv.c | 2 +- 14 files changed, 26 insertions(+), 26 deletions(-) (limited to 'zebra/interface.c') diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c index 50ca7eda4c..4e31eb344c 100644 --- a/bgpd/bgp_main.c +++ b/bgpd/bgp_main.c @@ -332,7 +332,7 @@ bgp_vrf_enable (vrf_id_t vrf_id, const char *name, void **info) struct bgp *bgp; vrf_id_t old_vrf_id; - vrf = vrf_lookup (vrf_id); + vrf = vrf_lookup_by_id (vrf_id); if (!vrf) // unexpected return -1; @@ -365,7 +365,7 @@ bgp_vrf_disable (vrf_id_t vrf_id, const char *name, void **info) if (vrf_id == VRF_DEFAULT) return 0; - vrf = vrf_lookup (vrf_id); + vrf = vrf_lookup_by_id (vrf_id); if (!vrf) // unexpected return -1; diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 53258880ab..22d4dd8917 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -2971,7 +2971,7 @@ bgp_lookup_by_vrf_id (vrf_id_t vrf_id) struct vrf *vrf; /* Lookup VRF (in tree) and follow link. */ - vrf = vrf_lookup (vrf_id); + vrf = vrf_lookup_by_id (vrf_id); if (!vrf) return NULL; return (vrf->info) ? (struct bgp *)vrf->info : NULL; diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h index dd6a0fdccf..510082fdc2 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h @@ -1490,7 +1490,7 @@ bgp_vrf_lookup_by_instance_type (struct bgp *bgp) struct vrf *vrf; if (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT) - vrf = vrf_lookup (VRF_DEFAULT); + vrf = vrf_lookup_by_id (VRF_DEFAULT); else if (bgp->inst_type == BGP_INSTANCE_TYPE_VRF) vrf = vrf_lookup_by_name (bgp->name); else diff --git a/lib/vrf.c b/lib/vrf.c index 79885ff3e3..2d2c55f7a6 100644 --- a/lib/vrf.c +++ b/lib/vrf.c @@ -171,7 +171,7 @@ vrf_get (vrf_id_t vrf_id, const char *name) * We've already been told about the vrf_id * or we haven't. */ - vrf = vrf_lookup (vrf_id); + vrf = vrf_lookup_by_id (vrf_id); if (vrf) { /* @@ -221,7 +221,7 @@ vrf_get (vrf_id_t vrf_id, const char *name) */ else if (!name) { - vrf = vrf_lookup (vrf_id); + vrf = vrf_lookup_by_id (vrf_id); if (debug_vrf) zlog_debug("Vrf found: %p", vrf); @@ -272,7 +272,7 @@ vrf_delete (struct vrf *vrf) /* Look up a VRF by identifier. */ struct vrf * -vrf_lookup (vrf_id_t vrf_id) +vrf_lookup_by_id (vrf_id_t vrf_id) { struct vrf vrf; vrf.vrf_id = vrf_id; @@ -405,7 +405,7 @@ vrf_info_get (vrf_id_t vrf_id) void * vrf_info_lookup (vrf_id_t vrf_id) { - struct vrf *vrf = vrf_lookup (vrf_id); + struct vrf *vrf = vrf_lookup_by_id (vrf_id); return vrf ? vrf->info : NULL; } @@ -413,7 +413,7 @@ vrf_info_lookup (vrf_id_t vrf_id) struct list * vrf_iflist (vrf_id_t vrf_id) { - struct vrf * vrf = vrf_lookup (vrf_id); + struct vrf * vrf = vrf_lookup_by_id (vrf_id); return vrf ? vrf->iflist : NULL; } @@ -429,7 +429,7 @@ vrf_iflist_get (vrf_id_t vrf_id) void vrf_iflist_create (vrf_id_t vrf_id) { - struct vrf * vrf = vrf_lookup (vrf_id); + struct vrf * vrf = vrf_lookup_by_id (vrf_id); if (vrf && !vrf->iflist) if_init (&vrf->iflist); } @@ -438,7 +438,7 @@ vrf_iflist_create (vrf_id_t vrf_id) void vrf_iflist_terminate (vrf_id_t vrf_id) { - struct vrf * vrf = vrf_lookup (vrf_id); + struct vrf * vrf = vrf_lookup_by_id (vrf_id); if (vrf && vrf->iflist) if_terminate (&vrf->iflist); } diff --git a/lib/vrf.h b/lib/vrf.h index f093f4fbd8..4ee871b332 100644 --- a/lib/vrf.h +++ b/lib/vrf.h @@ -108,7 +108,7 @@ extern struct list *vrf_list; */ extern void vrf_add_hook (int, int (*)(vrf_id_t, const char *, void **)); -extern struct vrf *vrf_lookup (vrf_id_t); +extern struct vrf *vrf_lookup_by_id (vrf_id_t); extern struct vrf *vrf_lookup_by_name (const char *); extern struct vrf *vrf_list_lookup_by_name (const char *); extern struct vrf *vrf_get (vrf_id_t, const char *); diff --git a/lib/zclient.c b/lib/zclient.c index 84f7314baa..894e0d19ef 100644 --- a/lib/zclient.c +++ b/lib/zclient.c @@ -1042,7 +1042,7 @@ zclient_vrf_delete (struct zclient *zclient, vrf_id_t vrf_id) struct vrf *vrf; /* Lookup vrf by vrf_id. */ - vrf = vrf_lookup (vrf_id); + vrf = vrf_lookup_by_id (vrf_id); /* * If a routing protocol doesn't know about a diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c index c44219a495..abf1c781a3 100644 --- a/zebra/if_netlink.c +++ b/zebra/if_netlink.c @@ -211,7 +211,7 @@ netlink_vrf_change (struct nlmsghdr *h, struct rtattr *tb, const char *name) /* If VRF already exists, we just return; status changes are handled * against the VRF "interface". */ - vrf = vrf_lookup ((vrf_id_t)ifi->ifi_index); + vrf = vrf_lookup_by_id ((vrf_id_t)ifi->ifi_index); if (vrf && vrf->info) return; @@ -250,7 +250,7 @@ netlink_vrf_change (struct nlmsghdr *h, struct rtattr *tb, const char *name) if (IS_ZEBRA_DEBUG_KERNEL) zlog_debug ("RTM_DELLINK for VRF %s(%u)", name, ifi->ifi_index); - vrf = vrf_lookup ((vrf_id_t)ifi->ifi_index); + vrf = vrf_lookup_by_id ((vrf_id_t)ifi->ifi_index); if (!vrf) { diff --git a/zebra/interface.c b/zebra/interface.c index 75040a87f0..d5d6ffd9f0 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -1038,7 +1038,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) @@ -2833,7 +2833,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); diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index ec7d1e7fde..9d9b10457d 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -2152,7 +2152,7 @@ rib_meta_queue_add (struct meta_queue *mq, struct route_node *rn) rnode_debug (rn, rib->vrf_id, "queued rn %p into sub-queue %u", (void *)rn, qindex); - zvrf = zebra_vrf_lookup (rib->vrf_id); + zvrf = zebra_vrf_lookup_by_id (rib->vrf_id); if (zvrf) zvrf->flags |= ZEBRA_VRF_RIB_SCHEDULED; } @@ -3209,7 +3209,7 @@ vrf_id_get_next (vrf_id_t vrf_id, vrf_id_t *next_id_p) { struct vrf *vrf; - vrf = vrf_lookup (vrf_id); + vrf = vrf_lookup_by_id (vrf_id); if (vrf) { vrf = RB_NEXT (vrf_id_head, &vrfs_by_id, vrf); diff --git a/zebra/zebra_rnh.c b/zebra/zebra_rnh.c index 8df9277cb3..7df759030d 100644 --- a/zebra/zebra_rnh.c +++ b/zebra/zebra_rnh.c @@ -57,7 +57,7 @@ static void copy_state(struct rnh *rnh, struct rib *rib, ({ \ struct zebra_vrf *zvrf; \ struct route_table *t = NULL; \ - zvrf = zebra_vrf_lookup(v); \ + zvrf = zebra_vrf_lookup_by_id(v); \ if (zvrf) \ t = zvrf->rnh_table[family2afi(f)]; \ t; \ @@ -77,7 +77,7 @@ static inline struct route_table *get_rnh_table(vrf_id_t vrfid, int family, struct zebra_vrf *zvrf; struct route_table *t = NULL; - zvrf = zebra_vrf_lookup(vrfid); + zvrf = zebra_vrf_lookup_by_id(vrfid); if (zvrf) switch (type) { diff --git a/zebra/zebra_static.c b/zebra/zebra_static.c index 298fc4e09d..32ba90ef9a 100644 --- a/zebra/zebra_static.c +++ b/zebra/zebra_static.c @@ -129,7 +129,7 @@ static_install_route (afi_t afi, safi_t safi, struct prefix *p, struct static_ro rib->metric = 0; rib->mtu = 0; rib->vrf_id = si->vrf_id; - rib->table = si->vrf_id ? (zebra_vrf_lookup(si->vrf_id))->table_id : zebrad.rtm_table_default; + rib->table = si->vrf_id ? (zebra_vrf_lookup_by_id(si->vrf_id))->table_id : zebrad.rtm_table_default; rib->nexthop_num = 0; rib->tag = si->tag; diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c index 4c1bbbb1a0..fbb41eb5a8 100644 --- a/zebra/zebra_vrf.c +++ b/zebra/zebra_vrf.c @@ -120,7 +120,7 @@ zebra_vrf_static_route_interface_fixup (struct interface *ifp) { afi_t afi; safi_t safi; - struct zebra_vrf *zvrf = zebra_vrf_lookup (ifp->vrf_id); + struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id (ifp->vrf_id); struct route_table *stable = NULL; struct route_node *rn = NULL; struct static_route *si = NULL; @@ -338,7 +338,7 @@ zebra_vrf_alloc (vrf_id_t vrf_id, const char *name) /* Lookup VRF by identifier. */ struct zebra_vrf * -zebra_vrf_lookup (vrf_id_t vrf_id) +zebra_vrf_lookup_by_id (vrf_id_t vrf_id) { return vrf_info_lookup (vrf_id); } diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h index 8dffe27dcf..c7814e6c99 100644 --- a/zebra/zebra_vrf.h +++ b/zebra/zebra_vrf.h @@ -92,7 +92,7 @@ zebra_vrf_table_with_table_id (afi_t afi, safi_t safi, extern void zebra_vrf_static_route_interface_fixup (struct interface *ifp); extern void zebra_vrf_update_all (struct zserv *client); -extern struct zebra_vrf *zebra_vrf_lookup (vrf_id_t vrf_id); +extern struct zebra_vrf *zebra_vrf_lookup_by_id (vrf_id_t vrf_id); extern struct zebra_vrf *zebra_vrf_list_lookup_by_name (const char *); extern struct zebra_vrf *zebra_vrf_alloc (vrf_id_t, const char *); extern struct route_table *zebra_vrf_table (afi_t, safi_t, vrf_id_t); diff --git a/zebra/zserv.c b/zebra/zserv.c index 76fdebb3a5..947e7324db 100644 --- a/zebra/zserv.c +++ b/zebra/zserv.c @@ -1935,7 +1935,7 @@ zebra_client_read (struct thread *thread) client->last_read_time = quagga_monotime(); client->last_read_cmd = command; - zvrf = zebra_vrf_lookup (vrf_id); + zvrf = zebra_vrf_lookup_by_id (vrf_id); if (!zvrf) { if (IS_ZEBRA_DEBUG_PACKET && IS_ZEBRA_DEBUG_RECV) -- cgit v1.2.3 From a62c490110765542690860776f44628657a86169 Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Sat, 29 Oct 2016 20:44:04 -0200 Subject: zebra: order VRFs by name on user output Signed-off-by: Renato Westphal --- lib/if.c | 2 +- zebra/interface.c | 8 ++++---- zebra/router-id.c | 2 +- zebra/zebra_ptm.c | 2 +- zebra/zebra_vty.c | 40 ++++++++++++++++++++-------------------- 5 files changed, 27 insertions(+), 27 deletions(-) (limited to 'zebra/interface.c') diff --git a/lib/if.c b/lib/if.c index 6df4942296..6f892e783e 100644 --- a/lib/if.c +++ b/lib/if.c @@ -887,7 +887,7 @@ DEFUN (show_address_vrf_all, struct connected *ifc; struct prefix *p; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if (!vrf->iflist || !listcount (vrf->iflist)) continue; diff --git a/zebra/interface.c b/zebra/interface.c index d5d6ffd9f0..7fd0259d2a 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -1332,7 +1332,7 @@ DEFUN (show_interface_vrf_all, show_interface_vrf_all_cmd, interface_update_stats (); /* All interface print. */ - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) for (ALL_LIST_ELEMENTS_RO (vrf->iflist, node, ifp)) if_dump_vty (vty, ifp); @@ -1385,7 +1385,7 @@ DEFUN (show_interface_name_vrf_all, show_interface_name_vrf_all_cmd, interface_update_stats (); /* All interface print. */ - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { /* Specified interface print. */ ifp = if_lookup_by_name_vrf (argv[0], vrf->vrf_id); @@ -1486,7 +1486,7 @@ DEFUN (show_interface_desc_vrf_all, { struct vrf *vrf; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + 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->vrf_id, @@ -2823,7 +2823,7 @@ if_config_write (struct vty *vty) zebra_ptm_write (vty); - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) for (ALL_LIST_ELEMENTS_RO (vrf->iflist, node, ifp)) { struct zebra_if *if_data; diff --git a/zebra/router-id.c b/zebra/router-id.c index 155a8e3939..0799611399 100644 --- a/zebra/router-id.c +++ b/zebra/router-id.c @@ -198,7 +198,7 @@ router_id_write (struct vty *vty) struct vrf *vrf; struct zebra_vrf *zvrf; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) if ((zvrf = vrf->info) != NULL) if (zvrf->rid_user_assigned.u.prefix4.s_addr) { diff --git a/zebra/zebra_ptm.c b/zebra/zebra_ptm.c index 4fc1173241..fe1f6e0e6f 100644 --- a/zebra/zebra_ptm.c +++ b/zebra/zebra_ptm.c @@ -265,7 +265,7 @@ DEFUN (zebra_ptm_enable, ptm_cb.ptm_enable = ZEBRA_IF_PTM_ENABLE_ON; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) for (ALL_LIST_ELEMENTS_RO (vrf->iflist, i, ifp)) if (!ifp->ptm_enable) { diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index 3aa7ada917..d069c31893 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -2572,7 +2572,7 @@ DEFUN (show_ip_nht_vrf_all, struct vrf *vrf; struct zebra_vrf *zvrf; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) if ((zvrf = vrf->info) != NULL) { vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf->name, VTY_NEWLINE); @@ -2617,7 +2617,7 @@ DEFUN (show_ipv6_nht_vrf_all, struct vrf *vrf; struct zebra_vrf *zvrf; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) if ((zvrf = vrf->info) != NULL) { vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf->name, VTY_NEWLINE); @@ -3292,7 +3292,7 @@ DEFUN (show_ip_route_vrf_all, int first = 1; int vrf_header = 1; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) @@ -3343,7 +3343,7 @@ DEFUN (show_ip_route_vrf_all_tag, if (argv[0]) tag = atol(argv[0]); - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) @@ -3401,7 +3401,7 @@ DEFUN (show_ip_route_vrf_all_prefix_longer, return CMD_WARNING; } - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) @@ -3449,7 +3449,7 @@ DEFUN (show_ip_route_vrf_all_supernets, int first = 1; int vrf_header = 1; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) @@ -3510,7 +3510,7 @@ DEFUN (show_ip_route_vrf_all_protocol, return CMD_WARNING; } - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) @@ -3563,7 +3563,7 @@ DEFUN (show_ip_route_vrf_all_addr, return CMD_WARNING; } - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) @@ -3604,7 +3604,7 @@ DEFUN (show_ip_route_vrf_all_prefix, return CMD_WARNING; } - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) @@ -3639,7 +3639,7 @@ DEFUN (show_ip_route_vrf_all_summary, struct vrf *vrf; struct zebra_vrf *zvrf; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) if ((zvrf = vrf->info) != NULL) vty_show_ip_route_summary (vty, zvrf->table[AFI_IP][SAFI_UNICAST]); @@ -3659,7 +3659,7 @@ DEFUN (show_ip_route_vrf_all_summary_prefix, struct vrf *vrf; struct zebra_vrf *zvrf; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) if ((zvrf = vrf->info) != NULL) vty_show_ip_route_summary_prefix (vty, zvrf->table[AFI_IP][SAFI_UNICAST]); @@ -5420,7 +5420,7 @@ DEFUN (show_ipv6_route_vrf_all, int first = 1; int vrf_header = 1; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) @@ -5471,7 +5471,7 @@ DEFUN (show_ipv6_route_vrf_all_tag, if (argv[0]) tag = atol(argv[0]); - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL) @@ -5530,7 +5530,7 @@ DEFUN (show_ipv6_route_vrf_all_prefix_longer, return CMD_WARNING; } - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) @@ -5585,7 +5585,7 @@ DEFUN (show_ipv6_route_vrf_all_protocol, return CMD_WARNING; } - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) @@ -5638,7 +5638,7 @@ DEFUN (show_ipv6_route_vrf_all_addr, return CMD_WARNING; } - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) @@ -5679,7 +5679,7 @@ DEFUN (show_ipv6_route_vrf_all_prefix, return CMD_WARNING; } - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) @@ -5714,7 +5714,7 @@ DEFUN (show_ipv6_route_vrf_all_summary, struct vrf *vrf; struct zebra_vrf *zvrf; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) if ((zvrf = vrf->info) != NULL) vty_show_ip_route_summary (vty, zvrf->table[AFI_IP6][SAFI_UNICAST]); @@ -5736,7 +5736,7 @@ DEFUN (show_ipv6_mroute_vrf_all, struct zebra_vrf *zvrf; int first = 1; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { if ((zvrf = vrf->info) == NULL || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL) @@ -5770,7 +5770,7 @@ DEFUN (show_ipv6_route_vrf_all_summary_prefix, struct vrf *vrf; struct zebra_vrf *zvrf; - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) if ((zvrf = vrf->info) != NULL) vty_show_ip_route_summary_prefix (vty, zvrf->table[AFI_IP6][SAFI_UNICAST]); -- cgit v1.2.3 From b6a9e7b4878f76306ca2b25960cb52805794c8a5 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 1 Dec 2016 10:49:22 -0500 Subject: lib, zebra: Minimize display of link-params sub data When link-params is configured it auto starts displaying 6000-02# conf t dell-s6000-02(config)# int swp1 dell-s6000-02(config-if)# link-params dell-s6000-02(config-link-params)# admin-grp 0x12345678 dell-s6000-02(config-link-params)# end dell-s6000-02# show run interface swp1 link-params enable metric 0 <----Remove the bw lines max-bw 1.25e+06 max-rsv-bw 1.25e+06 unrsv-bw 0 1.25e+06 unrsv-bw 1 1.25e+06 unrsv-bw 2 1.25e+06 unrsv-bw 3 1.25e+06 unrsv-bw 4 1.25e+06 unrsv-bw 5 1.25e+06 unrsv-bw 6 1.25e+06 unrsv-bw 7 1.25e+06 admin-grp 305419896 exit-link-params ! I'd like to reduce this to: interface enp0s3 ip igmp ip pim sm link-params enable admin-grp 0x12345678 <----- Fix this to be what we entered exit-link-params ! Signed-off-by: Donald Sharp Signed-off-by: David Lamparter --- lib/if.c | 10 +++++----- lib/if.h | 2 ++ zebra/interface.c | 17 +++++++++-------- 3 files changed, 16 insertions(+), 13 deletions(-) (limited to 'zebra/interface.c') diff --git a/lib/if.c b/lib/if.c index df53f8d4e8..e745dc9027 100644 --- a/lib/if.c +++ b/lib/if.c @@ -1366,14 +1366,14 @@ if_link_params_get (struct interface *ifp) iflp->te_metric = ifp->metric; /* Compute default bandwidth based on interface */ - int bw = (float)((ifp->bandwidth ? ifp->bandwidth : DEFAULT_BANDWIDTH) - * TE_KILO_BIT / TE_BYTE); + iflp->default_bw = ((ifp->bandwidth ? ifp->bandwidth : DEFAULT_BANDWIDTH) + * TE_KILO_BIT / TE_BYTE); /* Set Max, Reservable and Unreserved Bandwidth */ - iflp->max_bw = bw; - iflp->max_rsv_bw = bw; + iflp->max_bw = iflp->default_bw; + iflp->max_rsv_bw = iflp->default_bw; for (i = 0; i < MAX_CLASS_TYPE; i++) - iflp->unrsv_bw[i] = bw; + iflp->unrsv_bw[i] = iflp->default_bw; /* Update Link parameters status */ iflp->lp_status = LP_TE | LP_MAX_BW | LP_MAX_RSV_BW | LP_UNRSV_BW; diff --git a/lib/if.h b/lib/if.h index 7fdd46d3f2..59141e7871 100644 --- a/lib/if.h +++ b/lib/if.h @@ -161,6 +161,7 @@ struct if_stats #define LP_RES_BW 0x0400 #define LP_AVA_BW 0x0800 #define LP_USE_BW 0x1000 +#define LP_TE_METRIC 0x2000 #define IS_PARAM_UNSET(lp, st) !(lp->lp_status & st) #define IS_PARAM_SET(lp, st) (lp->lp_status & st) @@ -174,6 +175,7 @@ struct if_stats struct if_link_params { u_int32_t lp_status; /* Status of Link Parameters: */ u_int32_t te_metric; /* Traffic Engineering metric */ + float default_bw; float max_bw; /* Maximum Bandwidth */ float max_rsv_bw; /* Maximum Reservable Bandwidth */ float unrsv_bw[MAX_CLASS_TYPE]; /* Unreserved Bandwidth per Class Type (8) */ diff --git a/zebra/interface.c b/zebra/interface.c index 68edd30de3..3fec663f12 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -1846,7 +1846,7 @@ DEFUN (link_params_metric, VTY_GET_ULONG("metric", metric, argv[0]); /* 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; } @@ -1860,7 +1860,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; } @@ -2788,20 +2788,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); -- cgit v1.2.3 From d7d73ffc8f575a5fd24714dd121f40828eb61a41 Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Mon, 5 Dec 2016 20:28:24 +0100 Subject: *: fix up DEFUNs without install_element calls These now generate warnings which will break the build with -Werror. Note this may have enabled commands that should be disabled, or the other way around... Signed-off-by: David Lamparter --- bgpd/bgp_vty.c | 1 + lib/command.c | 15 --------------- lib/if.c | 2 ++ ospf6d/ospf6_neighbor.c | 1 + ospf6d/ospf6_top.c | 4 ++++ ospfd/ospf_ri.c | 1 + ospfd/ospf_vty.c | 2 ++ ripngd/ripngd.c | 2 ++ vtysh/vtysh.c | 24 +++++------------------- zebra/interface.c | 1 + 10 files changed, 19 insertions(+), 34 deletions(-) (limited to 'zebra/interface.c') diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 41f09e36a3..4532e24977 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -11379,6 +11379,7 @@ community_list_vty (void) /* Community-list. */ install_element (CONFIG_NODE, &ip_community_list_standard_cmd); + install_element (CONFIG_NODE, &ip_community_list_expanded_all_cmd); install_element (CONFIG_NODE, &no_ip_community_list_standard_all_cmd); install_element (CONFIG_NODE, &no_ip_community_list_expanded_all_cmd); install_element (VIEW_NODE, &show_ip_community_list_cmd); diff --git a/lib/command.c b/lib/command.c index e51ff837aa..092037bc1d 100644 --- a/lib/command.c +++ b/lib/command.c @@ -2069,21 +2069,6 @@ DEFUN (config_log_syslog, } } -DEFUN_DEPRECATED (config_log_syslog_facility, - config_log_syslog_facility_cmd, - "log syslog facility (kern|user|mail|daemon|auth|syslog|lpr|news|uucp|cron|local0|local1|local2|local3|local4|local5|local6|local7)", - "Logging control\n" - "Logging goes to syslog\n" - "(Deprecated) Facility parameter for syslog messages\n" - LOG_FACILITY_DESC) -{ - int facility = facility_match(argv[3]->arg); - - zlog_set_level (NULL, ZLOG_DEST_SYSLOG, zlog_default->default_lvl); - zlog_default->facility = facility; - return CMD_SUCCESS; -} - DEFUN (no_config_log_syslog, no_config_log_syslog_cmd, "no log syslog [] []", diff --git a/lib/if.c b/lib/if.c index 128fc675c1..a1bac2ce81 100644 --- a/lib/if.c +++ b/lib/if.c @@ -838,6 +838,7 @@ if_cmd_init (void) install_element (INTERFACE_NODE, &no_interface_desc_cmd); } +#if 0 /* For debug purpose. */ DEFUN (show_address, show_address_cmd, @@ -907,6 +908,7 @@ DEFUN (show_address_vrf_all, } return CMD_SUCCESS; } +#endif /* Allocate connected structure. */ struct connected * diff --git a/ospf6d/ospf6_neighbor.c b/ospf6d/ospf6_neighbor.c index 385232f7f8..f24ee84c8e 100644 --- a/ospf6d/ospf6_neighbor.c +++ b/ospf6d/ospf6_neighbor.c @@ -913,6 +913,7 @@ void ospf6_neighbor_init (void) { install_element (VIEW_NODE, &show_ipv6_ospf6_neighbor_cmd); + install_element (VIEW_NODE, &show_ipv6_ospf6_neighbor_one_cmd); } DEFUN (debug_ospf6_neighbor, diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c index 4c50828e18..65ded28702 100644 --- a/ospf6d/ospf6_top.c +++ b/ospf6d/ospf6_top.c @@ -622,6 +622,7 @@ DEFUN (no_ospf6_distance_ospf6, return CMD_SUCCESS; } +#if 0 DEFUN (ospf6_distance_source, ospf6_distance_source_cmd, "distance (1-255) X:X::X:X/M [WORD]", @@ -652,6 +653,7 @@ DEFUN (no_ospf6_distance_source, return CMD_SUCCESS; } +#endif DEFUN (ospf6_interface_area, ospf6_interface_area_cmd, @@ -833,6 +835,7 @@ DEFUN (no_ospf6_stub_router_admin, return CMD_SUCCESS; } +#if 0 DEFUN (ospf6_stub_router_startup, ospf6_stub_router_startup_cmd, "stub-router on-startup (5-86400)", @@ -878,6 +881,7 @@ DEFUN (no_ospf6_stub_router_shutdown, { return CMD_SUCCESS; } +#endif static void ospf6_show (struct vty *vty, struct ospf6 *o) diff --git a/ospfd/ospf_ri.c b/ospfd/ospf_ri.c index 28957e04c6..883ea7cad9 100644 --- a/ospfd/ospf_ri.c +++ b/ospfd/ospf_ri.c @@ -1662,6 +1662,7 @@ ospf_router_info_register_vty (void) install_element (OSPF_NODE, &pce_neighbor_cmd); install_element (OSPF_NODE, &no_pce_neighbor_cmd); install_element (OSPF_NODE, &pce_cap_flag_cmd); + install_element (OSPF_NODE, &no_pce_cap_flag_cmd); return; } diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index 776b1a0843..12ae94210f 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -7800,6 +7800,7 @@ DEFUN (ospf_distance_ospf, return CMD_SUCCESS; } +#if 0 DEFUN (ospf_distance_source, ospf_distance_source_cmd, "distance (1-255) A.B.C.D/M", @@ -7881,6 +7882,7 @@ DEFUN (no_ospf_distance_source_access_list, return CMD_SUCCESS; } +#endif DEFUN (ip_ospf_mtu_ignore, ip_ospf_mtu_ignore_addr_cmd, diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c index ca8850e5f0..fefb1fd266 100644 --- a/ripngd/ripngd.c +++ b/ripngd/ripngd.c @@ -2575,6 +2575,7 @@ DEFUN (no_ripng_timers, return CMD_SUCCESS; } +#if 0 DEFUN (show_ipv6_protocols, show_ipv6_protocols_cmd, "show ipv6 protocols", @@ -2601,6 +2602,7 @@ DEFUN (show_ipv6_protocols, return CMD_SUCCESS; } +#endif /* Please be carefull to use this command. */ DEFUN (ripng_default_information_originate, diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index 0a83b56be0..9bcbe73b13 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -1560,24 +1560,6 @@ DEFUNSH (VTYSH_BGPD, return CMD_SUCCESS; } -DEFUNSH (VTYSH_ZEBRA, - vtysh_exit_zebra, - vtysh_exit_zebra_cmd, - "exit", - "Exit current mode and down to previous mode\n") -{ - return vtysh_exit (vty); -} - -DEFUNSH (VTYSH_ZEBRA, - vtysh_quit_zebra, - vtysh_quit_zebra_cmd, - "quit", - "Exit current mode and down to previous mode\n") -{ - return vtysh_exit_zebra (self, vty, argc, argv); -} - DEFUNSH (VTYSH_RIPD, vtysh_exit_ripd, vtysh_exit_ripd_cmd, @@ -3122,7 +3104,8 @@ vtysh_init_vty (void) /* "exit" command. */ install_element (VIEW_NODE, &vtysh_exit_all_cmd); install_element (CONFIG_NODE, &vtysh_exit_all_cmd); - /* install_element (CONFIG_NODE, &vtysh_quit_all_cmd); */ + install_element (VIEW_NODE, &vtysh_quit_all_cmd); + install_element (CONFIG_NODE, &vtysh_quit_all_cmd); install_element (RIP_NODE, &vtysh_exit_ripd_cmd); install_element (RIP_NODE, &vtysh_quit_ripd_cmd); install_element (RIPNG_NODE, &vtysh_exit_ripngd_cmd); @@ -3226,6 +3209,8 @@ vtysh_init_vty (void) install_element (INTERFACE_NODE, &vtysh_quit_interface_cmd); install_element (NS_NODE, &vtysh_end_all_cmd); + + install_element (CONFIG_NODE, &vtysh_ns_cmd); install_element (NS_NODE, &vtysh_exit_ns_cmd); install_element (NS_NODE, &vtysh_quit_ns_cmd); @@ -3255,6 +3240,7 @@ vtysh_init_vty (void) #if defined(ENABLE_BGP_VNC) install_element (BGP_NODE, &vnc_defaults_cmd); install_element (BGP_NODE, &vnc_nve_group_cmd); + install_element (BGP_NODE, &vnc_l2_group_cmd); #endif install_element (BGP_NODE, &address_family_ipv4_unicast_cmd); install_element (BGP_NODE, &address_family_ipv4_multicast_cmd); diff --git a/zebra/interface.c b/zebra/interface.c index 93a059a7a4..8eddd3062a 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -2909,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); -- cgit v1.2.3