[MAC80211]: use switch statement in tx code
The transmit code needs to set the addresses depending on the interface type, a likely() for AP/VLAN is quite wrong since most people will be using STA; convert to a switch statement to make it look nicer. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Acked-by: Michael Wu <flamingice@sourmilk.net> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
eb063c1702
Коммит
cf966838cd
|
@ -1363,15 +1363,17 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
|
|||
/* TODO: handling for 802.1x authorized/unauthorized port */
|
||||
fc = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA;
|
||||
|
||||
if (likely(sdata->type == IEEE80211_IF_TYPE_AP ||
|
||||
sdata->type == IEEE80211_IF_TYPE_VLAN)) {
|
||||
switch (sdata->type) {
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
fc |= IEEE80211_FCTL_FROMDS;
|
||||
/* DA BSSID SA */
|
||||
memcpy(hdr.addr1, skb->data, ETH_ALEN);
|
||||
memcpy(hdr.addr2, dev->dev_addr, ETH_ALEN);
|
||||
memcpy(hdr.addr3, skb->data + ETH_ALEN, ETH_ALEN);
|
||||
hdrlen = 24;
|
||||
} else if (sdata->type == IEEE80211_IF_TYPE_WDS) {
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_WDS:
|
||||
fc |= IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS;
|
||||
/* RA TA DA SA */
|
||||
memcpy(hdr.addr1, sdata->u.wds.remote_addr, ETH_ALEN);
|
||||
|
@ -1379,20 +1381,23 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
|
|||
memcpy(hdr.addr3, skb->data, ETH_ALEN);
|
||||
memcpy(hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN);
|
||||
hdrlen = 30;
|
||||
} else if (sdata->type == IEEE80211_IF_TYPE_STA) {
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
fc |= IEEE80211_FCTL_TODS;
|
||||
/* BSSID SA DA */
|
||||
memcpy(hdr.addr1, sdata->u.sta.bssid, ETH_ALEN);
|
||||
memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN);
|
||||
memcpy(hdr.addr3, skb->data, ETH_ALEN);
|
||||
hdrlen = 24;
|
||||
} else if (sdata->type == IEEE80211_IF_TYPE_IBSS) {
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
/* DA SA BSSID */
|
||||
memcpy(hdr.addr1, skb->data, ETH_ALEN);
|
||||
memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN);
|
||||
memcpy(hdr.addr3, sdata->u.sta.bssid, ETH_ALEN);
|
||||
hdrlen = 24;
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
ret = 0;
|
||||
goto fail;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче