[NETDEV] Add notion of link state

Add ability for network devices to flag link up/down state to the
networking core.

Autobooting code will now wait for link-up before attempting DHCP.

IPoIB reflects the Infiniband link state as the network device link state
(which is not strictly correct; we also need a succesful IPoIB IPv4
broadcast group join), but is probably more informative.
This commit is contained in:
Michael Brown
2008-04-22 17:40:50 +01:00
parent d72bf13b78
commit 1ba959c6b3
13 changed files with 110 additions and 2 deletions

View File

@@ -151,6 +151,7 @@
#define ERRFILE_uri_test ( ERRFILE_OTHER | 0x000b0000 )
#define ERRFILE_ibft ( ERRFILE_OTHER | 0x000c0000 )
#define ERRFILE_tls ( ERRFILE_OTHER | 0x000d0000 )
#define ERRFILE_ifmgmt ( ERRFILE_OTHER | 0x000e0000 )
/** @} */

View File

@@ -254,6 +254,9 @@ struct net_device {
/** Network device is open */
#define NETDEV_OPEN 0x0001
/** Network device has link */
#define NETDEV_LINK_UP 0x0002
/** Declare a link-layer protocol */
#define __ll_protocol __table ( struct ll_protocol, ll_protocols, 01 )
@@ -352,6 +355,37 @@ netdev_settings ( struct net_device *netdev ) {
return &netdev->settings.settings;
}
/**
* Mark network device as having link up
*
* @v netdev Network device
*/
static inline __attribute__ (( always_inline )) void
netdev_link_up ( struct net_device *netdev ) {
netdev->state |= NETDEV_LINK_UP;
}
/**
* Mark network device as having link down
*
* @v netdev Network device
*/
static inline __attribute__ (( always_inline )) void
netdev_link_down ( struct net_device *netdev ) {
netdev->state &= ~NETDEV_LINK_UP;
}
/**
* Check link state of network device
*
* @v netdev Network device
* @ret link_up Link is up
*/
static inline __attribute__ (( always_inline )) int
netdev_link_ok ( struct net_device *netdev ) {
return ( netdev->state & NETDEV_LINK_UP );
}
extern int netdev_tx ( struct net_device *netdev, struct io_buffer *iobuf );
extern void netdev_tx_complete_err ( struct net_device *netdev,
struct io_buffer *iobuf, int rc );