mirror of https://gitee.com/openkylin/linux.git
wl12xx: configure arp filtering only after association
We have to configure arp filtering only after the role was started, so move the BSS_CHANGED_ARP_FILTER handling after the join. Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
This commit is contained in:
parent
b87f20c018
commit
76a74c8a65
|
@ -3840,40 +3840,6 @@ static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
|
|||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
if ((changed & BSS_CHANGED_ARP_FILTER) ||
|
||||
(!is_ibss && (changed & BSS_CHANGED_QOS))) {
|
||||
__be32 addr = bss_conf->arp_addr_list[0];
|
||||
wlvif->sta.qos = bss_conf->qos;
|
||||
WARN_ON(wlvif->bss_type != BSS_TYPE_STA_BSS);
|
||||
|
||||
if (bss_conf->arp_addr_cnt == 1 &&
|
||||
bss_conf->arp_filter_enabled) {
|
||||
wlvif->ip_addr = addr;
|
||||
/*
|
||||
* The template should have been configured only upon
|
||||
* association. however, it seems that the correct ip
|
||||
* isn't being set (when sending), so we have to
|
||||
* reconfigure the template upon every ip change.
|
||||
*/
|
||||
ret = wl1271_cmd_build_arp_rsp(wl, wlvif);
|
||||
if (ret < 0) {
|
||||
wl1271_warning("build arp rsp failed: %d", ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = wl1271_acx_arp_ip_filter(wl, wlvif,
|
||||
(ACX_ARP_FILTER_ARP_FILTERING |
|
||||
ACX_ARP_FILTER_AUTO_ARP),
|
||||
addr);
|
||||
} else {
|
||||
wlvif->ip_addr = 0;
|
||||
ret = wl1271_acx_arp_ip_filter(wl, wlvif, 0, addr);
|
||||
}
|
||||
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (do_join) {
|
||||
ret = wl1271_join(wl, wlvif, set_assoc);
|
||||
if (ret < 0) {
|
||||
|
@ -3940,6 +3906,41 @@ static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
|
|||
}
|
||||
}
|
||||
|
||||
/* Handle arp filtering. Done after join. */
|
||||
if ((changed & BSS_CHANGED_ARP_FILTER) ||
|
||||
(!is_ibss && (changed & BSS_CHANGED_QOS))) {
|
||||
__be32 addr = bss_conf->arp_addr_list[0];
|
||||
wlvif->sta.qos = bss_conf->qos;
|
||||
WARN_ON(wlvif->bss_type != BSS_TYPE_STA_BSS);
|
||||
|
||||
if (bss_conf->arp_addr_cnt == 1 &&
|
||||
bss_conf->arp_filter_enabled) {
|
||||
wlvif->ip_addr = addr;
|
||||
/*
|
||||
* The template should have been configured only upon
|
||||
* association. however, it seems that the correct ip
|
||||
* isn't being set (when sending), so we have to
|
||||
* reconfigure the template upon every ip change.
|
||||
*/
|
||||
ret = wl1271_cmd_build_arp_rsp(wl, wlvif);
|
||||
if (ret < 0) {
|
||||
wl1271_warning("build arp rsp failed: %d", ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = wl1271_acx_arp_ip_filter(wl, wlvif,
|
||||
(ACX_ARP_FILTER_ARP_FILTERING |
|
||||
ACX_ARP_FILTER_AUTO_ARP),
|
||||
addr);
|
||||
} else {
|
||||
wlvif->ip_addr = 0;
|
||||
ret = wl1271_acx_arp_ip_filter(wl, wlvif, 0, addr);
|
||||
}
|
||||
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue