aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/tx.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2008-09-10 18:01:49 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-09-15 16:48:20 -0400
commit472dbc45dc1966284de72d7de15690c17ed2cf33 (patch)
treee8bfb88067f7fd8845978d1613f868e6a4499999 /net/mac80211/tx.c
parent7c95069522d02ff144cd421be6618dce619caf7e (diff)
mac80211: split off mesh handling entirely
This patch splits off mesh handling from the STA/IBSS. Unfortunately it increases mesh code size a bit, but I think it makes things clearer. The patch also reduces per-interface run-time memory usage. Also clean up a few places where ifdef is not required. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r--net/mac80211/tx.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index c413d4836afe..1059b17c83b0 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1330,7 +1330,7 @@ int ieee80211_master_start_xmit(struct sk_buff *skb,
1330 if (mesh_nexthop_lookup(skb, osdata)) 1330 if (mesh_nexthop_lookup(skb, osdata))
1331 return 0; 1331 return 0;
1332 if (memcmp(odev->dev_addr, hdr->addr4, ETH_ALEN) != 0) 1332 if (memcmp(odev->dev_addr, hdr->addr4, ETH_ALEN) != 0)
1333 IEEE80211_IFSTA_MESH_CTR_INC(&osdata->u.sta, 1333 IEEE80211_IFSTA_MESH_CTR_INC(&osdata->u.mesh,
1334 fwded_frames); 1334 fwded_frames);
1335 } 1335 }
1336 } 1336 }
@@ -1483,9 +1483,9 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
1483 memcpy(hdr.addr2, dev->dev_addr, ETH_ALEN); 1483 memcpy(hdr.addr2, dev->dev_addr, ETH_ALEN);
1484 memcpy(hdr.addr3, skb->data, ETH_ALEN); 1484 memcpy(hdr.addr3, skb->data, ETH_ALEN);
1485 memcpy(hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN); 1485 memcpy(hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN);
1486 if (!sdata->u.sta.mshcfg.dot11MeshTTL) { 1486 if (!sdata->u.mesh.mshcfg.dot11MeshTTL) {
1487 /* Do not send frames with mesh_ttl == 0 */ 1487 /* Do not send frames with mesh_ttl == 0 */
1488 sdata->u.sta.mshstats.dropped_frames_ttl++; 1488 sdata->u.mesh.mshstats.dropped_frames_ttl++;
1489 ret = 0; 1489 ret = 0;
1490 goto fail; 1490 goto fail;
1491 } 1491 }
@@ -1815,10 +1815,8 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
1815 struct rate_selection rsel; 1815 struct rate_selection rsel;
1816 struct beacon_data *beacon; 1816 struct beacon_data *beacon;
1817 struct ieee80211_supported_band *sband; 1817 struct ieee80211_supported_band *sband;
1818 struct ieee80211_mgmt *mgmt;
1819 int *num_beacons; 1818 int *num_beacons;
1820 enum ieee80211_band band = local->hw.conf.channel->band; 1819 enum ieee80211_band band = local->hw.conf.channel->band;
1821 u8 *pos;
1822 1820
1823 sband = local->hw.wiphy->bands[band]; 1821 sband = local->hw.wiphy->bands[band];
1824 1822
@@ -1885,7 +1883,11 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
1885 IEEE80211_STYPE_BEACON); 1883 IEEE80211_STYPE_BEACON);
1886 1884
1887 num_beacons = &ifsta->num_beacons; 1885 num_beacons = &ifsta->num_beacons;
1886#ifdef CONFIG_MAC80211_MESH
1888 } else if (ieee80211_vif_is_mesh(&sdata->vif)) { 1887 } else if (ieee80211_vif_is_mesh(&sdata->vif)) {
1888 struct ieee80211_mgmt *mgmt;
1889 u8 *pos;
1890
1889 /* headroom, head length, tail length and maximum TIM length */ 1891 /* headroom, head length, tail length and maximum TIM length */
1890 skb = dev_alloc_skb(local->tx_headroom + 400); 1892 skb = dev_alloc_skb(local->tx_headroom + 400);
1891 if (!skb) 1893 if (!skb)
@@ -1910,7 +1912,8 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
1910 1912
1911 mesh_mgmt_ies_add(skb, sdata); 1913 mesh_mgmt_ies_add(skb, sdata);
1912 1914
1913 num_beacons = &sdata->u.sta.num_beacons; 1915 num_beacons = &sdata->u.mesh.num_beacons;
1916#endif
1914 } else { 1917 } else {
1915 WARN_ON(1); 1918 WARN_ON(1);
1916 goto out; 1919 goto out;