#!/bin/sh # # Copyright (C) 2015 Vitaly Protsko errno=0 get_fieldval() { local __data="$3" local __rest test -z "$1" && return while true ; do __rest=${__data#* } test "$__rest" = "$__data" && break if [ "${__data/ *}" = "$2" ]; then eval "$1=${__rest/ *}" break fi __data="$__rest" done } manage_fw() { local cmd=/usr/sbin/iptables local mode local item if [ -z "$4" ]; then $log "Bad usage of manage_fw" errno=3; return 3 fi case "$1" in add|up|1) mode=A ;; del|down|0) mode=D ;; *) return 3 ;; esac for item in $4 ; do $cmd -$mode forwarding_$2_rule -s $item -j ACCEPT $cmd -$mode output_$3_rule -d $item -j ACCEPT $cmd -$mode forwarding_$3_rule -d $item -j ACCEPT $cmd -t nat -$mode postrouting_$3_rule -d $item -j ACCEPT done } manage_sa() { local spdcmd local rtcmd local gate local litem local ritem if [ -z "$4" ]; then $log "Bad usage of manage_sa" errno=3; return 3 fi case "$1" in add|up|1) spdcmd=add; rtcmd=add ;; del|down|0) spdcmd=delete; rtcmd=del ;; *) errno=3; return 3 ;; esac get_fieldval gate src "$(/usr/sbin/ip route get $4)" if [ -z "$gate" ]; then $log "Can not find outbound IP for $4" errno=3; return 3 fi for litem in $2 ; do for ritem in $3 ; do echo " spd$spdcmd $litem $ritem any -P out ipsec esp/tunnel/$gate-$4/require; spd$spdcmd $ritem $litem any -P in ipsec esp/tunnel/$4-$gate/require; " | /usr/sbin/setkey -c 1>&2 done done test -n "$5" && gate=$5 for ritem in $3 ; do (sleep 3; /usr/sbin/ip route $rtcmd $ritem via $gate) & done } . /lib/functions/network.sh get_zoneiflist() { local item local data local addr item=0 data=$(uci get firewall.@zone[0].name) while [ -n "$data" ]; do test "$data" = "$1" && break let "item=$item+1" data=$(uci get firewall.@zone[$item].name) done if [ -z "$data" ]; then errno=1 return $errno fi data=$(uci get firewall.@zone[$item].network) echo "$data" } get_zoneiplist() { local item local addr local data local result data=$(get_zoneiflist $1) test $? -gt 0 -o $errno -gt 0 -o -z "$data" && return $errno for item in $data ; do if network_is_up $item ; then network_get_ipaddrs addr $item test $? -eq 0 && result="$result $addr" fi done result=$(echo $result) echo "$result" } # EOF /etc/racoon/functions.sh