implement a generic peerdns option to suppress proto handler dns entries
authorFelix Fietkau <nbd@openwrt.org>
Sat, 19 May 2012 20:57:21 +0000 (22:57 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Sat, 19 May 2012 20:57:21 +0000 (22:57 +0200)
config/network
interface-ip.c
interface.c
interface.h

index 97032084e14b407ee387a1fdc3086eb2b866b61c..17c7f98fd8d75611cfc71502408b1f3d1ded171f 100644 (file)
@@ -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
index 254e0bb04cf78c9a06140dcd7b6eb1642cf37410..1a22980d81848016dda4652d993f753a729fd42e 100644 (file)
@@ -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) {
index 78dcd836583c5899db704ff34f897f85b6eaefdb..b97f4ce494a6c381edb6b99c6923186a4ede89d6 100644 (file)
@@ -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
 
index 6304eca276633bf02a97395e7b0a95976c7f9287..8c7b3474069d343200b15796d6b5b6ac15563ec4 100644 (file)
@@ -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;