summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--discover/device-handler.c42
-rw-r--r--discover/pb-discover.c22
-rw-r--r--discover/udev.c12
-rw-r--r--discover/udev.h5
-rw-r--r--discover/user-event.c11
-rw-r--r--discover/user-event.h5
6 files changed, 53 insertions, 44 deletions
diff --git a/discover/device-handler.c b/discover/device-handler.c
index 8bac866..352a477 100644
--- a/discover/device-handler.c
+++ b/discover/device-handler.c
@@ -19,6 +19,7 @@
#include "device-handler.h"
#include "discover-server.h"
+#include "user-event.h"
#include "platform.h"
#include "event.h"
#include "parser.h"
@@ -26,11 +27,17 @@
#include "paths.h"
#include "sysinfo.h"
#include "boot.h"
+#include "udev.h"
+#include "network.h"
struct device_handler {
struct discover_server *server;
int dry_run;
+ struct pb_udev *udev;
+ struct network *network;
+ struct user_event *user_event;
+
struct discover_device **devices;
unsigned int n_devices;
@@ -49,6 +56,8 @@ struct device_handler {
static int mount_device(struct discover_device *dev);
static int umount_device(struct discover_device *dev);
+static int device_handler_init_sources(struct device_handler *handler);
+
void discover_context_add_boot_option(struct discover_context *ctx,
struct discover_boot_option *boot_option)
{
@@ -260,6 +269,7 @@ struct device_handler *device_handler_init(struct discover_server *server,
struct waitset *waitset, int dry_run)
{
struct device_handler *handler;
+ int rc;
handler = talloc_zero(NULL, struct device_handler);
handler->server = server;
@@ -274,6 +284,12 @@ struct device_handler *device_handler_init(struct discover_server *server,
parser_init();
+ rc = device_handler_init_sources(handler);
+ if (rc) {
+ talloc_free(handler);
+ return NULL;
+ }
+
return handler;
}
@@ -750,6 +766,26 @@ void device_handler_update_config(struct device_handler *handler,
}
#ifndef PETITBOOT_TEST
+
+static int device_handler_init_sources(struct device_handler *handler)
+{
+ /* init our device sources: udev, network and user events */
+ handler->udev = udev_init(handler, handler->waitset);
+ if (!handler->udev)
+ return -1;
+
+ handler->network = network_init(handler, handler->waitset,
+ handler->dry_run);
+ if (!handler->network)
+ return -1;
+
+ handler->user_event = user_event_init(handler, handler->waitset);
+ if (!handler->user_event)
+ return -1;
+
+ return 0;
+}
+
static bool check_existing_mount(struct discover_device *dev)
{
struct stat devstat, mntstat;
@@ -911,6 +947,12 @@ void device_release_write(struct discover_device *dev, bool release)
#else
+static int device_handler_init_sources(
+ struct device_handler *handler __attribute__((unused)))
+{
+ return 0;
+}
+
static int umount_device(struct discover_device *dev __attribute__((unused)))
{
return 0;
diff --git a/discover/pb-discover.c b/discover/pb-discover.c
index bb590a9..713d99d 100644
--- a/discover/pb-discover.c
+++ b/discover/pb-discover.c
@@ -14,11 +14,8 @@
#include <process/process.h>
#include <talloc/talloc.h>
-#include "udev.h"
-#include "user-event.h"
#include "discover-server.h"
#include "device-handler.h"
-#include "network.h"
#include "sysinfo.h"
#include "platform.h"
@@ -119,12 +116,9 @@ int main(int argc, char *argv[])
{
struct device_handler *handler;
struct discover_server *server;
- struct network *network;
struct waitset *waitset;
struct procset *procset;
struct opts opts;
- struct pb_udev *udev;
- struct user_event *uev;
FILE *log;
if (opts_parse(&opts, argc, argv)) {
@@ -182,28 +176,12 @@ int main(int argc, char *argv[])
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;
-
- 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;
-
for (running = 1; running;) {
if (waiter_poll(waitset))
break;
}
- network_shutdown(network);
device_handler_destroy(handler);
- user_event_destroy(uev);
- udev_destroy(udev);
discover_server_destroy(server);
platform_fini();
talloc_free(waitset);
diff --git a/discover/udev.c b/discover/udev.c
index 16e83d5..320dffd 100644
--- a/discover/udev.c
+++ b/discover/udev.c
@@ -425,12 +425,13 @@ static void udev_log_fn(struct udev __attribute__((unused)) *udev,
vfprintf(pb_log_get_stream(), format, args);
}
-struct pb_udev *udev_init(struct waitset *waitset,
- struct device_handler *handler)
+struct pb_udev *udev_init(struct device_handler *handler,
+ struct waitset *waitset)
{
+ struct pb_udev *udev;
int result;
- struct pb_udev *udev = talloc(NULL, struct pb_udev);
+ udev = talloc(handler, struct pb_udev);
talloc_set_destructor(udev, udev_destructor);
udev->handler = handler;
@@ -468,8 +469,3 @@ fail_new:
talloc_free(udev);
return NULL;
}
-
-void udev_destroy(struct pb_udev *udev)
-{
- talloc_free(udev);
-}
diff --git a/discover/udev.h b/discover/udev.h
index ea6f30d..edd18fa 100644
--- a/discover/udev.h
+++ b/discover/udev.h
@@ -5,8 +5,7 @@ struct pb_udev;
struct device_handler;
struct waitset;
-struct pb_udev *udev_init(struct waitset *waitset,
- struct device_handler *handler);
-void udev_destroy(struct pb_udev *udev);
+struct pb_udev *udev_init(struct device_handler *handler,
+ struct waitset *waitset);
#endif /* _UDEV_H */
diff --git a/discover/user-event.c b/discover/user-event.c
index cf7f20c..1f70045 100644
--- a/discover/user-event.c
+++ b/discover/user-event.c
@@ -505,15 +505,15 @@ static int user_event_destructor(void *arg)
return 0;
}
-struct user_event *user_event_init(struct waitset *waitset,
- struct device_handler *handler)
+struct user_event *user_event_init(struct device_handler *handler,
+ struct waitset *waitset)
{
struct sockaddr_un addr;
struct user_event *uev;
unlink(PBOOT_USER_EVENT_SOCKET);
- uev = talloc(NULL, struct user_event);
+ uev = talloc(handler, struct user_event);
uev->handler = handler;
@@ -546,8 +546,3 @@ out_err:
talloc_free(uev);
return NULL;
}
-
-void user_event_destroy(struct user_event *uev)
-{
- talloc_free(uev);
-}
diff --git a/discover/user-event.h b/discover/user-event.h
index b892c9a..50eb947 100644
--- a/discover/user-event.h
+++ b/discover/user-event.h
@@ -33,8 +33,7 @@ struct pb_url *user_event_parse_conf_url(struct discover_context *ctx,
struct event *event, bool *complete_url);
char **user_event_parse_conf_filenames(
struct discover_context *ctx, struct event *event);
-struct user_event *user_event_init(struct waitset *waitset,
- struct device_handler *handler);
-void user_event_destroy(struct user_event *uev);
+struct user_event *user_event_init(struct device_handler *handler,
+ struct waitset *waitset);
#endif
OpenPOWER on IntegriCloud