Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: recent dhcpcd looping on ppp0



Hi Frank

On Sunday 28 Sep 2014 16:14:01 Frank Kardel wrote:
> The recent dhcpcd version (-current around 20140927) seems to be looping
> on ppp* interfaces.
> 
> Sep 28 15:14:11 Andromeda dhcpcd[3259]: ppp0: unknown carrier
> Sep 28 15:14:11 Andromeda dhcpcd[3259]: ppp0: carrier_status:
> Inappropriate ioctl for device
> Sep 28 15:14:11 Andromeda dhcpcd[3259]: ppp0: unknown carrier
> Sep 28 15:14:11 Andromeda dhcpcd[3259]: ppp0: carrier_status:
> Inappropriate ioctl for device
> Sep 28 15:14:11 Andromeda dhcpcd[3259]: ppp0: unknown carrier
> Sep 28 15:14:11 Andromeda dhcpcd[3259]: ppp0: carrier_status:
> Inappropriate ioctl for device
> Sep 28 15:14:11 Andromeda dhcpcd[3259]: ppp0: unknown carrier
> Sep 28 15:14:11 Andromeda dhcpcd[3259]: ppp0: carrier_status:
> Inappropriate ioctl for device
> ....

Going to guess that ppp0 doesn't have a carrier status OR IFF_RUNNING set?
The attached patch should reduce the log spam, let me know how it works out.

Thanks

Roy
Index: dhcpcd.c
==================================================================
--- dhcpcd.c
+++ dhcpcd.c
@@ -547,13 +547,15 @@
 		 * dhcpcd has already set it.
 		 *
 		 * So we check the flags now. If IFF_UP is still not set
 		 * then we should expect an accompanying link_down message */
 		if_setflag(ifp, 0); /* will set ifp->flags */
+		ifp->options->options &= ~DHCPCD_LINK_WARNED;
 		break;
 	default:
 		ifp->flags = flags;
+		ifp->options->options &= ~DHCPCD_LINK_WARNED;
 	}
 
 	if (carrier == LINK_UNKNOWN)
 		syslog(LOG_ERR, "%s: carrier_status: %m", ifname);
 	/* IFF_RUNNING is checked, if needed, earlier and is OS dependant */
@@ -648,21 +650,26 @@
 
 	if (ifo->options & DHCPCD_LINK) {
 link_retry:
 		switch (ifp->carrier) {
 		case LINK_UP:
+			ifo->options &= ~DHCPCD_LINK_WARNED;
 			break;
 		case LINK_DOWN:
+			ifo->options &= ~DHCPCD_LINK_WARNED;
 			syslog(LOG_INFO, "%s: waiting for carrier", ifp->name);
 			return;
 		case LINK_UNKNOWN:
 			/* No media state available, so we loop until
 			 * IFF_UP and IFF_RUNNING are set. */
 			ifp->carrier = if_carrier(ifp);
 			if (ifp->carrier != LINK_UNKNOWN)
 				goto link_retry;
-			syslog(LOG_INFO, "%s: unknown carrier", ifp->name);
+			if (ifo->options & DHCPCD_LINK_WARNED)
+				syslog(LOG_INFO, "%s: unknown carrier", ifp->name);
+			else
+				ifo->options |= DHCPCD_LINK_WARNED;
 			tv.tv_sec = 0;
 			tv.tv_usec = 100;
 			eloop_timeout_add_tv(ifp->ctx->eloop, &tv,
 			    dhcpcd_startinterface, ifp);
 			return;

Index: if-options.h
==================================================================
--- if-options.h
+++ if-options.h
@@ -104,10 +104,11 @@
 #define DHCPCD_DHCP			(1ULL << 49)
 #define DHCPCD_DHCP6			(1ULL << 50)
 #define DHCPCD_NOPFXDLG			(1ULL << 51)
 #define DHCPCD_PFXDLGONLY		(1ULL << 52)
 #define DHCPCD_PFXDLGMIX		(1ULL << 53)
+#define DHCPCD_LINK_WARNED		(1ULL << 54)
 
 extern const struct option cf_options[];
 
 struct if_sla {
 	char ifname[IF_NAMESIZE];



Home | Main Index | Thread Index | Old Index