1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2025-04-21 12:27:27 +03:00
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@9564 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
nbd
2007-11-16 03:24:01 +00:00
parent ca97980634
commit 3406861c45
7 changed files with 75 additions and 57 deletions

View File

@@ -1,9 +1,9 @@
---
hostapd/driver_devicescape.c | 330 ++++++++++++++++++++++++++++++++-----------
1 file changed, 249 insertions(+), 81 deletions(-)
hostapd/driver_devicescape.c | 332 ++++++++++++++++++++++++++++++++-----------
1 file changed, 251 insertions(+), 81 deletions(-)
--- hostap.orig/hostapd/driver_devicescape.c 2007-11-09 13:41:15.000000000 +0100
+++ hostap/hostapd/driver_devicescape.c 2007-11-09 13:41:16.000000000 +0100
--- hostap.orig/hostapd/driver_devicescape.c 2007-11-14 17:31:15.000000000 +0100
+++ hostap/hostapd/driver_devicescape.c 2007-11-14 17:31:16.000000000 +0100
@@ -75,8 +75,14 @@ struct i802_driver_data {
#define HAPD_DECL struct hostapd_data *hapd = iface->bss[0]
@@ -128,12 +128,15 @@
+ int ret = -1;
+ int err = 0;
+ int finished = 0;
- memset(data, 0, sizeof(*data));
+
+ msg = nlmsg_alloc();
+ if (!msg)
+ goto out;
- memset(data, 0, sizeof(*data));
+ genlmsg_put(msg, 0, 0, genl_family_get_id(drv->nl80211), 0,
+ 0, NL80211_CMD_GET_STATION, 0);
- memset(&param, 0, sizeof(param));
- param.cmd = PRISM2_HOSTAPD_GET_INFO_STA;
- memcpy(param.sta_addr, addr, ETH_ALEN);
@@ -141,9 +144,6 @@
- printf(" Could not get station info from kernel driver.\n");
- return -1;
- }
+ genlmsg_put(msg, 0, 0, genl_family_get_id(drv->nl80211), 0,
+ 0, NL80211_CMD_GET_STATION, 0);
+
+ NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, addr);
+ NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, if_nametoindex(drv->iface));
+
@@ -189,7 +189,7 @@
}
@@ -744,35 +825,68 @@ static int i802_sta_add(const char *ifna
@@ -744,35 +825,70 @@ static int i802_sta_add(const char *ifna
size_t supp_rates_len, int flags)
{
struct i802_driver_data *drv = priv;
@@ -223,12 +223,14 @@
+ supp_rates);
+ NLA_PUT_U16(msg, NL80211_ATTR_STA_LISTEN_INTERVAL, 0);
+
+ ret = 0;
+ ret = nl_send_auto_complete(drv->nl_handle, msg);
+ if (ret < 0)
+ goto nla_put_failure;
+
+ if (nl_send_auto_complete(drv->nl_handle, msg) < 0 ||
+ nl_wait_for_ack(drv->nl_handle) < 0) {
+ ret = -1;
+ }
+ ret = nl_wait_for_ack(drv->nl_handle);
+ /* ignore EEXIST, this happens if a STA associates while associated */
+ if (ret == -EEXIST || ret >= 0)
+ ret = 0;
+
+ nla_put_failure:
+ nlmsg_free(msg);
@@ -278,7 +280,7 @@
}
@@ -780,14 +894,51 @@ static int i802_sta_set_flags(void *priv
@@ -780,14 +896,51 @@ static int i802_sta_set_flags(void *priv
int total_flags, int flags_or, int flags_and)
{
struct i802_driver_data *drv = priv;
@@ -337,7 +339,7 @@
}
@@ -1257,18 +1408,38 @@ static struct hostapd_hw_modes * i802_ge
@@ -1257,18 +1410,38 @@ static struct hostapd_hw_modes * i802_ge
}
@@ -385,7 +387,7 @@
}
@@ -1750,17 +1921,14 @@ static int i802_init_sockets(struct i802
@@ -1752,17 +1925,14 @@ static int i802_init_sockets(struct i802
static int i802_get_inact_sec(void *priv, const u8 *addr)
{