mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-16 08:32:45 +00:00
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 <renato@opensourcerouting.org>
This commit is contained in:
parent
bcc245799b
commit
5d56066e46
44
lib/if.c
44
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)
|
||||
|
Loading…
Reference in New Issue
Block a user