ppp: Detailed last error support

Enables last error support for the PPP protocol handlers.
In generic teardown the PPP daemon exit code is translated into
a self explaining error string which is set as interface error
by proto_notify_error in case of failure.

Signed-off-by: Johan Peeters <johan.peeters111@gmail.com>
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>

SVN-Revision: 45333
lede-17.01
John Crispin 2015-04-09 10:32:54 +00:00
parent 88fa9a8422
commit 4b0211b547
1 changed files with 47 additions and 4 deletions

View File

@ -8,6 +8,38 @@
init_proto "$@" init_proto "$@"
} }
ppp_exitcode_tostring()
{
local errorcode=$1
[ -n "$errorcode" ] || errorcode=5
case "$errorcode" in
0) echo "OK" ;;
1) echo "FATAL_ERROR" ;;
2) echo "OPTION_ERROR" ;;
3) echo "NOT_ROOT" ;;
4) echo "NO_KERNEL_SUPPORT" ;;
5) echo "USER_REQUEST" ;;
6) echo "LOCK_FAILED" ;;
7) echo "OPEN_FAILED" ;;
8) echo "CONNECT_FAILED" ;;
9) echo "PTYCMD_FAILED" ;;
10) echo "NEGOTIATION_FAILED" ;;
11) echo "PEER_AUTH_FAILED" ;;
12) echo "IDLE_TIMEOUT" ;;
13) echo "CONNECT_TIME" ;;
14) echo "CALLBACK" ;;
15) echo "PEER_DEAD" ;;
16) echo "HANGUP" ;;
17) echo "LOOPBACK" ;;
18) echo "INIT_FAILED" ;;
19) echo "AUTH_TOPEER_FAILED" ;;
20) echo "TRAFFIC_LIMIT" ;;
21) echo "CNID_AUTH_FAILED";;
*) echo "UNKNOWN_ERROR" ;;
esac
}
ppp_generic_init_config() { ppp_generic_init_config() {
proto_config_add_string username proto_config_add_string username
proto_config_add_string password proto_config_add_string password
@ -72,20 +104,27 @@ ppp_generic_setup() {
ppp_generic_teardown() { ppp_generic_teardown() {
local interface="$1" local interface="$1"
local errorstring=$(ppp_exitcode_tostring $ERROR)
case "$ERROR" in case "$ERROR" in
0)
;;
2)
proto_notify_error "$interface" "$errorstring"
proto_block_restart "$interface"
;;
11|19) 11|19)
proto_notify_error "$interface" AUTH_FAILED
json_get_var authfail authfail json_get_var authfail authfail
proto_notify_error "$interface" "$errorstring"
if [ "${authfail:-0}" -gt 0 ]; then if [ "${authfail:-0}" -gt 0 ]; then
proto_block_restart "$interface" proto_block_restart "$interface"
fi fi
;; ;;
2) *)
proto_notify_error "$interface" INVALID_OPTIONS proto_notify_error "$interface" "$errorstring"
proto_block_restart "$interface"
;; ;;
esac esac
proto_kill_command "$interface" proto_kill_command "$interface"
} }
@ -96,6 +135,7 @@ proto_ppp_init_config() {
ppp_generic_init_config ppp_generic_init_config
no_device=1 no_device=1
available=1 available=1
lasterror=1
} }
proto_ppp_setup() { proto_ppp_setup() {
@ -114,6 +154,7 @@ proto_pppoe_init_config() {
proto_config_add_string "ac" proto_config_add_string "ac"
proto_config_add_string "service" proto_config_add_string "service"
proto_config_add_string "host_uniq" proto_config_add_string "host_uniq"
lasterror=1
} }
proto_pppoe_setup() { proto_pppoe_setup() {
@ -151,6 +192,7 @@ proto_pppoa_init_config() {
proto_config_add_string "encaps" proto_config_add_string "encaps"
no_device=1 no_device=1
available=1 available=1
lasterror=1
} }
proto_pppoa_setup() { proto_pppoa_setup() {
@ -184,6 +226,7 @@ proto_pptp_init_config() {
proto_config_add_string "interface" proto_config_add_string "interface"
available=1 available=1
no_device=1 no_device=1
lasterror=1
} }
proto_pptp_setup() { proto_pptp_setup() {