X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fudev.c;h=b93c1a5f0ff6d68dace1c0cf8605c528dd11f3c2;hp=9c1b399cd7857a9d59c6bb1b4884a26bbd315c8a;hb=ce8a340bffd224290ad5219baa5f0466fcd9fd55;hpb=32e6a41f33e5576716b351bd473a27939fe94fa1 diff --git a/discover/udev.c b/discover/udev.c index 9c1b399..b93c1a5 100644 --- a/discover/udev.c +++ b/discover/udev.c @@ -10,17 +10,19 @@ #include #include +#include +#include #include "udev.h" -#include "log.h" -#include "waiter.h" #include "pb-discover.h" +#include "device-handler.h" #define PBOOT_DEVICE_SOCKET "/tmp/petitboot.udev" #define max(a, b) ((a) > (b) ? (a) : (b)) struct udev { + struct device_handler *handler; int socket; }; @@ -58,7 +60,7 @@ static void parse_event_params(struct udev_event *event, char *buf, int len) } } -static const char *event_param(struct udev_event *event, const char *name) +const char *udev_event_param(struct udev_event *event, const char *name) { int i; @@ -80,11 +82,11 @@ static void print_event(struct udev_event *event) action = event->action == UDEV_ACTION_ADD ? "add" : "remove"; pb_log("udev %s event:\n", action); - printf("\tdevice: %s\n", event->device); + pb_log("\tdevice: %s\n", event->device); for (i = 0; params[i]; i++) - printf("\t%-12s => %s\n", - params[i], event_param(event, params[i])); + pb_log("\t%-12s => %s\n", + params[i], udev_event_param(event, params[i])); } @@ -132,6 +134,8 @@ static void handle_udev_message(struct udev *udev, char *buf, int len) print_event(event); + device_handler_event(udev->handler, event); + talloc_free(event); return; @@ -168,7 +172,7 @@ static int udev_destructor(void *p) return 0; } -struct udev *udev_init(void) +struct udev *udev_init(struct device_handler *handler) { struct sockaddr_un addr; struct udev *udev; @@ -177,6 +181,8 @@ struct udev *udev_init(void) udev = talloc(NULL, struct udev); + udev->handler = handler; + udev->socket = socket(PF_UNIX, SOCK_DGRAM, 0); if (udev->socket < 0) { pb_log("Error creating udev socket: %s\n", strerror(errno));