wlan autoconnection skripts
Wesley Gentine
colazelli at gmail.com
Tue Sep 6 17:53:34 PDT 2005
Hello,
You can use wpa_supplicant to do this for you!
Take a look in "man wpa_supplicant.conf"
You can configure some "hosts" and put some priority in each host.
wpa_supplicant can roaming through networks and do too much more.
Regards,
Wesley Gentine
On Fri, 2005-08-26 at 18:12 +0200, [LoN]Kamikaze wrote:
> I made a little script to autmatically connect to known wireless
> networks. I'd like to have some people help me with testing. I'm running
> it on FreeBSD 5.4 with the ipw driver.
>
> If it works satisfactory for everyone I'd like to write a manpage and
> maybe turn it into a port.
>
> INSTALLATION
> Put the attached files somewhere and cd into that folder. Don't forget
> to become root.
> # cp wi.sh /usr/local/etc/rc.d/
> # cp wi /usr/local/sbin/
> # mkdir /etc/wi.conf
> # chmod 0700 /etc/wi.conf
>
> BASIC CONFIGURATION
> You require the following entries in your /etc/rc.conf file to use the
> script.
> wi_enable="YES"
> wi_device="devicename"
>
> Further there are 2 optional entries:
> wi_module="kernelMod"
> wi_loadfirmware="command"
>
> wi_enable enables the script. wi_device is the name of the wireless
> network device as seen by ifconfig. wi_module is optional and the name
> of the kernel module for the wireless device. wi_loadfirmware is for
> wireless devices that need to load a firmware after the kernel module
> has been loaded. As an example here is an excerpt from my rc.conf.
>
> wi_enable="YES"
> wi_device="ipw0"
> wi_module="if_ipw"
> wi_loadfirmware="/usr/sbin/ipwcontrol -i ipw0 -f
> /usr/local/libdata/if_ipw/ipw2100-1.3.fw"
>
> Now you have the commands
> /usr/local/etc/rc.d/wi.sh start
> /usr/local/etc/rc.d/wi.sh stop
> /usr/local/etc/rc.d/wi.sh status
> available. Or if you want it short
> wi start
> wi stop
> wi status
>
>
> The following step is optional:
> I added the command
> "/usr/local/etc/rc.d/wi.sh stop"
> at the appropriate places in the files /etc/rc.suspend and
> /etc/rc.shutdown .
> To /etc/rc.resume I added the command
> "/usr/loca/etc/rc.d/wi.sh start".
>
> CONFIGURATION OF NETWORKS
> If you did everything described above the script will be able to look
> for networks. Unfortunately it won't connect to any... that is what the
> folder /etc/wi.conf/ is meant for.
>
> Simply add a file with the name of the network you want to connect to.
> An example for such a file would be
>
> MYNET
>
> /sbin/ifconfig ipw0 ssid MYNET wepkey MYKEY weptxkey 1 wepmode on
> /sbin/dhclient ipw0
>
> Optionally you can add the file MYNET_stop and enter commands that
> should be executed before the script tries to terminate a connection. In
> most cases this won't be necessary. The script will automatically
> terminate the dhcp client, bring the device down and unload the kernel
> module.
>
> Thank you for your time.
>
> Dominic Fandrey
> plain text document attachment (wi)
> #!/bin/sh
>
> # Author: kamikaze
> # Contact: LoN_Kamikaze at gmx.de
>
> #
> # Please read the comments in /usr/local/etc/rc.d/wi.sh if you
> # require documentation.
> #
>
> # The desired action.
> command=$1
>
> # The error number to return.
> error=0
>
> # The characters wireless network names may consist of.
> netname_chars="aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789"
>
> # The path for the network init scripts.
> network_scripts="/etc/wi.conf"
>
> # Network profile.
> network_profile="/var/run/wi"
>
> # Scan results.
> network_scan="/var/run/networks"
>
> # Default settings.
> wi_enable="NO"
> wi_module=""
> wi_device=""
> wi_loadfirmware=""
>
> # Get settings from rc.conf.
> . /etc/rc.subr
>
> name="wi"
> rcvar=`set_rcvar`
>
> load_rc_config $name
>
> # Check if the wi service is enabled.
> if [ "$wi_enable" = "NO" ]; then
> echo "wi_$command: The wi service is not enabled."
> exit 1
> fi
>
> # Check if a device has been defined.
> if [ "$wi_device" = "" ]; then
> echo "wi_$command: No device has been configured for the wiinit service."
> exit 1
> fi
>
> wi_start()
> {
> if [ "$wi_module" ]; then
> # Check if the wireless device module is loaded.
> /sbin/kldstat -n $wi_module 2> /dev/null > /dev/null
> if [ $? -eq 1 ]; then
> echo "wi_$command: Load kernel module for wireless network device."
> /sbin/kldload $wi_module 2> /dev/null > /dev/null
> $wi_loadfirmware
> fi
> fi
>
> # Find networks.
> echo "wi_$command: Searching for wireless networks."
> /sbin/ifconfig $wi_device up
> /usr/sbin/wicontrol $wi_device -L > /dev/null
> networks=$(/usr/sbin/wicontrol $wi_device -l | grep netname | grep -Eo "[$netname_chars]+" | grep -v SSID | grep -v netname)
>
> # Save scan results.
> echo "$networks" > $network_scan
>
> # Practically wicontrol returns networks
> # in the order of their signal quality.
> for network in $networks; do
> script=$(cat "$network_scripts/$network" 2> /dev/null)
> if [ $? -eq 0 ]; then
> echo "wi_$command: Run init script for $network."
> echo "$script" | /bin/sh
> if [ $? -eq 1 ]; then
> echo "wi_$command: Init script $network failed."
> continue
> else
> echo "wi_$command: Done."
> echo $network > $network_profile
> exit $error
> fi
> fi
> done
>
> # Check weather any networks have been found.
> if [ "$networks" = "" ]; then
> echo "wi_$command: No wireless networks have been found."
> fi
>
> # Finding a network did not succeed.
> error=1
> eval wi_stop
> }
>
> wi_stop()
> {
> # Get the current profile.
> network=$(cat $network_profile 2> /dev/null)
>
> if [ $? -eq 0 ]; then
> script=$(cat $network_scripts/$network_stop 2> /dev/null)
> if [ $? -eq 0 ]; then
> echo "wi_$command: Run deactivation script for $network."
> echo "$script" | /bin/sh
> fi
> fi
>
> echo "wi_$command: Terminate dhclient sessions on $wi_device."
> /sbin/dhclient -r $wi_device
>
> # Check if the device is running and shut it down.
> /sbin/ifconfig $wi_device | grep UP | grep RUNNING 2> /dev/null > /dev/null
> if [ $? -eq 0 ]; then
> echo "wi_$command: Shuting down $wi_device."
> /sbin/ifconfig $wi_device down
> fi
>
> # Check if the kernel module is loaded and unload it.
> /sbin/kldstat -n $wi_module 2> /dev/null > /dev/null
> if [ $? -eq 0 ]; then
> echo "wi_$command: Unloading $wi_module kernel module."
> /sbin/kldunload $wi_module
> fi
>
> # Remove the profile record.
> /bin/rm $network_profile 2> /dev/null > /dev/null
>
> # Terminate program.
> exit $ERROR
> }
>
> wi_status()
> {
> # Check weather a wireless network is configured.
> network=$(cat /var/run/wi 2> /dev/null)
>
> if [ $? -eq 1 ]; then
> echo "wi_$command: Not connected."
> else
> echo "wi_$command: profile: $network"
> status=$(/sbin/ifconfig $wi_device | grep status)
> echo "wi_$command:$status"
> fi
>
> echo "wi_$command: Available networks:"
> cat $network_scan 2> /dev/null
>
> exit $error
> }
>
> # Run desired command.
> wi_$command
>
> _______________________________________________
> freebsd-mobile at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-mobile
> To unsubscribe, send any mail to "freebsd-mobile-unsubscribe at freebsd.org"
More information about the freebsd-mobile
mailing list