+/*
+ * netifd - network interface daemon
+ * Copyright (C) 2012 Felix Fietkau <nbd@openwrt.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
IFACE_ATTR_PROTO,
IFACE_ATTR_AUTO,
IFACE_ATTR_DEFAULTROUTE,
+ IFACE_ATTR_PEERDNS,
IFACE_ATTR_METRIC,
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 },
};
if (!blobmsg_check_attr(data, true))
return UBUS_STATUS_INVALID_ARGUMENT;
- n = calloc(1, sizeof(*data) + blob_pad_len(data));
+ n = calloc(1, sizeof(*n) + blob_pad_len(data));
memcpy(n->data, data, blob_pad_len(data));
n->node.key = blobmsg_name(data);
list_for_each_entry_safe(dep, tmp, &iface_all_users, list)
dep->cb(dep, iface, ev);
-
- interface_queue_event(iface, ev);
}
static void
list_for_each_entry_safe(dep, tmp, &iface->users, list)
interface_remove_user(dep);
- interface_dequeue_event(iface);
interface_ip_flush(&iface->config_ip);
interface_flush_state(iface);
interface_clear_errors(iface);
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;
}
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