Contributed by phessler on from the roaming-to-new-networks dept.
I'd sent out some ports for OKs, and was cleaning up some long-standing diffs for BFD when I overheard a conversation between Paul Irofti (pirofti@) and Theo de Raadt (deraadt@) about remembering which WiFi networks a machine has connected to. I mentioned I had 90% of that done, and only needed to finish the remaining 90%. After some discussion, I sent out my existing diff with the warning "it breaks WEP".
Stefan (stsp@) and I spent some time analyzing my diff, and realized that it wasn't my changes that broke it. I was certain that an un-modified kernel had still worked, but tested it again. Oups. Turns out it was broken 8 months before! It was an easy fix so we did that, and my code now properly switched between WPA (1/2/Enterprise), WEP, and clear. During the testing, we found all sorts of minor things to fix and polish. I'm breaking quite a few of the existing expectations, so we had to track and fix those. I also entertained fellow hackers by repeatedly taking my laptop, walking away from the access point I was using, then quickly running back over to unplug it to test some threshold code.
For the 6.3 release, Stefan committed roaming support for the iwm(4) and iwn(4) drivers. This moves between Access Points using the same network name. There is another kind of network switching that is erroneously called roaming, which is moving from one network name to another. Your phone does it pretty well. This is what I implemented.hostname.if: nwid A wpakey wpasecretkey nwid B nwkey nwid C dhcp
This will configure 3 different networks for the interface to connect to, with the appropriate network configurations. When the wifi interface is not connected, it will do a scan and connect to the "best" of the networks it finds. Once it does that, the interface goes Up, and dhclient/userland fetches a new lease and generally behaves as normal. It will NOT change networks as long as it is connected, it will only switch if you lose link and the old one isn't available any more.
The code is not yet in, but we're doing the (hopefully) final reviews and fixes before I can commit it
Thanks to Epitech Nantes and The OpenBSD Foundation for the hackathon!
(Comments are closed)