ipv4->method = CONNMAN_IPV4_METHOD_DHCP;
- if (iface->driver->set_ipv4) {
- iface->driver->set_ipv4(iface, ipv4);
- iface->ipv4 = *ipv4;
- } else {
- connman_iface_set_ipv4(iface, ipv4);
- iface->ipv4 = *ipv4;
- }
-
- connman_iface_update(iface, CONNMAN_IFACE_STATE_READY);
+ connman_iface_set_ipv4(iface, ipv4);
+ iface->ipv4 = *ipv4;
+
+ connman_iface_indicate_configured(iface);
}
return 0;
{
struct connman_dhcp_driver *driver = g_slist_nth_data(drivers, 0);
- if (driver && driver->request)
+ if (iface->flags & CONNMAN_IFACE_FLAG_DHCP)
+ return -1;
+
+ if (driver && driver->request) {
+ iface->flags |= CONNMAN_IFACE_FLAG_DHCP;
return driver->request(iface);
+ }
return -1;
}
{
struct connman_dhcp_driver *driver = g_slist_nth_data(drivers, 0);
- if (driver && driver->release)
+ if (!(iface->flags & CONNMAN_IFACE_FLAG_DHCP))
+ return -1;
+
+ if (driver && driver->release) {
+ iface->flags &= ~CONNMAN_IFACE_FLAG_DHCP;
return driver->release(iface);
+ }
return -1;
}