Deleted Added
full compact
ieee80211_ioctl.c (229968) ieee80211_ioctl.c (251488)
1/*-
2 * Copyright (c) 2001 Atsushi Onoe
3 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 11 unchanged lines hidden (view full) ---

20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2001 Atsushi Onoe
3 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 11 unchanged lines hidden (view full) ---

20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_ioctl.c 229968 2012-01-11 17:10:27Z adrian $");
28__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_ioctl.c 251488 2013-06-07 09:03:56Z adrian $");
29
30/*
31 * IEEE 802.11 ioctl support (FreeBSD-specific)
32 */
33
34#include "opt_inet.h"
35#include "opt_ipx.h"
36#include "opt_wlan.h"

--- 1298 unchanged lines hidden (view full) ---

1335 struct ieee80211_node_table *nt = &ic->ic_sta;
1336 struct ieee80211_node *ni;
1337 int error = 0;
1338
1339 /* NB: the broadcast address means do 'em all */
1340 if (!IEEE80211_ADDR_EQ(mac, ic->ic_ifp->if_broadcastaddr)) {
1341 IEEE80211_NODE_LOCK(nt);
1342 ni = ieee80211_find_node_locked(nt, mac);
29
30/*
31 * IEEE 802.11 ioctl support (FreeBSD-specific)
32 */
33
34#include "opt_inet.h"
35#include "opt_ipx.h"
36#include "opt_wlan.h"

--- 1298 unchanged lines hidden (view full) ---

1335 struct ieee80211_node_table *nt = &ic->ic_sta;
1336 struct ieee80211_node *ni;
1337 int error = 0;
1338
1339 /* NB: the broadcast address means do 'em all */
1340 if (!IEEE80211_ADDR_EQ(mac, ic->ic_ifp->if_broadcastaddr)) {
1341 IEEE80211_NODE_LOCK(nt);
1342 ni = ieee80211_find_node_locked(nt, mac);
1343 IEEE80211_NODE_UNLOCK(nt);
1344 /*
1345 * Don't do the node update inside the node
1346 * table lock. This unfortunately causes LORs
1347 * with drivers and their TX paths.
1348 */
1343 if (ni != NULL) {
1344 domlme(mlmeop, ni);
1345 ieee80211_free_node(ni);
1346 } else
1347 error = ENOENT;
1349 if (ni != NULL) {
1350 domlme(mlmeop, ni);
1351 ieee80211_free_node(ni);
1352 } else
1353 error = ENOENT;
1348 IEEE80211_NODE_UNLOCK(nt);
1349 } else {
1350 ieee80211_iterate_nodes(nt, domlme, mlmeop);
1351 }
1352 return error;
1353}
1354
1355static __noinline int
1356setmlme_common(struct ieee80211vap *vap, int op,

--- 38 unchanged lines hidden (view full) ---

1395 ni = ieee80211_ref_node(vap->iv_bss);
1396 IEEE80211_SEND_MGMT(ni,
1397 IEEE80211_FC0_SUBTYPE_DEAUTH, reason);
1398 ieee80211_free_node(ni);
1399 break;
1400 case IEEE80211_M_MBSS:
1401 IEEE80211_NODE_LOCK(nt);
1402 ni = ieee80211_find_node_locked(nt, mac);
1354 } else {
1355 ieee80211_iterate_nodes(nt, domlme, mlmeop);
1356 }
1357 return error;
1358}
1359
1360static __noinline int
1361setmlme_common(struct ieee80211vap *vap, int op,

--- 38 unchanged lines hidden (view full) ---

1400 ni = ieee80211_ref_node(vap->iv_bss);
1401 IEEE80211_SEND_MGMT(ni,
1402 IEEE80211_FC0_SUBTYPE_DEAUTH, reason);
1403 ieee80211_free_node(ni);
1404 break;
1405 case IEEE80211_M_MBSS:
1406 IEEE80211_NODE_LOCK(nt);
1407 ni = ieee80211_find_node_locked(nt, mac);
1408 /*
1409 * Don't do the node update inside the node
1410 * table lock. This unfortunately causes LORs
1411 * with drivers and their TX paths.
1412 */
1413 IEEE80211_NODE_UNLOCK(nt);
1403 if (ni != NULL) {
1404 ieee80211_node_leave(ni);
1405 ieee80211_free_node(ni);
1406 } else {
1407 error = ENOENT;
1408 }
1414 if (ni != NULL) {
1415 ieee80211_node_leave(ni);
1416 ieee80211_free_node(ni);
1417 } else {
1418 error = ENOENT;
1419 }
1409 IEEE80211_NODE_UNLOCK(nt);
1410 break;
1411 default:
1412 error = EINVAL;
1413 break;
1414 }
1415 break;
1416 case IEEE80211_MLME_AUTHORIZE:
1417 case IEEE80211_MLME_UNAUTHORIZE:
1418 if (vap->iv_opmode != IEEE80211_M_HOSTAP &&
1419 vap->iv_opmode != IEEE80211_M_WDS) {
1420 error = EINVAL;
1421 break;
1422 }
1423 IEEE80211_NODE_LOCK(nt);
1424 ni = ieee80211_find_vap_node_locked(nt, vap, mac);
1420 break;
1421 default:
1422 error = EINVAL;
1423 break;
1424 }
1425 break;
1426 case IEEE80211_MLME_AUTHORIZE:
1427 case IEEE80211_MLME_UNAUTHORIZE:
1428 if (vap->iv_opmode != IEEE80211_M_HOSTAP &&
1429 vap->iv_opmode != IEEE80211_M_WDS) {
1430 error = EINVAL;
1431 break;
1432 }
1433 IEEE80211_NODE_LOCK(nt);
1434 ni = ieee80211_find_vap_node_locked(nt, vap, mac);
1435 /*
1436 * Don't do the node update inside the node
1437 * table lock. This unfortunately causes LORs
1438 * with drivers and their TX paths.
1439 */
1440 IEEE80211_NODE_UNLOCK(nt);
1425 if (ni != NULL) {
1426 mlmedebug(vap, mac, op, reason);
1427 if (op == IEEE80211_MLME_AUTHORIZE)
1428 ieee80211_node_authorize(ni);
1429 else
1430 ieee80211_node_unauthorize(ni);
1431 ieee80211_free_node(ni);
1432 } else
1433 error = ENOENT;
1441 if (ni != NULL) {
1442 mlmedebug(vap, mac, op, reason);
1443 if (op == IEEE80211_MLME_AUTHORIZE)
1444 ieee80211_node_authorize(ni);
1445 else
1446 ieee80211_node_unauthorize(ni);
1447 ieee80211_free_node(ni);
1448 } else
1449 error = ENOENT;
1434 IEEE80211_NODE_UNLOCK(nt);
1435 break;
1436 case IEEE80211_MLME_AUTH:
1437 if (vap->iv_opmode != IEEE80211_M_HOSTAP) {
1438 error = EINVAL;
1439 break;
1440 }
1441 IEEE80211_NODE_LOCK(nt);
1442 ni = ieee80211_find_vap_node_locked(nt, vap, mac);
1450 break;
1451 case IEEE80211_MLME_AUTH:
1452 if (vap->iv_opmode != IEEE80211_M_HOSTAP) {
1453 error = EINVAL;
1454 break;
1455 }
1456 IEEE80211_NODE_LOCK(nt);
1457 ni = ieee80211_find_vap_node_locked(nt, vap, mac);
1458 /*
1459 * Don't do the node update inside the node
1460 * table lock. This unfortunately causes LORs
1461 * with drivers and their TX paths.
1462 */
1463 IEEE80211_NODE_UNLOCK(nt);
1443 if (ni != NULL) {
1444 mlmedebug(vap, mac, op, reason);
1445 if (reason == IEEE80211_STATUS_SUCCESS) {
1446 IEEE80211_SEND_MGMT(ni,
1447 IEEE80211_FC0_SUBTYPE_AUTH, 2);
1448 /*
1449 * For shared key auth, just continue the
1450 * exchange. Otherwise when 802.1x is not in

--- 7 unchanged lines hidden (view full) ---

1458 vap->iv_stats.is_rx_acl++;
1459 ieee80211_send_error(ni, ni->ni_macaddr,
1460 IEEE80211_FC0_SUBTYPE_AUTH, 2|(reason<<16));
1461 ieee80211_node_leave(ni);
1462 }
1463 ieee80211_free_node(ni);
1464 } else
1465 error = ENOENT;
1464 if (ni != NULL) {
1465 mlmedebug(vap, mac, op, reason);
1466 if (reason == IEEE80211_STATUS_SUCCESS) {
1467 IEEE80211_SEND_MGMT(ni,
1468 IEEE80211_FC0_SUBTYPE_AUTH, 2);
1469 /*
1470 * For shared key auth, just continue the
1471 * exchange. Otherwise when 802.1x is not in

--- 7 unchanged lines hidden (view full) ---

1479 vap->iv_stats.is_rx_acl++;
1480 ieee80211_send_error(ni, ni->ni_macaddr,
1481 IEEE80211_FC0_SUBTYPE_AUTH, 2|(reason<<16));
1482 ieee80211_node_leave(ni);
1483 }
1484 ieee80211_free_node(ni);
1485 } else
1486 error = ENOENT;
1466 IEEE80211_NODE_UNLOCK(nt);
1467 break;
1468 default:
1469 error = EINVAL;
1470 break;
1471 }
1472 return error;
1473}
1474

--- 1965 unchanged lines hidden ---
1487 break;
1488 default:
1489 error = EINVAL;
1490 break;
1491 }
1492 return error;
1493}
1494

--- 1965 unchanged lines hidden ---