| 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))  |