3 |
|
for module in ath{_{pci,rate_{amrr,onoe,sample},hal}} wlan{_{wep,tkip,ccmp,acl,xauth,scan_{sta,ap}},} |
4 |
|
do |
5 |
|
grep -q ^$module /proc/modules && modprobe -r $module |
|
3 |
PATTERN='\(ath_.*\|wlan_.*\|wlan\)$' |
|
4 |
|
|
5 |
MAX_TRIES=10 |
|
6 |
|
|
7 |
fatal() |
|
8 |
{ |
|
9 |
echo "FATAL: $1" >&2 |
|
10 |
exit 1 |
|
11 |
} |
|
12 |
|
|
13 |
[ "$UID" = 0 ] || fatal "You must be root to run this script" |
|
14 |
[ -r /proc/modules ] || fatal "Cannot read /proc/modules" |
|
15 |
|
|
16 |
tries="$MAX_TRIES" |
|
17 |
while [ "$tries" != "0" ]; do |
|
18 |
skipped=0 |
|
19 |
cat /proc/modules | while true; do |
|
20 |
read -r name size use_count use_name state trailer || \ |
|
21 |
exit "$skipped" |
|
22 |
|
|
23 |
expr "$name" : "$PATTERN" >/dev/null || continue |
|
24 |
|
|
25 |
# Compatibility for Linux 2.4.x |
|
26 |
[ "$state" = "" ] && { use_name="-"; state="Live"; } |
|
27 |
|
|
28 |
if [ "$state" != "Live" ] || [ "$use_count" != "0" ] || \ |
|
29 |
[ "$use_name" != "-" ]; then |
|
30 |
skipped=1 |
|
31 |
if [ "$tries" = "1" ]; then |
|
32 |
echo "Cannot unload \"$name\"" >&2 |
|
33 |
fi |
|
34 |
continue |
|
35 |
fi |
|
36 |
|
|
37 |
echo "Unloading \"$name\"" |
|
38 |
sync # to be safe |
|
39 |
/sbin/rmmod "$name" || fatal "cannot unload module \"$name\"" |
|
40 |
sync # to be even safer |
|
41 |
done |
|
42 |
skipped="$?" |
|
43 |
[ "$skipped" = "0" ] && break |
|
44 |
tries=$(($tries - 1)) |