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 2014-09-28 22:58, Frank Kardel wrote:
On 09/28/14 23:17, Roy Marples wrote:
On Sunday 28 Sep 2014 22:06:47 Roy Marples wrote:
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.
Errm, this patch should do better!
Roy
Well, less spam, but still
- busy wait (repeated count goes up to ~300k)
Sep 28 23:50:05 Andromeda dhcpcd[1101]: ppp0: unknown carrier
Sep 28 23:50:05 Andromeda dhcpcd[1101]: ppp0: carrier_status:
Inappropriate ioctl for device
Sep 28 23:50:14 Andromeda syslogd[1251]: last message repeated 12776
times
- a flurry of routing messages (probably same number of as syslog
entries)
got message of size 152 on Sun Sep 28 23:50:10 2014
RTM_IFINFO: iface status change: len 152, if# 6, carrier: unknown,
flags: <UP,PTP,MULTICAST>
got message of size 152 on Sun Sep 28 23:50:10 2014
Yes, these messages are being triggerd by a flurry of routing messages.
This is probably a bug in NetBSD somewhere and the attached patch should
pretty much silence the warnings down to one n dhcpcd until the link
actually comes up.
Let me know how this one works!
Thanks
Roy
Index: dhcpcd.c
==================================================================
--- dhcpcd.c
+++ dhcpcd.c
@@ -547,19 +547,23 @@
* 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 */
- else if (carrier == LINK_DOWN || (ifp->flags & IFF_UP) == 0) {
+ if (carrier == LINK_UNKNOWN) {
+ if (!ifp->options->options & DHCPCD_LINK_WARNED) {
+ syslog(LOG_ERR, "%s: carrier_status: %m", ifname);
+ ifp->options->options |= DHCPCD_LINK_WARNED;
+ }
+ } else if (carrier == LINK_DOWN || (ifp->flags & IFF_UP) == 0) {
if (ifp->carrier != LINK_DOWN) {
if (ifp->carrier == LINK_UP)
syslog(LOG_INFO, "%s: carrier lost", ifp->name);
ifp->carrier = LINK_DOWN;
script_runreason(ifp, "NOCARRIER");
@@ -648,21 +652,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);
+ 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