mirror of
https://github.com/xcat2/xNBA.git
synced 2024-12-12 14:26:34 +00:00
[ifmgmt] Move link-up status messages from autoboot() to iflinkwait()
With the addition of link status codes, we can now display a detailed error indication if iflinkwait() fails. Putting the error output in iflinkwait avoids code duplication, and gains symmetry with the other interface management routines; ifopen() already prints an error directly if it cannot open its interface. Modified-by: Michael Brown <mcb30@etherboot.org> Signed-off-by: Michael Brown <mcb30@etherboot.org>
This commit is contained in:
parent
a310d00d37
commit
4125216a2f
@ -154,12 +154,8 @@ static int netboot ( struct net_device *netdev ) {
|
||||
ifstat ( netdev );
|
||||
|
||||
/* Wait for link-up */
|
||||
printf ( "Waiting for link-up on %s...", netdev->name );
|
||||
if ( ( rc = iflinkwait ( netdev, LINK_WAIT_MS ) ) != 0 ) {
|
||||
printf ( " no link detected\n" );
|
||||
if ( ( rc = iflinkwait ( netdev, LINK_WAIT_MS ) ) != 0 )
|
||||
return rc;
|
||||
}
|
||||
printf ( " ok\n" );
|
||||
|
||||
/* Configure device via DHCP */
|
||||
if ( ( rc = dhcp ( netdev ) ) != 0 )
|
||||
|
@ -103,25 +103,45 @@ void ifstat ( struct net_device *netdev ) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait for link-up
|
||||
* Wait for link-up, with status indication
|
||||
*
|
||||
* @v netdev Network device
|
||||
* @v max_wait_ms Maximum time to wait, in ms
|
||||
*/
|
||||
int iflinkwait ( struct net_device *netdev, unsigned int max_wait_ms ) {
|
||||
int key;
|
||||
int rc;
|
||||
|
||||
if ( netdev_link_ok ( netdev ) )
|
||||
return 0;
|
||||
|
||||
printf ( "Waiting for link-up on %s...", netdev->name );
|
||||
|
||||
while ( 1 ) {
|
||||
if ( netdev_link_ok ( netdev ) )
|
||||
return 0;
|
||||
if ( max_wait_ms-- == 0 )
|
||||
return -ETIMEDOUT;
|
||||
if ( netdev_link_ok ( netdev ) ) {
|
||||
rc = 0;
|
||||
break;
|
||||
}
|
||||
if ( max_wait_ms-- == 0 ) {
|
||||
rc = netdev->link_rc;
|
||||
break;
|
||||
}
|
||||
step();
|
||||
if ( iskey() ) {
|
||||
key = getchar();
|
||||
if ( key == CTRL_C )
|
||||
return -ECANCELED;
|
||||
if ( key == CTRL_C ) {
|
||||
rc = -ECANCELED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
mdelay ( 1 );
|
||||
}
|
||||
|
||||
if ( rc == 0 ) {
|
||||
printf ( " ok\n" );
|
||||
} else {
|
||||
printf ( " failed: %s\n", strerror ( rc ) );
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user