source: freewrt/package/fwifupdown/lib/tuntap@ 655dec8

Last change on this file since 655dec8 was 3ebe201, checked in by Christian Fischer <spaetzle@…>, 19 years ago

added fwifupdown tuntap support

git-svn-id: svn://www.freewrt.org/trunk/freewrt@2413 afb5a338-a214-0410-bd46-81f09a774fd1

  • Property mode set to 100644
File size: 2.8 KB
Line 
1#!/bin/sh
2#
3# This file is part of the FreeWRT project. FreeWRT is copyrighted
4# material, please see the LICENCE file in the top-level directory
5# or at http://www.freewrt.org/licence for details.
6#
7# Christian Fischer <spaetzle@freewrt.org>
8#
9
10CFG_DOWN_IFUP_CHECK_OFF=1
11CFG_STOP_PRINTING_OFF=1
12
13iface_type() {
14 # HACK: use iface name only, no idea how to get the list of existing tuntap ifaces
15 # from system
16 if check_iface_name || \
17 [ "${IF_TUNTAP:-""}" != "" ] || \
18 [ "${IF_TUNTAP_USER:-""}" != "" ]
19 then
20 return 0
21 fi
22 return 1
23}
24
25check_iface_name() {
26 echo $IFACE | grep -q "^tun\|^tap[0-9][1-9]*$"
27}
28
29check_kernel_support() {
30 [ -e /dev/net/tun ] && return
31 insmod tun >/dev/null 2>&1 ; sleep 1
32 [ -e /dev/net/tun ] && return
33 err="Your kernel lacks tuntap support"
34 return 1
35}
36
37check_openvpn_support() {
38 [ -x "$(which openvpn)" ] && return
39 err="openvpn executable not found"
40 return 1
41}
42
43check_tunctl_support() {
44 [ -x "$(which tunctl)" ] && return
45 err="tunctl executable not found"
46 return 1
47}
48
49openvpn_create() {
50 openvpn --mktun --dev $IFACE >/dev/null 2>&1 && return
51 err="Creating openvpn tuntap $IFACE failed"
52 return 1
53}
54
55tunctl_create() {
56 tunctl -u ${IF_TUNTAP_USER:-0} -t $IFACE >/dev/null 2>&1 && return
57 err="Creating tuntap $IFACE failed"
58 return 1
59}
60
61openvpn_destroy() {
62 openvpn --rmtun --dev $IFACE >/dev/null 2>&1 && return
63 err="Destroying openvpn tuntap $IFACE failed"
64 return 1
65}
66
67tunctl_destroy() {
68 tunctl -d "${IFACE}" >/dev/null 2>&1 && return
69 err="Destroying tuntap $IFACE failed"
70 return 1
71}
72
73tuntap_create() {
74 eval $fncreate
75}
76
77tuntap_destroy() {
78 eval $fndestroy
79}
80
81set_methods() {
82 if [ "${IF_TUNTAP:-""}" = "openvpn" ]
83 then
84 check_openvpn_support || return 1
85 fncreate="openvpn_create"
86 fndestroy="openvpn_destroy"
87 else
88 check_tunctl_support || return 1
89 fncreate="tunctl_create"
90 fndestroy="tunctl_destroy"
91 fi
92 return 0
93}
94
95if_preup() {
96 check_iface_name || {
97 mcreate
98 mstate 1
99 merr "Tuntap name $IFACE is not supported, use tun* or tap* instead"
100 return 1
101 }
102
103 if ! check_kernel_support
104 then
105 mcreate
106 mstate 1
107 merr $err
108 fi
109
110 if ! set_methods
111 then
112 mcreate
113 mstate 1
114 merr $err
115 fi
116
117 if iface_exists
118 then
119 mdestroy
120 tuntap_destroy
121 mstate $? || {
122 merr $err
123 return 1
124 }
125 fi
126
127 mcreate
128 tuntap_create
129 mstate $? || {
130 merr $err
131 return 1
132 }
133}
134
135if_down() {
136 mstop
137 check_iface_name || {
138 mdestroy
139 mstate 1
140 merr "Tuntap name $IFACE is not supported, use tun* or tap* instead"
141 return 1
142 }
143
144 if ! set_methods
145 then
146 mdestroy
147 mstate 1
148 merr $err
149 fi
150
151 if ! is_up
152 then
153 mdestroy
154 tuntap_destroy
155 mstate $? || merr $err
156 builtin exit 1
157 fi
158 mdown
159}
160
161if_postdown() {
162 is_up && {
163 mstate 1
164 return 1
165 }
166 mstate 0
167
168 if ! set_methods
169 then
170 mdestroy
171 mstate 1
172 merr $err
173 fi
174
175 mdestroy
176 tuntap_destroy
177 mstate $? || {
178 merr $err
179 return 1
180 }
181}
182
183# vim:ts=4
Note: See TracBrowser for help on using the repository browser.