append_bool "$cfg" dbus "--enable-dbus"
append_bool "$cfg" boguspriv "--bogus-priv"
append_bool "$cfg" expandhosts "--expand-hosts"
- append_bool "$cfg" enable_tftp "--enable-tftp"
+ config_get tftp_root "$cfg" "tftp_root"
+ [ -d "$tftp_root" ] && append_bool "$cfg" enable_tftp "--enable-tftp"
append_bool "$cfg" tftp_no_fail "--tftp-no-fail"
- append_bool "$cfg" nonwildcard "--bind-interfaces"
+ append_bool "$cfg" nonwildcard "--bind-dynamic"
append_bool "$cfg" fqdn "--dhcp-fqdn"
append_bool "$cfg" proxydnssec "--proxy-dnssec"
append_bool "$cfg" localservice "--local-service"
append_bool "$cfg" quietdhcp "--quiet-dhcp"
append_bool "$cfg" sequential_ip "--dhcp-sequential-ip"
+ append_bool "$cfg" allservers "--all-servers"
+ append_bool "$cfg" noping "--no-ping"
append_parm "$cfg" dhcpscript "--dhcp-script"
append_parm "$cfg" cachesize "--cache-size"
append_parm "$cfg" ednspacket_max "--edns-packet-max"
append_parm "$cfg" dhcpleasemax "--dhcp-lease-max"
append_parm "$cfg" "queryport" "--query-port"
+ append_parm "$cfg" "minport" "--min-port"
append_parm "$cfg" "domain" "--domain"
append_parm "$cfg" "local" "--server"
config_list_foreach "$cfg" "server" append_server
config_get hostsfile "$cfg" dhcphostsfile
[ -e "$hostsfile" ] && xappend "--dhcp-hostsfile=$hostsfile"
- mkdir -p /tmp/hosts /tmp/dnsmasq.d
- xappend "--addn-hosts=/tmp/hosts"
- xappend "--conf-dir=/tmp/dnsmasq.d"
-
local rebind
config_get_bool rebind "$cfg" rebind_protection 1
[ $rebind -gt 0 ] && {
xappend "--dhcp-broadcast=tag:needs-broadcast"
+ mkdir -p /tmp/hosts /tmp/dnsmasq.d
+ xappend "--addn-hosts=/tmp/hosts"
+ xappend "--conf-dir=/tmp/dnsmasq.d"
+ xappend "--user=dnsmasq"
+ xappend "--group=dnsmasq"
+
echo >> $CONFIGFILE
+
+ config_get_bool enable_tftp "$cfg" enable_tftp 0
+ [ "$enable_tftp" -gt 0 ] && {
+ config_get tftp_root "$cfg" tftp_root
+ append EXTRA_MOUNT $tftp_root
+ }
}
dhcp_subscrid_add() {
config_get networkid "$cfg" networkid
[ -n "$networkid" ] && dhcp_option_add "$cfg" "$networkid" "$force"
+ config_get_bool enable "$cfg" enable 1
+ [ "$enable" = "0" ] && return 0
+
config_get name "$cfg" name
config_get ip "$cfg" ip
[ -n "$ip" -o -n "$name" ] || return 0
config_get_bool broadcast "$cfg" broadcast 0
[ "$broadcast" = "0" ] && broadcast=
- xappend "--dhcp-host=$macs${networkid:+,net:$networkid}${broadcast:+,set:needs-broadcast}${tag:+,set:$tag}${ip:+,$ip}${name:+,$name}"
+ config_get leasetime "$cfg" leasetime
+
+ xappend "--dhcp-host=$macs${networkid:+,net:$networkid}${broadcast:+,set:needs-broadcast}${tag:+,set:$tag}${ip:+,$ip}${name:+,$name}${leasetime:+,$leasetime}"
}
dhcp_tag_add() {
xappend "--host-record=$record"
}
+dhcp_relay_add() {
+ local cfg="$1"
+ local local_addr server_addr interface
+
+ config_get local_addr "$cfg" local_addr
+ [ -n "$local_addr" ] || return 0
+
+ config_get server_addr "$cfg" server_addr
+ [ -n "$server_addr" ] || return 0
+
+ config_get interface "$cfg" interface
+ if [ -z "$interface" ]; then
+ xappend "--dhcp-relay=$local_addr,$server_addr"
+ else
+ xappend "--dhcp-relay=$local_addr,$server_addr,$interface"
+ fi
+}
+
service_triggers()
{
procd_add_reload_trigger "dhcp"
config_load dhcp
- procd_open_instance
- procd_set_param command $PROG -C $CONFIGFILE -k -x /var/run/dnsmasq/dnsmasq.pid
- procd_set_param file $CONFIGFILE
- procd_set_param respawn
-
- procd_add_jail dnsmasq ubus log
- procd_add_jail_mount $CONFIGFILE $TRUSTANCHORSFILE $HOSTFILE /etc/passwd /dev/urandom /etc/dnsmasq.conf /tmp/dnsmasq.d /tmp/resolv.conf.auto /etc/hosts /etc/ethers
- procd_add_jail_mount_rw /var/run/dnsmasq/ /tmp/dhcp.leases $TIMESTAMPFILE
-
- procd_close_instance
-
# before we can call xappend
mkdir -p /var/run/dnsmasq/
mkdir -p $(dirname $CONFIGFILE)
if [ ! -f "$TIMESTAMPFILE" ]; then
touch "$TIMESTAMPFILE"
- chown nobody.nogroup "$TIMESTAMPFILE"
+ chown dnsmasq.dnsmasq "$TIMESTAMPFILE"
fi
echo "# auto-generated config file from /etc/config/dhcp" > $CONFIGFILE
config_foreach dhcp_subscrid_add subscrid
config_foreach dhcp_domain_add domain
config_foreach dhcp_hostrecord_add hostrecord
+ config_foreach dhcp_relay_add relay
# add own hostname
- local lanaddr
- [ $ADD_LOCAL_HOSTNAME -eq 1 ] && network_get_ipaddr lanaddr "lan" && {
+ [ $ADD_LOCAL_HOSTNAME -eq 1 ] && {
+ local lanaddr lanaddr6
+ local ulaprefix="$(uci_get network @globals[0] ula_prefix)"
local hostname="$(uci_get system @system[0] hostname OpenWrt)"
- dhcp_domain_add "" "$hostname" "$lanaddr"
+
+ network_get_ipaddr lanaddr "lan" && {
+ dhcp_domain_add "" "$hostname" "$lanaddr"
+ }
+
+ [ -n "$ulaprefix" ] && network_get_ipaddrs6 lanaddr6 "lan" && {
+ for lanaddr6 in $lanaddr6; do
+ case "$lanaddr6" in
+ "${ulaprefix%%:/*}"*)
+ dhcp_domain_add "" "$hostname" "$lanaddr6"
+ ;;
+ esac
+ done
+ }
}
echo >> $CONFIGFILE
for DNS_SERVER in $DNS_SERVERS ; do
echo "nameserver $DNS_SERVER" >> /tmp/resolv.conf
done
+
+ procd_open_instance
+ procd_set_param command $PROG -C $CONFIGFILE -k -x /var/run/dnsmasq/dnsmasq.pid
+ procd_set_param file $CONFIGFILE
+ procd_set_param respawn
+
+ procd_add_jail dnsmasq ubus log
+ procd_add_jail_mount $CONFIGFILE $TRUSTANCHORSFILE $HOSTFILE /etc/passwd /etc/group /etc/TZ /dev/null /dev/urandom /etc/dnsmasq.conf /tmp/dnsmasq.d /tmp/resolv.conf.auto /etc/hosts /etc/ethers $EXTRA_MOUNT
+ procd_add_jail_mount_rw /var/run/dnsmasq/ /tmp/dhcp.leases $TIMESTAMPFILE
+
+ procd_close_instance
}
reload_service() {