I use the following perl script below. I saved it in /etc/rc.wireless
and apply the following patch:
--- netstartFri Jul 8 15:34:09 2011
+++ /etc/netstart Sun Jul 10 11:43:20 2011
@@ -255,6 +255,8 @@
ip6kernel=NO
fi
+#wifi
+/etc/rc.wireless
# Configure all the non-loopback interfaces which we know about, but
# do not start interfaces which must be delayed. Refer to hostname.if(5)
Good luck!
Luis.
#!/usr/bin/perl -w
# TODO
# 1. Connect to ethernet if available instead.
# 2. Retry if the network was not found.
use strict;
my $nwif = iwn0;
my $profiles = {
wpanet = {psk = passwordwpa, proto = wpa },
noencrypt = {},
wepnet = {psk =passwordwep, proto = wep},
};
sub conf_nw {
my $nwid = shift;
my $conf = $profiles-{$nwid};
my $psk_str = $conf-{psk};
if($psk_str) {
my $proto = lc $conf-{proto};
if($proto eq wep) {
$psk_str = nwkey \$psk_str\;
} elsif($proto eq wpa) {
$psk_str = wpakey \$psk_str\;
} else {
die Only \wep\ and \wpa\ supported.;
}
} else {
$psk_str = -wpakey -nwkey;
}
# finally write in hostname.if
open HOSTNAME, /etc/hostname.$nwif or die Couldn't open hostname.if
file.;
print HOSTNAME # THIS IS A TEMPORAL FILE.\n# MAKE THE MODIFICATION
IN /etc/rc.wireless.\n;
print HOSTNAME dhcp nwid \$nwid\ $psk_str\n;
close HOSTNAME;
}
print Configuring wifi $nwif... ;
my $nwid = no known net;
# scanning available networks
open FD, ifconfig $nwif scan| or die where'd ifconfig go?;
while(FD) {
if(/^\s*nwid ?(.*?)? chan/) {
if($profiles-{$1}) {
conf_nw $1;
$nwid = $1;
last;
}
}
}
print $nwid detected\n;
On Sun, Jul 10, 2011 at 12:51 PM, Jan Stary h...@stare.cz wrote:
Scenario: I am moving my laptop between different wifi networks
(obviously). Some of these networks are encrypted with WEP, using
various nwkeys.
What would be an elegant way to remember the various networks' settings
and choose the one I am connecting to at netstart(8) time? Before I start
symlinking /etc/rc/hostname.run0.whatever in my rc.local, what existing
solutions do people use?
Thank yuo for your time
Jan