[TriLUG] Wireless Roaming in Ubuntu

Alan Porter porter at trilug.org
Tue Jul 19 10:32:43 EDT 2005


> The bottom half of this link, in the "notes" section, may also give
> you an alternative way to script your changes between networks.  It
> doesn't help the automatic switching though.


Since we're talking about it, I rigged up a simple perl script
that allows me to switch networks very quickly from a command
line.

Basically, I do something like this:

   root at laptop:/home/alan# wlan home
   setting new WLAN to 'home'

   root at laptop:/home/alan# ifup wlan0
   running iwconfig using 'home' parameters
   Listening on LPF/wlan0/00:18:3c:29:c1:29
   Sending on   LPF/wlan0/00:18:3c:29:c1:29
   Sending on   Socket/fallback
   DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6
   DHCPOFFER from 10.1.1.1
   DHCPREQUEST on wlan0 to 255.255.255.255 port 67
   DHCPACK from 10.1.1.1
   bound to 10.1.1.109 -- renewal in 18776 seconds.

   root at laptop:/home/alan# wlan open
   setting new WLAN to 'open'

   root at laptop:/home/alan# ifdown wlan0
   Listening on LPF/wlan0/00:18:3c:29:c1:29
   Sending on   LPF/wlan0/00:18:3c:29:c1:29
   Sending on   Socket/fallback
   DHCPRELEASE on wlan0 to 10.1.1.1 port 67

   root at laptop:/home/alan# ifup wlan0
   running iwconfig using 'open' parameters
   Listening on LPF/wlan0/00:18:3c:29:c1:29
   Sending on   LPF/wlan0/00:18:3c:29:c1:29
   Sending on   Socket/fallback
   DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6
   DHCPOFFER from 192.168.0.1
   DHCPREQUEST on wlan0 to 255.255.255.255 port 67
   DHCPACK from 192.168.0.1
   bound to 192.168.0.102 -- renewal in 262799 seconds.

   root at laptop:/home/alan# ifdown wlan0
   Listening on LPF/wlan0/00:18:3c:29:c1:29
   Sending on   LPF/wlan0/00:18:3c:29:c1:29
   Sending on   Socket/fallback
   DHCPRELEASE on wlan0 to 192.168.0.1 port 67

   root at laptop:/home/alan# wlan home
   setting new WLAN to 'home'

   root at laptop:/home/alan#

The script has three parts:
 (1) the /usr/local/sbin/wlan script
 (2) the list of wlan parms in /etc/network/wlan.parms
 (3) an 'pre-up' trigger in /etc/network/interfaces

I do most of my work on the command line, and I have found this
to work quickly without me having to remember SSID's etc.  I hope
y'all find this useful.

Alan





################################################################################
/usr/local/sbin/wlan
################################################################################

#!/usr/bin/perl

$parmfile="/etc/network/wlan.parms";
$currentfile="/etc/wlan";

# Globals
use vars qw/ %opt /;

use Getopt::Std;
my $opt_string = 'hi:';
getopts( "$opt_string", \%opt ) or usage();
usage() if $opt{h};

if ($opt{i}) {
   $interface=$opt{i};
   $wlan_name=`head -1 $currentfile`;
   chop($wlan_name);
   $iwconfig_args=`grep "$wlan_name *:" $parmfile`;
   $iwconfig_args=~s/$wlan_name *: *//g;
   print "running iwconfig using '$wlan_name' parameters\n";
   system("iwconfig $interface $iwconfig_args");
} else {
   $wlan_name=$ARGV[0];
   usage() if (length($wlan_name)<=0);
   if (`grep -c "$wlan_name *:" $parmfile` > 0) {
      open(ETC,">$currentfile");
      print ETC "$wlan_name\n";
      close(ETC);
      print "setting new WLAN to '$wlan_name'\n";
   } else {
      print "'$wlan_name' is not in $parmfile\n";
   }
}

exit 0;

sub usage {
   print "$ARG[0] <name>          - switch to using lan named <name>\n";
   print "$ARG[0] -i <interface>  - configure <interface> using iwconfig\n";
   exit 0;
}


################################################################################
/etc/network/wlan.parms
################################################################################

open: essid any mode managed key open
adhoc: essid any mode ad-hoc key open
home: essid HomeNet mode managed key restricted ABCDEF0123
work: essid WorkNet mode managed key restricted 12345678901234567890123456
ncsu: essid ncsu mode managed key open
trilug: essid any mode managed key open

################################################################################
/etc/network/interfaces
################################################################################

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

#auto wlan0
iface wlan0 inet dhcp
 pre-up modprobe ndiswrapper
 pre-up /usr/local/sbin/wlan -i wlan0
 post-down rmmod ndiswrapper

################################################################################







More information about the TriLUG mailing list