Date: Tue, 06 Sep 2005 21:53:40 -0300 From: Wesley Gentine <colazelli@gmail.com> To: "[LoN]Kamikaze" <LoN_Kamikaze@gmx.de> Cc: freebsd-mobile@freebsd.org Subject: Re: wlan autoconnection skripts Message-ID: <1126054420.687.7.camel@localhost> In-Reply-To: <430F3F7D.60109@gmx.de> References: <430F3F7D.60109@gmx.de>
next in thread | previous in thread | raw e-mail | index | archive | help
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@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@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-mobile > To unsubscribe, send any mail to "freebsd-mobile-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1126054420.687.7.camel>