From ae0124cd404c0ee25152bef70bee9e2030054ce7 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 27 Aug 2013 16:28:54 +0100 Subject: [PATCH] [linux] Give tap devices a name and bus type Give tap devices a meaningful name, and avoid segmentation faults when attempting to retrieve ${net0/bustype} by assigning a new bus type for tap devices. Signed-off-by: Michael Brown --- src/drivers/linux/tap.c | 3 +++ src/include/ipxe/device.h | 3 +++ src/net/netdev_settings.c | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/drivers/linux/tap.c b/src/drivers/linux/tap.c index 53bb16a3..99937d74 100644 --- a/src/drivers/linux/tap.c +++ b/src/drivers/linux/tap.c @@ -216,6 +216,9 @@ static int tap_probe(struct linux_device *device, struct linux_device_request *r } nic->interface = if_setting->value; + snprintf ( device->dev.name, sizeof ( device->dev.name ), "%s", + nic->interface ); + device->dev.desc.bus_type = BUS_TYPE_TAP; if_setting->applied = 1; /* Apply rest of the settings */ diff --git a/src/include/ipxe/device.h b/src/include/ipxe/device.h index 435af6ec..c59697c0 100644 --- a/src/include/ipxe/device.h +++ b/src/include/ipxe/device.h @@ -54,6 +54,9 @@ struct device_description { /** ISA bus type */ #define BUS_TYPE_ISA 5 +/** TAP bus type */ +#define BUS_TYPE_TAP 6 + /** A hardware device */ struct device { /** Name */ diff --git a/src/net/netdev_settings.c b/src/net/netdev_settings.c index 52e8007d..994e0506 100644 --- a/src/net/netdev_settings.c +++ b/src/net/netdev_settings.c @@ -120,6 +120,7 @@ static int netdev_fetch_bustype ( struct net_device *netdev, void *data, [BUS_TYPE_EISA] = "EISA", [BUS_TYPE_MCA] = "MCA", [BUS_TYPE_ISA] = "ISA", + [BUS_TYPE_TAP] = "TAP", }; struct device_description *desc = &netdev->dev->desc; const char *bustype; @@ -127,7 +128,7 @@ static int netdev_fetch_bustype ( struct net_device *netdev, void *data, assert ( desc->bus_type < ( sizeof ( bustypes ) / sizeof ( bustypes[0] ) ) ); bustype = bustypes[desc->bus_type]; - assert ( bustypes != NULL ); + assert ( bustype != NULL ); strncpy ( data, bustype, len ); return strlen ( bustype ); }