PERFORCE change 139019 for review
Sam Leffler
sam at FreeBSD.org
Sun Mar 30 20:25:41 PDT 2008
http://perforce.freebsd.org/chv.cgi?CH=139019
Change 139019 by sam at sam_ebb on 2008/03/31 03:25:22
don't mark the interface up when setting up the 802.1x state, add
a commit method that gets called last in the setup work so all
state changes are done w/ the interface down; this eliminates the
unnecessary churn in the net80211 state machine when setting the WPA ie
while here change bsd_set_iface_flags to take flags instead of 1/0
that gets translated to massaging of IFF_UP
Affected files ...
.. //depot/projects/vap/usr.sbin/wpa/hostapd/driver_freebsd.c#5 edit
Differences ...
==== //depot/projects/vap/usr.sbin/wpa/hostapd/driver_freebsd.c#5 (text+ko) ====
@@ -123,14 +123,13 @@
}
static int
-bsd_set_iface_flags(void *priv, int dev_up)
+bsd_set_iface_flags(void *priv, int flags)
{
struct bsd_driver_data *drv = priv;
struct hostapd_data *hapd = drv->hapd;
struct ifreq ifr;
- HOSTAPD_DEBUG(HOSTAPD_DEBUG_VERBOSE,
- "%s: dev_up=%d\n", __func__, dev_up);
+ HOSTAPD_DEBUG(HOSTAPD_DEBUG_VERBOSE, "%s: flags=0x%x\n", __func__, flags);
if (drv->ioctl_sock < 0)
return -1;
@@ -143,17 +142,23 @@
return -1;
}
- if (dev_up)
- ifr.ifr_flags |= IFF_UP;
- else
- ifr.ifr_flags &= ~IFF_UP;
+ if (flags < 0) {
+ flags = -flags;
+ if ((ifr.ifr_flags & flags) == 0)
+ return 0;
+ ifr.ifr_flags &= ~flags;
+ } else {
+ if ((ifr.ifr_flags & flags) == flags)
+ return 0;
+ ifr.ifr_flags |= flags;
+ }
if (ioctl(drv->ioctl_sock, SIOCSIFFLAGS, &ifr) != 0) {
perror("ioctl[SIOCSIFFLAGS]");
return -1;
}
- if (dev_up) {
+ if (flags > 0) {
memset(&ifr, 0, sizeof(ifr));
snprintf(ifr.ifr_name, IFNAMSIZ, "%s", drv->iface);
ifr.ifr_mtu = HOSTAPD_MTU;
@@ -168,6 +173,12 @@
}
static int
+bsd_commit(void *priv)
+{
+ return bsd_set_iface_flags(priv, IFF_UP);
+}
+
+static int
bsd_set_ieee8021x(const char *ifname, void *priv, int enabled)
{
struct bsd_driver_data *drv = priv;
@@ -198,7 +209,7 @@
HOSTAPD_LEVEL_WARNING, "Error enabling WPA/802.1X!");
return -1;
}
- return bsd_set_iface_flags(priv, 1);
+ return 0;
}
static int
@@ -859,7 +870,7 @@
if (l2_packet_get_own_addr(drv->sock_xmit, hapd->own_addr))
goto bad;
- bsd_set_iface_flags(drv, 0); /* mark down during setup */
+ bsd_set_iface_flags(drv, -IFF_UP); /* mark down during setup */
hapd->driver = &drv->ops;
return 0;
@@ -882,7 +893,7 @@
drv->hapd->driver = NULL;
- (void) bsd_set_iface_flags(drv, 0);
+ (void) bsd_set_iface_flags(drv, -IFF_UP);
if (drv->ioctl_sock >= 0)
close(drv->ioctl_sock);
if (drv->sock_xmit != NULL)
@@ -911,6 +922,7 @@
.get_ssid = bsd_get_ssid,
.set_countermeasures = bsd_set_countermeasures,
.sta_clear_stats = bsd_sta_clear_stats,
+ .commit = bsd_commit,
#ifdef CONFIG_DRIVER_RADIUS_ACL
.set_radius_acl_auth = bsd_set_radius_acl_auth,
.set_radius_acl_expire = bsd_set_radius_acl_expire,
More information about the p4-projects
mailing list