summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/network1
-rw-r--r--interface-ip.c3
-rw-r--r--interface.c6
-rw-r--r--interface.h1
4 files changed, 10 insertions, 1 deletions
diff --git a/config/network b/config/network
index 9703208..17c7f98 100644
--- a/config/network
+++ b/config/network
@@ -50,6 +50,7 @@ config interface wlan
config interface pptp
option proto pptp
option server 1.1.1.1
+ option peerdns 0
config route
option target 192.168.0.1
diff --git a/interface-ip.c b/interface-ip.c
index 254e0bb..1a22980 100644
--- a/interface-ip.c
+++ b/interface-ip.c
@@ -489,7 +489,8 @@ interface_write_resolv_conf(void)
fprintf(f, "# Interface %s\n", iface->name);
write_resolv_conf_entries(f, &iface->config_ip);
- write_resolv_conf_entries(f, &iface->proto_ip);
+ if (!iface->proto_ip.no_dns)
+ write_resolv_conf_entries(f, &iface->proto_ip);
}
fclose(f);
if (rename(path, resolv_conf) < 0) {
diff --git a/interface.c b/interface.c
index 78dcd83..b97f4ce 100644
--- a/interface.c
+++ b/interface.c
@@ -32,6 +32,7 @@ enum {
IFACE_ATTR_PROTO,
IFACE_ATTR_AUTO,
IFACE_ATTR_DEFAULTROUTE,
+ IFACE_ATTR_PEERDNS,
IFACE_ATTR_METRIC,
IFACE_ATTR_MAX
};
@@ -41,6 +42,7 @@ static const struct blobmsg_policy iface_attrs[IFACE_ATTR_MAX] = {
[IFACE_ATTR_IFNAME] = { .name = "ifname", .type = BLOBMSG_TYPE_STRING },
[IFACE_ATTR_AUTO] = { .name = "auto", .type = BLOBMSG_TYPE_BOOL },
[IFACE_ATTR_DEFAULTROUTE] = { .name = "defaultroute", .type = BLOBMSG_TYPE_BOOL },
+ [IFACE_ATTR_PEERDNS] = { .name = "peerdns", .type = BLOBMSG_TYPE_BOOL },
[IFACE_ATTR_METRIC] = { .name = "metric", .type = BLOBMSG_TYPE_INT32 },
};
@@ -390,6 +392,8 @@ interface_init(struct interface *iface, const char *name,
iface->autostart = blobmsg_get_bool_default(tb[IFACE_ATTR_AUTO], true);
iface->proto_ip.no_defaultroute =
!blobmsg_get_bool_default(tb[IFACE_ATTR_DEFAULTROUTE], true);
+ iface->proto_ip.no_dns =
+ !blobmsg_get_bool_default(tb[IFACE_ATTR_PEERDNS], true);
iface->config_autostart = iface->autostart;
}
@@ -616,6 +620,8 @@ interface_change_config(struct interface *if_old, struct interface *if_new)
interface_ip_set_enabled(&if_old->proto_ip, false);
interface_ip_set_enabled(&if_old->proto_ip, if_new->proto_ip.enabled);
}
+ if (UPDATE(proto_ip.no_dns))
+ interface_write_resolv_conf();
#undef UPDATE
diff --git a/interface.h b/interface.h
index 6304eca..8c7b347 100644
--- a/interface.h
+++ b/interface.h
@@ -58,6 +58,7 @@ struct interface_ip_settings {
struct interface *iface;
bool enabled;
bool no_defaultroute;
+ bool no_dns;
struct vlist_tree addr;
struct vlist_tree route;