projects
/
project
/
netifd.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
c1692fd
)
add some configuration code for interfaces, bind interfaces to regular devices
author
Felix Fietkau
<nbd@openwrt.org>
Tue, 5 Apr 2011 01:44:14 +0000
(
03:44
+0200)
committer
Felix Fietkau
<nbd@openwrt.org>
Tue, 5 Apr 2011 01:44:14 +0000
(
03:44
+0200)
config.c
patch
|
blob
|
history
diff --git
a/config.c
b/config.c
index 99adda1a0a66943e668aafdd87313c7fe4c8f85f..6019862465d4a95e41ea0dcccc8308678ac55b0b 100644
(file)
--- a/
config.c
+++ b/
config.c
@@
-13,22
+13,49
@@
struct uci_context *uci_ctx;
struct uci_package *uci_network;
bool config_init = false;
struct uci_package *uci_network;
bool config_init = false;
+enum {
+ SIF_TYPE,
+ SIF_IFNAME,
+ __SIF_MAX,
+};
+
+static const struct uci_parse_option if_opts[__SIF_MAX] = {
+ [SIF_TYPE] = { "type", UCI_TYPE_STRING },
+ [SIF_IFNAME] = { "ifname", UCI_TYPE_STRING },
+};
+
static void
config_parse_interface(struct uci_section *s)
{
static void
config_parse_interface(struct uci_section *s)
{
+ struct uci_option *opts[__SIF_MAX];
struct interface *iface;
struct interface *iface;
+ struct device *dev;
const char *type;
DPRINTF("Create interface '%s'\n", s->e.name);
iface = alloc_interface(s->e.name);
const char *type;
DPRINTF("Create interface '%s'\n", s->e.name);
iface = alloc_interface(s->e.name);
- type = uci_lookup_option_string(uci_ctx, s, "type");
+ if (!iface)
+ return;
- if (!type)
- type = "";
+ uci_parse_section(s, if_opts, __SIF_MAX, opts);
- if (!strcmp(type, "bridge"))
- interface_attach_bridge(iface, s);
+ if (opts[SIF_TYPE]) {
+ type = opts[SIF_TYPE]->v.string;
+
+ if (!strcmp(type, "bridge")) {
+ interface_attach_bridge(iface, s);
+ return;
+ }
+ }
+
+ if (opts[SIF_IFNAME]) {
+ dev = get_device(opts[SIF_IFNAME]->v.string, true);
+ if (!dev)
+ return;
+
+ add_device_user(&iface->main_dev, dev);
+ }
}
enum {
}
enum {
@@
-40,7
+67,7
@@
enum {
__SDEV_MAX,
};
__SDEV_MAX,
};
-struct uci_parse_option dev_opts[__SDEV_MAX] = {
+st
atic const st
ruct uci_parse_option dev_opts[__SDEV_MAX] = {
[SDEV_NAME] = { "name", UCI_TYPE_STRING },
[SDEV_TYPE] = { "type", UCI_TYPE_STRING },
[SDEV_MTU] = { "mtu", UCI_TYPE_STRING },
[SDEV_NAME] = { "name", UCI_TYPE_STRING },
[SDEV_TYPE] = { "type", UCI_TYPE_STRING },
[SDEV_MTU] = { "mtu", UCI_TYPE_STRING },