aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/wl12xx/main.c
diff options
context:
space:
mode:
authorEliad Peller <eliad@wizery.com>2012-02-02 05:22:11 -0500
committerLuciano Coelho <coelho@ti.com>2012-02-15 01:38:34 -0500
commit76a74c8a65c6d2587e48355d3a122b4274f5abbf (patch)
tree319e57875da944d2901b34bd46e142230752ca13 /drivers/net/wireless/wl12xx/main.c
parentb87f20c018cead99b76c431b9289c0f17168d21c (diff)
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>
Diffstat (limited to 'drivers/net/wireless/wl12xx/main.c')
-rw-r--r--drivers/net/wireless/wl12xx/main.c69
1 files changed, 35 insertions, 34 deletions
diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c
index a264cb5bee5a..b45a16c1f717 100644
--- a/drivers/net/wireless/wl12xx/main.c
+++ b/drivers/net/wireless/wl12xx/main.c
@@ -3840,40 +3840,6 @@ sta_not_found:
3840 if (ret < 0) 3840 if (ret < 0)
3841 goto out; 3841 goto out;
3842 3842
3843 if ((changed & BSS_CHANGED_ARP_FILTER) ||
3844 (!is_ibss && (changed & BSS_CHANGED_QOS))) {
3845 __be32 addr = bss_conf->arp_addr_list[0];
3846 wlvif->sta.qos = bss_conf->qos;
3847 WARN_ON(wlvif->bss_type != BSS_TYPE_STA_BSS);
3848
3849 if (bss_conf->arp_addr_cnt == 1 &&
3850 bss_conf->arp_filter_enabled) {
3851 wlvif->ip_addr = addr;
3852 /*
3853 * The template should have been configured only upon
3854 * association. however, it seems that the correct ip
3855 * isn't being set (when sending), so we have to
3856 * reconfigure the template upon every ip change.
3857 */
3858 ret = wl1271_cmd_build_arp_rsp(wl, wlvif);
3859 if (ret < 0) {
3860 wl1271_warning("build arp rsp failed: %d", ret);
3861 goto out;
3862 }
3863
3864 ret = wl1271_acx_arp_ip_filter(wl, wlvif,
3865 (ACX_ARP_FILTER_ARP_FILTERING |
3866 ACX_ARP_FILTER_AUTO_ARP),
3867 addr);
3868 } else {
3869 wlvif->ip_addr = 0;
3870 ret = wl1271_acx_arp_ip_filter(wl, wlvif, 0, addr);
3871 }
3872
3873 if (ret < 0)
3874 goto out;
3875 }
3876
3877 if (do_join) { 3843 if (do_join) {
3878 ret = wl1271_join(wl, wlvif, set_assoc); 3844 ret = wl1271_join(wl, wlvif, set_assoc);
3879 if (ret < 0) { 3845 if (ret < 0) {
@@ -3940,6 +3906,41 @@ sta_not_found:
3940 } 3906 }
3941 } 3907 }
3942 3908
3909 /* Handle arp filtering. Done after join. */
3910 if ((changed & BSS_CHANGED_ARP_FILTER) ||
3911 (!is_ibss && (changed & BSS_CHANGED_QOS))) {
3912 __be32 addr = bss_conf->arp_addr_list[0];
3913 wlvif->sta.qos = bss_conf->qos;
3914 WARN_ON(wlvif->bss_type != BSS_TYPE_STA_BSS);
3915
3916 if (bss_conf->arp_addr_cnt == 1 &&
3917 bss_conf->arp_filter_enabled) {
3918 wlvif->ip_addr = addr;
3919 /*
3920 * The template should have been configured only upon
3921 * association. however, it seems that the correct ip
3922 * isn't being set (when sending), so we have to
3923 * reconfigure the template upon every ip change.
3924 */
3925 ret = wl1271_cmd_build_arp_rsp(wl, wlvif);
3926 if (ret < 0) {
3927 wl1271_warning("build arp rsp failed: %d", ret);
3928 goto out;
3929 }
3930
3931 ret = wl1271_acx_arp_ip_filter(wl, wlvif,
3932 (ACX_ARP_FILTER_ARP_FILTERING |
3933 ACX_ARP_FILTER_AUTO_ARP),
3934 addr);
3935 } else {
3936 wlvif->ip_addr = 0;
3937 ret = wl1271_acx_arp_ip_filter(wl, wlvif, 0, addr);
3938 }
3939
3940 if (ret < 0)
3941 goto out;
3942 }
3943
3943out: 3944out:
3944 return; 3945 return;
3945} 3946}