diff options
| author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-03-17 13:31:13 +0000 | 
|---|---|---|
| committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-03-17 13:31:13 +0000 | 
| commit | 4ab4dc8ed81fbcbe398e9d142096e1876b11a7c0 (patch) | |
| tree | f22f2a9b00ca877b1b4a48e8019a17e038e4d835 | |
| parent | 2fa97d8559357429e60ec101b31ac32966b92f4e (diff) | |
upgrade dnsmasq to latest version, rewrite dnsmasq init script for uci, rename /bin/ipcalc to /bin/ipcalc.sh (fixes #1452)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6595 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -rwxr-xr-x | package/base-files/files/bin/ipcalc.sh (renamed from package/base-files/files/bin/ipcalc) | 0 | ||||
| -rw-r--r-- | package/dnsmasq/Makefile | 7 | ||||
| -rw-r--r-- | package/dnsmasq/files/dhcp.conf | 9 | ||||
| -rw-r--r-- | package/dnsmasq/files/dnsmasq.conf | 6 | ||||
| -rw-r--r-- | package/dnsmasq/files/dnsmasq.init | 96 | 
5 files changed, 67 insertions, 51 deletions
diff --git a/package/base-files/files/bin/ipcalc b/package/base-files/files/bin/ipcalc.sh index e8efa6b96..e8efa6b96 100755 --- a/package/base-files/files/bin/ipcalc +++ b/package/base-files/files/bin/ipcalc.sh diff --git a/package/dnsmasq/Makefile b/package/dnsmasq/Makefile index 2b6e7945c..6b763741d 100644 --- a/package/dnsmasq/Makefile +++ b/package/dnsmasq/Makefile @@ -9,12 +9,12 @@  include $(TOPDIR)/rules.mk  PKG_NAME:=dnsmasq -PKG_VERSION:=2.35 +PKG_VERSION:=2.38  PKG_RELEASE:=1  PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq -PKG_MD5SUM:=57b8643dc394cf2fbd1bced64536c6df +PKG_MD5SUM:=ab066a97c226066485ad20e5ad5ce424  include $(INCLUDE_DIR)/package.mk @@ -42,7 +42,8 @@ endef  define Package/dnsmasq/install  	$(INSTALL_DIR) $(1)/usr/sbin  	$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/dnsmasq $(1)/usr/sbin/ -	$(INSTALL_DIR) $(1)/etc +	$(INSTALL_DIR) $(1)/etc/config +	$(INSTALL_DATA) ./files/dhcp.conf $(1)/etc/config/dhcp  	$(INSTALL_DATA) ./files/dnsmasq.conf $(1)/etc/dnsmasq.conf  	$(INSTALL_DIR) $(1)/etc/init.d  	$(INSTALL_BIN) ./files/dnsmasq.init $(1)/etc/init.d/dnsmasq diff --git a/package/dnsmasq/files/dhcp.conf b/package/dnsmasq/files/dhcp.conf new file mode 100644 index 000000000..fb55cf8b7 --- /dev/null +++ b/package/dnsmasq/files/dhcp.conf @@ -0,0 +1,9 @@ +config dhcp +	option interface	lan +	option start 	100 +	option limit	150 +	option leasetime	12h + +config dhcp +	option interface	wan +	option ignore	1 diff --git a/package/dnsmasq/files/dnsmasq.conf b/package/dnsmasq/files/dnsmasq.conf index 8a8191b63..5be394696 100644 --- a/package/dnsmasq/files/dnsmasq.conf +++ b/package/dnsmasq/files/dnsmasq.conf @@ -10,14 +10,8 @@ domain=lan  expand-hosts  resolv-file=/tmp/resolv.conf.auto -@ifdef dhcp_enable -dhcp-range=@@start@@,@@end@@,@@netmask@@,@@lease@@  dhcp-authoritative  dhcp-leasefile=/tmp/dhcp.leases -@endif -@ifdef wan_ifname -except-interface=@@wan_ifname@@ -@endif  # use /etc/ethers for static hosts; same format as --dhcp-host  # <hwaddr> <ipaddr> diff --git a/package/dnsmasq/files/dnsmasq.init b/package/dnsmasq/files/dnsmasq.init index 5e72fd014..52973d4ca 100644 --- a/package/dnsmasq/files/dnsmasq.init +++ b/package/dnsmasq/files/dnsmasq.init @@ -2,55 +2,67 @@  # Copyright (C) 2006 OpenWrt.org  START=60 -start() { -	include /lib/network -	scan_interfaces -	 -	# The following is to automatically configure the DHCP settings -	# based on config settings. Feel free to replace all this crap -	# with a simple "dnsmasq" and manage everything via the -	# /etc/dnsmasq.conf config file -	 -	[ -f /etc/dnsmasq.conf ] || exit + +dhcp_calc() { +	local ip="$1" +	local res=0 -	args="" -	iface=lan -	config_get ifname "$iface" ifname -	config_get proto "$iface" proto +	while [ -n "$ip" ]; do +		part="${ip%%.*}" +		res="$(($res * 256))" +		res="$(($res + $part))" +		[ "${ip%.*}" != "$ip" ] && ip="${ip#*.}" || ip= +	done +	echo "$res" +} + +dhcp_add() { +	local cfg="$1" + +	config_get net "$cfg" interface +	[ -n "$net" ] || return 0 -	[ "$proto" = static ] && dhcp_enable="${dhcp_enable:-1}" -	dhcp_start="${dhcp_start:-100}" -	dhcp_num="${dhcp_num:-50}" -	dhcp_lease="${dhcp_lease:-12h}" +	config_get ifname "$net" ifname +	[ -n "$ifname" ] || return 0 -	# if dhcp_enable is unset and there is a dhcp server on the network already, default to dhcp_enable=0 -	[ -z "$dhcp_enable" ] && udhcpc -n -q -R -s /bin/true -i $ifname >&- && dhcp_enable="${dhcp_enable:-0}" +	config_get_bool ignore "$cfg" ignore +	[ "$ignore" -gt 0 ] && { +		append args "-I $ifname" +		return 0 +	} -	# dhcp_enable=0 disables the dhcp server -	( -		[ -z "$dhcp_enable" -o "$dhcp_enable" -eq 1 ] && { -			# no existing DHCP server? +	config_get proto "$net" proto +	[ static = "$proto" ] || return 0 -			# calculate settings -			config_get ipaddr "$iface" ipaddr -			config_get netmask "$iface" netmask -			eval $(ipcalc $ipaddr $netmask ${dhcp_start:-100} ${dhcp_num:-150}) -			 -			# and pass the args via config parser defines -			echo "${dhcp_enable:+@define dhcp_enable 1}" -			echo "@define netmask $NETMASK" -			echo "@define start $START" -			echo "@define end $END" -			echo "@define lease ${dhcp_lease:-12h}" -		} +	config_get ipaddr "$net" ipaddr +	config_get netmask "$net" 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 ] || { +		udhcpc -n -q -R -s /bin/true -i $ifname >&- && return 0 +	} -		# ignore requests from wan interface -		config_get wan_proto wan proto -		config_get wan_ifname wan ifname -		[ -z "$wan_proto" -o "$wan_proto" = "none" ] || echo "@define wan_ifname $wan_ifname" +	config_get start "$cfg" start +	config_get end "$cfg" end +	config_get leasetime "$cfg" leasetime + +	leasetime="${leasetime:-12h}" +	start="$(dhcp_calc "${start:-100}")" +	end="$((${end:-150} + 1))" +	eval "$(ipcalc.sh $ipaddr $netmask $start $end)" +	append args "-F $START,$END,$NETMASK,$leasetime"	 +} + +start() { +	include /lib/network +	scan_interfaces +	config_load dhcp + +	args="" +	config_foreach dhcp_add dhcp -		cat /etc/dnsmasq.conf -	) | awk -f /lib/config/template.awk | dnsmasq -C /proc/self/fd/0 && { +	dnsmasq $args && {  		rm -f /tmp/resolv.conf  		cat > /tmp/resolv.conf <<EOF  nameserver 127.0.0.1  | 
