dhcp_option_add "$cfg" "$networkid" "$force"
}
-
dhcp_add() {
local cfg="$1"
local dhcp6range="::"
# Do not support non-static interfaces for now
[ static = "$proto" ] || return 0
+ ipaddr="${subnet%%/*}"
+ prefix_or_netmask="${subnet##*/}"
+
# Override interface netmask with dhcp config if applicable
- config_get netmask "$cfg" netmask "${subnet##*/}"
+ config_get netmask "$cfg" netmask
- #check for an already active dhcp server on the interface, unless 'force' is set
- config_get_bool force "$cfg" force 0
- [ $force -gt 0 ] || dhcp_check "$ifname" || {
- logger -t dnsmasq \
- "found already running DHCP-server on interface '$ifname'" \
- "refusing to start, use 'option force 1' to override"
- return 0
- }
+ [ -n "$netmask" ] && prefix_or_netmask="$netmask"
config_get start "$cfg" start 100
config_get limit "$cfg" limit 150
config_get leasetime "$cfg" leasetime 12h
config_get options "$cfg" options
config_get_bool dynamicdhcp "$cfg" dynamicdhcp 1
+ config_get_bool dynamicdhcpv4 "$cfg" dynamicdhcpv4 $dynamicdhcp
+ config_get_bool dynamicdhcpv6 "$cfg" dynamicdhcpv6 $dynamicdhcp
config_get dhcpv4 "$cfg" dhcpv4
config_get dhcpv6 "$cfg" dhcpv6
config_get ra_management "$cfg" ra_management
config_get ra_preference "$cfg" ra_preference
config_get dns "$cfg" dns
+ config_get dns_sl "$cfg" domain
config_list_foreach "$cfg" "interface_name" append_interface_name "$ifname"
nettag="${networkid:+set:${networkid},}"
- if [ "$limit" -gt 0 ] ; then
- limit=$((limit-1))
- fi
+ # make sure the DHCP range is not empty
+ if [ "$dhcpv4" != "disabled" ] && ipcalc "$ipaddr/$prefix_or_netmask" "$start" "$limit" ; then
+ [ "$dynamicdhcpv4" = "0" ] && END="static"
- eval "$(ipcalc.sh "${subnet%%/*}" $netmask $start $limit)"
+ xappend "--dhcp-range=$tags$nettag$START,$END,$NETMASK,$leasetime${options:+ $options}"
+ fi
- if [ "$dynamicdhcp" = "0" ] ; then
- END="static"
+ if [ "$dynamicdhcpv6" = "0" ] ; then
dhcp6range="::,static"
else
dhcp6range="::1000,::ffff"
fi
- if [ "$dhcpv4" != "disabled" ] ; then
- xappend "--dhcp-range=$tags$nettag$START,$END,$NETMASK,$leasetime${options:+ $options}"
- fi
-
-
if [ $DNSMASQ_DHCP_VER -eq 6 ] && [ "$ra" = "server" ] ; then
# Note: dnsmasq cannot just be a DHCPv6 server (all-in-1)
# and let some other machine(s) send RA pointing to it.
fi
dhcp_option_append "option6:dns-server,$dnss" "$networkid"
+
+ if [ -n "$dns_sl" ]; then
+ ddssl=""
+ for dd in $dns_sl; do append ddssl "$dd" ","; done
+ fi
+
+ dhcp_option_append "option6:domain-search,$ddssl" "$networkid"
fi
dhcp_option_add "$cfg" "$networkid" 0
{
local cfg="$1"
local disabled user_dhcpscript logfacility
- local resolvfile resolvdir localuse=0
+ local resolvfile resolvdir localuse=1
config_get_bool disabled "$cfg" disabled 0
[ "$disabled" -gt 0 ] && return 0
xappend "--conf-file=${dnsmasqconffile}"
}
+ config_get_bool boguspriv "$cfg" boguspriv 1
+ [ "$boguspriv" -gt 0 ] && {
+ xappend "--bogus-priv"
+ [ -r "$RFC6761FILE" ] && xappend "--conf-file=$RFC6761FILE"
+ }
+
$PROG --version | grep -osqE "^Compile time options:.* DHCPv6( |$)" && DHCPv6CAPABLE=1 || DHCPv6CAPABLE=0
config_get tftp_root "$cfg" "tftp_root"
[ -n "$tftp_root" ] && mkdir -p "$tftp_root" && append_bool "$cfg" enable_tftp "--enable-tftp"
append_bool "$cfg" tftp_no_fail "--tftp-no-fail"
- append_bool "$cfg" nonwildcard "--bind-dynamic" 1
+
+ config_get bind "$cfg" "bind"
+ case "$bind" in
+ dynamic|interfaces)
+ xappend "--bind-$bind"
+ ;;
+ "")
+ # for compatibility reasons
+ append_bool "$cfg" nonwildcard "--bind-dynamic" 1
+ ;;
+ esac
+
+ config_get dnsfilter "$cfg" "dnsfilter"
+ case "$dnsfilter" in
+ A|AAAA)
+ xappend "--filter-$dnsfilter"
+ ;;
+ esac
+
append_bool "$cfg" fqdn "--dhcp-fqdn"
append_bool "$cfg" proxydnssec "--proxy-dnssec"
append_bool "$cfg" localservice "--local-service"
xappend "--addn-hosts=$HOSTFILE"
append EXTRA_MOUNT "$HOSTFILE"
else
- xappend "--addn-hosts=$HOSTFILE_DIR"
- append EXTRA_MOUNT "$HOSTFILE_DIR"
+ xappend "--addn-hosts=$(dirname $HOSTFILE)"
+ append EXTRA_MOUNT "$(dirname $HOSTFILE)"
fi
config_list_foreach "$cfg" "addnhosts" append_addnhosts
config_list_foreach "$cfg" "bogusnxdomain" append_bogusnxdomain
config_get resolvfile "$cfg" resolvfile /tmp/resolv.conf.d/resolv.conf.auto
[ -n "$resolvfile" ] && [ ! -e "$resolvfile" ] && touch "$resolvfile"
xappend "--resolv-file=$resolvfile"
- [ "$resolvfile" = "/tmp/resolv.conf.d/resolv.conf.auto" ] && localuse=1
+ [ "$resolvfile" != "/tmp/resolv.conf.d/resolv.conf.auto" ] && localuse=0
resolvdir="$(dirname "$resolvfile")"
fi
config_get_bool localuse "$cfg" localuse "$localuse"
xappend "--dhcp-broadcast=tag:needs-broadcast"
-
config_get dnsmasqconfdir "$cfg" confdir "/tmp/dnsmasq.d"
xappend "--conf-dir=$dnsmasqconfdir"
dnsmasqconfdir="${dnsmasqconfdir%%,*}"
config_foreach filter_dnsmasq mxhost dhcp_mx_add "$cfg"
echo >> $CONFIGFILE_TMP
- config_get_bool boguspriv "$cfg" boguspriv 1
- [ "$boguspriv" -gt 0 ] && {
- xappend "--bogus-priv"
- [ -r "$RFC6761FILE" ] && xappend "--conf-file=$RFC6761FILE"
- }
if [ "$DNSMASQ_DHCP_VER" -gt 4 ] ; then
# Enable RA feature for when/if it is constructed,
[ ! -e "$logfacility" ] && touch "$logfacility"
procd_add_jail_mount_rw "$logfacility"
esac
+ [ -e "$hostsfile" ] && procd_add_jail_mount $hostsfile
procd_close_instance
}
dnsmasq_stop()
{
local cfg="$1"
- local noresolv resolvfile localuse=0
+ local noresolv resolvfile localuse=1
config_get_bool noresolv "$cfg" noresolv 0
config_get resolvfile "$cfg" "resolvfile"
- [ "$noresolv" = 0 ] && [ "$resolvfile" = "/tmp/resolv.conf.d/resolv.conf.auto" ] && localuse=1
+ [ "$noresolv" = 0 ] && [ "$resolvfile" != "/tmp/resolv.conf.d/resolv.conf.auto" ] && localuse=0
config_get_bool localuse "$cfg" localuse "$localuse"
[ "$localuse" -gt 0 ] && ln -sf "/tmp/resolv.conf.d/resolv.conf.auto" /tmp/resolv.conf
add_interface_trigger()
{
- local interface ignore
+ local interface ifname ignore
config_get interface "$1" interface
config_get_bool ignore "$1" ignore 0
+ network_get_device ifname "$interface" || ignore=0
[ -n "$interface" ] && [ $ignore -eq 0 ] && procd_add_interface_trigger "interface.*" "$interface" /etc/init.d/dnsmasq reload
}