summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--discover/device-handler.c27
-rw-r--r--discover/device-handler.h2
-rw-r--r--discover/discover-server.c3
-rw-r--r--discover/network.c6
-rw-r--r--discover/user-event.c2
5 files changed, 29 insertions, 11 deletions
diff --git a/discover/device-handler.c b/discover/device-handler.c
index 3804b34..5df0700 100644
--- a/discover/device-handler.c
+++ b/discover/device-handler.c
@@ -1125,9 +1125,8 @@ static char *device_from_addr(void *ctx, struct pb_url *url)
return dev;
}
-
void device_handler_process_url(struct device_handler *handler,
- const char *url)
+ const char *url, const char *mac, const char *ip)
{
struct discover_context *ctx;
struct discover_device *dev;
@@ -1153,11 +1152,25 @@ void device_handler_process_url(struct device_handler *handler,
event->type = EVENT_TYPE_USER;
event->action = EVENT_ACTION_CONF;
- event->params = talloc_array(event, struct param, 1);
- param = &event->params[0];
- param->name = talloc_strdup(event, "pxeconffile");
- param->value = talloc_strdup(event, url);
- event->n_params = 1;
+ if (url[strlen(url) - 1] == '/') {
+ event->params = talloc_array(event, struct param, 3);
+ param = &event->params[0];
+ param->name = talloc_strdup(event, "pxepathprefix");
+ param->value = talloc_strdup(event, url);
+ param = &event->params[1];
+ param->name = talloc_strdup(event, "mac");
+ param->value = talloc_strdup(event, mac);
+ param = &event->params[2];
+ param->name = talloc_strdup(event, "ip");
+ param->value = talloc_strdup(event, ip);
+ event->n_params = 3;
+ } else {
+ event->params = talloc_array(event, struct param, 1);
+ param = &event->params[0];
+ param->name = talloc_strdup(event, "pxeconffile");
+ param->value = talloc_strdup(event, url);
+ event->n_params = 1;
+ }
pb_url = pb_url_parse(event, event->params->value);
if (!pb_url || !pb_url->host) {
diff --git a/discover/device-handler.h b/discover/device-handler.h
index d18910a..e5501ec 100644
--- a/discover/device-handler.h
+++ b/discover/device-handler.h
@@ -133,7 +133,7 @@ void device_handler_cancel_default(struct device_handler *handler);
void device_handler_update_config(struct device_handler *handler,
struct config *config);
void device_handler_process_url(struct device_handler *handler,
- const char *url);
+ const char *url, const char *mac, const char *ip);
void device_handler_reinit(struct device_handler *handler);
int device_request_write(struct discover_device *dev, bool *release);
diff --git a/discover/discover-server.c b/discover/discover-server.c
index e4f3b67..6806589 100644
--- a/discover/discover-server.c
+++ b/discover/discover-server.c
@@ -266,7 +266,8 @@ static int discover_server_process_message(void *arg)
case PB_PROTOCOL_ACTION_ADD_URL:
url = pb_protocol_deserialise_string((void *) client, message);
- device_handler_process_url(client->server->device_handler, url);
+ device_handler_process_url(client->server->device_handler,
+ url, NULL, NULL);
break;
default:
diff --git a/discover/network.c b/discover/network.c
index f763687..c072eec 100644
--- a/discover/network.c
+++ b/discover/network.c
@@ -374,7 +374,11 @@ static void configure_interface_static(struct network *network,
if (config->static_config.url) {
pb_log("config URL %s\n", config->static_config.url);
device_handler_process_url(network->handler,
- config->static_config.url);
+ config->static_config.url,
+ mac_bytes_to_string(interface->dev,
+ interface->hwaddr,
+ sizeof(interface->hwaddr)),
+ config->static_config.address);
}
return;
diff --git a/discover/user-event.c b/discover/user-event.c
index 8cad1a9..8926458 100644
--- a/discover/user-event.c
+++ b/discover/user-event.c
@@ -439,7 +439,7 @@ static int user_event_url(struct user_event *uev, struct event *event)
url = event_get_param(event, "url");
if (url)
- device_handler_process_url(handler, url);
+ device_handler_process_url(handler, url, NULL, NULL);
return 0;
}
OpenPOWER on IntegriCloud