mirror of
				https://github.com/xcat2/xNBA.git
				synced 2025-10-31 11:22:29 +00:00 
			
		
		
		
	Add "name" field to network device, to facilitate netdev commands.
This commit is contained in:
		| @@ -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; | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user