[cmdline] Add "--timeout" parameter to "ifconf" command

Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/129/head
Joe Groocock 2019-09-20 13:41:29 +01:00 committed by Michael Brown
parent 145311c62e
commit a08ee6e722
4 changed files with 14 additions and 5 deletions

View File

@ -193,6 +193,8 @@ static int ifstat_exec ( int argc, char **argv ) {
/** "ifconf" options */
struct ifconf_options {
/** Configuration timeout */
unsigned long timeout;
/** Configurator */
struct net_device_configurator *configurator;
};
@ -202,6 +204,9 @@ static struct option_descriptor ifconf_opts[] = {
OPTION_DESC ( "configurator", 'c', required_argument,
struct ifconf_options, configurator,
parse_netdev_configurator ),
OPTION_DESC ( "timeout", 't', required_argument,
struct ifconf_options, timeout,
parse_timeout ),
};
/**
@ -216,7 +221,8 @@ static int ifconf_payload ( struct net_device *netdev,
int rc;
/* Attempt configuration */
if ( ( rc = ifconf ( netdev, opts->configurator ) ) != 0 ) {
if ( ( rc = ifconf ( netdev, opts->configurator,
opts->timeout ) ) != 0 ) {
/* Close device on failure, to avoid memory exhaustion */
netdev_close ( netdev );

View File

@ -14,7 +14,8 @@ struct net_device_configurator;
extern int ifopen ( struct net_device *netdev );
extern int ifconf ( struct net_device *netdev,
struct net_device_configurator *configurator );
struct net_device_configurator *configurator,
unsigned long timeout );
extern void ifclose ( struct net_device *netdev );
extern void ifstat ( struct net_device *netdev );
extern int iflinkwait ( struct net_device *netdev, unsigned long timeout );

View File

@ -396,7 +396,7 @@ int netboot ( struct net_device *netdev ) {
ifstat ( netdev );
/* Configure device */
if ( ( rc = ifconf ( netdev, NULL ) ) != 0 )
if ( ( rc = ifconf ( netdev, NULL, 0 ) ) != 0 )
goto err_dhcp;
route();

View File

@ -264,10 +264,12 @@ static int ifconf_progress ( struct ifpoller *ifpoller ) {
*
* @v netdev Network device
* @v configurator Network device configurator, or NULL to use all
* @v timeout Timeout period, in ticks
* @ret rc Return status code
*/
int ifconf ( struct net_device *netdev,
struct net_device_configurator *configurator ) {
struct net_device_configurator *configurator,
unsigned long timeout ) {
int rc;
/* Ensure device is open and link is up */
@ -296,5 +298,5 @@ int ifconf ( struct net_device *netdev,
( configurator ? configurator->name : "" ),
( configurator ? "] " : "" ),
netdev->name, netdev->ll_protocol->ntoa ( netdev->ll_addr ) );
return ifpoller_wait ( netdev, configurator, 0, ifconf_progress );
return ifpoller_wait ( netdev, configurator, timeout, ifconf_progress );
}