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