summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--discover/network.c11
-rw-r--r--discover/platform-powerpc.c14
-rw-r--r--discover/platform.c1
-rw-r--r--lib/pb-protocol/pb-protocol.c6
-rw-r--r--lib/types/types.h1
-rw-r--r--ui/ncurses/nc-config.c32
6 files changed, 56 insertions, 9 deletions
diff --git a/discover/network.c b/discover/network.c
index 0dad087..f763687 100644
--- a/discover/network.c
+++ b/discover/network.c
@@ -336,7 +336,8 @@ static void configure_interface_dhcp(struct interface *interface)
return;
}
-static void configure_interface_static(struct interface *interface,
+static void configure_interface_static(struct network *network,
+ struct interface *interface,
const struct interface_config *config)
{
int rc;
@@ -370,6 +371,12 @@ static void configure_interface_static(struct interface *interface,
interface->name);
}
+ 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);
+ }
+
return;
}
@@ -438,7 +445,7 @@ static void configure_interface(struct network *network,
configure_interface_dhcp(interface);
} else if (config->method == CONFIG_METHOD_STATIC) {
- configure_interface_static(interface, config);
+ configure_interface_static(network, interface, config);
}
}
diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c
index 7370d7d..5abc4d7 100644
--- a/discover/platform-powerpc.c
+++ b/discover/platform-powerpc.c
@@ -310,7 +310,7 @@ static int parse_one_interface_config(struct config *config,
} else if (!strcmp(tok, "static")) {
ifconf->method = CONFIG_METHOD_STATIC;
- /* ip/mask, [optional] gateway */
+ /* ip/mask, [optional] gateway, [optional] url */
tok = strtok_r(NULL, ",", &saveptr);
if (!tok)
goto out_err;
@@ -323,6 +323,12 @@ static int parse_one_interface_config(struct config *config,
talloc_strdup(ifconf, tok);
}
+ tok = strtok_r(NULL, ",", &saveptr);
+ if (tok) {
+ ifconf->static_config.url =
+ talloc_strdup(ifconf, tok);
+ }
+
} else {
pb_log("Unknown network configuration method %s\n", tok);
goto out_err;
@@ -575,10 +581,12 @@ static char *iface_config_str(void *ctx, struct interface_config *config)
str = talloc_asprintf_append(str, "dhcp");
} else if (config->method == CONFIG_METHOD_STATIC) {
- str = talloc_asprintf_append(str, "static,%s%s%s",
+ str = talloc_asprintf_append(str, "static,%s%s%s%s%s",
config->static_config.address,
config->static_config.gateway ? "," : "",
- config->static_config.gateway ?: "");
+ config->static_config.gateway ?: "",
+ config->static_config.url ? "," : "",
+ config->static_config.url ?: "");
}
return str;
}
diff --git a/discover/platform.c b/discover/platform.c
index 5f448f1..fc0930d 100644
--- a/discover/platform.c
+++ b/discover/platform.c
@@ -60,6 +60,7 @@ static void dump_config(struct config *config)
pb_log(" static:\n");
pb_log(" ip: %s\n", ifconf->static_config.address);
pb_log(" gw: %s\n", ifconf->static_config.gateway);
+ pb_log(" url: %s\n", ifconf->static_config.url);
}
}
diff --git a/lib/pb-protocol/pb-protocol.c b/lib/pb-protocol/pb-protocol.c
index ab5ea8a..9d07a58 100644
--- a/lib/pb-protocol/pb-protocol.c
+++ b/lib/pb-protocol/pb-protocol.c
@@ -260,6 +260,7 @@ static int pb_protocol_interface_config_len(struct interface_config *conf)
if (conf->method == CONFIG_METHOD_STATIC) {
len += 4 + optional_strlen(conf->static_config.address);
len += 4 + optional_strlen(conf->static_config.gateway);
+ len += 4 + optional_strlen(conf->static_config.url);
}
return len;
@@ -454,6 +455,8 @@ static int pb_protocol_serialise_config_interface(char *buf,
conf->static_config.address);
pos += pb_protocol_serialise_string(pos,
conf->static_config.gateway);
+ pos += pb_protocol_serialise_string(pos,
+ conf->static_config.url);
}
return pos - buf;
@@ -900,6 +903,9 @@ static int pb_protocol_deserialise_config_interface(const char **buf,
if (read_string(iface, buf, len, &iface->static_config.gateway))
return -1;
+
+ if (read_string(iface, buf, len, &iface->static_config.url))
+ return -1;
}
return 0;
diff --git a/lib/types/types.h b/lib/types/types.h
index 702b6f5..c2de8a5 100644
--- a/lib/types/types.h
+++ b/lib/types/types.h
@@ -115,6 +115,7 @@ struct interface_config {
struct {
char *address;
char *gateway;
+ char *url;
} static_config;
};
};
diff --git a/ui/ncurses/nc-config.c b/ui/ncurses/nc-config.c
index 64fb4c7..e7451bb 100644
--- a/ui/ncurses/nc-config.c
+++ b/ui/ncurses/nc-config.c
@@ -33,7 +33,7 @@
#include "nc-config.h"
#include "nc-widgets.h"
-#define N_FIELDS 34
+#define N_FIELDS 37
extern struct help_text config_help_text;
@@ -96,6 +96,9 @@ struct config_screen {
struct nc_widget_label *gateway_l;
struct nc_widget_textbox *gateway_f;
struct nc_widget_label *gateway_help_l;
+ struct nc_widget_label *url_l;
+ struct nc_widget_textbox *url_f;
+ struct nc_widget_label *url_help_l;
struct nc_widget_label *dns_l;
struct nc_widget_textbox *dns_f;
struct nc_widget_label *dns_dhcp_help_l;
@@ -274,11 +277,12 @@ static int screen_process_form(struct config_screen *screen)
}
if (net_conf_type == NET_CONF_TYPE_STATIC) {
- char *ip, *mask, *gateway;
+ char *ip, *mask, *gateway, *url;
ip = widget_textbox_get_value(screen->widgets.ip_addr_f);
mask = widget_textbox_get_value(screen->widgets.ip_mask_f);
gateway = widget_textbox_get_value(screen->widgets.gateway_f);
+ url = widget_textbox_get_value(screen->widgets.url_f);
if (!ip || !*ip || !mask || !*mask) {
screen->scr.frame.status =
@@ -292,6 +296,7 @@ static int screen_process_form(struct config_screen *screen)
iface->static_config.address = talloc_asprintf(iface, "%s/%s",
ip, mask);
iface->static_config.gateway = talloc_strdup(iface, gateway);
+ iface->static_config.url = talloc_strdup(iface, url);
}
str = widget_textbox_get_value(screen->widgets.dns_f);
@@ -510,6 +515,19 @@ static void config_screen_layout_widgets(struct config_screen *screen)
y++;
}
+ wl = widget_label_base(screen->widgets.url_l);
+ wf = widget_textbox_base(screen->widgets.url_f);
+ wh = widget_label_base(screen->widgets.url_help_l);
+ widget_set_visible(wl, show);
+ widget_set_visible(wf, show);
+ widget_set_visible(wh, show);
+
+ if (show) {
+ layout_pair(screen, y, screen->widgets.url_l, wf);
+ widget_move(wh, y, help_x);
+ y++;
+ }
+
wh = widget_label_base(screen->widgets.dns_help_l);
layout_pair(screen, y, screen->widgets.dns_l,
widget_textbox_base(screen->widgets.dns_f));
@@ -693,7 +711,7 @@ static void config_screen_setup_widgets(struct config_screen *screen,
{
struct nc_widgetset *set = screen->widgetset;
struct interface_config *ifcfg;
- char *str, *ip, *mask, *gw;
+ char *str, *ip, *mask, *gw, *url;
enum net_conf_type type;
unsigned int i;
int add_len, clear_len, any_len, min_len = 20;
@@ -849,7 +867,7 @@ static void config_screen_setup_widgets(struct config_screen *screen,
i, str, is_default);
}
- gw = ip = mask = NULL;
+ url = gw = ip = mask = NULL;
if (ifcfg && ifcfg->method == CONFIG_METHOD_STATIC) {
char *sep;
@@ -862,6 +880,7 @@ static void config_screen_setup_widgets(struct config_screen *screen,
mask = sep + 1;
}
gw = ifcfg->static_config.gateway;
+ url = ifcfg->static_config.url;
}
screen->widgets.ip_addr_l = widget_new_label(set, 0, 0, _("IP/mask:"));
@@ -884,6 +903,11 @@ static void config_screen_setup_widgets(struct config_screen *screen,
widget_textbox_set_fixed_size(screen->widgets.gateway_f);
widget_textbox_set_validator_ipv4(screen->widgets.gateway_f);
+ screen->widgets.url_l = widget_new_label(set, 0, 0, _("URL:"));
+ screen->widgets.url_f = widget_new_textbox(set, 0, 0, 32, url);
+ screen->widgets.url_help_l =
+ widget_new_label(set, 0, 0, _("(eg. tftp://)"));
+
str = talloc_strdup(screen, "");
for (i = 0; i < config->network.n_dns_servers; i++) {
str = talloc_asprintf_append(str, "%s%s",
OpenPOWER on IntegriCloud