120 lines
3.3 KiB
Bash
Executable File
120 lines
3.3 KiB
Bash
Executable File
#!/bin/sh
|
|
# tlp-rdw - network manager dispatcher hook:
|
|
# enable/disable radios on ifup/ifdown
|
|
#
|
|
# Copyright (c) 2015 Thomas Koch <linrunner at gmx.net>
|
|
# This software is licensed under the GPL v2 or later.
|
|
|
|
# --- Constants
|
|
readonly LIBDIRS="/usr/lib/tlp-pm /usr/lib64/tlp-pm"
|
|
readonly LIBS="tlp-functions tlp-rf-func"
|
|
|
|
readonly RDW_NM_LOCK="rdw_nm"
|
|
readonly RDW_NM_LOCKTIME=2
|
|
|
|
# --- Locate and source libraries
|
|
for libdir in $LIBDIRS; do [ -d $libdir ] && break; done
|
|
[ -d $libdir ] || exit 0
|
|
|
|
for lib in $LIBS; do
|
|
[ -f $libdir/$lib ] || exit 0
|
|
. $libdir/$lib
|
|
done
|
|
|
|
# --- MAIN
|
|
read_defaults
|
|
check_tlp_enabled || exit 0
|
|
add_sbin2path
|
|
|
|
# Get args
|
|
iface="$1"
|
|
action="$2"
|
|
itype="unknown"
|
|
|
|
# Quit for invalid interfaces
|
|
[ -n "$iface" ] && [ "$iface" != "none" ] || exit 0
|
|
|
|
echo_debug "nm" "rdw_nm($iface).$action"
|
|
if [ -n "$addpath" ]; then
|
|
echo_debug "path" "PATH=$oldpath[$addpath]"
|
|
else
|
|
echo_debug "path" "PATH=$oldpath"
|
|
fi
|
|
|
|
# Quit if timed lock in progress
|
|
check_timed_lock $RDW_NM_LOCK && exit 0
|
|
|
|
# Determine interface type
|
|
if cmd_exists $NMCLI ; then
|
|
# nmcli is available --> check if nmcli dev output matches interface
|
|
itype="$($NMCLI dev | awk '$1 ~ /'$iface'/ { print $2; }')"
|
|
|
|
if [ -z "$itype" ]; then
|
|
# iface is not found in nmcli dev output: many WWAN devices have
|
|
# different devices for control and the actual network connection
|
|
# --> check if interface matches a WWAN device
|
|
get_wwan_ifaces
|
|
if wordinlist "$iface" "$wanifaces"; then
|
|
itype="wwan"
|
|
else
|
|
itype="unknown"
|
|
fi
|
|
fi
|
|
echo_debug "nm" "rdw_nm($iface).$action: type=$itype [nmcli]"
|
|
else
|
|
# nmcli is not available
|
|
echo_debug "nm" "rdw_nm($iface)$action.nmcli_not_available"
|
|
fi
|
|
|
|
case $action in
|
|
up) # interface up, disable configured interfaces
|
|
|
|
set_timed_lock $RDW_NM_LOCK $RDW_NM_LOCKTIME # lock rdw events
|
|
|
|
case $itype in
|
|
*ethernet)
|
|
for dev in $DEVICES_TO_DISABLE_ON_LAN_CONNECT; do
|
|
[ -n "$dev" ] && device_switch $dev off
|
|
done
|
|
;;
|
|
|
|
*wireless|wifi)
|
|
for dev in $DEVICES_TO_DISABLE_ON_WIFI_CONNECT; do
|
|
[ -n "$dev" ] && [ "$dev" != wifi ] && device_switch $dev off
|
|
done
|
|
;;
|
|
|
|
gsm|wwan)
|
|
for dev in $DEVICES_TO_DISABLE_ON_WWAN_CONNECT; do
|
|
[ -n "$dev" ] && [ "$dev" != wwan ] && device_switch $dev off
|
|
done
|
|
;;
|
|
esac
|
|
;; # up
|
|
|
|
down) # interface down, enable configured interfaces
|
|
case $itype in
|
|
*ethernet)
|
|
for dev in $DEVICES_TO_ENABLE_ON_LAN_DISCONNECT; do
|
|
[ -n "$dev" ] && device_switch $dev on
|
|
done
|
|
;;
|
|
|
|
*wireless|wifi)
|
|
for dev in $DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT; do
|
|
[ -n "$dev" ] && [ "$dev" != wifi ] && device_switch $dev on
|
|
done
|
|
;;
|
|
|
|
gsm)
|
|
for dev in $DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT; do
|
|
[ -n "$dev" ] && [ "$dev" != wwan ] && device_switch $dev on
|
|
done
|
|
;;
|
|
esac
|
|
;; # down
|
|
|
|
esac
|
|
|
|
exit 0
|