+ fix minor regression in OSPF sending buffer adjustment logic
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog
index feba89a..ce76516 100644
--- a/ospfd/ChangeLog
+++ b/ospfd/ChangeLog
@@ -1,3 +1,10 @@
+2007-09-18 Denis Ovsienko
+
+ * ospf_network.c: (ospf_adjust_sndbuflen) Don't complain
+ about getting more buffer space, than requested.
+ * ospfd.[ch]: (ospf_new) Abandon OSPF_SNDBUFLEN_DEFAULT
+ and consider OS's initial buffer size instead.
+
2007-08-21 Denis Ovsienko
* ospfd.h: Extend struct ospf with maxsndbuflen field and
diff --git a/ospfd/ospf_network.c b/ospfd/ospf_network.c
index 11155db..d5bf749 100644
--- a/ospfd/ospf_network.c
+++ b/ospfd/ospf_network.c
@@ -249,15 +249,15 @@
zlog_err ("%s: could not raise privs, %s", __func__,
safe_strerror (errno));
/* Now we try to set SO_SNDBUF to what our caller has requested
- * (OSPF_SNDBUFLEN_DEFAULT initially, which seems to be a sane
- * default; or the MTU of a newly added interface). However,
- * if the OS has truncated the actual buffer size to somewhat
- * less or bigger size, try to detect it and update our records
- * appropriately.
+ * (the MTU of a newly added interface). However, if the OS has
+ * truncated the actual buffer size to somewhat less size, try
+ * to detect it and update our records appropriately. The OS
+ * may allocate more buffer space, than requested, this isn't
+ * a error.
*/
ret = setsockopt_so_sendbuf (ospf->fd, buflen);
newbuflen = getsockopt_so_sendbuf (ospf->fd);
- if (ret < 0 || newbuflen != buflen)
+ if (ret < 0 || newbuflen < buflen)
zlog_warn ("%s: tried to set SO_SNDBUF to %d, but got %d",
__func__, buflen, newbuflen);
if (newbuflen >= 0)
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index 8133050..a4c4fac 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -33,6 +33,7 @@
#include "sockunion.h" /* for inet_aton () */
#include "zclient.h"
#include "plist.h"
+#include "sockopt.h"
#include "ospfd/ospfd.h"
#include "ospfd/ospf_network.h"
@@ -212,8 +213,10 @@
"a socket");
exit(1);
}
- new->maxsndbuflen = 0;
- ospf_adjust_sndbuflen (new, OSPF_SNDBUFLEN_DEFAULT);
+ new->maxsndbuflen = getsockopt_so_sendbuf (new->fd);
+ if (IS_DEBUG_OSPF (zebra, ZEBRA_INTERFACE))
+ zlog_debug ("%s: starting with OSPF send buffer size %d",
+ __func__, new->maxsndbuflen);
if ((new->ibuf = stream_new(OSPF_MAX_PACKET_SIZE+1)) == NULL)
{
zlog_err("ospf_new: fatal error: stream_new(%u) failed allocating ibuf",
diff --git a/ospfd/ospfd.h b/ospfd/ospfd.h
index b0a14ce..7a0ffce 100644
--- a/ospfd/ospfd.h
+++ b/ospfd/ospfd.h
@@ -129,9 +129,6 @@
#define OSPF_LS_REFRESH_SHIFT (60 * 15)
#define OSPF_LS_REFRESH_JITTER 60
-/* Initial send buffer size for ospfd raw sending socket. */
-#define OSPF_SNDBUFLEN_DEFAULT 1024
-
/* OSPF master for system wide configuration and variables. */
struct ospf_master
{