@ -70,6 +70,16 @@ add_vlan() {
add_dns( ) {
add_dns( ) {
local cfg = " $1 " ; shift
local cfg = " $1 " ; shift
remove_dns " $cfg "
# We may be called by pppd's ip-up which has a nonstandard umask set.
# Create an empty file here and force its permission to 0644, otherwise
# dnsmasq will not be able to re-read the resolv.conf.auto .
[ ! -f /tmp/resolv.conf.auto ] && {
touch /tmp/resolv.conf.auto
chmod 0644 /tmp/resolv.conf.auto
}
local dns
local dns
local add
local add
for dns in " $@ " ; do
for dns in " $@ " ; do
@ -79,20 +89,27 @@ add_dns() {
}
}
done
done
[ -n " $cfg " ] && {
uci_set_state network " $cfg " dns " $add "
uci_set_state network " $cfg " dns " $add "
uci_set_state network " $cfg " resolv_dns " $add "
}
}
}
# remove dns entries of the given iface
# remove dns entries of the given iface
remove_dns( ) {
remove_dns( ) {
local cfg = " $1 "
local cfg = " $1 "
local dns
[ -n " $cfg " ] && {
config_get dns " $cfg " dns
[ -f /tmp/resolv.conf.auto ] && {
local dns = $( uci_get_state network " $cfg " resolv_dns)
for dns in $dns ; do
for dns in $dns ; do
sed -i -e " /^nameserver $dns $/d " /tmp/resolv.conf.auto
sed -i -e " /^nameserver $dns $/d " /tmp/resolv.conf.auto
done
done
}
uci_revert_state network " $cfg " dns
uci_revert_state network " $cfg " dns
uci_revert_state network " $cfg " resolv_dns
}
}
}
# sort the device list, drop duplicates
# sort the device list, drop duplicates
@ -212,13 +229,7 @@ setup_interface_static() {
[ -z " $ip6addr " ] || $DEBUG ifconfig " $iface " add " $ip6addr "
[ -z " $ip6addr " ] || $DEBUG ifconfig " $iface " add " $ip6addr "
[ -z " $gateway " ] || $DEBUG route add default gw " $gateway " dev " $iface "
[ -z " $gateway " ] || $DEBUG route add default gw " $gateway " dev " $iface "
[ -z " $ip6gw " ] || $DEBUG route -A inet6 add default gw " $ip6gw " dev " $iface "
[ -z " $ip6gw " ] || $DEBUG route -A inet6 add default gw " $ip6gw " dev " $iface "
[ -z " $dns " ] || {
[ -z " $dns " ] || add_dns " $config " $dns
for ns in $dns ; do
grep " $ns " /tmp/resolv.conf.auto 2>/dev/null >/dev/null || {
echo " nameserver $ns " >> /tmp/resolv.conf.auto
}
done
}
config_get type " $config " TYPE
config_get type " $config " TYPE
[ " $type " = "alias" ] && return 0
[ " $type " = "alias" ] && return 0
@ -363,12 +374,14 @@ setup_interface() {
stop_interface_dhcp( ) {
stop_interface_dhcp( ) {
local config = " $1 "
local config = " $1 "
local ifac e
local ifnam e
config_get ifname " $config " ifname
config_get ifname " $config " ifname
local lock = " /var/lock/dhcp- ${ ifname } "
local lock = " /var/lock/dhcp- ${ ifname } "
[ -f " $lock " ] && lock -u " $lock "
[ -f " $lock " ] && lock -u " $lock "
remove_dns " $config "
local pidfile = " /var/run/dhcp- ${ ifname } .pid "
local pidfile = " /var/run/dhcp- ${ ifname } .pid "
local pid = " $( cat " $pidfile " 2>/dev/null) "
local pid = " $( cat " $pidfile " 2>/dev/null) "
[ -d " /proc/ $pid " ] && {
[ -d " /proc/ $pid " ] && {