From: Roy Marples Date: Sun, 26 Jan 2020 15:46:41 +0000 (+0000) Subject: dhcpcd: When route socket overflows, report how large it is. X-Git-Tag: v9.0.0~78 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc85153671e9e34b1d8459eea5975e6eb91aa852;p=thirdparty%2Fdhcpcd.git dhcpcd: When route socket overflows, report how large it is. Of course Linux likes to double it, so cater for this. --- 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