I use the following perl script below. I saved it in /etc/rc.wireless
and apply the following patch:

--- netstart    Fri 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

Reply via email to