#include <stdlib.h>
#include <stdio.h>
+#include <uci.h>
+
#include "netifd.h"
#include "interface.h"
#include "proto.h"
+#include "config.h"
-struct uci_context *uci_ctx;
-static struct uci_package *uci_network;
bool config_init = false;
-static struct blob_buf b;
+static struct uci_context *uci_ctx;
+static struct uci_package *uci_network;
+static struct blob_buf b;
+static unsigned int config_version = 1;
static void uci_attr_to_blob(struct blob_buf *b, const char *str,
const char *name, enum blobmsg_type type)
return 0;
}
+void
+config_set_state(struct config_state *state, const struct blob_attr *attr)
+{
+ state->data = malloc(blob_pad_len(attr));
+ if (!state->data)
+ return;
+
+ memcpy(state->data, attr, blob_pad_len(attr));
+}
+
static void
config_parse_interface(struct uci_section *s)
{
uci_to_blob(&b, s, iface->proto_handler->config_params);
proto_init_interface(iface, b.head);
+ iface->config.version = config_version;
}
-void
+static void
config_init_devices(void)
{
struct uci_element *e;
ctx = uci_alloc_context();
uci_ctx = ctx;
+#ifdef DUMMY_MODE
uci_set_confdir(ctx, "./config");
+#endif
if (uci_load(ctx, "network", &p)) {
fprintf(stderr, "Failed to load network config\n");
if (!strcmp(s->type, "interface"))
config_parse_interface(s);
}
- device_free_all();
+ device_free_unused(NULL);
config_init = false;
interface_start_pending();