On June 4, 2016 11:11:13 AM GMT+02:00, Benjamin Baier <[email protected]>
wrote:
>On Fri, 3 Jun 2016 00:26:12 +0800
>Ray Lai <[email protected]> wrote:
>
>> Hi all,
>>
>> I got tired of configuring my wifi every time I had to move my
>laptop.
>> Here's a script a whipped up. It scans the wifi for known networks
>and
>> writes the strongest one to /etc/hostname.if. Then it runs netstart.
>> Easy to use, simple config file, no arguments needed, perfect
>> for /etc/apm/resume.
>>
>> Oh, and it uses pledge for good measure.
>>
>> I hope this is helpful!
>
>Hi and thanks,
>please let me share my modifications for wifi handling, too.
>
>This patch to /etc/netstart [0] cycles through different configurations
>in hostname.if [1] until the link status becomes "active".
I don't like the syntax, and in general I'd like hostname.if over time become a
list of arguments to pass on to ifconfig with no magic whatsoever attached, but
I like the relative KISS approach of this.
Alternatively, one could pass sth like "linkless" or "nolink" (or probably
something better), as a parameter to ifconfig, causing it to not process any
further arguments if the interface already has link status active.
/Alexander
>
>It's not bulletproof nor as fast as it could be...
>
>Greetings Ben
>
>
>[0] diff -u /etc/netstart.orig /etc/netstart
>--- /etc/netstart.orig Fri Jun 3 23:09:40 2016
>+++ /etc/netstart Sat Jun 4 11:05:03 2016
>@@ -40,6 +40,8 @@
> fi
> # Check for ifconfig'able interface.
> (ifconfig $if || ifconfig $if create) >/dev/null 2>&1 || return
>+ # Check for wifi, so we can treat it special
>+ [ "$(ifconfig $if | grep groups:.*wlan)" ] && wifi=yes
>
> # Now parse the hostname.* file.
> while :; do
>@@ -66,6 +68,11 @@
> "!"*) # Parse commands.
> cmd="${af#*!} ${name} ${mask} ${bcaddr} ${ext1} ${ext2}"
> ;;
>+ "TRYNEXT")
>+ [ "$wifi" ] && wifi=checkactive || continue
>+ [ "$name" = "NONE" ] && checkdelay="" ||
>checkdelay="$name"
>+ cmd=
>+ ;;
> "dhcp")
> [ "$name" = "NONE" ] && name=
> [ "$mask" = "NONE" ] && mask=
>@@ -127,6 +134,13 @@
> ;;
> esac
> eval "$cmd"
>+ if [ "X$wifi" = "Xcheckactive" ]
>+ then
>+ # delay to let the status catch up
>+ [ "$checkdelay" ] && sleep $checkdelay || sleep
>1
>+ [ "$(ifconfig $if | grep status:.*active)" ] &&
>break
>+ wifi=retry
>+ fi
> done </etc/hostname.$if
> }
>
>
>[1] cat /etc/hostname.iwn0
>nwid APhop1 nwkey 0x1234567890abcdefabcdef1234
>inet 192.168.1.10 255.255.255.0
>up
>
>TRYNEXT 10
>
>nwid APhop2 nwkey 0x1234567890abcdefabcdef1234
>dhcp
>
>TRYNEXT
>
>nwid APhop3 nwkey 0x1234567890abcdefabcdef1234
>dhcp