? sbin/dhcpcd/.gdbinit Index: dist/if-bsd.c =================================================================== RCS file: /cvsroot/src/external/bsd/dhcpcd/dist/if-bsd.c,v retrieving revision 1.6 diff -u -p -r1.6 if-bsd.c --- dist/if-bsd.c 14 Jun 2014 20:55:37 -0000 1.6 +++ dist/if-bsd.c 1 Jul 2014 13:24:58 -0000 @@ -779,6 +779,7 @@ if_managelink(struct dhcpcd_ctx *ctx) #endif bytes = read(ctx->link_fd, msg, sizeof(msg)); +syslog(LOG_INFO, "%s: read %d bytes\n", __func__, (int)bytes); if (bytes == -1) return -1; if (bytes == 0) @@ -786,19 +787,23 @@ if_managelink(struct dhcpcd_ctx *ctx) e = msg + bytes; for (p = msg; p < e; p += rtm->rtm_msglen) { rtm = (struct rt_msghdr *)(void *)p; +syslog(LOG_INFO, "%s: rtm pid %d type %d", __func__, rtm->rtm_pid, rtm->rtm_type); // Ignore messages generated by us - if (rtm->rtm_pid == getpid()) + if (rtm->rtm_pid == getpid()) {syslog(LOG_INFO, "skipped %d", rtm->rtm_msglen); break; + } switch(rtm->rtm_type) { #ifdef RTM_IFANNOUNCE case RTM_IFANNOUNCE: ifan = (struct if_announcemsghdr *)(void *)p; switch(ifan->ifan_what) { case IFAN_ARRIVAL: +syslog(LOG_INFO, "%s: IFAN_ARRIVAL", __func__); dhcpcd_handleinterface(ctx, 1, ifan->ifan_name); break; case IFAN_DEPARTURE: +syslog(LOG_INFO, "%s: IFAN_DEPARTURE", __func__); dhcpcd_handleinterface(ctx, -1, ifan->ifan_name); break; @@ -808,16 +813,22 @@ if_managelink(struct dhcpcd_ctx *ctx) case RTM_IFINFO: ifm = (struct if_msghdr *)(void *)p; memset(ifname, 0, sizeof(ifname)); + if (!(if_indextoname(ifm->ifm_index, ifname))) break; + switch (ifm->ifm_data.ifi_link_state) { case LINK_STATE_DOWN: +syslog(LOG_INFO, "%s: LINK_STATE_DOWN", __func__); len = LINK_DOWN; break; case LINK_STATE_UP: +syslog(LOG_INFO, "%s: LINK_STATE_UP", __func__); len = LINK_UP; break; default: +syslog(LOG_INFO, "%s: RTM_IFINFO default", __func__); +syslog(LOG_INFO, "%s: ifm->ifm_flags %x", __func__, ifm->ifm_flags); /* handle_carrier will re-load * the interface flags and check for * IFF_RUNNING as some drivers that @@ -839,6 +850,7 @@ if_managelink(struct dhcpcd_ctx *ctx) sa = (struct sockaddr *)(void *)cp; if (sa->sa_family != AF_INET) break; +syslog(LOG_INFO, "%s: RTM_DELETE", __func__); #ifdef INET get_addrs(rtm->rtm_addrs, cp, rti_info); memset(&rt, 0, sizeof(rt));