summaryrefslogtreecommitdiff
path: root/plugins/dhclient.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-03-24 15:13:57 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-03-24 15:13:57 +0100
commitee6a91f87363f8ecb31cac1c63e52328456469ba (patch)
tree20f505305704b34702896e9fe5d910e80cde1843 /plugins/dhclient.c
parent74fd87ac31a8b3f1f5061463fc3db9203c7e9253 (diff)
downloadconnman-ee6a91f87363f8ecb31cac1c63e52328456469ba.tar.gz
connman-ee6a91f87363f8ecb31cac1c63e52328456469ba.tar.bz2
connman-ee6a91f87363f8ecb31cac1c63e52328456469ba.zip
Propagate DHCP errors to parent elements
Diffstat (limited to 'plugins/dhclient.c')
-rw-r--r--plugins/dhclient.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/plugins/dhclient.c b/plugins/dhclient.c
index 7e5e6d0a..0bf9ad11 100644
--- a/plugins/dhclient.c
+++ b/plugins/dhclient.c
@@ -215,11 +215,21 @@ static void dhclient_remove(struct connman_element *element)
kill_task(task);
}
+static void dhclient_change(struct connman_element *element)
+{
+ DBG("element %p name %s", element, element->name);
+
+ if (element->state == CONNMAN_ELEMENT_STATE_ERROR)
+ connman_element_set_error(element->parent,
+ CONNMAN_ELEMENT_ERROR_DHCP_FAILED);
+}
+
static struct connman_driver dhclient_driver = {
.name = "dhclient",
.type = CONNMAN_ELEMENT_TYPE_DHCP,
.probe = dhclient_probe,
.remove = dhclient_remove,
+ .change = dhclient_change,
};
static DBusHandlerResult dhclient_filter(DBusConnection *conn,
@@ -306,6 +316,9 @@ static DBusHandlerResult dhclient_filter(DBusConnection *conn,
} else if (g_ascii_strcasecmp(text, "RENEW") == 0 ||
g_ascii_strcasecmp(text, "REBIND") == 0) {
connman_element_update(task->element);
+ } else if (g_ascii_strcasecmp(text, "FAIL") == 0) {
+ connman_element_set_error(task->element,
+ CONNMAN_ELEMENT_ERROR_FAILED);
} else {
}