mirror of
https://github.com/xcat2/xNBA.git
synced 2024-12-14 15:21:32 +00:00
Add "name" field to network device, to facilitate netdev commands.
This commit is contained in:
parent
c65fae2475
commit
98b6154c3e
@ -138,7 +138,8 @@ struct ll_protocol {
|
||||
struct net_device {
|
||||
/** List of network devices */
|
||||
struct list_head list;
|
||||
|
||||
/** Name of this network device */
|
||||
char name[8];
|
||||
/** List of persistent reference holders */
|
||||
struct list_head references;
|
||||
|
||||
@ -224,14 +225,12 @@ struct net_device {
|
||||
#define __net_protocol __table ( net_protocols, 01 )
|
||||
|
||||
/**
|
||||
* Get network device name
|
||||
* Get printable network device hardware address
|
||||
*
|
||||
* @v netdev Network device
|
||||
* @ret name Network device name
|
||||
*
|
||||
* The name will be the device's link-layer address.
|
||||
* @ret name Hardware address
|
||||
*/
|
||||
static inline const char * netdev_name ( struct net_device *netdev ) {
|
||||
static inline const char * netdev_hwaddr ( struct net_device *netdev ) {
|
||||
return netdev->ll_protocol->ntoa ( netdev->ll_addr );
|
||||
}
|
||||
|
||||
@ -247,6 +246,7 @@ extern int netdev_open ( struct net_device *netdev );
|
||||
extern void netdev_close ( struct net_device *netdev );
|
||||
extern void unregister_netdev ( struct net_device *netdev );
|
||||
extern void free_netdev ( struct net_device *netdev );
|
||||
struct net_device * find_netdev ( const char *name );
|
||||
extern struct net_device * next_netdev ( void );
|
||||
extern int net_tx ( struct pk_buff *pkb, struct net_device *netdev,
|
||||
struct net_protocol *net_protocol, const void *ll_dest );
|
||||
|
@ -79,7 +79,7 @@ static struct ipv4_miniroute * add_ipv4_miniroute ( struct net_device *netdev,
|
||||
DBG ( "/%s ", inet_ntoa ( netmask ) );
|
||||
if ( gateway.s_addr != INADDR_NONE )
|
||||
DBG ( "gw %s ", inet_ntoa ( gateway ) );
|
||||
DBG ( "via %s\n", netdev_name ( netdev ) );
|
||||
DBG ( "via %s\n", netdev->name );
|
||||
|
||||
/* Record routing information */
|
||||
miniroute->netdev = netdev;
|
||||
@ -115,7 +115,7 @@ static void del_ipv4_miniroute ( struct ipv4_miniroute *miniroute ) {
|
||||
DBG ( "/%s ", inet_ntoa ( miniroute->netmask ) );
|
||||
if ( miniroute->gateway.s_addr != INADDR_NONE )
|
||||
DBG ( "gw %s ", inet_ntoa ( miniroute->gateway ) );
|
||||
DBG ( "via %s\n", netdev_name ( miniroute->netdev ) );
|
||||
DBG ( "via %s\n", miniroute->netdev->name );
|
||||
|
||||
ref_del ( &miniroute->netdev_ref );
|
||||
list_del ( &miniroute->list );
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <byteswap.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <vsprintf.h>
|
||||
#include <gpxe/if_ether.h>
|
||||
#include <gpxe/pkbuff.h>
|
||||
#include <gpxe/tables.h>
|
||||
@ -187,14 +188,20 @@ struct net_device * alloc_netdev ( size_t priv_size ) {
|
||||
* @v netdev Network device
|
||||
* @ret rc Return status code
|
||||
*
|
||||
* Adds the network device to the list of network devices.
|
||||
* Gives the network device a name and adds it to the list of network
|
||||
* devices.
|
||||
*/
|
||||
int register_netdev ( struct net_device *netdev ) {
|
||||
|
||||
static unsigned int ifindex = 0;
|
||||
|
||||
/* Create device name */
|
||||
snprintf ( netdev->name, sizeof ( netdev->name ), "net%d",
|
||||
ifindex++ );
|
||||
|
||||
/* Add to device list */
|
||||
list_add_tail ( &netdev->list, &net_devices );
|
||||
DBGC ( netdev, "NETDEV %p registered as %s\n",
|
||||
netdev, netdev_name ( netdev ) );
|
||||
DBGC ( netdev, "NETDEV %p registered as %s (%s)\n",
|
||||
netdev, netdev->name, netdev_hwaddr ( netdev ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -285,6 +292,23 @@ void free_netdev ( struct net_device *netdev ) {
|
||||
free ( netdev );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get network device by name
|
||||
*
|
||||
* @v name Network device name
|
||||
* @ret netdev Network device, or NULL
|
||||
*/
|
||||
struct net_device * find_netdev ( const char *name ) {
|
||||
struct net_device *netdev;
|
||||
|
||||
list_for_each_entry ( netdev, &net_devices, list ) {
|
||||
if ( strcmp ( netdev->name, name ) == 0 )
|
||||
return netdev;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Iterate through network devices
|
||||
*
|
||||
|
@ -36,7 +36,7 @@ int test_aoeboot ( struct net_device *netdev, const char *aoename,
|
||||
int rc;
|
||||
|
||||
printf ( "Attempting to boot from AoE device %s via %s\n",
|
||||
aoename, netdev_name ( netdev ) );
|
||||
aoename, netdev->name );
|
||||
|
||||
if ( ( rc = aoe_parse ( aoename, &test_aoedev.aoe ) ) != 0 ) {
|
||||
printf ( "Invalid AoE device name \"%s\"\n", aoename );
|
||||
|
@ -224,7 +224,7 @@ int test_dhcp ( struct net_device *netdev ) {
|
||||
goto out_no_del_ipv4;
|
||||
|
||||
/* Issue DHCP request */
|
||||
printf ( "DHCP (%s)...", netdev_name ( netdev ) );
|
||||
printf ( "DHCP (%s)...", netdev->name );
|
||||
memset ( &dhcp, 0, sizeof ( dhcp ) );
|
||||
dhcp.netdev = netdev;
|
||||
if ( ( rc = async_wait ( start_dhcp ( &dhcp ) ) ) != 0 ) {
|
||||
|
@ -41,7 +41,7 @@ void autoboot ( void ) {
|
||||
}
|
||||
|
||||
if ( ( rc = netdev_open ( netdev ) ) != 0 ) {
|
||||
printf ( "Could not open %s: %s\n", netdev_name ( netdev ),
|
||||
printf ( "Could not open %s: %s\n", netdev->name,
|
||||
strerror ( rc ) );
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user