]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fixes missing unregister of kernel table handling code.
authorOndrej Zajicek <santiago@crfreenet.org>
Thu, 26 Sep 2013 15:33:00 +0000 (17:33 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Thu, 26 Sep 2013 15:33:00 +0000 (17:33 +0200)
And some minor fixes.

Thanks to Sergey Popovich for the patch.

nest/neighbor.c
sysdep/linux/netlink.c

index 9dce811941df9814d4f9db9193648a6895bdb3ab..11a980b25f9b3dafa9fccfe099c174b3bb624da3 100644 (file)
@@ -231,7 +231,7 @@ neigh_up(neighbor *n, struct iface *i, int scope)
 static void
 neigh_down(neighbor *n)
 {
-  DBG("Flushing neighbor %I on %s\n", n->addr, i->name);
+  DBG("Flushing neighbor %I on %s\n", n->addr, n->iface->name);
   rem_node(&n->if_n);
   if (! (n->flags & NEF_BIND))
     n->iface = NULL;
index f61e31a5069e67e5e890328c5d90417876a832a9..08dc11b6e1f3f3a78c3e50c41dcba662f4e059eb 100644 (file)
@@ -7,6 +7,7 @@
  */
 
 #include <stdio.h>
+#include <unistd.h>
 #include <fcntl.h>
 #include <sys/socket.h>
 #include <sys/uio.h>
@@ -1040,11 +1041,9 @@ nl_open_async(void)
   sock *sk;
   struct sockaddr_nl sa;
   int fd;
-  static int nl_open_tried = 0;
 
-  if (nl_open_tried)
+  if (nl_async_sk)
     return;
-  nl_open_tried = 1;
 
   DBG("KRT: Opening async netlink socket\n");
 
@@ -1065,18 +1064,18 @@ nl_open_async(void)
   if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) < 0)
     {
       log(L_ERR "Unable to bind asynchronous rtnetlink socket: %m");
+      close(fd);
       return;
     }
 
+  nl_async_rx_buffer = xmalloc(NL_RX_SIZE);
+
   sk = nl_async_sk = sk_new(krt_pool);
   sk->type = SK_MAGIC;
   sk->rx_hook = nl_async_hook;
   sk->fd = fd;
   if (sk_open(sk))
     bug("Netlink: sk_open failed");
-
-  if (!nl_async_rx_buffer)
-    nl_async_rx_buffer = xmalloc(NL_RX_SIZE);
 }
 
 /*
@@ -1097,6 +1096,7 @@ krt_sys_start(struct krt_proto *p)
 void
 krt_sys_shutdown(struct krt_proto *p UNUSED)
 {
+  nl_table_map[KRT_CF->sys.table_id] = NULL;
 }
 
 int