diff options
Diffstat (limited to 'src/usr/dhcpmgmt.c')
| -rw-r--r-- | src/usr/dhcpmgmt.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/usr/dhcpmgmt.c b/src/usr/dhcpmgmt.c index 6042f8b2c..0e36d5557 100644 --- a/src/usr/dhcpmgmt.c +++ b/src/usr/dhcpmgmt.c @@ -23,6 +23,7 @@ #include <gpxe/dhcp.h> #include <gpxe/async.h> #include <gpxe/netdevice.h> +#include <usr/ifmgmt.h> #include <usr/dhcpmgmt.h> /** @file @@ -43,6 +44,7 @@ int dhcp ( struct net_device *netdev ) { struct in_addr address = { htonl ( 0 ) }; struct in_addr netmask = { htonl ( 0 ) }; struct in_addr gateway = { INADDR_NONE }; + struct async async; int rc; /* Check we can open the interface first */ @@ -60,8 +62,14 @@ int dhcp ( struct net_device *netdev ) { printf ( "DHCP (%s %s)...", netdev->name, netdev_hwaddr ( netdev ) ); memset ( &dhcp, 0, sizeof ( dhcp ) ); dhcp.netdev = netdev; - if ( ( rc = async_wait ( start_dhcp ( &dhcp ) ) ) != 0 ) { - printf ( "failed\n" ); + async_init_orphan ( &async ); + if ( ( rc = start_dhcp ( &dhcp, &async ) ) != 0 ) { + printf ( "could not start (%s)\n", strerror ( rc ) ); + return rc; + } + async_wait ( &async, &rc, 1 ); + if ( rc != 0 ) { + printf ( "failed (%s)\n", strerror ( rc ) ); return rc; } printf ( "done\n" ); |
