From 0a236acc56432cbb5b78a4ca7271a24d080f2d46 Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Tue, 22 Jan 2019 23:55:15 +0800 Subject: [PATCH] Fix dhcp issue when replace dnsmasq --- package/optware/S50smartdns | 61 ++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/package/optware/S50smartdns b/package/optware/S50smartdns index 89c2f03..221438d 100644 --- a/package/optware/S50smartdns +++ b/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 }