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