Skip to content

Commit

Permalink
Handle DHCP4 start-delay (DHCLIENT_SLEEP)
Browse files Browse the repository at this point in the history
Signed-off-by: Olaf Hering <olaf@aepfle.de>
  • Loading branch information
olafhering committed Sep 2, 2014
1 parent 4f8148d commit 6169aa6
Showing 1 changed file with 28 additions and 9 deletions.
37 changes: 28 additions & 9 deletions dhcp4/device.c
Original file line number Diff line number Diff line change
Expand Up @@ -495,11 +495,35 @@ ni_dhcp4_device_event(ni_dhcp4_device_t *dev, ni_netdev_t *ifp, ni_event_t event
}
}

static void
ni_dhcp4_device_start_delayed(void *user_data, const ni_timer_t *timer)
{
ni_dhcp4_device_t *dev = user_data;
ni_netconfig_t *nc;
ni_netdev_t *ifp;

if (dev->defer.timer != timer) {
ni_warn("%s: bad timer handle", __func__);
return;
}
dev->defer.timer = NULL;

nc = ni_global_state_handle(0);
ifp = ni_netdev_by_index(nc, dev->link.ifindex);
ni_dhcp4_fsm_init_device(dev);
if (ni_netdev_link_is_up(ifp)) {
ni_dhcp4_fsm_link_up(dev);
} else {
ni_debug_dhcp("%s: defered start until link is up", dev->ifname);
}
}

int
ni_dhcp4_device_start(ni_dhcp4_device_t *dev)
{
ni_netconfig_t *nc;
ni_netdev_t *ifp;
unsigned long msec = dev->config->start_delay * 1000;

ni_dhcp4_device_drop_buffer(dev);
dev->failed = 0;
Expand All @@ -510,15 +534,10 @@ ni_dhcp4_device_start(ni_dhcp4_device_t *dev)
return -1;
}

ni_dhcp4_fsm_init_device(dev);
if (ni_netdev_link_is_up(ifp)) {
ni_dhcp4_fsm_link_up(dev);
return 0;
} else {
ni_debug_dhcp("%s: defered start until link is up",
dev->ifname);
}
return 1;
/* Reuse defer pointer for this one-shot timer */
dev->defer.timer = ni_timer_register(msec, ni_dhcp4_device_start_delayed, dev);

return !ni_netdev_link_is_up(ifp);
}

void
Expand Down

0 comments on commit 6169aa6

Please sign in to comment.