diff options
-rw-r--r-- | interface.c | 5 | ||||
-rw-r--r-- | proto-static.c | 3 | ||||
-rw-r--r-- | proto.h | 1 |
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, }; @@ -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 { |