#include "netifd.h"
#include "interface.h"
+#include "proto.h"
struct uci_context *uci_ctx;
static struct uci_package *uci_network;
static void __uci_to_blob(struct blob_buf *b, struct uci_section *s,
const struct config_param_list *p)
{
- const struct blobmsg_policy *attr;
+ const struct blobmsg_policy *attr = NULL;
struct uci_element *e;
struct uci_option *o;
void *array;
static void
config_parse_interface(struct uci_section *s)
{
+ struct interface *iface;
const char *type;
+
DPRINTF("Create interface '%s'\n", s->e.name);
blob_buf_init(&b, 0);
return;
uci_to_blob(&b, s, &interface_attr_list);
- interface_alloc(s->e.name, s, b.head);
+ iface = interface_alloc(s->e.name, b.head);
+ if (!iface)
+ return;
+
+ blob_buf_init(&b, 0);
+ if (iface->proto_handler && iface->proto_handler->config_params)
+ uci_to_blob(&b, s, iface->proto_handler->config_params);
+
+ proto_init_interface(iface, b.head);
}
void
if (!strcmp(s->type, "interface"))
config_parse_interface(s);
}
- device_free_all();
+ device_free_unused(NULL);
config_init = false;
interface_start_pending();