X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=hostapd%2Fdriver_nl80211.c;h=8716a9f01d6a52e05f6798a1bd6193e906e03858;hb=6de726abb5b6aa75ccfe30e07189ef3931c66a01;hp=d76b456d83bdbc893fcd33be020804f96950467d;hpb=3067ac2bb82553c99cb84e32ede82de434ee1070;p=wpasupplicant diff --git a/hostapd/driver_nl80211.c b/hostapd/driver_nl80211.c index d76b456..8716a9f 100644 --- a/hostapd/driver_nl80211.c +++ b/hostapd/driver_nl80211.c @@ -58,7 +58,6 @@ enum ieee80211_msg_type { struct i802_bss { struct i802_bss *next; char iface[IFNAMSIZ + 1]; - int dtim_period; unsigned int beacon_set:1; }; @@ -574,25 +573,6 @@ static int i802_set_rts(void *priv, int rts) } -static int i802_get_rts(void *priv, int *rts) -{ - struct i802_driver_data *drv = priv; - struct iwreq iwr; - - memset(&iwr, 0, sizeof(iwr)); - os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); - - if (ioctl(drv->ioctl_sock, SIOCGIWRTS, &iwr) < 0) { - perror("ioctl[SIOCGIWRTS]"); - return -1; - } - - *rts = iwr.u.rts.value; - - return 0; -} - - static int i802_set_frag(void *priv, int frag) { struct i802_driver_data *drv = priv; @@ -612,25 +592,6 @@ static int i802_set_frag(void *priv, int frag) } -static int i802_get_frag(void *priv, int *frag) -{ - struct i802_driver_data *drv = priv; - struct iwreq iwr; - - memset(&iwr, 0, sizeof(iwr)); - os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); - - if (ioctl(drv->ioctl_sock, SIOCGIWFRAG, &iwr) < 0) { - perror("ioctl[SIOCGIWFRAG]"); - return -1; - } - - *frag = iwr.u.frag.value; - - return 0; -} - - static int i802_set_retry(void *priv, int short_retry, int long_retry) { struct i802_driver_data *drv = priv; @@ -657,32 +618,6 @@ static int i802_set_retry(void *priv, int short_retry, int long_retry) } -static int i802_get_retry(void *priv, int *short_retry, int *long_retry) -{ - struct i802_driver_data *drv = priv; - struct iwreq iwr; - - memset(&iwr, 0, sizeof(iwr)); - os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); - - iwr.u.retry.flags = IW_RETRY_LIMIT | IW_RETRY_MIN; - if (ioctl(drv->ioctl_sock, SIOCGIWRETRY, &iwr) < 0) { - perror("ioctl[SIOCGIWFRAG(short)]"); - return -1; - } - *short_retry = iwr.u.retry.value; - - iwr.u.retry.flags = IW_RETRY_LIMIT | IW_RETRY_MAX; - if (ioctl(drv->ioctl_sock, SIOCGIWRETRY, &iwr) < 0) { - perror("ioctl[SIOCGIWFRAG(long)]"); - return -1; - } - *long_retry = iwr.u.retry.value; - - return 0; -} - - static int i802_flush(void *priv) { struct i802_driver_data *drv = priv; @@ -1161,8 +1096,8 @@ static int i802_bss_remove(void *priv, const char *ifname) static int i802_set_beacon(const char *iface, void *priv, - u8 *head, size_t head_len, - u8 *tail, size_t tail_len) + const u8 *head, size_t head_len, + const u8 *tail, size_t tail_len, int dtim_period) { struct i802_driver_data *drv = priv; struct nl_msg *msg; @@ -1189,10 +1124,7 @@ static int i802_set_beacon(const char *iface, void *priv, NLA_PUT(msg, NL80211_ATTR_BEACON_TAIL, tail_len, tail); NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, if_nametoindex(iface)); NLA_PUT_U32(msg, NL80211_ATTR_BEACON_INTERVAL, drv->beacon_int); - - if (!bss->dtim_period) - bss->dtim_period = 2; - NLA_PUT_U32(msg, NL80211_ATTR_DTIM_PERIOD, bss->dtim_period); + NLA_PUT_U32(msg, NL80211_ATTR_DTIM_PERIOD, dtim_period); ret = send_and_recv_msgs(drv, msg, NULL, NULL); if (!ret) @@ -1285,40 +1217,6 @@ static int i802_set_beacon_int(void *priv, int value) } -static int i802_set_dtim_period(const char *iface, void *priv, int value) -{ - struct i802_driver_data *drv = priv; - struct nl_msg *msg; - int ret = -ENOBUFS; - struct i802_bss *bss; - - bss = get_bss(drv, iface); - if (bss == NULL) - return -ENOENT; - - msg = nlmsg_alloc(); - if (!msg) - return -ENOMEM; - - wpa_printf(MSG_DEBUG, "nl80211: Set beacon DTIM period %d (iface=%s " - "beacon_set=%d)", value, iface, bss->beacon_set); - genlmsg_put(msg, 0, 0, genl_family_get_id(drv->nl80211), 0, - 0, NL80211_CMD_SET_BEACON, 0); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, if_nametoindex(iface)); - - bss->dtim_period = value; - NLA_PUT_U32(msg, NL80211_ATTR_DTIM_PERIOD, bss->dtim_period); - - ret = send_and_recv_msgs(drv, msg, NULL, NULL); - if (ret) - wpa_printf(MSG_DEBUG, "nl80211: NL80211_CMD_SET_BEACON(%s) " - "result: %d (%s)", iface, ret, strerror(-ret)); - - nla_put_failure: - return ret; -} - - static int i802_set_bss(void *priv, int cts, int preamble, int slot) { struct i802_driver_data *drv = priv; @@ -2929,9 +2827,8 @@ static int hostap_get_we_version(struct i802_driver_data *drv) } -static int i802_wireless_event_init(void *priv) +static int i802_wireless_event_init(struct i802_driver_data *drv) { - struct i802_driver_data *drv = priv; int s; struct sockaddr_nl local; @@ -2962,9 +2859,8 @@ static int i802_wireless_event_init(void *priv) } -static void i802_wireless_event_deinit(void *priv) +static void i802_wireless_event_deinit(struct i802_driver_data *drv) { - struct i802_driver_data *drv = priv; if (drv->wext_sock < 0) return; eloop_unregister_read_sock(drv->wext_sock); @@ -3037,6 +2933,9 @@ static void *i802_init_bssid(struct hostapd_data *hapd, const u8 *bssid) if (i802_init_sockets(drv, bssid)) goto failed; + if (i802_wireless_event_init(drv)) + goto failed; + return drv; failed: @@ -3056,6 +2955,8 @@ static void i802_deinit(void *priv) struct i802_driver_data *drv = priv; struct i802_bss *bss, *prev; + i802_wireless_event_deinit(drv); + if (drv->last_freq_ht) { /* Clear HT flags from the driver */ struct hostapd_freq_params freq; @@ -3103,13 +3004,11 @@ static void i802_deinit(void *priv) } -const struct wpa_driver_ops wpa_driver_nl80211_ops = { +const struct hapd_driver_ops wpa_driver_nl80211_ops = { .name = "nl80211", .init = i802_init, .init_bssid = i802_init_bssid, .deinit = i802_deinit, - .wireless_event_init = i802_wireless_event_init, - .wireless_event_deinit = i802_wireless_event_deinit, .set_ieee8021x = i802_set_ieee8021x, .set_privacy = i802_set_privacy, .set_key = i802_set_key, @@ -3127,16 +3026,12 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = { .sta_clear_stats = i802_sta_clear_stats, .set_freq = i802_set_freq, .set_rts = i802_set_rts, - .get_rts = i802_get_rts, .set_frag = i802_set_frag, - .get_frag = i802_get_frag, .set_retry = i802_set_retry, - .get_retry = i802_get_retry, .set_rate_sets = i802_set_rate_sets, .set_beacon = i802_set_beacon, .set_internal_bridge = i802_set_internal_bridge, .set_beacon_int = i802_set_beacon_int, - .set_dtim_period = i802_set_dtim_period, .set_cts_protect = i802_set_cts_protect, .set_preamble = i802_set_preamble, .set_short_slot_time = i802_set_short_slot_time,