We'd like to correlate incoming network boot options with a device, so
register the interface with the device hander.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
#include <log/log.h>
#include <list/list.h>
#include <log/log.h>
#include <list/list.h>
+#include <types/types.h>
#include <talloc/talloc.h>
#include <waiter/waiter.h>
#include <pb-config/pb-config.h>
#include <talloc/talloc.h>
#include <waiter/waiter.h>
#include <pb-config/pb-config.h>
#include "file.h"
#include "network.h"
#include "file.h"
#include "network.h"
+#include "device-handler.h"
#define HWADDR_SIZE 6
#define PIDFILE_BASE (LOCAL_STATE_DIR "/petitboot/")
#define HWADDR_SIZE 6
#define PIDFILE_BASE (LOCAL_STATE_DIR "/petitboot/")
struct list_item list;
struct process *udhcpc_process;
struct list_item list;
struct process *udhcpc_process;
+ struct discover_device *dev;
- 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(
};
static const struct interface_config *find_config_by_hwaddr(
struct interface *interface)
{
list_add(&network->interfaces, &interface->list);
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);
}
list_remove(&interface->list);
talloc_free(interface);
}
if (!interface)
return 0;
pb_log("network: interface %s removed\n", interface->name);
if (!interface)
return 0;
pb_log("network: interface %s removed\n", interface->name);
- remove_interface(interface);
+ remove_interface(network, interface);
-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;
{
struct network *network;
int rc;
- network = talloc(ctx, struct network);
+ network = talloc(handler, struct network);
list_init(&network->interfaces);
list_init(&network->interfaces);
+ network->handler = handler;
network->manual_config = false;
network->dry_run = dry_run;
network->manual_config = false;
network->dry_run = dry_run;
#define NETWORK_H
struct network;
#define NETWORK_H
struct network;
-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);
int network_shutdown(struct network *network);
#endif /* NETWORK_H */
int network_shutdown(struct network *network);
#endif /* NETWORK_H */
- network = network_init(server, waitset, opts.dry_run == opt_yes);
- if (!network)
- return EXIT_FAILURE;
-
handler = device_handler_init(server, waitset, opts.dry_run == opt_yes);
if (!handler)
return EXIT_FAILURE;
discover_server_set_device_source(server, handler);
handler = device_handler_init(server, waitset, opts.dry_run == opt_yes);
if (!handler)
return EXIT_FAILURE;
discover_server_set_device_source(server, handler);
+ /* init our device sources: udev, network and user events */
udev = udev_init(waitset, handler);
if (!udev)
return EXIT_FAILURE;
udev = udev_init(waitset, handler);
if (!udev)
return EXIT_FAILURE;
+ network = network_init(handler, waitset, opts.dry_run == opt_yes);
+ if (!network)
+ return EXIT_FAILURE;
+
uev = user_event_init(waitset, handler);
if (!uev)
return EXIT_FAILURE;
uev = user_event_init(waitset, handler);
if (!uev)
return EXIT_FAILURE;