Patch to split roaming out of wpa_supplicant

Blaise Gassend blaise at willowgarage.com
Fri Oct 1 14:56:26 EDT 2010


Hi folks,

I have a patch that I would be interested in pushing into
wpa_supplicant. Before I get it into a shape that is useable by
others, I would like to gauge whether it has a chance of being
accepted.

I'm currently working on a wireless seamless roaming solution for my
company's robots (willowgarage.com). My general strategy has been to
use wpa_supplicant to handle talking to the driver, and managing
keys/security, and to split out decisions about scanning and what to
associate to to my own code in python for ease of prototyping.

In order to make this happen, I have had to put my own hooks into
wpa_supplicant, and disable all its automated attempts at scanning and
associating: the current wpa_cli API doesn't give me enough control,
and after spending a while trying to determine if the dbus API had
everything I needed, I decided that it would be quicker to put in my
own hooks.

I now have a patch that is starting to work for me, and am wondering
if it could be valuable to others, and how best to make it available.
If I was to provide a patch that adds a build flag that does the items
below, would it have a chance of making it into the upstream
wpa_supplicant? If there is interest, I will do the cleanup needed to
make this easy to use for others (otherwise, my code that interfaces
with ROS is available at
https://code.ros.org/svn/ros-pkg/stacks/linux_networking/trunk/wpa_supplicant_node).

The patch would include:
- Build a .so and .pc file instead of a binary, that you can then link
with your own code.
- Disable all automatic scanning and association.
- The following hooks (which I would rename to make them ROS
agnostic), which get called at appropriate times during startup,
shutdown, and upon association or scanning events.

int ros_init(int *argc, char ***argv);
void ros_init2();
void ros_deinit();
void ros_add_iface(struct wpa_supplicant *wpa_s);
void ros_remove_iface(struct wpa_supplicant *wpa_s);
void ros_scan_completed(struct wpa_supplicant *wpa_s, struct
wpa_scan_results *scan_res);
void ros_assoc_success(struct wpa_supplicant *wpa_s);
void ros_assoc_failed(struct wpa_supplicant *wpa_s, const u8* bssid,
const char *reason);

Thanks,
Blaise


More information about the HostAP mailing list