diff options
author | Michael Brown <mcb30@etherboot.org> | 2009-11-14 03:40:29 +0000 |
---|---|---|
committer | Michael Brown <mcb30@etherboot.org> | 2009-11-16 22:14:12 +0000 |
commit | bbc530c0dde2385d85631cdc9ac82ebd0bdea763 (patch) | |
tree | 5773cce038a53d58c7b3c40f649acd686ff0d1fe /src/drivers/net/ipoib.c | |
parent | 228ac9d0184006d22f12d5daecd0a03d81cd029e (diff) | |
download | ipxe-bbc530c0dde2385d85631cdc9ac82ebd0bdea763.tar.gz |
[infiniband] Report IB link status as IPoIB netdevice status
Diffstat (limited to 'src/drivers/net/ipoib.c')
-rw-r--r-- | src/drivers/net/ipoib.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/drivers/net/ipoib.c b/src/drivers/net/ipoib.c index 260d2d0ee..06e6a2cfe 100644 --- a/src/drivers/net/ipoib.c +++ b/src/drivers/net/ipoib.c @@ -24,6 +24,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <string.h> #include <byteswap.h> #include <errno.h> +#include <gpxe/errortab.h> #include <gpxe/if_arp.h> #include <gpxe/iobuf.h> #include <gpxe/netdevice.h> @@ -75,6 +76,14 @@ static struct ipoib_mac ipoib_broadcast = { 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff }, }; +/** Link status for "broadcast join in progress" */ +#define EINPROGRESS_JOINING ( EINPROGRESS | EUNIQ_01 ) + +/** Human-readable message for the link status */ +struct errortab ipoib_errors[] __errortab = { + { EINPROGRESS_JOINING, "Joining" }, +}; + /**************************************************************************** * * IPoIB peer cache @@ -702,17 +711,15 @@ void ipoib_link_state_changed ( struct ib_device *ibdev ) { ipoib->broadcast.gid.u.words[2] = htons ( ibdev->pkey ); /* Set net device link state to reflect Infiniband link state */ - if ( ib_link_ok ( ibdev ) ) { - netdev_link_up ( netdev ); - } else { - netdev_link_down ( netdev ); - } + rc = ib_link_rc ( ibdev ); + netdev_link_err ( netdev, ( rc ? rc : -EINPROGRESS_JOINING ) ); /* Join new broadcast group */ if ( ib_link_ok ( ibdev ) && ( ( rc = ipoib_join_broadcast_group ( ipoib ) ) != 0 ) ) { DBGC ( ipoib, "IPoIB %p could not rejoin broadcast group: " "%s\n", ipoib, strerror ( rc ) ); + netdev_link_err ( netdev, rc ); return; } } |