dhcpcd: Emit more state change events
Send more state change signals over the D-Bus interface.
This will allow shill to gather metrics on the dhcp client
behavior, including recent changes regarding NAK behavior.
BUG=chromium:384897
TEST=DHCP autotests, and instrumentation inside shill
Change-Id: Ifc596dde5b099327ec33a7b3ea728a75e33f1e9d
Reviewed-on: https://chromium-review.googlesource.com/208835
Reviewed-by: Paul Stewart <pstew@chromium.org>
Commit-Queue: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/dhcpcd-dbus.c b/dhcpcd-dbus.c
index a039ce6..7eaf797 100644
--- a/dhcpcd-dbus.c
+++ b/dhcpcd-dbus.c
@@ -665,6 +665,9 @@
if (write_lease(ifp, ifp->state->new) == -1)
syslog(LOG_ERR, "write_lease: %m");
+ dhcpcd_dbus_signal_status("Bound");
+ } else {
+ dhcpcd_dbus_signal_status("Release");
}
return 0;
}
diff --git a/dhcpcd.c b/dhcpcd.c
index 210029d..4542ac9 100644
--- a/dhcpcd.c
+++ b/dhcpcd.c
@@ -493,6 +493,7 @@
if (type == DHCP_NAK) {
/* Wait for a DHCP listen interval before accepting this NAK */
log_dhcp(LOG_WARNING, "NAK (deferred):", iface, dhcp, from);
+ dhcpcd_dbus_signal_status("NakDefer");
if (state->nak_receive_count == 0)
add_timeout_sec(DHCP_BASE, handle_nak, iface);
state->nak_receive_count++;
@@ -520,6 +521,7 @@
{
log_dhcp(LOG_WARNING, "reject invalid address",
iface, dhcp, from);
+ dhcpcd_dbus_signal_status("IgnoreInvalidOffer");
return;
}
@@ -535,6 +537,7 @@
log_dhcp(LOG_WARNING,
"reject previously declined address",
iface, dhcp, from);
+ dhcpcd_dbus_signal_status("IgnoreFailedOffer");
iface->state->failed_address_offer_count++;
return;
}
@@ -576,6 +579,7 @@
if (type == DHCP_OFFER) {
log_dhcp(LOG_INFO, "ignoring offer of", iface, dhcp,
from);
+ dhcpcd_dbus_signal_status("IgnoreAdditionalOffer");
return;
}
@@ -583,6 +587,7 @@
if (type != DHCP_ACK) {
log_dhcp(LOG_ERR, "not ACK or OFFER", iface, dhcp,
from);
+ dhcpcd_dbus_signal_status("IgnoreNonOffer");
return;
}
@@ -609,11 +614,15 @@
if (((ifo->options & DHCPCD_ARP) != 0 ||
state->nak_receive_count > 0 ||
dhcp->yiaddr == iface->state->fail.s_addr) &&
- start_arpself(iface) != 0)
+ start_arpself(iface) != 0) {
+ dhcpcd_dbus_signal_status("ArpSelf");
return;
+ }
- if ((ifo->options & DHCPCD_ARPGW) != 0 && start_arpgw(iface) != 0)
+ if ((ifo->options & DHCPCD_ARPGW) != 0 && start_arpgw(iface) != 0) {
+ dhcpcd_dbus_signal_status("ArpGateway");
return;
+ }
bind_interface(iface);
}
@@ -903,6 +912,7 @@
struct interface *iface = arg;
struct if_options *ifo = iface->state->options;
+ dhcpcd_dbus_signal_status("Discover");
iface->state->state = DHS_DISCOVER;
iface->state->xid = dhcp_xid(iface);
iface->state->nak_receive_count = 0;
@@ -929,6 +939,7 @@
syslog(LOG_INFO, "%s: requesting lease of %s",
iface->name, inet_ntoa(iface->state->lease.addr));
+ dhcpcd_dbus_signal_status("Request");
iface->state->state = DHS_REQUEST;
iface->state->nak_receive_count = 0;
send_request(iface);
@@ -941,6 +952,7 @@
syslog(LOG_INFO, "%s: renewing lease of %s",
iface->name, inet_ntoa(iface->state->lease.addr));
+ dhcpcd_dbus_signal_status("Renew");
iface->state->state = DHS_RENEW;
iface->state->xid = dhcp_xid(iface);
iface->state->nak_receive_count = 0;
@@ -954,6 +966,7 @@
syslog(LOG_ERR, "%s: failed to renew, attempting to rebind",
iface->name);
+ dhcpcd_dbus_signal_status("Rebind");
iface->state->state = DHS_REBIND;
delete_timeout(send_renew, iface);
iface->state->lease.server.s_addr = 0;
@@ -1042,6 +1055,7 @@
start_static(iface);
}
+ dhcpcd_dbus_signal_status("Inform");
iface->state->state = DHS_INFORM;
iface->state->xid = dhcp_xid(iface);
send_inform(iface);
@@ -1081,6 +1095,7 @@
}
if (ifo->options & DHCPCD_UNICAST_ARP)
start_unicast_arp(iface);
+ dhcpcd_dbus_signal_status("Reboot");
iface->state->state = DHS_REBOOT;
iface->state->xid = dhcp_xid(iface);
iface->state->lease.server.s_addr = 0;