- if (o->type == UCI_TYPE_LIST) {
- uci_foreach_element(&o->v.list, e) {
- uci_attr_to_blob(b, e->name, NULL, type);
- }
+ name = alloca(strlen(s->e.name) + strlen(devtype->name_prefix) + 2);
+ sprintf(name, "%s-%s", devtype->name_prefix, s->e.name);
+ blobmsg_add_string(&b, "name", name);
+
+ uci_to_blob(&b, s, devtype->config_params);
+ if (!device_create(name, devtype, b.head)) {
+ D(INTERFACE, "Failed to create '%s' device for interface '%s'\n",
+ devtype->name, s->e.name);
+ }
+
+ blob_buf_init(&b, 0);
+ blobmsg_add_string(&b, "ifname", name);
+ return 0;
+}
+
+static void
+config_parse_interface(struct uci_section *s, bool alias)
+{
+ struct interface *iface;
+ const char *type = NULL, *disabled;
+ struct blob_attr *config;
+ bool bridge = false;
+ struct device_type *devtype = NULL;
+
+ disabled = uci_lookup_option_string(uci_ctx, s, "disabled");
+ if (disabled && !strcmp(disabled, "1"))