projects
/
project
/
netifd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
remove obsolete attribute info
[project/netifd.git]
/
config.c
diff --git
a/config.c
b/config.c
index 2e0036456cd208bd05a4a3e6ba5631787a7a930a..81cbd28180f42c817c139c2044d5425612ec7dcc 100644
(file)
--- a/
config.c
+++ b/
config.c
@@
-2,15
+2,19
@@
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
+#include <uci.h>
+
#include "netifd.h"
#include "interface.h"
#include "proto.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;
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)
static void uci_attr_to_blob(struct blob_buf *b, const char *str,
const char *name, enum blobmsg_type type)
@@
-73,7
+77,7
@@
static void uci_array_to_blob(struct blob_buf *b, struct uci_option *o,
static void __uci_to_blob(struct blob_buf *b, struct uci_section *s,
const struct config_param_list *p)
{
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;
struct uci_element *e;
struct uci_option *o;
void *array;
@@
-138,6
+142,16
@@
config_parse_bridge_interface(struct uci_section *s)
return 0;
}
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)
{
static void
config_parse_interface(struct uci_section *s)
{
@@
-158,10
+172,15
@@
config_parse_interface(struct uci_section *s)
if (!iface)
return;
if (!iface)
return;
- proto_init_interface(iface, s);
+ 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);
+ iface->config.version = config_version;
}
}
-void
+
static
void
config_init_devices(void)
{
struct uci_element *e;
config_init_devices(void)
{
struct uci_element *e;
@@
-217,7
+236,7
@@
config_init_interfaces(const char *name)
if (!strcmp(s->type, "interface"))
config_parse_interface(s);
}
if (!strcmp(s->type, "interface"))
config_parse_interface(s);
}
- device_free_
all(
);
+ device_free_
unused(NULL
);
config_init = false;
interface_start_pending();
config_init = false;
interface_start_pending();