IPv6 link-local socket addresses require some way to specify a local
network device. We cannot simply use a pointer to the network device,
since a struct sockaddr_in6 may be long-lived and has no way to hold a
reference to the network device.
Using a network device index allows a socket address to cleanly refer
to a network device without worrying about whether or not that device
continues to exist.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
struct list_head list;
/** List of open network devices */
struct list_head open_list;
+ /** Index of this network device */
+ unsigned int index;
/** Name of this network device */
char name[12];
/** Underlying hardware device */
uint32_t seed;
int rc;
- /* Create device name */
+ /* Record device index and create device name */
+ netdev->index = ifindex++;
if ( netdev->name[0] == '\0' ) {
snprintf ( netdev->name, sizeof ( netdev->name ), "net%d",
- ifindex++ );
+ netdev->index );
}
/* Set initial link-layer address, if not already set */