Browse Source

Fix dhcp issue when replace dnsmasq

Nick Peng 7 years ago
parent
commit
0a236acc56
1 changed files with 57 additions and 4 deletions
  1. 57 4
      package/optware/S50smartdns

+ 57 - 4
package/optware/S50smartdns

@@ -75,23 +75,76 @@ restart_dnsmasq()
 	$DNSMASQ_CMD
 }
 
+get_server_ip()
+{
+	IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F: '{print $2}'`"
+	LOCAL_SERVER_IP=""
+	for IP in $IPS
+	do
+			N=3
+			while [ $N -gt 0 ]
+			do
+					ADDR=`echo $IP | awk -F. "{for(i=1;i<=$N;i++)printf \\$i\".\"}"`
+					grep "dhcp-range=" $DNSMASQ_CONF | grep lan | grep $ADDR >/dev/null 2>&1
+					if [ $? -eq 0 ]; then
+							LOCAL_SERVER_IP="$IP"
+							return 0
+					fi
+					N="`expr $N - 1`"
+			done
+	done
+
+	return 1
+}
+
 set_dnsmasq()
 {
-	grep "^port *=$SMARTDNS_PORT" $DNSMASQ_CONF > /dev/null 2>&1
+	local RESTART_DNSMASQ=0
+	local LOCAL_SERVER_IP=""
+	get_server_ip
+	if [ "$LOCAL_SERVER_IP" ]; then
+		grep "dhcp-option *=" $DNSMASQ_CONF | grep "lan,6,$LOCAL_SERVER_IP" > /dev/null 2>&1
+		if [ $? -ne 0 ]; then
+			sed -i "/^dhcp-option *=lan,6,/d" $DNSMASQ_CONF
+			echo "dhcp-option=lan,6,$LOCAL_SERVER_IP" >> $DNSMASQ_CONF
+			RESTART_DNSMASQ=1
+		fi
+	fi
+
+	grep "^port *=0" $DNSMASQ_CONF > /dev/null 2>&1
 	if [ $? -ne 0 ]; then
 		sed -i "/^port *=/d" $DNSMASQ_CONF
-		echo "port=$SMARTDNS_PORT" >> $DNSMASQ_CONF
-		restart_dnsmasq
+		echo "port=0" >> $DNSMASQ_CONF
+		RESTART_DNSMASQ=1
+	fi
+
+	if [ $RESTART_DNSMASQ -ne 0 ]; then
+		restart_dnsmasq	
 	fi
 
 }
 
 clear_dnsmasq()
 {
+	local RESTART_DNSMASQ=0
+	local LOCAL_SERVER_IP=""
+	get_server_ip
+	if [ "$LOCAL_SERVER_IP" ]; then
+		grep "dhcp-option *=" $DNSMASQ_CONF | grep "lan,6,$LOCAL_SERVER_IP" > /dev/null 2>&1
+		if [ $? -eq 0 ]; then
+			sed -i "/^dhcp-option *=lan,6,/d" $DNSMASQ_CONF
+			RESTART_DNSMASQ=1
+		fi
+	fi
+
 	grep "^port *=" $DNSMASQ_CONF > /dev/null 2>&1
 	if [ $? -eq 0 ]; then
 		sed -i "/^port *=/d" $DNSMASQ_CONF
-		restart_dnsmasq
+		RESTART_DNSMASQ=1
+	fi
+
+	if [ $RESTART_DNSMASQ -ne 0 ]; then
+		restart_dnsmasq	
 	fi
 }