summaryrefslogtreecommitdiffstats
path: root/src/dhcpcd.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2020-01-26 15:46:41 +0000
committerRoy Marples <roy@marples.name>2020-01-26 15:46:41 +0000
commit63f3177991de2716b6d5364e2906c39d140b54fa (patch)
tree2bdea1244fabe8c9eba297664bec6e6534dd8c85 /src/dhcpcd.c
parent3bca2be9a4dba4deea45131c687a390f23332f2a (diff)
downloaddhcpcd-63f3177991de2716b6d5364e2906c39d140b54fa.tar.xz
dhcpcd: When route socket overflows, report how large it is.
Of course Linux likes to double it, so cater for this.
Diffstat (limited to 'src/dhcpcd.c')
-rw-r--r--src/dhcpcd.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/dhcpcd.c b/src/dhcpcd.c
index 20ade526..b6c531d6 100644
--- a/src/dhcpcd.c
+++ b/src/dhcpcd.c
@@ -1116,11 +1116,23 @@ dhcpcd_setlinkrcvbuf(struct dhcpcd_ctx *ctx)
void
dhcpcd_linkoverflow(struct dhcpcd_ctx *ctx)
{
+ socklen_t socklen;
+ int rcvbuflen;
struct if_head *ifaces;
struct ifaddrs *ifaddrs;
struct interface *ifp, *ifn, *ifp1;
- logerrx("route socket overflowed - learning interface state");
+ socklen = sizeof(rcvbuflen);
+ if (getsockopt(ctx->link_fd, SOL_SOCKET,
+ SO_RCVBUF, &rcvbuflen, &socklen) == -1)
+ rcvbuflen = 0;
+#ifdef __linux__
+ else
+ rcvbuflen /= 2;
+#endif
+
+ logerrx("route socket overflowed (rcvbuflen %d)"
+ " - learning interface state", rcvbuflen);
/* Close the existing socket and open a new one.
* This is easier than draining the kernel buffer of an