81 lines
2.4 KiB
Bash
Executable File
81 lines
2.4 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
|
|
|
START=99
|
|
CONFIG=timecontrol
|
|
|
|
uci_get_by_type() {
|
|
local index=0
|
|
[ -n $4 ] && index=$4
|
|
local ret=$(uci -q get $CONFIG.@$1[$index].$2 2>/dev/null)
|
|
echo ${ret:=$3}
|
|
}
|
|
|
|
add_rule(){
|
|
local count=$(uci show $CONFIG | grep "@macbind" | sed -n '$p' | cut -d '[' -f 2 | cut -d ']' -f 1)
|
|
[ -n "$count" ] && [ "$count" -ge 0 ] && {
|
|
u_get() {
|
|
local ret=$(uci -q get $CONFIG.@macbind[$1].$2)
|
|
echo ${ret:=$3}
|
|
}
|
|
for i in $(seq 0 $count); do
|
|
local enable=$(u_get $i enable 0)
|
|
local macaddr=$(u_get $i macaddr)
|
|
local timeoff=$(u_get $i timeoff)
|
|
local timeon=$(u_get $i timeon)
|
|
local z1=$(u_get $i z1)
|
|
local z2=$(u_get $i z2)
|
|
local z3=$(u_get $i z3)
|
|
local z4=$(u_get $i z4)
|
|
local z5=$(u_get $i z5)
|
|
local z6=$(u_get $i z6)
|
|
local z7=$(u_get $i z7)
|
|
[ "$z1" == "1" ] && local Z1="Mon,"
|
|
[ "$z2" == "1" ] && local Z2="Tue,"
|
|
[ "$z3" == "1" ] && local Z3="Wed,"
|
|
[ "$z4" == "1" ] && local Z4="Thu,"
|
|
[ "$z5" == "1" ] && local Z5="Fri,"
|
|
[ "$z6" == "1" ] && local Z6="Sat,"
|
|
[ "$z7" == "1" ] && local Z7="Sun"
|
|
if [ -z $enable ] || [ -z $macaddr ] || [ -z $timeoff ] || [ -z $timeon ]; then
|
|
continue
|
|
fi
|
|
if [ "$enable" == "1" ]; then
|
|
iptables -t filter -I TIMECONTROL -m mac --mac-source $macaddr -m time --kerneltz --timestart $timeon --timestop $timeoff --weekdays $Z1$Z2$Z3$Z4$Z5$Z6$Z7 -j DROP
|
|
iptables -t nat -I PREROUTING 1 -m mac --mac-source $macaddr -m time --kerneltz --timestart $timeon --timestop $timeoff --weekdays $Z1$Z2$Z3$Z4$Z5$Z6$Z7 -m comment --comment "TIMECONTROL" -j RETURN
|
|
fi
|
|
done
|
|
}
|
|
echo "/etc/init.d/timecontrol restart" > "/var/etc/timecontrol.include"
|
|
}
|
|
|
|
del_rule(){
|
|
nums=$(iptables -t nat -n -L PREROUTING 2>/dev/null | grep -c "TIMECONTROL")
|
|
if [ -n "$nums" ]; then
|
|
until [ "$nums" = 0 ]
|
|
do
|
|
rules=$(iptables -t nat -n -L PREROUTING --line-num 2>/dev/null | grep "TIMECONTROL" | awk '{print $1}')
|
|
for rule in $rules
|
|
do
|
|
iptables -t nat -D PREROUTING $rule 2>/dev/null
|
|
break
|
|
done
|
|
nums=$(expr $nums - 1)
|
|
done
|
|
fi
|
|
}
|
|
|
|
start(){
|
|
ENABLED=$(uci_get_by_type basic enable 0)
|
|
[ "$ENABLED" != "1" ] && exit 0
|
|
iptables -t filter -N TIMECONTROL
|
|
iptables -t filter -I FORWARD -j TIMECONTROL
|
|
add_rule
|
|
}
|
|
|
|
stop(){
|
|
iptables -t filter -D FORWARD -j TIMECONTROL 2>/dev/null
|
|
iptables -t filter -F TIMECONTROL 2>/dev/null
|
|
iptables -t filter -X TIMECONTROL 2>/dev/null
|
|
del_rule
|
|
}
|