2004-09-17 Paul Jakma <paul@dishone.st>

        * ripngd/ripngd.c: move setsockopt_so_recvbuf to lib.
        * lib/sockopt.{c,h}: Add setsockopt_so_recvbuf, for ripd and ripngd.
        * ripd/ripd.c: set receive buffer to a decent size, some systems
          have low defaults. Problem noted and fix suggested by Stephan
          Schweizer in [zebra 20967].
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 2ce2302..a4ed5dd 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,7 @@
+2004-09-17 Paul Jakma <paul@dishone.st>
+
+	* sockopt.{c,h}: Add setsockopt_so_recvbuf, for ripd and ripngd.
+
 2004-09-13 Paul Jakma <paul@dishone.st>
 
 	* command.c: Update the copyright string in the default motd.
diff --git a/lib/sockopt.c b/lib/sockopt.c
index d0b034f..dbd5df5 100644
--- a/lib/sockopt.c
+++ b/lib/sockopt.c
@@ -23,6 +23,18 @@
 #include "log.h"
 #include "sockopt.h"
 
+int
+setsockopt_so_recvbuf (int sock, int size)
+{
+  int ret;
+  
+  if ( (ret = setsockopt (sock, SOL_SOCKET, SO_RCVBUF, (char *) 
+                          &size, sizeof (int)) < 0);
+    zlog_err ("can't setsockopt SO_RCVBUF");
+
+  return ret;
+}
+
 static void *
 getsockopt_cmsg_data (struct msghdr *msgh, int level, int type)
 {
diff --git a/lib/sockopt.h b/lib/sockopt.h
index 8d775cd..3f4a705 100644
--- a/lib/sockopt.h
+++ b/lib/sockopt.h
@@ -22,6 +22,8 @@
 #ifndef _ZEBRA_SOCKOPT_H
 #define _ZEBRA_SOCKOPT_H
 
+int setsockopt_so_recvbuf (int sock, int size);
+
 #ifdef HAVE_IPV6
 int setsockopt_ipv6_pktinfo (int, int);
 int setsockopt_ipv6_checksum (int, int);
diff --git a/ripd/ChangeLog b/ripd/ChangeLog
index 8ab8a10..1921b78 100644
--- a/ripd/ChangeLog
+++ b/ripd/ChangeLog
@@ -1,3 +1,9 @@
+2004-09-17 Paul Jakma <paul@dishone.st>
+
+	* ripd.c: set receive buffer to a decent size, some systems have low
+	  defaults. Problem noted and fix suggested by Stephan Schweizer
+	  in [zebra 20967].
+
 2004-08-19 Paul Jakma <paul@dishone.st>
 
 	* rip_interface.c: (rip_interface_multicast_set) get rid
diff --git a/ripd/ripd.c b/ripd/ripd.c
index af0e186..5fbb349 100644
--- a/ripd/ripd.c
+++ b/ripd/ripd.c
@@ -42,6 +42,10 @@
 #include "ripd/ripd.h"
 #include "ripd/rip_debug.h"
 
+/* UDP receive buffer size */
+#define RIP_UDP_RCV_BUF 41600
+
+/* privileges global */
 extern struct zebra_privs_t ripd_privs;
 
 /* RIP Structure. */
@@ -1977,6 +1981,7 @@
   sockopt_broadcast (sock);
   sockopt_reuseaddr (sock);
   sockopt_reuseport (sock);
+  setsockopt_so_recvbuf (sock, RIP_UDP_RCV_BUF);
 #ifdef RIP_RECVMSG
   setsockopt_pktinfo (sock);
 #endif /* RIP_RECVMSG */
diff --git a/ripngd/ChangeLog b/ripngd/ChangeLog
index 6b05f3d..64ee7d8 100644
--- a/ripngd/ChangeLog
+++ b/ripngd/ChangeLog
@@ -1,3 +1,7 @@
+2004-09-17 Paul Jakma <paul@dishone.st>
+
+	* ripngd.c: move setsockopt_so_recvbuf to lib.
+
 2004-07-23  Hasso Tepper  <hasso@estpak.ee>
 
 	* ripng_interface.c, ripng_nexthop.c: use ifp->mtu6 instead of
diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c
index b1edd6f..77e4754 100644
--- a/ripngd/ripngd.c
+++ b/ripngd/ripngd.c
@@ -107,17 +107,6 @@
   XFREE (MTYPE_RIPNG_ROUTE, rinfo);
 }
 
-static int
-setsockopt_so_recvbuf (int sock, int size)
-{
-  int ret;
-
-  ret = setsockopt (sock, SOL_SOCKET, SO_RCVBUF, (char *) &size, sizeof (int));
-  if (ret < 0)
-    zlog (NULL, LOG_ERR, "can't setsockopt SO_RCVBUF");
-  return ret;
-}
-
 /* Create ripng socket. */
 int 
 ripng_make_socket (void)