diff options
author | Eliad Peller <eliad@wizery.com> | 2012-02-02 05:22:11 -0500 |
---|---|---|
committer | Luciano Coelho <coelho@ti.com> | 2012-02-15 01:38:34 -0500 |
commit | 76a74c8a65c6d2587e48355d3a122b4274f5abbf (patch) | |
tree | 319e57875da944d2901b34bd46e142230752ca13 /drivers/net/wireless/wl12xx/main.c | |
parent | b87f20c018cead99b76c431b9289c0f17168d21c (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.c | 69 |
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 | |||
3943 | out: | 3944 | out: |
3944 | return; | 3945 | return; |
3945 | } | 3946 | } |