Skip to content

Commit a58fbe1

Browse files
committed
mac80211: clean up/rename prepare_for_handlers()
The function really shouldn't be called prepare_for_handlers(), all it does is check if the frame should be dropped. Rename it to ieee80211_accept_frame() and clean it up a bit. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
1 parent 5c90067 commit a58fbe1

File tree

1 file changed

+36
-44
lines changed

1 file changed

+36
-44
lines changed

net/mac80211/rx.c

Lines changed: 36 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3223,11 +3223,11 @@ void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid)
32233223

32243224
/* main receive path */
32253225

3226-
static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
3227-
struct ieee80211_hdr *hdr)
3226+
static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx)
32283227
{
32293228
struct ieee80211_sub_if_data *sdata = rx->sdata;
32303229
struct sk_buff *skb = rx->skb;
3230+
struct ieee80211_hdr *hdr = (void *)skb->data;
32313231
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
32323232
u8 *bssid = ieee80211_get_bssid(hdr, skb->len, sdata->vif.type);
32333233
int multicast = is_multicast_ether_addr(hdr->addr1);
@@ -3236,24 +3236,23 @@ static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
32363236
case NL80211_IFTYPE_STATION:
32373237
if (!bssid && !sdata->u.mgd.use_4addr)
32383238
return false;
3239-
if (!multicast &&
3240-
!ether_addr_equal(sdata->vif.addr, hdr->addr1))
3241-
return false;
3242-
break;
3239+
if (multicast)
3240+
return true;
3241+
return ether_addr_equal(sdata->vif.addr, hdr->addr1);
32433242
case NL80211_IFTYPE_ADHOC:
32443243
if (!bssid)
32453244
return false;
32463245
if (ether_addr_equal(sdata->vif.addr, hdr->addr2) ||
32473246
ether_addr_equal(sdata->u.ibss.bssid, hdr->addr2))
32483247
return false;
3249-
if (ieee80211_is_beacon(hdr->frame_control)) {
3248+
if (ieee80211_is_beacon(hdr->frame_control))
32503249
return true;
3251-
} else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) {
3250+
if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid))
32523251
return false;
3253-
} else if (!multicast &&
3254-
!ether_addr_equal(sdata->vif.addr, hdr->addr1)) {
3252+
if (!multicast &&
3253+
!ether_addr_equal(sdata->vif.addr, hdr->addr1))
32553254
return false;
3256-
} else if (!rx->sta) {
3255+
if (!rx->sta) {
32573256
int rate_idx;
32583257
if (status->flag & (RX_FLAG_HT | RX_FLAG_VHT))
32593258
rate_idx = 0; /* TODO: HT/VHT rates */
@@ -3262,20 +3261,18 @@ static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
32623261
ieee80211_ibss_rx_no_sta(sdata, bssid, hdr->addr2,
32633262
BIT(rate_idx));
32643263
}
3265-
break;
3264+
return true;
32663265
case NL80211_IFTYPE_OCB:
32673266
if (!bssid)
32683267
return false;
3269-
if (ieee80211_is_beacon(hdr->frame_control)) {
3268+
if (ieee80211_is_beacon(hdr->frame_control))
32703269
return false;
3271-
} else if (!is_broadcast_ether_addr(bssid)) {
3272-
ocb_dbg(sdata, "BSSID mismatch in OCB mode!\n");
3270+
if (!is_broadcast_ether_addr(bssid))
32733271
return false;
3274-
} else if (!multicast &&
3275-
!ether_addr_equal(sdata->dev->dev_addr,
3276-
hdr->addr1)) {
3272+
if (!multicast &&
3273+
!ether_addr_equal(sdata->dev->dev_addr, hdr->addr1))
32773274
return false;
3278-
} else if (!rx->sta) {
3275+
if (!rx->sta) {
32793276
int rate_idx;
32803277
if (status->flag & RX_FLAG_HT)
32813278
rate_idx = 0; /* TODO: HT rates */
@@ -3284,18 +3281,17 @@ static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
32843281
ieee80211_ocb_rx_no_sta(sdata, bssid, hdr->addr2,
32853282
BIT(rate_idx));
32863283
}
3287-
break;
3284+
return true;
32883285
case NL80211_IFTYPE_MESH_POINT:
3289-
if (!multicast &&
3290-
!ether_addr_equal(sdata->vif.addr, hdr->addr1))
3291-
return false;
3292-
break;
3286+
if (multicast)
3287+
return true;
3288+
return ether_addr_equal(sdata->vif.addr, hdr->addr1);
32933289
case NL80211_IFTYPE_AP_VLAN:
32943290
case NL80211_IFTYPE_AP:
3295-
if (!bssid) {
3296-
if (!ether_addr_equal(sdata->vif.addr, hdr->addr1))
3297-
return false;
3298-
} else if (!ieee80211_bssid_match(bssid, sdata->vif.addr)) {
3291+
if (!bssid)
3292+
return ether_addr_equal(sdata->vif.addr, hdr->addr1);
3293+
3294+
if (!ieee80211_bssid_match(bssid, sdata->vif.addr)) {
32993295
/*
33003296
* Accept public action frames even when the
33013297
* BSSID doesn't match, this is used for P2P
@@ -3308,7 +3304,9 @@ static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
33083304
if (ieee80211_is_public_action(hdr, skb->len))
33093305
return true;
33103306
return ieee80211_is_beacon(hdr->frame_control);
3311-
} else if (!ieee80211_has_tods(hdr->frame_control)) {
3307+
}
3308+
3309+
if (!ieee80211_has_tods(hdr->frame_control)) {
33123310
/* ignore data frames to TDLS-peers */
33133311
if (ieee80211_is_data(hdr->frame_control))
33143312
return false;
@@ -3317,27 +3315,22 @@ static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
33173315
!ether_addr_equal(bssid, hdr->addr1))
33183316
return false;
33193317
}
3320-
break;
3318+
return true;
33213319
case NL80211_IFTYPE_WDS:
33223320
if (bssid || !ieee80211_is_data(hdr->frame_control))
33233321
return false;
3324-
if (!ether_addr_equal(sdata->u.wds.remote_addr, hdr->addr2))
3325-
return false;
3326-
break;
3322+
return ether_addr_equal(sdata->u.wds.remote_addr, hdr->addr2);
33273323
case NL80211_IFTYPE_P2P_DEVICE:
3328-
if (!ieee80211_is_public_action(hdr, skb->len) &&
3329-
!ieee80211_is_probe_req(hdr->frame_control) &&
3330-
!ieee80211_is_probe_resp(hdr->frame_control) &&
3331-
!ieee80211_is_beacon(hdr->frame_control))
3332-
return false;
3333-
break;
3324+
return ieee80211_is_public_action(hdr, skb->len) ||
3325+
ieee80211_is_probe_req(hdr->frame_control) ||
3326+
ieee80211_is_probe_resp(hdr->frame_control) ||
3327+
ieee80211_is_beacon(hdr->frame_control);
33343328
default:
3335-
/* should never get here */
3336-
WARN_ON_ONCE(1);
33373329
break;
33383330
}
33393331

3340-
return true;
3332+
WARN_ON_ONCE(1);
3333+
return false;
33413334
}
33423335

33433336
/*
@@ -3351,11 +3344,10 @@ static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx,
33513344
{
33523345
struct ieee80211_local *local = rx->local;
33533346
struct ieee80211_sub_if_data *sdata = rx->sdata;
3354-
struct ieee80211_hdr *hdr = (void *)skb->data;
33553347

33563348
rx->skb = skb;
33573349

3358-
if (!prepare_for_handlers(rx, hdr))
3350+
if (!ieee80211_accept_frame(rx))
33593351
return false;
33603352

33613353
if (!consume) {

0 commit comments

Comments
 (0)