#!/bin/bash
#(c) Copyright Barry Kauler Dec. 2010, License: GPL v3 /usr/share/doc/legal
#called from pupdial.
#got code out of rc.shutdown.
#shutdown network interfaces, except for ppp

# Disconnect ethernet/wifi connection using previous exec (default),
# because usually called by new current network exec.
# Optional single argument:
#  --current-exec       disconnect with current exec (for hostname-set)

#100814 log the cumulative bytes transmitted on network...
# (see also /etc/rc.d/rc.sysinit and network_tray)
#170329 use network choice instead of default, in case multiple setups tried.
#170412 Deactivate frisbee; convert to case structure. 
#170724 accommodate absence of a current exec, for default eth0.
#180214 stop all ethernet interfaces after current connection terminated.
#180919 add peasywifi support.
#180923 move network wizard.
#181209 add argument for use by rc.shutdown, for treatment of frisbee.
#200206 replace deprecated ifconfig & iwconfig with busybox ip & full iw.
#200425 add invocation of SNS rc.network; pause before checking for other links (timing issue). 
#200910 resolve shellcheck warnings.
#201216 after disconnect, remove .connectwizard_previous_exec.
#210415 remove check of SNS success for active interface.
#230919 BK: /usr/local/simple_network_setup/rc.network renamed to rc.snsnetwork
#230928 BK: /usr/local/network-wizard/rc.network renamed to rc.wiznetwork.
#231212 Add connman support.
#240311 Update peasywifi support for version 4.8.1+

CURRENT_EXEC='' #170724
if [ -f /root/.connectwizardrc ];then #170724
# shellcheck disable=SC1091
    . /root/.connectwizardrc #sets CURRENT_EXEC 170329...
fi #170724

ARGUMENT="$1"
case "$ARGUMENT" in
    --current-exec|--shutdown) #181209
        DISCONNECTEXEC="$CURRENT_EXEC"
        ;;
    *)
        DISCONNECTEXEC="$(cat /tmp/.connectwizard_previous_exec 2> /dev/null)"
        ;;
esac #170329 end

ETHERNETDIR=network_ethernet
ACTIVE_INTERFACE="$(ip link show | grep -B 1 'link/ether' | grep -w 'UP[80]*' | cut -f 2 -d ' ' | tr -d : | head -n 1)" #200206
if [ "$ACTIVE_INTERFACE" ];then
    if [ -d /sys/class/net/"${ACTIVE_INTERFACE}"/statistics ];then
        RX_BYTES="$(cat /sys/class/net/"${ACTIVE_INTERFACE}"/statistics/rx_bytes)"
        TX_BYTES="$(cat /sys/class/net/"${ACTIVE_INTERFACE}"/statistics/tx_bytes)"
        echo -n "$RX_BYTES" > /var/local/$ETHERNETDIR/rx_bytes_session
        echo -n "$TX_BYTES" > /var/local/$ETHERNETDIR/tx_bytes_session
        RX_BYTES_MONTH=$(cat /var/local/$ETHERNETDIR/rx_bytes_month)
        RX_BYTES_MONTH=$((RX_BYTES_MONTH + RX_BYTES))
        echo -n "$RX_BYTES_MONTH" > /var/local/$ETHERNETDIR/rx_bytes_month
        TX_BYTES_MONTH=$(cat /var/local/$ETHERNETDIR/tx_bytes_month)
        TX_BYTES_MONTH=$((TX_BYTES_MONTH + TX_BYTES))
        echo -n "$TX_BYTES_MONTH" > /var/local/$ETHERNETDIR/tx_bytes_month
    fi
fi
unset ETHERNETDIR

[ -n "$(pidof wpa_supplicant)" ] \
  && wpa_cli terminate #100309 kills any running wpa_supplicant.
case "$DISCONNECTEXEC" in #170412...
    peasywifi) #180919...
        /etc/rc.d/rc.network_peasywifi stop #240311
        sleep 0.1
        pgrep -x 'wpa_supplicant' > /dev/null \
          && killall wpa_supplicant #240311
        ;;
    sns) #200425...
        /usr/local/simple_network_setup/rc.snsnetwork stop #230919
        ;;
    net-setup.sh)
        /usr/local/network-wizard/rc.wiznetwork stop #180923 #230928
        ;;
    frisbee) #180214...
        if frisbee --test_active; then
            frisbee --disconnect
            [ "$ARGUMENT" != '--shutdown' ] && frisbee --deactivate #181209
        fi
        ;;
    connman-gtk) #231212...
        /etc/rc.d/rc.network_connman stop
        ;;
esac #170309

sleep 0.1 #200425
for ONENETIF in $(ip link show | grep -B 1 'link/ether' | grep -w 'UP[80]*' | cut -f 2 -d ' ' | tr -d : | tr '\n' ' '); do #200206
    ip link set "$ONENETIF" down 2> /dev/null #200206
    iw dev "${ONENETIF}" info 2> /dev/null | grep -qw "ssid" \
      && iw dev "$ONENETIF" connect off #100309 200206
    pgrep 'dhcpcd' >/dev/null \
      && dhcpcd --release "$ONENETIF" 2>/dev/null #100309 #231212
done #180214 end

rm -f /tmp/.connectwizard_previous_exec #201216
exit

###END###
