summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfigure.ac15
-rw-r--r--lib/table.c1
-rw-r--r--lib/thread.c40
-rw-r--r--lib/zebra.h7
-rw-r--r--ospf6d/ospf6_asbr.c3
-rw-r--r--ospf6d/ospf6_lsa.c7
-rw-r--r--ospf6d/ospf6_lsdb.c2
-rw-r--r--ospf6d/ospf6_memory.c1
-rw-r--r--ospf6d/ospf6_memory.h1
-rw-r--r--ospf6d/ospf6_route.c53
-rw-r--r--ospf6d/ospf6_route.h1
-rw-r--r--ospf6d/ospf6_spf.c1
-rw-r--r--ospfd/ospf_zebra.c11
-rw-r--r--ospfd/ospfd.c4
-rw-r--r--pimd/pim_iface.c8
-rw-r--r--pimd/pim_igmp.c4
-rw-r--r--pimd/pim_instance.c2
-rw-r--r--pimd/pim_jp_agg.c1
-rw-r--r--pimd/pim_msdp.c2
-rw-r--r--pimd/pim_oil.c2
-rw-r--r--pimd/pim_ssmpingd.c2
-rw-r--r--zebra/zserv.c1
22 files changed, 112 insertions, 57 deletions
diff --git a/configure.ac b/configure.ac
index 8cc70f8a99..6b5cd19a5f 100755
--- a/configure.ac
+++ b/configure.ac
@@ -378,7 +378,7 @@ AC_ARG_ENABLE([oldvpn_commands],
AS_HELP_STRING([--enable-oldvpn-commands], [Keep old vpn commands]))
AC_CHECK_HEADERS(json-c/json.h)
-AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
+AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c", [], [-lm])
if test $ac_cv_lib_json_c_json_object_get = no; then
AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
if test $ac_cv_lib_json_json_object_get = no; then
@@ -868,6 +868,16 @@ case "$host_os" in
AC_DEFINE(OPEN_BSD,,OpenBSD)
AC_DEFINE(KAME,1,KAME IPv6)
+
+ if test "x${enable_pimd}" != "xno"; then
+ case "$host_os" in
+ openbsd6.0)
+ ;;
+ openbsd[6-9]*)
+ AC_MSG_FAILURE([pimd cannot be enabled as PIM support has been removed from OpenBSD 6.1])
+ ;;
+ esac
+ fi
;;
*)
AC_MSG_RESULT([BSD])
@@ -1377,7 +1387,8 @@ AC_SUBST(VTYSH)
AC_SUBST(CURSES)
AC_SUBST(OSPFCLIENT)
AC_SUBST(OSPFAPI)
-AC_CHECK_LIB(crypt, crypt)
+AC_CHECK_LIB(crypt, crypt, [],
+ [AC_CHECK_LIB(crypto, DES_crypt)])
AC_CHECK_LIB(resolv, res_init)
dnl ---------------------------
diff --git a/lib/table.c b/lib/table.c
index e89d7d1c67..833adb9a37 100644
--- a/lib/table.c
+++ b/lib/table.c
@@ -75,6 +75,7 @@ static struct route_node *route_node_set(struct route_table *table,
node = route_node_new(table);
prefix_copy(&node->p, prefix);
+ apply_mask(&node->p);
node->table = table;
inserted = hash_get(node->table->hash, node, hash_alloc_intern);
diff --git a/lib/thread.c b/lib/thread.c
index d5220d0025..fd36eaf388 100644
--- a/lib/thread.c
+++ b/lib/thread.c
@@ -1315,16 +1315,16 @@ struct thread *thread_fetch(struct thread_master *m, struct thread *fetch)
/* Process any pending cancellation requests */
do_thread_cancel(m);
- /* Post events to ready queue. This must come before the
- * following block
- * since events should occur immediately */
+ /*
+ * Post events to ready queue. This must come before the
+ * following block since events should occur immediately
+ */
thread_process(&m->event);
- /* If there are no tasks on the ready queue, we will poll()
- * until a timer
- * expires or we receive I/O, whichever comes first. The
- * strategy for doing
- * this is:
+ /*
+ * If there are no tasks on the ready queue, we will poll()
+ * until a timer expires or we receive I/O, whichever comes
+ * first. The strategy for doing this is:
*
* - If there are events pending, set the poll() timeout to zero
* - If there are no events pending, but there are timers
@@ -1336,9 +1336,8 @@ struct thread *thread_fetch(struct thread_master *m, struct thread *fetch)
* - If nothing is pending, it's time for the application to die
*
* In every case except the last, we need to hit poll() at least
- * once per
- * loop to avoid starvation by events */
-
+ * once per loop to avoid starvation by events
+ */
if (m->ready.count == 0)
tw = thread_timer_wait(m->timer, &tv);
@@ -1351,9 +1350,10 @@ struct thread *thread_fetch(struct thread_master *m, struct thread *fetch)
break;
}
- /* Copy pollfd array + # active pollfds in it. Not necessary to
- * copy
- * the array size as this is fixed. */
+ /*
+ * Copy pollfd array + # active pollfds in it. Not necessary to
+ * copy the array size as this is fixed.
+ */
m->handler.copycount = m->handler.pfdcount;
memcpy(m->handler.copy, m->handler.pfds,
m->handler.copycount * sizeof(struct pollfd));
@@ -1388,12 +1388,15 @@ struct thread *thread_fetch(struct thread_master *m, struct thread *fetch)
break;
}
- /* Since we could have received more cancellation
- * requests during poll(), process those */
+ /*
+ * Since we could have received more cancellation
+ * requests during poll(), process those
+ */
do_thread_cancel(m);
- } else
+ } else {
m->tick_since_io++;
+ }
/* Post timers to ready queue. */
monotime(&now);
@@ -1403,8 +1406,7 @@ struct thread *thread_fetch(struct thread_master *m, struct thread *fetch)
if (num > 0)
thread_process_io(m, num);
- /* If we have a ready task, break the loop and return it to the
- * caller */
+ /* have a ready task ==> return it to caller */
if ((thread = thread_trim_head(&m->ready))) {
fetch = thread_run(m, thread, fetch);
if (fetch->ref)
diff --git a/lib/zebra.h b/lib/zebra.h
index c31fe0809c..6d64bbd670 100644
--- a/lib/zebra.h
+++ b/lib/zebra.h
@@ -126,6 +126,13 @@ typedef unsigned char u_int8_t;
#define __APPLE_USE_RFC_3542
#endif
+#ifndef HAVE_LIBCRYPT
+# ifdef HAVE_LIBCRYPTO
+# include <openssl/des.h>
+# define crypt DES_crypt
+# endif
+#endif
+
#include "openbsd-tree.h"
#include <netinet/in.h>
diff --git a/ospf6d/ospf6_asbr.c b/ospf6d/ospf6_asbr.c
index 7f8341d0e4..dd3630af16 100644
--- a/ospf6d/ospf6_asbr.c
+++ b/ospf6d/ospf6_asbr.c
@@ -622,7 +622,8 @@ void ospf6_asbr_redistribute_remove(int type, ifindex_t ifindex,
node = route_node_lookup(ospf6->external_id_table, &prefix_id);
assert(node);
node->info = NULL;
- route_unlock_node(node);
+ route_unlock_node(node); /* to free the lookup lock */
+ route_unlock_node(node); /* to free the original lock */
ospf6_route_remove(match, ospf6->external_table);
XFREE(MTYPE_OSPF6_EXTERNAL_INFO, info);
diff --git a/ospf6d/ospf6_lsa.c b/ospf6d/ospf6_lsa.c
index e1a431ea07..a0dad9344a 100644
--- a/ospf6d/ospf6_lsa.c
+++ b/ospf6d/ospf6_lsa.c
@@ -509,7 +509,8 @@ struct ospf6_lsa *ospf6_lsa_create(struct ospf6_lsa_header *header)
/* allocate memory for this LSA */
new_header =
- (struct ospf6_lsa_header *)XMALLOC(MTYPE_OSPF6_LSA, lsa_size);
+ (struct ospf6_lsa_header *)XMALLOC(MTYPE_OSPF6_LSA_HEADER,
+ lsa_size);
/* copy LSA from original header */
memcpy(new_header, header, lsa_size);
@@ -537,7 +538,7 @@ struct ospf6_lsa *ospf6_lsa_create_headeronly(struct ospf6_lsa_header *header)
/* allocate memory for this LSA */
new_header = (struct ospf6_lsa_header *)XMALLOC(
- MTYPE_OSPF6_LSA, sizeof(struct ospf6_lsa_header));
+ MTYPE_OSPF6_LSA_HEADER, sizeof(struct ospf6_lsa_header));
/* copy LSA from original header */
memcpy(new_header, header, sizeof(struct ospf6_lsa_header));
@@ -568,7 +569,7 @@ void ospf6_lsa_delete(struct ospf6_lsa *lsa)
THREAD_OFF(lsa->refresh);
/* do free */
- XFREE(MTYPE_OSPF6_LSA, lsa->header);
+ XFREE(MTYPE_OSPF6_LSA_HEADER, lsa->header);
XFREE(MTYPE_OSPF6_LSA, lsa);
}
diff --git a/ospf6d/ospf6_lsdb.c b/ospf6d/ospf6_lsdb.c
index 7e08d58791..8764a549d2 100644
--- a/ospf6d/ospf6_lsdb.c
+++ b/ospf6d/ospf6_lsdb.c
@@ -139,6 +139,8 @@ void ospf6_lsdb_add(struct ospf6_lsa *lsa, struct ospf6_lsdb *lsdb)
(*lsdb->hook_add)(lsa);
}
}
+ /* to free the lookup lock in node get*/
+ route_unlock_node(current);
ospf6_lsa_unlock(old);
}
diff --git a/ospf6d/ospf6_memory.c b/ospf6d/ospf6_memory.c
index 133dc2cb3c..56c232d6da 100644
--- a/ospf6d/ospf6_memory.c
+++ b/ospf6d/ospf6_memory.c
@@ -34,6 +34,7 @@ DEFINE_MTYPE(OSPF6D, OSPF6_ROUTE, "OSPF6 route")
DEFINE_MTYPE(OSPF6D, OSPF6_PREFIX, "OSPF6 prefix")
DEFINE_MTYPE(OSPF6D, OSPF6_MESSAGE, "OSPF6 message")
DEFINE_MTYPE(OSPF6D, OSPF6_LSA, "OSPF6 LSA")
+DEFINE_MTYPE(OSPF6D, OSPF6_LSA_HEADER, "OSPF6 LSA header")
DEFINE_MTYPE(OSPF6D, OSPF6_LSA_SUMMARY, "OSPF6 LSA summary")
DEFINE_MTYPE(OSPF6D, OSPF6_LSDB, "OSPF6 LSA database")
DEFINE_MTYPE(OSPF6D, OSPF6_VERTEX, "OSPF6 vertex")
diff --git a/ospf6d/ospf6_memory.h b/ospf6d/ospf6_memory.h
index 324065c3a1..fe72ee3669 100644
--- a/ospf6d/ospf6_memory.h
+++ b/ospf6d/ospf6_memory.h
@@ -33,6 +33,7 @@ DECLARE_MTYPE(OSPF6_ROUTE)
DECLARE_MTYPE(OSPF6_PREFIX)
DECLARE_MTYPE(OSPF6_MESSAGE)
DECLARE_MTYPE(OSPF6_LSA)
+DECLARE_MTYPE(OSPF6_LSA_HEADER)
DECLARE_MTYPE(OSPF6_LSA_SUMMARY)
DECLARE_MTYPE(OSPF6_LSDB)
DECLARE_MTYPE(OSPF6_VERTEX)
diff --git a/ospf6d/ospf6_route.c b/ospf6d/ospf6_route.c
index e0e9fc9449..bfe583a911 100644
--- a/ospf6d/ospf6_route.c
+++ b/ospf6d/ospf6_route.c
@@ -178,17 +178,6 @@ void ospf6_nexthop_delete(struct ospf6_nexthop *nh)
XFREE(MTYPE_OSPF6_NEXTHOP, nh);
}
-void ospf6_free_nexthops(struct list *nh_list)
-{
- struct ospf6_nexthop *nh;
- struct listnode *node, *nnode;
-
- if (nh_list) {
- for (ALL_LIST_ELEMENTS(nh_list, node, nnode, nh))
- ospf6_nexthop_delete(nh);
- }
-}
-
void ospf6_clear_nexthops(struct list *nh_list)
{
struct listnode *node;
@@ -340,19 +329,29 @@ int ospf6_route_get_first_nh_index(struct ospf6_route *route)
return (-1);
}
+static int ospf6_nexthop_cmp(struct ospf6_nexthop *a, struct ospf6_nexthop *b)
+{
+ if ((a)->ifindex == (b)->ifindex &&
+ IN6_ARE_ADDR_EQUAL(&(a)->address, &(b)->address))
+ return 1;
+ return 0;
+}
+
struct ospf6_route *ospf6_route_create(void)
{
struct ospf6_route *route;
route = XCALLOC(MTYPE_OSPF6_ROUTE, sizeof(struct ospf6_route));
route->nh_list = list_new();
+ route->nh_list->cmp = (int (*)(void *, void *))ospf6_nexthop_cmp;
+ route->nh_list->del = (void (*) (void *))ospf6_nexthop_delete;
return route;
}
void ospf6_route_delete(struct ospf6_route *route)
{
if (route) {
- ospf6_free_nexthops(route->nh_list);
- list_free(route->nh_list);
+ if (route->nh_list)
+ list_delete(route->nh_list);
XFREE(MTYPE_OSPF6_ROUTE, route);
}
}
@@ -439,6 +438,7 @@ struct ospf6_route *ospf6_route_lookup(struct prefix *prefix,
return NULL;
route = (struct ospf6_route *)node->info;
+ route_unlock_node(node); /* to free the lookup lock */
return route;
}
@@ -583,6 +583,8 @@ struct ospf6_route *ospf6_route_add(struct ospf6_route *route,
SET_FLAG(old->flag, OSPF6_ROUTE_ADD);
ospf6_route_table_assert(table);
+ /* to free the lookup lock */
+ route_unlock_node(node);
return old;
}
@@ -628,9 +630,10 @@ struct ospf6_route *ospf6_route_add(struct ospf6_route *route,
if (prev || next) {
if (IS_OSPF6_DEBUG_ROUTE(MEMORY))
zlog_debug(
- "%s %p: route add %p: another path: prev %p, next %p",
+ "%s %p: route add %p: another path: prev %p, next %p node refcount %u",
ospf6_route_table_name(table), (void *)table,
- (void *)route, (void *)prev, (void *)next);
+ (void *)route, (void *)prev, (void *)next,
+ node->lock);
else if (IS_OSPF6_DEBUG_ROUTE(TABLE))
zlog_debug("%s: route add: another path found",
ospf6_route_table_name(table));
@@ -755,9 +758,9 @@ void ospf6_route_remove(struct ospf6_route *route,
prefix2str(&route->prefix, buf, sizeof(buf));
if (IS_OSPF6_DEBUG_ROUTE(MEMORY))
- zlog_debug("%s %p: route remove %p: %s",
+ zlog_debug("%s %p: route remove %p: %s rnode refcount %u",
ospf6_route_table_name(table), (void *)table,
- (void *)route, buf);
+ (void *)route, buf, route->rnode->lock);
else if (IS_OSPF6_DEBUG_ROUTE(TABLE))
zlog_debug("%s: route remove: %s",
ospf6_route_table_name(table), buf);
@@ -768,11 +771,9 @@ void ospf6_route_remove(struct ospf6_route *route,
/* find the route to remove, making sure that the route pointer
is from the route table. */
current = node->info;
- while (current && ospf6_route_is_same(current, route)) {
- if (current == route)
- break;
+ while (current && current != route)
current = current->next;
- }
+
assert(current == route);
/* adjust doubly linked list */
@@ -785,10 +786,14 @@ void ospf6_route_remove(struct ospf6_route *route,
if (route->next && route->next->rnode == node) {
node->info = route->next;
SET_FLAG(route->next->flag, OSPF6_ROUTE_BEST);
- } else
- node->info = NULL; /* should unlock route_node here ? */
+ } else {
+ node->info = NULL;
+ route->rnode = NULL;
+ route_unlock_node(node); /* to free the original lock */
+ }
}
+ route_unlock_node(node); /* to free the lookup lock */
table->count--;
ospf6_route_table_assert(table);
@@ -935,6 +940,7 @@ struct ospf6_route_table *ospf6_route_table_create(int s, int t)
void ospf6_route_table_delete(struct ospf6_route_table *table)
{
ospf6_route_remove_all(table);
+ bf_free(table->idspace);
route_table_finish(table->table);
XFREE(MTYPE_OSPF6_ROUTE, table);
}
@@ -1062,6 +1068,7 @@ void ospf6_route_show_detail(struct vty *vty, struct ospf6_route *route)
vty_out(vty, "Metric: %d (%d)\n", route->path.cost,
route->path.u.cost_e2);
+ vty_out(vty, "Nexthop count: %u\n", route->nh_list->count);
/* Nexthops */
vty_out(vty, "Nexthop:\n");
for (ALL_LIST_ELEMENTS_RO(route->nh_list, node, nh)) {
diff --git a/ospf6d/ospf6_route.h b/ospf6d/ospf6_route.h
index 69d275f8b1..166074fb70 100644
--- a/ospf6d/ospf6_route.h
+++ b/ospf6d/ospf6_route.h
@@ -256,7 +256,6 @@ extern void ospf6_linkstate_prefix2str(struct prefix *prefix, char *buf,
extern struct ospf6_nexthop *ospf6_nexthop_create(void);
extern void ospf6_nexthop_delete(struct ospf6_nexthop *nh);
-extern void ospf6_free_nexthops(struct list *nh_list);
extern void ospf6_clear_nexthops(struct list *nh_list);
extern int ospf6_num_nexthops(struct list *nh_list);
extern void ospf6_copy_nexthops(struct list *dst, struct list *src);
diff --git a/ospf6d/ospf6_spf.c b/ospf6d/ospf6_spf.c
index 86f893bc61..6d589aff8f 100644
--- a/ospf6d/ospf6_spf.c
+++ b/ospf6d/ospf6_spf.c
@@ -141,6 +141,7 @@ static struct ospf6_vertex *ospf6_vertex_create(struct ospf6_lsa *lsa)
v->options[2] = *(u_char *)(OSPF6_LSA_HEADER_END(lsa->header) + 3);
v->nh_list = list_new();
+ v->nh_list->del = (void (*) (void *))ospf6_nexthop_delete;
v->parent = NULL;
v->child_list = list_new();
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index c6b0955dab..ec8f1ee852 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -51,6 +51,9 @@
#include "ospfd/ospf_zebra.h"
#include "ospfd/ospf_te.h"
+DEFINE_MTYPE_STATIC(OSPFD, OSPF_EXTERNAL, "OSPF External route table")
+DEFINE_MTYPE_STATIC(OSPFD, OSPF_REDISTRIBUTE, "OSPF Redistriute")
+
DEFINE_HOOK(ospf_if_update, (struct interface * ifp), (ifp))
DEFINE_HOOK(ospf_if_delete, (struct interface * ifp), (ifp))
@@ -628,7 +631,8 @@ struct ospf_external *ospf_external_add(u_char type, u_short instance)
om->external[type] = list_new();
ext_list = om->external[type];
- ext = (struct ospf_external *)calloc(1, sizeof(struct ospf_external));
+ ext = (struct ospf_external *)XCALLOC(MTYPE_OSPF_EXTERNAL,
+ sizeof(struct ospf_external));
ext->instance = instance;
EXTERNAL_INFO(ext) = route_table_init();
@@ -652,6 +656,7 @@ void ospf_external_del(u_char type, u_short instance)
list_free(om->external[type]);
om->external[type] = NULL;
}
+ XFREE(MTYPE_OSPF_EXTERNAL, ext);
}
}
@@ -687,7 +692,8 @@ struct ospf_redist *ospf_redist_add(struct ospf *ospf, u_char type,
ospf->redist[type] = list_new();
red_list = ospf->redist[type];
- red = (struct ospf_redist *)calloc(1, sizeof(struct ospf_redist));
+ red = (struct ospf_redist *)XCALLOC(MTYPE_OSPF_REDISTRIBUTE,
+ sizeof(struct ospf_redist));
red->instance = instance;
red->dmetric.type = -1;
red->dmetric.value = -1;
@@ -709,6 +715,7 @@ void ospf_redist_del(struct ospf *ospf, u_char type, u_short instance)
list_free(ospf->redist[type]);
ospf->redist[type] = NULL;
}
+ XFREE(MTYPE_OSPF_REDISTRIBUTE, red);
}
}
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index 381082fcda..b3553238ef 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -590,6 +590,7 @@ static void ospf_finish_final(struct ospf *ospf)
route_unlock_node(rn);
}
}
+ route_table_finish(ospf->networks);
for (ALL_LIST_ELEMENTS(ospf->areas, node, nnode, area)) {
listnode_delete(ospf->areas, area);
@@ -655,6 +656,8 @@ static void ospf_finish_final(struct ospf *ospf)
}
list_delete(ospf->areas);
+ list_delete(ospf->oi_write_q);
+ list_delete(ospf->oiflist);
for (i = ZEBRA_ROUTE_SYSTEM; i <= ZEBRA_ROUTE_MAX; i++) {
struct list *ext_list;
@@ -752,6 +755,7 @@ static void ospf_area_free(struct ospf_area *area)
LSDB_LOOP(OPAQUE_LINK_LSDB(area), rn, lsa)
ospf_discard_from_db(area->ospf, area->lsdb, lsa);
+ ospf_opaque_type10_lsa_term(area);
ospf_lsdb_delete_all(area->lsdb);
ospf_lsdb_free(area->lsdb);
diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c
index 221ca2f24d..9fdbf7b3e3 100644
--- a/pimd/pim_iface.c
+++ b/pimd/pim_iface.c
@@ -44,6 +44,7 @@
#include "pim_ssmpingd.h"
#include "pim_rp.h"
#include "pim_nht.h"
+#include "pim_jp_agg.h"
static void pim_if_igmp_join_del_all(struct interface *ifp);
static int igmp_join_sock(const char *ifname, ifindex_t ifindex,
@@ -83,6 +84,9 @@ static void *if_list_clean(struct pim_interface *pim_ifp)
if (pim_ifp->upstream_switch_list)
list_delete(pim_ifp->upstream_switch_list);
+ if (pim_ifp->sec_addr_list)
+ list_delete(pim_ifp->sec_addr_list);
+
while ((ch = RB_ROOT(pim_ifchannel_rb,
&pim_ifp->ifchannel_rb)) != NULL)
pim_ifchannel_delete(ch);
@@ -163,6 +167,9 @@ struct pim_interface *pim_if_new(struct interface *ifp, int igmp, int pim)
__FILE__, __PRETTY_FUNCTION__);
return if_list_clean(pim_ifp);
}
+ pim_ifp->upstream_switch_list->del =
+ (void (*)(void *))pim_jp_agg_group_list_free;
+ pim_ifp->upstream_switch_list->cmp = pim_jp_agg_group_list_cmp;
RB_INIT(pim_ifchannel_rb, &pim_ifp->ifchannel_rb);
@@ -198,6 +205,7 @@ void pim_if_delete(struct interface *ifp)
list_delete(pim_ifp->igmp_socket_list);
list_delete(pim_ifp->pim_neighbor_list);
list_delete(pim_ifp->upstream_switch_list);
+ list_delete(pim_ifp->sec_addr_list);
while ((ch = RB_ROOT(pim_ifchannel_rb,
&pim_ifp->ifchannel_rb)) != NULL)
diff --git a/pimd/pim_igmp.c b/pimd/pim_igmp.c
index ea8eff4d59..3a870374c0 100644
--- a/pimd/pim_igmp.c
+++ b/pimd/pim_igmp.c
@@ -696,7 +696,7 @@ void igmp_startup_mode_on(struct igmp_sock *igmp)
static void igmp_group_free(struct igmp_group *group)
{
- list_free(group->group_source_list);
+ list_delete(group->group_source_list);
XFREE(MTYPE_PIM_IGMP_GROUP, group);
}
@@ -748,7 +748,7 @@ void igmp_sock_free(struct igmp_sock *igmp)
zassert(igmp->igmp_group_list);
zassert(!listcount(igmp->igmp_group_list));
- list_free(igmp->igmp_group_list);
+ list_delete(igmp->igmp_group_list);
hash_free(igmp->igmp_group_hash);
XFREE(MTYPE_PIM_IGMP_SOCKET, igmp);
diff --git a/pimd/pim_instance.c b/pimd/pim_instance.c
index 7bee75fae7..7fc77556ec 100644
--- a/pimd/pim_instance.c
+++ b/pimd/pim_instance.c
@@ -48,7 +48,7 @@ static void pim_instance_terminate(struct pim_instance *pim)
}
if (pim->static_routes)
- list_free(pim->static_routes);
+ list_delete(pim->static_routes);
pim_rp_free(pim);
diff --git a/pimd/pim_jp_agg.c b/pimd/pim_jp_agg.c
index a00bed064f..8e0b4ab5e8 100644
--- a/pimd/pim_jp_agg.c
+++ b/pimd/pim_jp_agg.c
@@ -108,6 +108,7 @@ void pim_jp_agg_clear_group(struct list *group)
js->up = NULL;
XFREE(MTYPE_PIM_JP_AGG_SOURCE, js);
}
+ list_delete(jag->sources);
jag->sources = NULL;
listnode_delete(group, jag);
XFREE(MTYPE_PIM_JP_AGG_GROUP, jag);
diff --git a/pimd/pim_msdp.c b/pimd/pim_msdp.c
index 39db34fc43..4b049d90ad 100644
--- a/pimd/pim_msdp.c
+++ b/pimd/pim_msdp.c
@@ -1261,7 +1261,7 @@ static void pim_msdp_mg_free(struct pim_instance *pim, struct pim_msdp_mg *mg)
XFREE(MTYPE_PIM_MSDP_MG_NAME, mg->mesh_group_name);
if (mg->mbr_list)
- list_free(mg->mbr_list);
+ list_delete(mg->mbr_list);
XFREE(MTYPE_PIM_MSDP_MG, mg);
pim->msdp.mg = NULL;
diff --git a/pimd/pim_oil.c b/pimd/pim_oil.c
index b3bd94dc2a..9ab0709d3e 100644
--- a/pimd/pim_oil.c
+++ b/pimd/pim_oil.c
@@ -123,7 +123,7 @@ void pim_oil_init(struct pim_instance *pim)
void pim_oil_terminate(struct pim_instance *pim)
{
if (pim->channel_oil_list)
- list_free(pim->channel_oil_list);
+ list_delete(pim->channel_oil_list);
pim->channel_oil_list = NULL;
if (pim->channel_oil_hash)
diff --git a/pimd/pim_ssmpingd.c b/pimd/pim_ssmpingd.c
index f83a585a8d..9e90a34687 100644
--- a/pimd/pim_ssmpingd.c
+++ b/pimd/pim_ssmpingd.c
@@ -51,7 +51,7 @@ void pim_ssmpingd_init(struct pim_instance *pim)
void pim_ssmpingd_destroy(struct pim_instance *pim)
{
if (pim->ssmpingd_list) {
- list_free(pim->ssmpingd_list);
+ list_delete(pim->ssmpingd_list);
pim->ssmpingd_list = 0;
}
}
diff --git a/zebra/zserv.c b/zebra/zserv.c
index ab46a1f29f..97f7122774 100644
--- a/zebra/zserv.c
+++ b/zebra/zserv.c
@@ -2432,6 +2432,7 @@ static int zebra_client_read(struct thread *thread)
break;
case ZEBRA_REMOTE_MACIP_DEL:
zebra_vxlan_remote_macip_del(client, sock, length, zvrf);
+ break;
case ZEBRA_INTERFACE_SET_MASTER:
zread_interface_set_master(client, sock, length);
break;