struct device_handler *handler = uev->handler;
struct discover_device *dev;
- dev = discover_device_create(handler, event->device);
+ dev = discover_device_create(handler, event_get_param(event, "mac"),
+ event->device);
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;
-
- url = pb_url_parse(event, val);
- if (!url)
- return 0;
-
- dev = discover_device_create(handler, event->device);
-
- device_handler_conf(handler, dev, url);
-
- return 0;
-}
-
static int user_event_add(struct user_event *uev, struct event *event)
{
struct device_handler *handler = uev->handler;
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;
}