summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interface.c5
-rw-r--r--proto-static.c3
-rw-r--r--proto.h1
3 files changed, 7 insertions, 2 deletions
diff --git a/interface.c b/interface.c
index e66b58a..ed60959 100644
--- a/interface.c
+++ b/interface.c
@@ -652,6 +652,7 @@ interface_alloc(const char *name, struct blob_attr *config)
struct blob_attr *cur;
const char *proto_name = NULL;
char *iface_name;
+ bool force_link = false;
iface = calloc_a(sizeof(*iface), &iface_name, strlen(name) + 1);
iface->name = strcpy(iface_name, name);
@@ -673,9 +674,11 @@ interface_alloc(const char *name, struct blob_attr *config)
proto_name = blobmsg_data(cur);
proto_attach_interface(iface, proto_name);
+ if (iface->proto_handler->flags & PROTO_FLAG_FORCE_LINK_DEFAULT)
+ force_link = true;
iface->autostart = blobmsg_get_bool_default(tb[IFACE_ATTR_AUTO], true);
- iface->force_link = blobmsg_get_bool_default(tb[IFACE_ATTR_FORCE_LINK], false);
+ iface->force_link = blobmsg_get_bool_default(tb[IFACE_ATTR_FORCE_LINK], force_link);
iface->proto_ip.no_defaultroute =
!blobmsg_get_bool_default(tb[IFACE_ATTR_DEFAULTROUTE], true);
iface->proto_ip.no_dns =
diff --git a/proto-static.c b/proto-static.c
index 51e2083..3e33c3d 100644
--- a/proto-static.c
+++ b/proto-static.c
@@ -100,7 +100,8 @@ error:
static struct proto_handler static_proto = {
.name = "static",
- .flags = PROTO_FLAG_IMMEDIATE,
+ .flags = PROTO_FLAG_IMMEDIATE |
+ PROTO_FLAG_FORCE_LINK_DEFAULT,
.config_params = &proto_ip_attr,
.attach = static_attach,
};
diff --git a/proto.h b/proto.h
index e7d84ac..7210f48 100644
--- a/proto.h
+++ b/proto.h
@@ -36,6 +36,7 @@ enum {
PROTO_FLAG_NODEV = (1 << 1),
PROTO_FLAG_INIT_AVAILABLE = (1 << 2),
PROTO_FLAG_RENEW_AVAILABLE = (1 << 3),
+ PROTO_FLAG_FORCE_LINK_DEFAULT = (1 << 4),
};
struct interface_proto_state {