#include "resource.h"
#include "event.h"
#include "user-event.h"
+#include "sysinfo.h"
#define MAC_ADDR_SIZE 6
struct device_handler *handler = uev->handler;
struct discover_device *dev;
- dev = discover_device_create(handler, event->device);
+ uint8_t hwaddr[MAC_ADDR_SIZE];
- device_handler_dhcp(handler, dev, event);
-
- return 0;
-}
-
-static int user_event_conf(struct user_event *uev, struct event *event)
-{
- struct device_handler *handler = uev->handler;
- struct discover_device *dev;
- struct pb_url *url;
- const char *val;
-
- val = event_get_param(event, "url");
- if (!val)
- return 0;
+ sscanf(event_get_param(event, "mac"),
+ "%hhX:%hhX:%hhX:%hhX:%hhX:%hhX",
+ hwaddr, hwaddr + 1, hwaddr + 2,
+ hwaddr + 3, hwaddr + 4, hwaddr + 5);
- url = pb_url_parse(event, val);
- if (!url)
- return 0;
+ system_info_set_interface_address(sizeof(hwaddr), hwaddr,
+ event_get_param(event, "ip"));
- dev = discover_device_create(handler, event->device);
+ dev = discover_device_create(handler, event_get_param(event, "mac"),
+ event->device);
- device_handler_conf(handler, dev, url);
+ device_handler_dhcp(handler, dev, event);
return 0;
}
struct discover_context *ctx;
struct discover_device *dev;
- dev = discover_device_create(handler, event->device);
+ /* In case this is a network interface, try to refer to it by UUID */
+ dev = discover_device_create(handler, event_get_param(event, "mac"),
+ event->device);
+ dev->device->id = talloc_strdup(dev, event->device);
ctx = device_handler_discover_context_create(handler, dev);
parse_user_event(ctx, event);
{
struct device_handler *handler = uev->handler;
struct discover_device *dev;
+ const char *mac = event_get_param(event, "mac");
+
+ if (mac)
+ dev = device_lookup_by_uuid(handler, event_get_param(event, "mac"));
+ else
+ dev = device_lookup_by_id(handler, event->device);
- dev = device_lookup_by_id(handler, event->device);
if (!dev)
return 0;
break;
case EVENT_ACTION_URL:
result = user_event_url(uev, event);
- break;
- case EVENT_ACTION_CONF:
- result = user_event_conf(uev, event);
- break;
+ goto out;
case EVENT_ACTION_DHCP:
result = user_event_dhcp(uev, event);
- break;
+ goto out;
case EVENT_ACTION_BOOT:
result = user_event_boot(uev, event);
break;
break;
}
+ /* user_event_url() and user_event_dhcp() will steal the event context,
+ * but all others still need to free */
talloc_free(event);
-
+out:
return;
}