lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

functions.sh (2485B)


      1 #!/bin/sh
      2 #
      3 # Copyright (C) 2015 Vitaly Protsko <villy@sft.ru>
      4 
      5 errno=0
      6 
      7 get_fieldval() {
      8   local __data="$3"
      9   local __rest
     10 
     11   test -z "$1" && return
     12 
     13   while true ; do
     14     __rest=${__data#* }
     15     test "$__rest" = "$__data" && break
     16 
     17     if [ "${__data/ *}" = "$2" ]; then
     18       eval "$1=${__rest/ *}"
     19       break
     20     fi
     21 
     22     __data="$__rest"
     23   done
     24 }
     25 
     26 manage_fw() {
     27   local cmd=/usr/sbin/iptables
     28   local mode
     29   local item
     30 
     31   if [ -z "$4" ]; then
     32     $log "Bad usage of manage_fw"
     33     errno=3; return 3
     34   fi
     35 
     36   case "$1" in
     37     add|up|1) mode=A ;;
     38     del|down|0) mode=D ;;
     39     *) return 3 ;;
     40   esac
     41 
     42   for item in $4 ; do
     43     $cmd -$mode forwarding_$2_rule -s $item -j ACCEPT
     44     $cmd -$mode output_$3_rule -d $item -j ACCEPT
     45     $cmd -$mode forwarding_$3_rule -d $item -j ACCEPT
     46     $cmd -t nat -$mode postrouting_$3_rule -d $item -j ACCEPT
     47   done
     48 }
     49 
     50 manage_sa() {
     51   local spdcmd
     52   local rtcmd
     53   local gate
     54   local litem
     55   local ritem
     56 
     57   if [ -z "$4" ]; then
     58     $log "Bad usage of manage_sa"
     59     errno=3; return 3
     60   fi
     61 
     62   case "$1" in
     63     add|up|1) spdcmd=add; rtcmd=add ;;
     64     del|down|0) spdcmd=delete; rtcmd=del ;;
     65     *) errno=3; return 3 ;;
     66   esac
     67 
     68   get_fieldval gate src "$(/usr/sbin/ip route get $4)"
     69   if [ -z "$gate" ]; then
     70     $log "Can not find outbound IP for $4"
     71     errno=3; return 3
     72   fi
     73 
     74 
     75   for litem in $2 ; do
     76     for ritem in $3 ; do
     77       echo "
     78 spd$spdcmd $litem $ritem any -P out ipsec esp/tunnel/$gate-$4/require;
     79 spd$spdcmd $ritem $litem any -P in ipsec esp/tunnel/$4-$gate/require;
     80 " | /usr/sbin/setkey -c 1>&2
     81     done
     82   done
     83 
     84   test -n "$5" && gate=$5
     85 
     86   for ritem in $3 ; do
     87     (sleep 3; /usr/sbin/ip route $rtcmd $ritem via $gate) &
     88   done
     89 }
     90 
     91 
     92 . /lib/functions/network.sh
     93 
     94 get_zoneiflist() {
     95   local item
     96   local data
     97   local addr
     98 
     99   item=0
    100   data=$(uci get firewall.@zone[0].name)
    101   while [ -n "$data" ]; do
    102     test "$data" = "$1" && break
    103     let "item=$item+1"
    104     data=$(uci get firewall.@zone[$item].name)
    105   done
    106 
    107   if [ -z "$data" ]; then
    108     errno=1
    109     return $errno
    110   fi
    111   data=$(uci get firewall.@zone[$item].network)
    112 
    113   echo "$data"
    114 }
    115 
    116 get_zoneiplist() {
    117   local item
    118   local addr
    119   local data
    120   local result
    121 
    122   data=$(get_zoneiflist $1)
    123   test $? -gt 0 -o $errno -gt 0 -o -z "$data" && return $errno
    124 
    125   for item in $data ; do
    126     if network_is_up $item ; then
    127       network_get_ipaddrs addr $item
    128       test $? -eq 0 && result="$result $addr"
    129     fi
    130   done
    131 
    132   result=$(echo $result)
    133   echo "$result"
    134 }
    135 
    136 
    137 # EOF /etc/racoon/functions.sh