]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Removed the `async' switch which was used for debugging only anyway.
authorMartin Mares <mj@ucw.cz>
Mon, 8 May 2000 12:05:55 +0000 (12:05 +0000)
committerMartin Mares <mj@ucw.cz>
Mon, 8 May 2000 12:05:55 +0000 (12:05 +0000)
Don't moan when netlink reports lost packets.

sysdep/linux/netlink/krt-scan.h
sysdep/linux/netlink/netlink.Y
sysdep/linux/netlink/netlink.c

index ec10a7fec17b7a4fb8e319c822f3f9f3d9006fb5..2f8fe761d646ca0c8cc5c2b082f890e1f3214330 100644 (file)
@@ -22,7 +22,6 @@
 #endif
 
 struct krt_scan_params {
-  int async;                           /* Allow asynchronous events */
   int table_id;                                /* Kernel table ID we sync with */
 };
 
@@ -32,7 +31,7 @@ struct krt_scan_status {
 
 static inline int krt_scan_params_same(struct krt_scan_params *o, struct krt_scan_params *n)
 {
-  return o->async == n->async && o->table_id == n->table_id;
+  return o->table_id == n->table_id;
 }
 
 #endif
index 36a447d19045a0aea4f698da02d4c12c79113390..c5dcf6204f45575a83c24eaea240e09b4f5438ff 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *     BIRD -- Linux Netlink Configuration
  *
- *     (c) 1999 Martin Mares <mj@ucw.cz>
+ *     (c) 1999--2000 Martin Mares <mj@ucw.cz>
  *
  *     Can be freely distributed and used under the terms of the GNU GPL.
  */
@@ -17,8 +17,7 @@ CF_GRAMMAR
 CF_ADDTO(kern_proto, kern_proto nl_item ';')
 
 nl_item:
-   ASYNC bool { THIS_KRT->scan.async = $2; }
- | KERNEL TABLE expr {
+   KERNEL TABLE expr {
        if ($3 <= 0 || $3 >= NL_NUM_TABLES)
          cf_error("Kernel routing table number out of range");
        THIS_KRT->scan.table_id = $3;
index 7f66af92d3a5e8929074da2c0cc021fce2ee80da..db744135344e9d46d5018168a16e836c65b234d7 100644 (file)
@@ -768,7 +768,16 @@ nl_async_hook(sock *sk, int size)
   x = recvmsg(sk->fd, &m, 0);
   if (x < 0)
     {
-      if (errno != EWOULDBLOCK)
+      if (errno == ENOBUFS)
+       {
+         /*
+          *  Netlink reports some packets have been thrown away.
+          *  One day we might react to it by asking for route table
+          *  scan in near future.
+          */
+         return 1;     /* More data are likely to be ready */
+       }
+      else if (errno != EWOULDBLOCK)
        log(L_ERR "Netlink recvmsg: %m");
       return 0;
     }
@@ -800,6 +809,11 @@ nl_open_async(void)
   sock *sk;
   struct sockaddr_nl sa;
   int fd;
+  static int nl_open_tried = 0;
+
+  if (nl_open_tried)
+    return;
+  nl_open_tried = 1;
 
   DBG("KRT: Opening async netlink socket\n");
 
@@ -859,11 +873,9 @@ krt_scan_postconfig(struct krt_config *x)
 void
 krt_scan_construct(struct krt_config *x)
 {
-  x->scan.async = 1;
 #ifndef IPV6
   x->scan.table_id = RT_TABLE_MAIN;
 #endif
-  /* FIXME: Use larger defaults for scanning times? */
 }
 
 void
@@ -874,8 +886,7 @@ krt_scan_start(struct krt_proto *p, int first)
   if (first)
     {
       nl_open();
-      if (KRT_CF->scan.async)  /* FIXME: Async is for debugging only. Get rid of it some day. */
-       nl_open_async();
+      nl_open_async();
     }
 }
 
@@ -888,5 +899,5 @@ void
 krt_if_start(struct kif_proto *p)
 {
   nl_open();
-  /* FIXME: nl_open_async() after scan.async is gone */
+  nl_open_async();
 }