OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / freeswan / utils / _updown.dhcp
1 #! /bin/sh
2
3 # customized updown script
4 #
5
6
7 # check interface version
8 case "$PLUTO_VERSION" in
9 1.[0])  # Older Pluto?!?  Play it safe, script may be using new features.
10         echo "$0: obsolete interface version \`$PLUTO_VERSION'," >&2
11         echo "$0:       called by obsolete Pluto?" >&2
12         exit 2
13         ;;
14 1.*)    ;;
15 *)      echo "$0: unknown interface version \`$PLUTO_VERSION'" >&2
16         exit 2
17         ;;
18 esac
19
20 # check parameter(s)
21 case "$1:$*" in
22 ':')                    # no parameters
23         ;;
24 ipfwadm:ipfwadm)        # due to (left/right)firewall; for default script only
25         ;;
26 custom:*)               # custom parameters (see above CAUTION comment)
27         ;;
28 *)      echo "$0: unknown parameters \`$*'" >&2
29         exit 2
30         ;;
31 esac
32
33 # utility functions for route manipulation
34 # Meddling with this stuff should not be necessary and requires great care.
35 uproute() {
36         doroute add
37 }
38 downroute() {
39         doroute del
40 }
41 doroute() {
42         parms="-net $PLUTO_PEER_CLIENT_NET netmask $PLUTO_PEER_CLIENT_MASK"
43         parms2="dev $PLUTO_INTERFACE gw $PLUTO_NEXT_HOP"
44         case "$PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK" in
45         "0.0.0.0/0.0.0.0")
46                 # horrible kludge for obscure routing bug with opportunistic
47                 it="route $1 -net 0.0.0.0 netmask 128.0.0.0 $parms2 &&"
48                 it="$it route $1 -net 128.0.0.0 netmask 128.0.0.0 $parms2"
49                 route $1 -net 0.0.0.0 netmask 128.0.0.0 $parms2 &&
50                         route $1 -net 128.0.0.0 netmask 128.0.0.0 $parms2
51                 ;;
52         *)      it="route $1 $parms $parms2"
53                 route $1 $parms $parms2
54                 ;;
55         esac
56         st=$?
57         if test $st -ne 0
58         then
59                 # route has already given its own cryptic message
60                 echo "$0: \`$it' failed" >&2
61                 if test " $1 $st" = " add 7"
62                 then
63                         # another totally undocumented interface -- 7 and
64                         # "SIOCADDRT: Network is unreachable" means that
65                         # the gateway isn't reachable.
66                         echo "$0: (incorrect or missing nexthop setting??)" >&2
67                 fi
68         fi
69         return $st
70 }
71
72
73
74 # the big choice
75 case "$PLUTO_VERB:$1" in
76 prepare-host:*|prepare-client:*)
77         # delete possibly-existing route (preliminary to adding a route)
78         case "$PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK" in
79         "0.0.0.0/0.0.0.0")
80                 # horrible kludge for obscure routing bug with opportunistic
81                 parms1="-net 0.0.0.0 netmask 128.0.0.0"
82                 parms2="-net 128.0.0.0 netmask 128.0.0.0"
83                 it="route del $parms1 2>&1 ; route del $parms2 2>&1"
84                 oops="`route del $parms1 2>&1 ; route del $parms2 2>&1`"
85                 ;;
86         *)
87                 parms="-net $PLUTO_PEER_CLIENT_NET netmask $PLUTO_PEER_CLIENT_MASK"
88                 it="route del $parms 2>&1"
89                 oops="`route del $parms 2>&1`"
90                 ;;
91         esac
92         status="$?"
93         if test " $oops" = " " -a " $status" != " 0"
94         then
95                 oops="silent error, exit status $status"
96         fi
97         case "$oops" in
98         'SIOCDELRT: No such process'*)
99                 # This is what route (currently -- not documented!) gives
100                 # for "could not find such a route".
101                 oops=
102                 status=0
103                 ;;
104         esac
105         if test " $oops" != " " -o " $status" != " 0"
106         then
107                 echo "$0: \`$it' failed ($oops)" >&2
108         fi
109         exit $status
110         ;;
111 route-host:*|route-client:*)
112         # connection to me or my client subnet being routed
113         uproute
114         ;;
115 unroute-host:*|unroute-client:*)
116         # connection to me or my client subnet being unrouted
117         downroute
118         ;;
119 up-host:*)
120         # connection to me coming up
121         # If you are doing a custom version, firewall commands go here.
122         ;;
123 down-host:*)
124         # connection to me going down
125         # If you are doing a custom version, firewall commands go here.
126         ;;
127 up-client:)
128         # connection to my client subnet coming up
129         # If you are doing a custom version, firewall commands go here.
130         if [ "$PLUTO_MY_PROTOCOL" == "6" ] || [ "$PLUTO_MY_PROTOCOL" == "17" ]
131         then
132           iptables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
133             -s $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK --sport $PLUTO_PEER_PORT \
134             -d $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK --dport $PLUTO_MY_PORT -j ACCEPT 
135           iptables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
136             -s $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK --sport $PLUTO_MY_PORT \
137             -d $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK --dport $PLUTO_PEER_PORT -j ACCEPT
138           iptables -I FORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
139             -s $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK --sport $PLUTO_MY_PORT \
140             -d $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK --dport $PLUTO_PEER_PORT -j ACCEPT
141           iptables -I FORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
142             -s $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK --sport $PLUTO_PEER_PORT \
143             -d $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK --dport $PLUTO_MY_PORT -j ACCEPT
144         else
145           iptables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
146             -s $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK \
147             -d $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK -j ACCEPT
148           iptables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
149             -s $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK \
150             -d $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK -j ACCEPT
151           iptables -I FORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
152             -s $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK \
153             -d $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK -j ACCEPT
154           iptables -I FORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
155             -s $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK \
156             -d $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK -j ACCEPT
157         fi
158         ;;
159 down-client:)
160         # connection to my client subnet going down
161         # If you are doing a custom version, firewall commands go here.
162         if [ "$PLUTO_MY_PROTOCOL" == "6" ] || [ "$PLUTO_MY_PROTOCOL" == "17" ]
163         then
164           iptables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
165             -s $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK --sport $PLUTO_PEER_PORT \
166             -d $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK --dport $PLUTO_MY_PORT -j ACCEPT
167           iptables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
168             -s $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK --sport $PLUTO_MY_PORT \
169             -d $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK --dport $PLUTO_PEER_PORT -j ACCEPT
170           iptables -D FORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
171             -s $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK --sport $PLUTO_MY_PORT \
172             -d $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK --dport $PLUTO_PEER_PORT -j ACCEPT
173           iptables -D FORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
174             -s $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK --sport $PLUTO_PEER_PORT \
175             -d $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK --dport $PLUTO_MY_PORT -j ACCEPT
176         else
177           iptables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
178             -s $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK \
179             -d $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK -j ACCEPT
180           iptables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
181             -s $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK \
182             -d $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK -j ACCEPT
183           iptables -D FORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
184             -s $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK \
185             -d $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK -j ACCEPT
186           iptables -D FORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
187             -s $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK \
188             -d $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK -j ACCEPT
189         fi
190         ;;
191 up-client:ipfwadm)
192         # connection to client subnet, with (left/right)firewall=yes, coming up
193         # This is used only by the default updown script, not by your custom
194         # ones, so do not mess with it; see CAUTION comment up at top.
195         ipfwadm -F -i accept -b -S $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK \
196                 -D $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK
197         ;;
198 down-client:ipfwadm)
199         # connection to client subnet, with (left/right)firewall=yes, going down
200         # This is used only by the default updown script, not by your custom
201         # ones, so do not mess with it; see CAUTION comment up at top.
202         ipfwadm -F -d accept -b -S $PLUTO_MY_CLIENT_NET/$PLUTO_MY_CLIENT_MASK \
203                 -D $PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK
204         ;;
205 *)      echo "$0: unknown verb \`$PLUTO_VERB' or parameter \`$1'" >&2
206         exit 1
207         ;;
208 esac