]> git.ipfire.org Git - people/arne_f/network.git/blobdiff - hooks/pppoe
network: pppoe: Kill pppd daemon in a better way.
[people/arne_f/network.git] / hooks / pppoe
index 60fe455bc17dad19660e0584a151ae8f26a12f5a..3d4af332fca12065db410d13222fd392d78efcd6 100755 (executable)
@@ -48,6 +48,13 @@ function _pppoe_real_device() {
        devicify ${device}
 }
 
+function pppd_pid() {
+       local zone=${1}
+       shift
+
+       cat /var/run/${zone}.pid 2>/dev/null
+}
+
 function _check() {
        assert isset USER
        assert isset SECRET
@@ -124,8 +131,6 @@ function _up() {
 
        config_read ${ZONE_DIR}/${zone}/settings
 
-       ppp_pre_up
-
        # Creating necessary files
        [ -d "${RED_RUN}/${LINKNAME}" ] || mkdir -p ${RED_RUN}/${LINKNAME}
 
@@ -169,7 +174,19 @@ EOF
 
        pppd file ${RED_RUN}/${LINKNAME}/options >/dev/null
 
-       exit ${EXIT_OK}
+       local ret=$?
+
+       # Get exit code from ppp daemon and handle it:
+       case "${ret}" in
+               0)
+                       log DEBUG "pppd detached successfully"
+                       exit ${EXIT_OK}
+                       ;;
+       esac
+
+       error_log "pppd exited with unknown exit code '${ret}'"
+
+       exit ${EXIT_ERROR}
 }
 
 function _down() {
@@ -178,16 +195,11 @@ function _down() {
 
        config_read ${ZONE_DIR}/${zone}/settings
 
-       ppp_pre_down
-
        # Kill pppd
-       pid=$(cat /var/run/${zone}.pid 2>/dev/null)
-       if [ -n "${pid}" ]; then
-               kill ${pid} &>/dev/null
-       fi
+       kill $(pppd_pid ${zone}) &>/dev/null
 
        # Pull down device or remove virtual one
-       if [ -n "${DEVICE_VID}" ]; then 
+       if [ -n "${DEVICE_VID}" ]; then
                device_remove_virtual ${DEVICE_MAC}
        else
                device_set_down ${DEVICE}