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;
#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 );
}
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 );
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;
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 );
#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>
* @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;
}
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
*
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 );
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 ) {
}
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;
}