OpenWrt – Blame information for rev 3
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | #!/bin/sh |
2 | |||
3 | [ -x /usr/sbin/pppd ] || exit 0 |
||
4 | |||
5 | [ -n "$INCLUDE_ONLY" ] || { |
||
6 | . /lib/functions.sh |
||
7 | . /lib/functions/network.sh |
||
8 | . ../netifd-proto.sh |
||
9 | init_proto "$@" |
||
10 | } |
||
11 | |||
12 | ppp_select_ipaddr() |
||
13 | { |
||
14 | local subnets=$1 |
||
15 | local res |
||
16 | local res_mask |
||
17 | |||
18 | for subnet in $subnets; do |
||
19 | local addr="${subnet%%/*}" |
||
20 | local mask="${subnet#*/}" |
||
21 | |||
22 | if [ -n "$res_mask" -a "$mask" != 32 ]; then |
||
23 | [ "$mask" -gt "$res_mask" ] || [ "$res_mask" = 32 ] && { |
||
24 | res="$addr" |
||
25 | res_mask="$mask" |
||
26 | } |
||
27 | elif [ -z "$res_mask" ]; then |
||
28 | res="$addr" |
||
29 | res_mask="$mask" |
||
30 | fi |
||
31 | done |
||
32 | |||
33 | echo "$res" |
||
34 | } |
||
35 | |||
36 | ppp_exitcode_tostring() |
||
37 | { |
||
38 | local errorcode=$1 |
||
39 | [ -n "$errorcode" ] || errorcode=5 |
||
40 | |||
41 | case "$errorcode" in |
||
42 | 0) echo "OK" ;; |
||
43 | 1) echo "FATAL_ERROR" ;; |
||
44 | 2) echo "OPTION_ERROR" ;; |
||
45 | 3) echo "NOT_ROOT" ;; |
||
46 | 4) echo "NO_KERNEL_SUPPORT" ;; |
||
47 | 5) echo "USER_REQUEST" ;; |
||
48 | 6) echo "LOCK_FAILED" ;; |
||
49 | 7) echo "OPEN_FAILED" ;; |
||
50 | 8) echo "CONNECT_FAILED" ;; |
||
51 | 9) echo "PTYCMD_FAILED" ;; |
||
52 | 10) echo "NEGOTIATION_FAILED" ;; |
||
53 | 11) echo "PEER_AUTH_FAILED" ;; |
||
54 | 12) echo "IDLE_TIMEOUT" ;; |
||
55 | 13) echo "CONNECT_TIME" ;; |
||
56 | 14) echo "CALLBACK" ;; |
||
57 | 15) echo "PEER_DEAD" ;; |
||
58 | 16) echo "HANGUP" ;; |
||
59 | 17) echo "LOOPBACK" ;; |
||
60 | 18) echo "INIT_FAILED" ;; |
||
61 | 19) echo "AUTH_TOPEER_FAILED" ;; |
||
62 | 20) echo "TRAFFIC_LIMIT" ;; |
||
63 | 21) echo "CNID_AUTH_FAILED";; |
||
64 | *) echo "UNKNOWN_ERROR" ;; |
||
65 | esac |
||
66 | } |
||
67 | |||
68 | ppp_generic_init_config() { |
||
69 | proto_config_add_string username |
||
70 | proto_config_add_string password |
||
71 | proto_config_add_string keepalive |
||
72 | proto_config_add_boolean keepalive_adaptive |
||
73 | proto_config_add_int demand |
||
74 | proto_config_add_string pppd_options |
||
75 | proto_config_add_string 'connect:file' |
||
76 | proto_config_add_string 'disconnect:file' |
||
3 | office | 77 | proto_config_add_string ipv6 |
1 | office | 78 | proto_config_add_boolean authfail |
79 | proto_config_add_int mtu |
||
80 | proto_config_add_string pppname |
||
81 | proto_config_add_string unnumbered |
||
82 | proto_config_add_boolean persist |
||
83 | proto_config_add_int maxfail |
||
84 | proto_config_add_int holdoff |
||
85 | } |
||
86 | |||
87 | ppp_generic_setup() { |
||
88 | local config="$1"; shift |
||
89 | local localip |
||
90 | |||
3 | office | 91 | json_get_vars ipv6 ip6table demand keepalive keepalive_adaptive username password pppd_options pppname unnumbered persist maxfail holdoff peerdns |
1 | office | 92 | if [ "$ipv6" = 0 ]; then |
93 | ipv6="" |
||
94 | elif [ -z "$ipv6" -o "$ipv6" = auto ]; then |
||
95 | ipv6=1 |
||
96 | autoipv6=1 |
||
97 | fi |
||
98 | |||
99 | if [ "${demand:-0}" -gt 0 ]; then |
||
100 | demand="precompiled-active-filter /etc/ppp/filter demand idle $demand" |
||
101 | else |
||
102 | demand="" |
||
103 | fi |
||
104 | if [ -n "$persist" ]; then |
||
105 | [ "${persist}" -lt 1 ] && persist="nopersist" || persist="persist" |
||
106 | fi |
||
107 | if [ -z "$maxfail" ]; then |
||
108 | [ "$persist" = "persist" ] && maxfail=0 || maxfail=1 |
||
109 | fi |
||
110 | [ -n "$mtu" ] || json_get_var mtu mtu |
||
111 | [ -n "$pppname" ] || pppname="${proto:-ppp}-$config" |
||
112 | [ -n "$unnumbered" ] && { |
||
113 | local subnets |
||
114 | ( proto_add_host_dependency "$config" "" "$unnumbered" ) |
||
115 | network_get_subnets subnets "$unnumbered" |
||
116 | localip=$(ppp_select_ipaddr "$subnets") |
||
117 | [ -n "$localip" ] || { |
||
118 | proto_block_restart "$config" |
||
119 | return |
||
120 | } |
||
121 | } |
||
122 | |||
123 | local lcp_failure="${keepalive%%[, ]*}" |
||
124 | local lcp_interval="${keepalive##*[, ]}" |
||
125 | local lcp_adaptive="lcp-echo-adaptive" |
||
126 | [ "${lcp_failure:-0}" -lt 1 ] && lcp_failure="" |
||
127 | [ "$lcp_interval" != "$keepalive" ] || lcp_interval=5 |
||
128 | [ "${keepalive_adaptive:-1}" -lt 1 ] && lcp_adaptive="" |
||
129 | [ -n "$connect" ] || json_get_var connect connect |
||
130 | [ -n "$disconnect" ] || json_get_var disconnect disconnect |
||
131 | |||
132 | proto_run_command "$config" /usr/sbin/pppd \ |
||
133 | nodetach ipparam "$config" \ |
||
134 | ifname "$pppname" \ |
||
135 | ${localip:+$localip:} \ |
||
136 | ${lcp_failure:+lcp-echo-interval $lcp_interval lcp-echo-failure $lcp_failure $lcp_adaptive} \ |
||
137 | ${ipv6:++ipv6} \ |
||
138 | ${autoipv6:+set AUTOIPV6=1} \ |
||
139 | ${ip6table:+set IP6TABLE=$ip6table} \ |
||
140 | ${peerdns:+set PEERDNS=$peerdns} \ |
||
141 | nodefaultroute \ |
||
142 | usepeerdns \ |
||
143 | $demand $persist maxfail $maxfail \ |
||
144 | ${holdoff:+holdoff "$holdoff"} \ |
||
145 | ${username:+user "$username" password "$password"} \ |
||
146 | ${connect:+connect "$connect"} \ |
||
147 | ${disconnect:+disconnect "$disconnect"} \ |
||
148 | ip-up-script /lib/netifd/ppp-up \ |
||
3 | office | 149 | ipv6-up-script /lib/netifd/ppp6-up \ |
1 | office | 150 | ip-down-script /lib/netifd/ppp-down \ |
3 | office | 151 | ipv6-down-script /lib/netifd/ppp-down \ |
1 | office | 152 | ${mtu:+mtu $mtu mru $mtu} \ |
153 | "$@" $pppd_options |
||
154 | } |
||
155 | |||
156 | ppp_generic_teardown() { |
||
157 | local interface="$1" |
||
158 | local errorstring=$(ppp_exitcode_tostring $ERROR) |
||
159 | |||
160 | case "$ERROR" in |
||
161 | 0) |
||
162 | ;; |
||
163 | 2) |
||
164 | proto_notify_error "$interface" "$errorstring" |
||
165 | proto_block_restart "$interface" |
||
166 | ;; |
||
167 | 11|19) |
||
168 | json_get_var authfail authfail |
||
169 | proto_notify_error "$interface" "$errorstring" |
||
170 | if [ "${authfail:-0}" -gt 0 ]; then |
||
171 | proto_block_restart "$interface" |
||
172 | fi |
||
173 | ;; |
||
174 | *) |
||
175 | proto_notify_error "$interface" "$errorstring" |
||
176 | ;; |
||
177 | esac |
||
178 | |||
179 | proto_kill_command "$interface" |
||
180 | } |
||
181 | |||
182 | # PPP on serial device |
||
183 | |||
184 | proto_ppp_init_config() { |
||
185 | proto_config_add_string "device" |
||
186 | ppp_generic_init_config |
||
187 | no_device=1 |
||
188 | available=1 |
||
189 | lasterror=1 |
||
190 | } |
||
191 | |||
192 | proto_ppp_setup() { |
||
193 | local config="$1" |
||
194 | |||
195 | json_get_var device device |
||
196 | ppp_generic_setup "$config" "$device" |
||
197 | } |
||
198 | |||
199 | proto_ppp_teardown() { |
||
200 | ppp_generic_teardown "$@" |
||
201 | } |
||
202 | |||
203 | proto_pppoe_init_config() { |
||
204 | ppp_generic_init_config |
||
205 | proto_config_add_string "ac" |
||
206 | proto_config_add_string "service" |
||
207 | proto_config_add_string "host_uniq" |
||
208 | lasterror=1 |
||
209 | } |
||
210 | |||
211 | proto_pppoe_setup() { |
||
212 | local config="$1" |
||
213 | local iface="$2" |
||
214 | |||
215 | for module in slhc ppp_generic pppox pppoe; do |
||
216 | /sbin/insmod $module 2>&- >&- |
||
217 | done |
||
218 | |||
219 | json_get_var mtu mtu |
||
220 | mtu="${mtu:-1492}" |
||
221 | |||
222 | json_get_var ac ac |
||
223 | json_get_var service service |
||
224 | json_get_var host_uniq host_uniq |
||
225 | |||
226 | ppp_generic_setup "$config" \ |
||
227 | plugin rp-pppoe.so \ |
||
228 | ${ac:+rp_pppoe_ac "$ac"} \ |
||
229 | ${service:+rp_pppoe_service "$service"} \ |
||
230 | ${host_uniq:+host-uniq "$host_uniq"} \ |
||
231 | "nic-$iface" |
||
232 | } |
||
233 | |||
234 | proto_pppoe_teardown() { |
||
235 | ppp_generic_teardown "$@" |
||
236 | } |
||
237 | |||
238 | proto_pppoa_init_config() { |
||
239 | ppp_generic_init_config |
||
240 | proto_config_add_int "atmdev" |
||
241 | proto_config_add_int "vci" |
||
242 | proto_config_add_int "vpi" |
||
243 | proto_config_add_string "encaps" |
||
244 | no_device=1 |
||
245 | available=1 |
||
246 | lasterror=1 |
||
247 | } |
||
248 | |||
249 | proto_pppoa_setup() { |
||
250 | local config="$1" |
||
251 | local iface="$2" |
||
252 | |||
253 | for module in slhc ppp_generic pppox pppoatm; do |
||
254 | /sbin/insmod $module 2>&- >&- |
||
255 | done |
||
256 | |||
257 | json_get_vars atmdev vci vpi encaps |
||
258 | |||
259 | case "$encaps" in |
||
260 | 1|vc) encaps="vc-encaps" ;; |
||
261 | *) encaps="llc-encaps" ;; |
||
262 | esac |
||
263 | |||
264 | ppp_generic_setup "$config" \ |
||
265 | plugin pppoatm.so \ |
||
266 | ${atmdev:+$atmdev.}${vpi:-8}.${vci:-35} \ |
||
267 | ${encaps} |
||
268 | } |
||
269 | |||
270 | proto_pppoa_teardown() { |
||
271 | ppp_generic_teardown "$@" |
||
272 | } |
||
273 | |||
274 | proto_pptp_init_config() { |
||
275 | ppp_generic_init_config |
||
276 | proto_config_add_string "server" |
||
277 | proto_config_add_string "interface" |
||
278 | available=1 |
||
279 | no_device=1 |
||
280 | lasterror=1 |
||
281 | } |
||
282 | |||
283 | proto_pptp_setup() { |
||
284 | local config="$1" |
||
285 | local iface="$2" |
||
286 | |||
287 | local ip serv_addr server interface |
||
288 | json_get_vars interface server |
||
289 | [ -n "$server" ] && { |
||
290 | for ip in $(resolveip -t 5 "$server"); do |
||
291 | ( proto_add_host_dependency "$config" "$ip" $interface ) |
||
292 | serv_addr=1 |
||
293 | done |
||
294 | } |
||
295 | [ -n "$serv_addr" ] || { |
||
296 | echo "Could not resolve server address" |
||
297 | sleep 5 |
||
298 | proto_setup_failed "$config" |
||
299 | exit 1 |
||
300 | } |
||
301 | |||
302 | local load |
||
303 | for module in slhc ppp_generic ppp_async ppp_mppe ip_gre gre pptp; do |
||
304 | grep -q "^$module " /proc/modules && continue |
||
305 | /sbin/insmod $module 2>&- >&- |
||
306 | load=1 |
||
307 | done |
||
308 | [ "$load" = "1" ] && sleep 1 |
||
309 | |||
310 | ppp_generic_setup "$config" \ |
||
311 | plugin pptp.so \ |
||
312 | pptp_server $server \ |
||
313 | file /etc/ppp/options.pptp |
||
314 | } |
||
315 | |||
316 | proto_pptp_teardown() { |
||
317 | ppp_generic_teardown "$@" |
||
318 | } |
||
319 | |||
320 | [ -n "$INCLUDE_ONLY" ] || { |
||
321 | add_protocol ppp |
||
322 | [ -f /usr/lib/pppd/*/rp-pppoe.so ] && add_protocol pppoe |
||
323 | [ -f /usr/lib/pppd/*/pppoatm.so ] && add_protocol pppoa |
||
324 | [ -f /usr/lib/pppd/*/pptp.so ] && add_protocol pptp |
||
325 | } |
||
326 |