X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fnetwork.c;h=9aa975204e0f71de40070340e506d1f3ed6dd3e4;hp=eaf6d1b4e3e9d6b4283ac6a534692f8098bd69d1;hb=2312c424d516862877c45a9566816acfe2da0f06;hpb=4400b62c78526cf744d2aec3fba86911da936f7a diff --git a/discover/network.c b/discover/network.c index eaf6d1b..9aa9752 100644 --- a/discover/network.c +++ b/discover/network.c @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -19,6 +20,8 @@ #include "file.h" #include "network.h" +#include "sysinfo.h" +#include "device-handler.h" #define HWADDR_SIZE 6 #define PIDFILE_BASE (LOCAL_STATE_DIR "/petitboot/") @@ -47,14 +50,16 @@ struct interface { struct list_item list; struct process *udhcpc_process; + struct discover_device *dev; }; struct network { - struct list interfaces; - struct waiter *waiter; - int netlink_sd; - bool manual_config; - bool dry_run; + struct list interfaces; + struct device_handler *handler; + struct waiter *waiter; + int netlink_sd; + bool manual_config; + bool dry_run; }; static const struct interface_config *find_config_by_hwaddr( @@ -142,10 +147,16 @@ static void add_interface(struct network *network, struct interface *interface) { list_add(&network->interfaces, &interface->list); + interface->dev = discover_device_create(network->handler, + interface->name); + interface->dev->device->type = DEVICE_TYPE_NETWORK; + device_handler_add_device(network->handler, interface->dev); } -static void remove_interface(struct interface *interface) +static void remove_interface(struct network *network, + struct interface *interface) { + device_handler_remove(network->handler, interface->dev); list_remove(&interface->list); talloc_free(interface); } @@ -383,7 +394,7 @@ static int network_handle_nlmsg(struct network *network, struct nlmsghdr *nlmsg) if (!interface) return 0; pb_log("network: interface %s removed\n", interface->name); - remove_interface(interface); + remove_interface(network, interface); return 0; } @@ -396,6 +407,12 @@ static int network_handle_nlmsg(struct network *network, struct nlmsghdr *nlmsg) memcpy(interface->hwaddr, ifaddr, sizeof(interface->hwaddr)); strncpy(interface->name, ifname, sizeof(interface->name) - 1); add_interface(network, interface); + + /* tell the sysinfo code about this interface */ + if (strcmp(interface->name, "lo")) + system_info_register_interface( + sizeof(interface->hwaddr), + interface->hwaddr, interface->name); } configure_interface(network, interface, @@ -481,13 +498,15 @@ static void network_init_dns(struct network *network) talloc_free(buf); } -struct network *network_init(void *ctx, struct waitset *waitset, bool dry_run) +struct network *network_init(struct device_handler *handler, + struct waitset *waitset, bool dry_run) { struct network *network; int rc; - network = talloc(ctx, struct network); + network = talloc(handler, struct network); list_init(&network->interfaces); + network->handler = handler; network->manual_config = false; network->dry_run = dry_run;