summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_main.c')
-rw-r--r--bgpd/bgp_main.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c
index 11c73cea..2f157652 100644
--- a/bgpd/bgp_main.c
+++ b/bgpd/bgp_main.c
@@ -38,6 +38,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "stream.h"
#include "vrf.h"
#include "workqueue.h"
+#include "linklist.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_attr.h"
@@ -51,6 +52,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "bgpd/bgp_debug.h"
#include "bgpd/bgp_filter.h"
#include "bgpd/bgp_zebra.h"
+#include "bgpd/bgp_network.h"
/* bgpd options, we use GNU getopt library. */
static const struct option longopts[] =
@@ -175,7 +177,7 @@ Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
void
sighup (void)
{
- zlog (NULL, LOG_INFO, "SIGHUP received");
+ zlog_info ("SIGHUP received");
/* Terminate all thread. */
bgp_terminate ();
@@ -225,13 +227,13 @@ bgp_exit (int status)
{
struct bgp *bgp;
struct listnode *node, *nnode;
- int *socket;
struct interface *ifp;
- extern struct zclient *zlookup;
/* it only makes sense for this to be called on a clean exit */
assert (status == 0);
+ bgp_close();
+
/* reverse bgp_master_init */
for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
bgp_delete (bgp);
@@ -256,14 +258,6 @@ bgp_exit (int status)
work_queue_free (bm->process_rsclient_queue);
bm->process_rsclient_queue = NULL;
}
-
- /* reverse bgp_master_init */
- for (ALL_LIST_ELEMENTS_RO(bm->listen_sockets, node, socket))
- {
- if (close ((int)(long)socket) == -1)
- zlog_err ("close (%d): %s", (int)(long)socket, safe_strerror (errno));
- }
- list_delete (bm->listen_sockets);
/* reverse bgp_zebra_init/if_init */
if (retain_mode)
@@ -286,11 +280,8 @@ bgp_exit (int status)
/* reverse bgp_route_init */
bgp_route_finish ();
- /* reverse bgp_route_map_init/route_map_init */
- route_map_finish ();
-
- /* reverse bgp_scan_init */
- bgp_scan_finish ();
+ /* cleanup route maps */
+ bgp_route_map_terminate();
/* reverse access_list_init */
access_list_add_hook (NULL);
@@ -316,10 +307,13 @@ bgp_exit (int status)
bgp_address_destroy();
bgp_scan_destroy();
bgp_zebra_destroy();
- if (zlookup)
- zclient_free (zlookup);
if (bgp_nexthop_buf)
stream_free (bgp_nexthop_buf);
+ if (bgp_ifindices_buf)
+ stream_free (bgp_ifindices_buf);
+
+ /* reverse bgp_scan_init */
+ bgp_scan_finish ();
/* reverse bgp_master_init */
if (bm->master)
@@ -328,9 +322,6 @@ bgp_exit (int status)
if (zlog_default)
closezlog (zlog_default);
- if (CONF_BGP_DEBUG (normal, NORMAL))
- log_memstats_stderr ("bgpd");
-
exit (status);
}