cshore 810e7c4bf1 packages: libs/savedynamic: rename package to firewall-mod-save and script to 20_save.sh (from savedynamic.sh). Thanks jow
git-svn-id: svn://svn.openwrt.org/openwrt/packages@21371 3c298f89-4303-0410-b956-a3cf2f4a3e73
2010-05-05 08:52:10 +00:00

74 lines
1.7 KiB
Bash

#!/bin/sh
. /etc/functions.sh
save_print_table_chain() {
local table="$1"
local chain="$2"
local fsave="$3"
local fsavetmp="$fsave"".tmp"
local next_table_line
local cur_table_line
local table_line
table_line="$(($(grep -n "^*$table" "$fsave" | cut -f1 -d: ) + 1))"
tail -n+$table_line $fsave >"$fsavetmp"
for cur_table_line in $(grep -n "^*" "$fsavetmp"); do
[ -z "$next_table_line" ] && {
local lineno="$(echo $cur_table_line | cut -f1 -d:)"
[ -n "$lineno" ] && [ "$lineno" -gt $(($table_line - 1)) ] && {
next_table_line=$lineno
}
}
done
[ -z "$next_table_line" ] && {
next_table_line="$(cat $fsavetmp|wc -l)"
}
next_table_line=$(($next_table_line - 1))
head -n $next_table_line "$fsave.tmp" | grep $chain | grep -Ev "^:$chain"
rm -f "$fsavetmp"
}
save_save_fw_chain() {
local chain
local table
local fsave="/tmp/.firewall/save"
config_get chain $1 chain
config_get table $1 table filter
[ -z "$chain" ] && return 0
mkdir -p /tmp/.firewall
iptables-save >"$fsave"
save_print_table_chain $table $chain "$fsave" > /tmp/.firewall/save-$table-$chain
}
save_load_fw_chain() {
local chain
local table
config_get chain $1 chain
config_get table $1 table filter
[ -e /tmp/.firewall/save-$table-$chain ] && [ "$(cat /tmp/.firewall/save-$table-$chain | wc -l)" -ge 1 ] && {
iptables -t $table -N $chain
while read line; do
sh -c "iptables -t $table $line"
done < /tmp/.firewall/save-$table-$chain
rm /tmp/.firewall/save-$table-$chain
}
}
save_pre_stop_cb() {
echo "Saving dynamic firewall chains"
config_load firewall
config_foreach save_save_fw_chain save
}
save_post_core_cb() {
echo "Loading dynamic firewall chains"
config_load firewall
config_foreach save_load_fw_chain save
}