diff options
-rw-r--r-- | config/network | 1 | ||||
-rw-r--r-- | interface-ip.c | 3 | ||||
-rw-r--r-- | interface.c | 6 | ||||
-rw-r--r-- | interface.h | 1 |
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; |