ospfd: remove unnecessary memory allocation

ospf_distribute_list_update currently passes two arguments to
ospf_distribute_list_update_timer - pointer to the ospf structure and
protocol type. The protocol type is only used for logging and is not
even correct because if multiple changes happen during one
ospf->min_ls_interval, then only the type of the first change is logged.

It is better to completely remove the protocol type argument to have a
correct log and eliminate the need for memory allocation.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
This commit is contained in:
Igor Ryzhov 2021-07-16 21:01:01 +03:00
parent 12e1fe1251
commit dcaed63d2f

View file

@ -55,7 +55,6 @@
DEFINE_MTYPE_STATIC(OSPFD, OSPF_EXTERNAL, "OSPF External route table"); DEFINE_MTYPE_STATIC(OSPFD, OSPF_EXTERNAL, "OSPF External route table");
DEFINE_MTYPE_STATIC(OSPFD, OSPF_REDISTRIBUTE, "OSPF Redistriute"); DEFINE_MTYPE_STATIC(OSPFD, OSPF_REDISTRIBUTE, "OSPF Redistriute");
DEFINE_MTYPE_STATIC(OSPFD, OSPF_DIST_ARGS, "OSPF Distribute arguments");
/* Zebra structure to hold current status. */ /* Zebra structure to hold current status. */
@ -1493,12 +1492,8 @@ static int ospf_distribute_list_update_timer(struct thread *thread)
struct external_info *ei; struct external_info *ei;
struct route_table *rt; struct route_table *rt;
struct ospf_lsa *lsa; struct ospf_lsa *lsa;
int type, default_refresh = 0, arg_type; int type, default_refresh = 0;
struct ospf *ospf = NULL; struct ospf *ospf = THREAD_ARG(thread);
void **arg = THREAD_ARG(thread);
ospf = (struct ospf *)arg[0];
arg_type = (int)(intptr_t)arg[1];
if (ospf == NULL) if (ospf == NULL)
return 0; return 0;
@ -1508,9 +1503,8 @@ static int ospf_distribute_list_update_timer(struct thread *thread)
zlog_info("Zebra[Redistribute]: distribute-list update timer fired!"); zlog_info("Zebra[Redistribute]: distribute-list update timer fired!");
if (IS_DEBUG_OSPF_EVENT) { if (IS_DEBUG_OSPF_EVENT) {
zlog_debug( zlog_debug("%s: ospf distribute-list update vrf %s id %d",
"%s: ospf distribute-list update arg_type %d vrf %s id %d", __func__, ospf_vrf_id_to_name(ospf->vrf_id),
__func__, arg_type, ospf_vrf_id_to_name(ospf->vrf_id),
ospf->vrf_id); ospf->vrf_id);
} }
@ -1610,7 +1604,6 @@ static int ospf_distribute_list_update_timer(struct thread *thread)
if (default_refresh) if (default_refresh)
ospf_external_lsa_refresh_default(ospf); ospf_external_lsa_refresh_default(ospf);
XFREE(MTYPE_OSPF_DIST_ARGS, arg);
return 0; return 0;
} }
@ -1619,27 +1612,14 @@ void ospf_distribute_list_update(struct ospf *ospf, int type,
unsigned short instance) unsigned short instance)
{ {
struct ospf_external *ext; struct ospf_external *ext;
void **args = XCALLOC(MTYPE_OSPF_DIST_ARGS, sizeof(void *) * 2);
args[0] = ospf;
args[1] = (void *)((ptrdiff_t)type);
/* External info does not exist. */ /* External info does not exist. */
ext = ospf_external_lookup(ospf, type, instance); ext = ospf_external_lookup(ospf, type, instance);
if (!ext || !EXTERNAL_INFO(ext)) { if (!ext || !EXTERNAL_INFO(ext))
XFREE(MTYPE_OSPF_DIST_ARGS, args);
return; return;
}
/* If exists previously invoked thread, then let it continue. */ /* Set timer. If timer is already started, this call does nothing. */
if (ospf->t_distribute_update) { thread_add_timer_msec(master, ospf_distribute_list_update_timer, ospf,
XFREE(MTYPE_OSPF_DIST_ARGS, args);
return;
}
/* Set timer. */
ospf->t_distribute_update = NULL;
thread_add_timer_msec(master, ospf_distribute_list_update_timer, args,
ospf->min_ls_interval, ospf->min_ls_interval,
&ospf->t_distribute_update); &ospf->t_distribute_update);
} }