1
Files
qnap-rc-scripts/ipchange_notify.sh
2016-09-04 22:20:40 +03:00

253 lines
9.4 KiB
Bash
Executable File

#!/bin/sh
# echo "Start ipchange_notify.sh:"
BOOT_CONF=`/bin/cat /etc/default_config/BOOT.conf 2>/dev/null`
GETCFG="/sbin/getcfg"
DEFAULT_GW_DEV=`$GETCFG "Network" "Default GW Device" -d eth0`
BOND0_VLAN=`$GETCFG "bond0" "vlan_enable" -d FALSE`
BOND0_VLAN_ID=`$GETCFG "bond0" "vlan_id"`
BOND1_VLAN=`$GETCFG "bond1" "vlan_enable" -d FALSE`
BOND1_VLAN_ID=`$GETCFG "bond1" "vlan_id"`
ETH0_VLAN=`$GETCFG "eth0" "vlan_enable" -d FALSE`
ETH0_VLAN_ID=`$GETCFG "eth0" "vlan_id"`
ETH1_VLAN=`$GETCFG "eth1" "vlan_enable" -d FALSE`
ETH1_VLAN_ID=`$GETCFG "eth1" "vlan_id"`
ETH2_VLAN=`$GETCFG "eth2" "vlan_enable" -d FALSE`
ETH2_VLAN_ID=`$GETCFG "eth2" "vlan_id"`
ETH3_VLAN=`$GETCFG "eth3" "vlan_enable" -d FALSE`
ETH3_VLAN_ID=`$GETCFG "eth3" "vlan_id"`
NIC_NUM=`$GETCFG "Network" "Interface Number" -d "2"`
BOND_NUM=`/usr/bin/expr ${NIC_NUM} / 2`
ADV_BOND_SUPPORT=`$GETCFG "Network" "Advanced Bonding Support" -d "FALSE"`
NSS_ENABLED=`/sbin/getcfg NVR "NSS Enabled" -d no`
use_source_route()
{
# for each eth, bond,add a dedicate routing table with a default route.
for LAN_PREFIX in eth bond
do
for (( i=0; i <=$NIC_NUM; i++))
do
case "$LAN_PREFIX" in
eth)
let ROUTE_TBL=$i+1
DEFAULT_PRIORITY=500
;;
bond)
let ROUTE_TBL=$i+11
DEFAULT_PRIORITY=400
;;
esac
LAN=$LAN_PREFIX$i
# obtain the ipv4 ip for the specified eth device
IP_ADDR="$(/sbin/ifconfig $LAN 2> /dev/null | sed -n '/inet /{s/.*addr://;s/ .*//;p}')"
if [ x$IP_ADDR != "x" ]; then
# find the default gateway via this interface $LAN
# default via 172.17.22.1 dev $LAN
GATEWAY="$(/bin/ip route show | /bin/awk -v NIC=$LAN '{if ($1 == "default" && $5 == NIC) print $3}')"
SUBNET="$(/bin/ip route show | /bin/awk -v NIC=$LAN -v IP=$IP_ADDR '{if ($9 == IP && $3 == NIC) print $1}')"
# add a subnet route
/bin/ip route delete $SUBNET tab $ROUTE_TBL &> /dev/null
/bin/ip route add $SUBNET via $IP_ADDR dev $LAN tab $ROUTE_TBL &> /dev/null
# add a source routing rule
/bin/ip rule delete from $IP_ADDR/32 tab $ROUTE_TBL &> /dev/null
/bin/ip rule add from $IP_ADDR/32 tab $ROUTE_TBL priority $DEFAULT_PRIORITY
if [ x$GATEWAY != "x" ]; then
echo $GATEWAY
/bin/ip route delete default tab $ROUTE_TBL &> /dev/null
/bin/ip route add default via $GATEWAY dev $LAN tab $ROUTE_TBL
fi
fi
done
done
/bin/ip route flush cache
}
update_ddns()
{
if [ `/sbin/getcfg DDNS Enable -u -d FALSE` = TRUE ];then
# echo "ddns enable"
/sbin/test -f /usr/sbin/create_ddns_conf || return 0
# echo -n "ddns update"
/etc/init.d/ddns_update.sh > /dev/null
# echo "."
if [ -f /var/ddns_tmp.conf ];then
ddns_tmp=1
server_type=`/sbin/getcfg "DDNS" "Server Type" -u -d "0" -f "/var/ddns_tmp.conf"`
else
ddns_tmp=0
server_type=`/sbin/getcfg "DDNS" "Server Type" -u -d "0"`
fi
if [ "x${server_type}" != x5 ];then
# check the crontab
/bin/cat /etc/config/crontab | /bin/grep ddns_update.sh > /dev/null
result=$?
if [ $result -ne 0 ]
then
echo "0 5 * * * /etc/init.d/ddns_update.sh" >> /etc/config/crontab
/usr/bin/crontab /etc/config/crontab
echo "add success"
fi
if [ ${ddns_tmp} = 1 ]; then
set_time=`/sbin/getcfg "DDNS" "Check External IP" -d "0" -f "/var/ddns_tmp.conf"`
else
set_time=`/sbin/getcfg "DDNS" "Check External IP" -d "0"`
fi
/bin/sed -i '/check_ddns_external_ip.sh/d' /etc/config/crontab
if [ ${set_time} -eq 60 ]; then
/bin/echo "0 * * * * /etc/init.d/check_ddns_external_ip.sh 1>/dev/null 2>/dev/null" >> /etc/config/crontab
elif [ ${set_time} -ne 0 ]; then
/bin/echo "*/${set_time} * * * * /etc/init.d/check_ddns_external_ip.sh 1>/dev/null 2>/dev/null" >> /etc/config/crontab
fi
/usr/bin/crontab /etc/config/crontab
echo "add success"
fi
# else
# echo "ddns disable"
fi
}
/bin/sleep 2
update_ddns
/etc/init.d/winbind restart &
[ -f /etc/init.d/upnpd.sh ] && /etc/init.d/upnpd.sh restart &
/etc/init.d/gen_issue.sh
[ -f /sbin/lcd_tool ] && /sbin/lcd_tool -n 1
# restart nvrd
if [ -f /etc/init.d/nvrd.sh ] && [ -f /tmp/.boot_done ]; then
#echo "`date`" "begin ipchange_notify.sh restart nvrd" >> /tmp/nvrd_dbg
if [ "x${NSS_ENABLED}" = "xyes" ]; then
if [ "`/etc/init.d/nvrd.sh started`" == "1" ]; then
/etc/init.d/nvrd.sh _restart &
fi
else
/etc/init.d/nvrd.sh restart &
fi
#echo "`date`" "end ipchange_notify.sh restart nvrd" >> /tmp/nvrd_dbg
fi
[ -d /sys/kernel/config/target/iscsi ] && /sbin/iscsi_util --ip_change
[ "x`/bin/pidof bcclient`" = x ] || /bin/kill -USR1 `/bin/pidof bcclient`
model_name=`/bin/cat /etc/config/BOOT.conf`
# add the source routing policy
# it must be placed before default route removal
use_source_route
if [ "x$ADV_BOND_SUPPORT" = "xTRUE" ]; then
for (( i=0; i<$NIC_NUM; i=i+1 ))
do
if [ "x${DEFAULT_GW_DEV}" != "xeth$i" ]; then
/sbin/route del default eth$i &>/dev/null
VLAN_ENABLE=`$GETCFG "eth$i" "vlan_enable" -d FALSE`
if [ "x$VLAN_ENABLE" = "xTRUE" ]; then
VLAN_ID=`$GETCFG "eth$i" "vlan_id"`
/sbin/route del default eth$i.${VLAN_ID} &>/dev/null
fi
fi
done
for (( i=0; i<$BOND_NUM; i=i+1 ))
do
if [ "x${DEFAULT_GW_DEV}" != "xbond$i" ]; then
/sbin/route del default bond$i &>/dev/null
VLAN_ENABLE=`$GETCFG "bond$i" "vlan_enable" -d FALSE`
if [ "x$VLAN_ENABLE" = "xTRUE" ]; then
VLAN_ID=`$GETCFG "bond$i" "vlan_id"`
/sbin/route del default bond$i.${VLAN_ID} &>/dev/null
fi
fi
done
else
if [ "$NIC_NUM" = "4" ]; then
if [ "x${DEFAULT_GW_DEV}" != "xeth0" ]; then
/sbin/route del default eth0 2>/dev/null 1>/dev/null
if [ "x${ETH0_VLAN}" = "xTRUE" ]; then
/sbin/route del default eth0.${ETH0_VLAN_ID} 2>/dev/null 1>/dev/null
fi
fi
if [ "x${DEFAULT_GW_DEV}" != "xeth1" ]; then
/sbin/route del default eth1 2>/dev/null 1>/dev/null
if [ "x${ETH1_VLAN}" = "xTRUE" ]; then
/sbin/route del default eth1.${ETH1_VLAN_ID} 2>/dev/null 1>/dev/null
fi
fi
if [ "x${DEFAULT_GW_DEV}" != "xeth2" ]; then
/sbin/route del default eth2 2>/dev/null 1>/dev/null
if [ "x${ETH2_VLAN}" = "xTRUE" ]; then
/sbin/route del default eth2.${ETH2_VLAN_ID} 2>/dev/null 1>/dev/null
fi
fi
if [ "x${DEFAULT_GW_DEV}" != "xeth3" ]; then
/sbin/route del default eth3 2>/dev/null 1>/dev/null
if [ "x${ETH3_VLAN}" = "xTRUE" ]; then
/sbin/route del default eth3.${ETH3_VLAN_ID} 2>/dev/null 1>/dev/null
fi
fi
if [ "x${DEFAULT_GW_DEV}" != "xbond0" ]; then
/sbin/route del default bond0 2>/dev/null 1>/dev/null
if [ "x${BOND0_VLAN}" = "xTRUE" ]; then
/sbin/route del default bond0.${BOND0_VLAN_ID} 2>/dev/null 1>/dev/null
fi
fi
if [ "x${DEFAULT_GW_DEV}" != "xbond1" ]; then
/sbin/route del default bond1 2>/dev/null 1>/dev/null
if [ "x${BOND1_VLAN}" = "xTRUE" ]; then
/sbin/route del default bond1.${BOND1_VLAN_ID} 2>/dev/null 1>/dev/null
fi
fi
if [ "x${DEFAULT_GW_DEV}" != "xwlan0" ]; then
/sbin/route del default wlan0 2>/dev/null 1>/dev/null
fi
else
if [ "x${DEFAULT_GW_DEV}" = "xeth1" ]; then
/sbin/route del default eth0 2>/dev/null 1>/dev/null
/sbin/route del default wlan0 2>/dev/null 1>/dev/null
if [ "x${ETH0_VLAN}" = "xTRUE" ]; then
/sbin/route del default eth0.${ETH0_VLAN_ID} 2>/dev/null 1>/dev/null
fi
if [ "x$model_name" == "xTS-NASARM" ] && [ ! -x /sbin/hal_app ]; then
/sbin/route add default gw `/sbin/getcfg "" GATEWAYS -f /etc/dhcpc/dhcpcd-eth1.info` eth1
fi
elif [ "x${DEFAULT_GW_DEV}" = "xeth0" ]; then
/sbin/route del default eth1 2>/dev/null 1>/dev/null
/sbin/route del default wlan0 2>/dev/null 1>/dev/null
if [ "x${ETH1_VLAN}" = "xTRUE" ]; then
/sbin/route del default eth1.${ETH1_VLAN_ID} 2>/dev/null 1>/dev/null
fi
if [ "x$model_name" == "xTS-NASARM" ] && [ ! -x /sbin/hal_app ]; then
/sbin/route add default gw `/sbin/getcfg "" GATEWAYS -f /etc/dhcpc/dhcpcd-eth0.info` eth0
fi
elif [ "x${DEFAULT_GW_DEV}" = "xbond0" ]; then
/sbin/route del default eth1 2>/dev/null 1>/dev/null
/sbin/route del default eth0 2>/dev/null 1>/dev/null
/sbin/route del default wlan0 2>/dev/null 1>/dev/null
#/sbin/route add default gw `/sbin/getcfg "" GATEWAY -f /etc/dhcpc/dhcpcd-bond0.info` bond0
elif [ "x${DEFAULT_GW_DEV}" = "xwlan0" ]; then
/sbin/route del default eth1 2>/dev/null 1>/dev/null
/sbin/route del default eth0 2>/dev/null 1>/dev/null
/sbin/route del default bond0 2>/dev/null 1>/dev/null
if [ "x${ETH1_VLAN}" = "xTRUE" ]; then
/sbin/route del default eth1.${ETH1_VLAN_ID} 2>/dev/null 1>/dev/null
fi
if [ "x${ETH0_VLAN}" = "xTRUE" ]; then
/sbin/route del default eth0.${ETH0_VLAN_ID} 2>/dev/null 1>/dev/null
fi
if [ "x${BOND0_VLAN}" = "xTRUE" ]; then
/sbin/route del default bond0.${BOND0_VLAN_ID} 2>/dev/null 1>/dev/null
fi
/sbin/route add default gw `/sbin/getcfg "" GATEWAY -f /etc/dhcpc/dhcpcd-wlan0.info` wlan0
fi
fi
fi
/etc/init.d/ads_register_dns.sh &
/usr/bin/killall -HUP upnpcd
[ -f /var/run/nat_pmp.bin ] && /bin/rm /var/run/nat_pmp.bin
[ -f /etc/init.d/yoics.sh ] && /etc/init.d/yoics.sh restart &
/etc/init.d/hostname.sh