|
|
@ -0,0 +1,105 @@ |
|
|
|
#!/bin/sh /etc/rc.common |
|
|
|
|
|
|
|
START=99 |
|
|
|
USE_PROCD=1 |
|
|
|
INDEX=0 |
|
|
|
|
|
|
|
append_bool() { |
|
|
|
local section="$1" |
|
|
|
local option="$2" |
|
|
|
local value="$3" |
|
|
|
local _val |
|
|
|
config_get_bool _val "$section" "$option" '0' |
|
|
|
[ "$_val" -gt 0 ] && append args "$3" |
|
|
|
} |
|
|
|
|
|
|
|
append_string() { |
|
|
|
local section="$1" |
|
|
|
local option="$2" |
|
|
|
local value="$3" |
|
|
|
local _val |
|
|
|
config_get _val "$section" "$option" |
|
|
|
[ -n "$_val" ] && append args "$3$_val" |
|
|
|
} |
|
|
|
|
|
|
|
service_triggers () { |
|
|
|
procd_open_trigger |
|
|
|
procd_add_reload_trigger "eoip" |
|
|
|
procd_add_config_trigger "config.change" "eoip" /etc/init.d/eoip restart |
|
|
|
procd_add_config_trigger "config.change" "/etc/config/eoip" /etc/init.d/eoip restart |
|
|
|
procd_close_trigger |
|
|
|
} |
|
|
|
|
|
|
|
start_service() { |
|
|
|
config_load "eoip" |
|
|
|
echo "" > /etc/eoip.cfg |
|
|
|
echo "#!/bin/sh" > /etc/afterStart.sh |
|
|
|
echo "chkCount=0">> /etc/afterStart.sh |
|
|
|
echo "while [ \$chkCount -le 10 ];do">> /etc/afterStart.sh |
|
|
|
echo " chkStarted=\$(ip a | grep zeoip | wc -l)">> /etc/afterStart.sh |
|
|
|
echo " if [ \$chkStarted -eq 0 ]; then">> /etc/afterStart.sh |
|
|
|
echo " chkCount=\$((chkCount+1))">> /etc/afterStart.sh |
|
|
|
echo " sleep 2">> /etc/afterStart.sh |
|
|
|
echo " else">> /etc/afterStart.sh |
|
|
|
echo " chkCount=11">> /etc/afterStart.sh |
|
|
|
echo " fi">> /etc/afterStart.sh |
|
|
|
echo "done">> /etc/afterStart.sh |
|
|
|
echo "now=\$(ip a | grep \"@zeoip\" | awk '{print \$2}' | sed 's/.$//' | cut -d \"@\" -f 1)" >> /etc/afterStart.sh |
|
|
|
echo "IFS=\$'\n'" >> /etc/afterStart.sh |
|
|
|
echo "for s in \$now ; do" >> /etc/afterStart.sh |
|
|
|
echo " ip link delete link dev \$s" >> /etc/afterStart.sh |
|
|
|
echo "done" >> /etc/afterStart.sh |
|
|
|
echo "rm /etc/afterStart.sh" >> /etc/afterStart.sh |
|
|
|
chmod +x /etc/afterStart.sh |
|
|
|
config_foreach start_eoip eoip |
|
|
|
config_foreach start_eoip_vlan eoip |
|
|
|
if [ "$(cat /etc/eoip.cfg | grep zeoip)" != '' ]; then |
|
|
|
/etc/afterStart.sh& |
|
|
|
procd_open_instance |
|
|
|
args=" /etc/eoip.cfg" |
|
|
|
procd_set_param command /usr/bin/eoip $args |
|
|
|
procd_close_instance |
|
|
|
else |
|
|
|
rm /etc/afterStart.sh |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
stop_service() { |
|
|
|
killall eoip |
|
|
|
} |
|
|
|
|
|
|
|
start_eoip() { |
|
|
|
local section="$1" runas_root |
|
|
|
config_get_bool enabled "$section" enabled |
|
|
|
if [ "$enabled" -gt 0 ]; then |
|
|
|
config_get name "$section" name |
|
|
|
config_get idtun "$section" idtun |
|
|
|
config_get dst "$section" dst |
|
|
|
config_get_bool dynamic "$section" dynamic 0 |
|
|
|
if [ "${name}" != '' ] && [ "${dst}" != '' ] && [ "${idtun}" != '' ]; then |
|
|
|
cnt=$(cat /etc/eoip.cfg | grep "zeoip${name}" | wc -l) |
|
|
|
if [ $cnt -eq 0 ]; then |
|
|
|
echo "[zeoip${name}]" >>/etc/eoip.cfg |
|
|
|
echo "id=${idtun}" >>/etc/eoip.cfg |
|
|
|
echo "dst=${dst}" >>/etc/eoip.cfg |
|
|
|
[ "$dynamic" -gt 0 ] && echo "dynamic=${dynamic}" >>/etc/eoip.cfg |
|
|
|
INDEX=$((INDEX+1)) |
|
|
|
else |
|
|
|
result=$(uci delete /etc/config/eoip.@eoip[$INDEX]) |
|
|
|
INDEX=$((INDEX+1)) |
|
|
|
fi |
|
|
|
fi |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
start_eoip_vlan() { |
|
|
|
local section="$1" runas_root |
|
|
|
config_get name "$section" name |
|
|
|
config_list_foreach "$section" vlan handle_vlan ${name} |
|
|
|
} |
|
|
|
|
|
|
|
handle_vlan() { |
|
|
|
local value="$1" |
|
|
|
local name="$2" |
|
|
|
echo "ip link add link zeoip${name} name zeoip${name}.${value} type vlan id ${value}" >> /etc/afterStart.sh |
|
|
|
} |