diff options
| -rwxr-xr-x | configure.ac | 15 | ||||
| -rw-r--r-- | lib/table.c | 1 | ||||
| -rw-r--r-- | lib/thread.c | 40 | ||||
| -rw-r--r-- | lib/zebra.h | 7 | ||||
| -rw-r--r-- | ospf6d/ospf6_asbr.c | 3 | ||||
| -rw-r--r-- | ospf6d/ospf6_lsa.c | 7 | ||||
| -rw-r--r-- | ospf6d/ospf6_lsdb.c | 2 | ||||
| -rw-r--r-- | ospf6d/ospf6_memory.c | 1 | ||||
| -rw-r--r-- | ospf6d/ospf6_memory.h | 1 | ||||
| -rw-r--r-- | ospf6d/ospf6_route.c | 53 | ||||
| -rw-r--r-- | ospf6d/ospf6_route.h | 1 | ||||
| -rw-r--r-- | ospf6d/ospf6_spf.c | 1 | ||||
| -rw-r--r-- | ospfd/ospf_zebra.c | 11 | ||||
| -rw-r--r-- | ospfd/ospfd.c | 4 | ||||
| -rw-r--r-- | pimd/pim_iface.c | 8 | ||||
| -rw-r--r-- | pimd/pim_igmp.c | 4 | ||||
| -rw-r--r-- | pimd/pim_instance.c | 2 | ||||
| -rw-r--r-- | pimd/pim_jp_agg.c | 1 | ||||
| -rw-r--r-- | pimd/pim_msdp.c | 2 | ||||
| -rw-r--r-- | pimd/pim_oil.c | 2 | ||||
| -rw-r--r-- | pimd/pim_ssmpingd.c | 2 | ||||
| -rw-r--r-- | zebra/zserv.c | 1 |
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; |
