#!/bin/sh /etc/rc.common
-# Copyright (C) 2007 OpenWrt.org
+# Copyright (C) 2007-2012 OpenWrt.org
START=60
DNS_SERVERS=""
DOMAIN=""
+ADD_LOCAL_DOMAIN=1
+ADD_LOCAL_HOSTNAME=1
+
CONFIGFILE="/var/etc/dnsmasq.conf"
xappend() {
xappend "--server=$1"
}
+append_address() {
+ xappend "--address=$1"
+}
+
append_interface() {
local ifname=$(uci_get_state network "$1" ifname "$1")
xappend "--interface=$ifname"
append_bool "$cfg" expandhosts "--expand-hosts"
append_bool "$cfg" enable_tftp "--enable-tftp"
append_bool "$cfg" nonwildcard "--bind-interfaces"
+ append_bool "$cfg" fqdn "--dhcp-fqdn"
append_parm "$cfg" dhcpscript "--dhcp-script"
append_parm "$cfg" cachesize "--cache-size"
append_parm "$cfg" "domain" "--domain"
append_parm "$cfg" "local" "--server"
config_list_foreach "$cfg" "server" append_server
+ config_list_foreach "$cfg" "address" append_address
config_list_foreach "$cfg" "interface" append_interface
config_list_foreach "$cfg" "notinterface" append_notinterface
config_list_foreach "$cfg" "addnhosts" append_addnhosts
append_parm "$cfg" "resolvfile" "--resolv-file"
append_parm "$cfg" "tftp_root" "--tftp-root"
append_parm "$cfg" "dhcp_boot" "--dhcp-boot"
+ append_parm "$cfg" "local_ttl" "--local-ttl"
config_get DOMAIN "$cfg" domain
+ config_get_bool ADD_LOCAL_DOMAIN "$cfg" add_local_domain 1
+ config_get_bool ADD_LOCAL_HOSTNAME "$cfg" add_local_hostname 1
+
config_get_bool readethers "$cfg" readethers
[ "$readethers" = "1" -a \! -e "/etc/ethers" ] && touch /etc/ethers
config_list_foreach "$cfg" rebind_domain append_rebind_domain
}
+ dhcp_option_add "$cfg" "" 0
+
echo >> $CONFIGFILE
}
xappend "--dhcp-subscrid=$networkid,$subscriberid"
- dhcp_option_add "$cfg" "$networkid"
+ config_get_bool force "$cfg" force 0
+
+ dhcp_option_add "$cfg" "$networkid" "$force"
}
dhcp_remoteid_add() {
xappend "--dhcp-remoteid=$networkid,$remoteid"
- dhcp_option_add "$cfg" "$networkid"
+ config_get_bool force "$cfg" force 0
+
+ dhcp_option_add "$cfg" "$networkid" "$force"
}
dhcp_circuitid_add() {
xappend "--dhcp-circuitid=$networkid,$circuitid"
- dhcp_option_add "$cfg" "$networkid"
+ config_get_bool force "$cfg" force 0
+
+ dhcp_option_add "$cfg" "$networkid" "$force"
}
dhcp_userclass_add() {
xappend "--dhcp-userclass=$networkid,$userclass"
- dhcp_option_add "$cfg" "$networkid"
+ config_get_bool force "$cfg" force 0
+
+ dhcp_option_add "$cfg" "$networkid" "$force"
}
dhcp_vendorclass_add() {
xappend "--dhcp-vendorclass=$networkid,$vendorclass"
- dhcp_option_add "$cfg" "$networkid"
+ config_get_bool force "$cfg" force 0
+
+ dhcp_option_add "$cfg" "$networkid" "$force"
}
dhcp_host_add() {
local cfg="$1"
+ config_get_bool force "$cfg" force 0
+
config_get networkid "$cfg" networkid
- [ -n "$networkid" ] && dhcp_option_add "$cfg" "$networkid"
+ [ -n "$networkid" ] && dhcp_option_add "$cfg" "$networkid" "$force"
config_get name "$cfg" name
config_get ip "$cfg" ip
xappend "--dhcp-boot=${networkid:+net:$networkid,}$filename,$servername,$serveraddress"
- dhcp_option_add "$cfg" "$networkid"
+ config_get_bool force "$cfg" force 0
+
+ dhcp_option_add "$cfg" "$networkid" "$force"
}
dhcp_option_add() {
local cfg="$1"
local networkid="$2"
+ local force="$3"
+
+ [ "$force" = "0" ] && force=
config_get dhcp_option "$cfg" dhcp_option
for o in $dhcp_option; do
- xappend "--dhcp-option=$networkid","$o"
+ xappend "--dhcp-option${force:+-force}=${networkid:+$networkid,}$o"
done
}
echo >> $CONFIGFILE
# add own hostname
- [ -z "$lanaddr" ] || {
+ [ $ADD_LOCAL_HOSTNAME -eq 1 ] && [ -n "$lanaddr" ] && {
local hostname="$(uci_get system.@system[0].hostname)"
dhcp_domain_add "" "${hostname:-OpenWrt}" "$lanaddr"
}
service_start /usr/sbin/dnsmasq -C $CONFIGFILE && {
rm -f /tmp/resolv.conf
- [ -n "$DOMAIN" ] && echo "search $DOMAIN" >> /tmp/resolv.conf
+ [ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
+ echo "search $DOMAIN" >> /tmp/resolv.conf
+ }
DNS_SERVERS="$DNS_SERVERS 127.0.0.1"
for DNS_SERVER in $DNS_SERVERS ; do
echo "nameserver $DNS_SERVER" >> /tmp/resolv.conf