mirror of
https://github.com/ipxe/ipxe
synced 2025-12-27 18:12:36 +03:00
[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:
@@ -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 )
|
||||
|
||||
/** @} */
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user