From: Renato Westphal Date: Tue, 3 Oct 2017 01:06:00 +0000 (-0300) Subject: lib: register 'if_var_handlers' only once X-Git-Tag: frr-4.0-dev~212^2~6 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=5d56066e4645ce1104f766cb2a2b767b483c9ce5;p=matthieu%2Ffrr.git lib: register 'if_var_handlers' only once There's no need to register 'if_var_handlers' for every VRF, we need to do it only once. Signed-off-by: Renato Westphal --- diff --git a/lib/if.c b/lib/if.c index 1a44931fec..2bca93240c 100644 --- a/lib/if.c +++ b/lib/if.c @@ -659,8 +659,30 @@ DEFUN_NOSH (no_interface, return CMD_SUCCESS; } +static void if_autocomplete(vector comps, struct cmd_token *token) +{ + struct interface *ifp; + struct vrf *vrf = NULL; + + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { + RB_FOREACH (ifp, if_name_head, &vrf->ifaces_by_name) { + vector_set(comps, XSTRDUP(MTYPE_COMPLETION, ifp->name)); + } + } +} + +static const struct cmd_variable_handler if_var_handlers[] = { + {/* "interface NAME" */ + .varname = "interface", + .completions = if_autocomplete}, + {.tokenname = "IFNAME", .completions = if_autocomplete}, + {.tokenname = "INTERFACE", .completions = if_autocomplete}, + {.completions = NULL}}; + void if_cmd_init(void) { + cmd_variable_handler_register(if_var_handlers); + install_element(CONFIG_NODE, &interface_cmd); install_element(CONFIG_NODE, &no_interface_cmd); @@ -1007,26 +1029,6 @@ ifaddr_ipv4_lookup (struct in_addr *addr, ifindex_t ifindex) } #endif /* ifaddr_ipv4_table */ -static void if_autocomplete(vector comps, struct cmd_token *token) -{ - struct interface *ifp; - struct listnode *ln; - struct vrf *vrf = NULL; - - RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { - for (ALL_LIST_ELEMENTS_RO(vrf->iflist, ln, ifp)) - vector_set(comps, XSTRDUP(MTYPE_COMPLETION, ifp->name)); - } -} - -static const struct cmd_variable_handler if_var_handlers[] = { - {/* "interface NAME" */ - .varname = "interface", - .completions = if_autocomplete}, - {.tokenname = "IFNAME", .completions = if_autocomplete}, - {.tokenname = "INTERFACE", .completions = if_autocomplete}, - {.completions = NULL}}; - /* Initialize interface list. */ void if_init(struct list **intf_list) { @@ -1036,8 +1038,6 @@ void if_init(struct list **intf_list) #endif /* ifaddr_ipv4_table */ (*intf_list)->cmp = (int (*)(void *, void *))if_cmp_func; - - cmd_variable_handler_register(if_var_handlers); } void if_terminate(struct list **intf_list)