linux/net/mac80211/rx.c
<<
>>
Prefs
   1/*
   2 * Copyright 2002-2005, Instant802 Networks, Inc.
   3 * Copyright 2005-2006, Devicescape Software, Inc.
   4 * Copyright 2006-2007  Jiri Benc <jbenc@suse.cz>
   5 * Copyright 2007-2010  Johannes Berg <johannes@sipsolutions.net>
   6 *
   7 * This program is free software; you can redistri/a>e it cndyor modify
   8 * it under the terms of the GNU General Public License version 2 as
   9 * published by the Free Software Foundation.
  10 */
  11
  12#include <linux/jiffies.h>
  13#include <linux/slab.h>
  14#include <linux/kernel.h>
  15#include <linux/skbuff.h>
  16#include <linux/netdevice.h>
  17#include <linux/etherdevice.h>
  18#include <linux/rcupdate.h>
  19#include <linux/export.h>
  20#include <net/mac80211.h>
  21#include <net/ieee80211_radiotap.h>
  22#include <asm/unaligned.h>
  23
  24#include "ieee80211_i.h"
  25#include "driver-ops.h"
  26#include "led.h"
  27#include "mesh.h"
  28#include "wep.h"
  29#include "wpa.h"
  30#include "tkip.h"
  31#include "wme.h"
  32#include "rate.h"
  33
  34/*
  35 * monitor mode reception
  36 *
  37 * This function cleans up the SKB, i.e. it removes all the stuff
  38 * only useful for monitoring.
  39 */
  40static struct sk_buff *remove_monitor_info(struct ieee80211_local *local,
  41                                           struct sk_buff *skb)
  42{
  43        if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS) {
  44                if (likely(skb->len > FCS_LEN))
  45                        __pskb_trim(skb, skb->len - FCS_LEN);
  46                else {
  47                        /* driver bug */
  48                        WARN_ON(1);
  49                        dev_kfree_skb(skb);
  50                        skb = NULL;
  51                }
  52        }
  53
  54        return skb;
  55}
  56
  57static inline int should_drop_frame(struct sk_buff *skb,
  58                                    int present_fcs_len)
  59{
  60        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
  61        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
  62
  63        if (status->flag & (RX_FLAG_FAILED_FCS_CRC |
  64                            RX_FLAG_FAILED_PLCP_CRC |
  65                            RX_FLAG_AMPDU_IS_ZEROLEN))
  66                return 1;
  67        if (unlikely(skb->len < 16 + present_fcs_len))
  68                return 1;
  69        if (ieee80211_is_ctl(hdr->frame_control) &&
  70            !ieee80211_is_pspoll(hdr->frame_control) &&
  71            !ieee80211_is_back_req(hdr->frame_control))
  72                return 1;
  73        return 0;
  74}
  75
  76static int
  77ieee80211_rx_radiotap_len(struct ieee80211_local *local,
  78                          struct ieee80211_rx_status *status)
  79{
  80        int len;
  81
  82        /* always present fields */
  83        len = sizeof(struct ieee80211_radiotap_header) + 9;
  84
  85        if (status->flag & RX_FLAG_MACTIME_MPDU)
  86                len += 8;
  87        if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
  88                len += 1;
  89
  90        if (len & 1) /* padding for RX_FLAGS if necessary */
  91                len++;
  92
  93        if (status->flag & RX_FLAG_HT) /* HT info */
  94                len += 3;
  95
  96        if (status->flag & RX_FLAG_AMPDU_DETAILS) {
  97                /* padding */
  98                while (len & 3)
  99                        len++;
 100                len += 8;
 101        }
 102
 103        return len;
 104}
 105
 106/*
 107 * ieee80211_add_rx_radiotap_header - add radiotap header
 108 *
 109 * add a radiotap header containing all the fields which the hardware provided.
 110 */
 111static void
 112ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
 113                                 struct sk_buff *skb,
 114                                 struct ieee80211_rate *rate,
 115                                 int rtap_len, bool has_fcs)
 116{
 117        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
 118        struct ieee80211_radiotap_header *rthdr;
 119        unsigned char *pos;
 120        u16 rx_flags = 0;
 121
 122        rthdr = (struct ieee80211_radiotap_header *)skb_push(skb, rtap_len);
 123        memset(rthdr, 0, rtap_len);
 124
 125        /* radiotap header, set always present flags */
 126        rthdr->it_present =
 127                cpu_to_le32((1 << IEEE80211_RADIOTAP_FLAGS) |
 128                            (1 << IEEE80211_RADIOTAP_CHANNEL) |
 129                            (1 << IEEE80211_RADIOTAP_ANTENNA) |
 130                            (1 << IEEE80211_RADIOTAP_RX_FLAGS));
 131        rthdr->it_len = cpu_to_le16(rtap_len);
 132
 133        pos = (unsigned char *)(rthdr+1);
 134
 135        /* the order of the following fields is important */
 136
 137        /* IEEE80211_RADIOTAP_TSFT */
 138        if (status->flag & RX_FLAG_MACTIME_MPDU) {
 139                put_unaligned_le64(status->mactime, pos);
 140                rthdr->it_present |=
 141                        cpu_to_le32(1 << IEEE80211_RADIOTAP_TSFT);
 142                pos += 8;
 143        }
 144
 145        /* IEEE80211_RADIOTAP_FLAGS */
 146        if (has_fcs && (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS))
 147                *pos |= IEEE80211_RADIOTAP_F_FCS;
 148        if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC))
 149                *pos |= IEEE80211_RADIOTAP_F_BADFCS;
 150        if (status->flag & RX_FLAG_SHORTPRE)
 151                *pos |= IEEE80211_RADIOTAP_F_SHORTPRE;
 152        pos++;
 153
 154        /* IEEE80211_RADIOTAP_RATE */
 155        if (!rate || status->flag & RX_FLAG_HT) {
 156                /*
 157                 * Without rate information don't add it. If we have,
 158                 * MCS information is a separate field in radiotap,
 159                 * added below. The byte here is needed as padding
 160                 * for the channel though, so initialise it to 0.
 161                 */
 162                *pos = 0;
 163        } else {
 164                rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_RATE);
 165                *pos = rate->bitrate / 5;
 166        }
 167        pos++;
 168
 169        /* IEEE80211_RADIOTAP_CHANNEL */
 170        put_unaligned_le16(status->freq, pos);
 171        pos += 2;
 172        if (status->band == IEEE80211_BAND_5GHZ)
 173                put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_5GHZ,
 174                                   pos);
 175        else if (status->flag & RX_FLAG_HT)
 176                put_unaligned_le16(IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ,
 177                                   pos);
 178        else if (rate && rate->flags & IEEE80211_RATE_ERP_G)
 179                put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ,
 180                                   pos);
 181        else if (rate)
 182                put_unaligned_le16(IEEE80211_CHAN_CCK | IEEE80211_CHAN_2GHZ,
 183                                   pos);
 184        else
 185                put_unaligned_le16(IEEE80211_CHAN_2GHZ, pos);
 186        pos += 2;
 187
 188        /* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */
 189        if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM &&
 190            !(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
 191                *pos = status->signal;
 192                rthdr->it_present |=
 193                        cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL);
 194                pos++;
 195        }
 196
 197        /* IEEE80211_RADIOTAP_LOCK_QUALITY is missing */
 198
 199        /* IEEE80211_RADIOTAP_ANTENNA */
 200        *pos = status->antenna;
 201        pos++;
 202
 203        /* IEEE80211_RADIOTAP_DB_ANTNOISE is not used */
 204
 205        /* IEEE80211_RADIOTAP_RX_FLAGS */
 206        /* ensure 2 byte alignment for the 2 byte field as required */
 207        if ((pos - (u8 *)rthdr) & 1)
 208                pos++;
 209        if (status->flag & RX_FLAG_FAILED_PLCP_CRC)
 210                rx_flags |= IEEE80211_RADIOTAP_F_RX_BADPLCP;
 211        put_unaligned_le16(rx_flags, pos);
 212        pos += 2;
 213
 214        if (status->flag & RX_FLAG_HT) {
 215                rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS);
 216                *pos++ = local->hw.radiotap_mcs_details;
 217                *pos = 0;
 218                if (status->flag & RX_FLAG_SHORT_GI)
 219                        *pos |= IEEE80211_RADIOTAP_MCS_SGI;
 220                if (status->flag & RX_FLAG_40MHZ)
 221                        *pos |= IEEE80211_RADIOTAP_MCS_BW_40;
 222                if (status->flag & RX_FLAG_HT_GF)
 223                        *pos |= IEEE80211_RADIOTAP_MCS_FMT_GF;
 224                pos++;
 225                *pos++ = status->rate_idx;
 226        }
 227
 228        if (status->flag & RX_FLAG_AMPDU_DETAILS) {
 229                u16 flags = 0;
 230
 231                /* ensure 4 byte alignment */
 232                while ((pos - (u8 *)rthdr) & 3)
 233                        pos++;
 234                rthdr->it_present |=
 235                        cpu_to_le32(1 << IEEE80211_RADIOTAP_AMPDU_STATUS);
 236                put_unaligned_le32(status->ampdu_reference, pos);
 237                pos += 4;
 238                if (status->flag & RX_FLAG_AMPDU_REPORT_ZEROLEN)
 239                        flags |= IEEE80211_RADIOTAP_AMPDU_REPORT_ZEROLEN;
 240                if (status->flag & RX_FLAG_AMPDU_IS_ZEROLEN)
 241                        flags |= IEEE80211_RADIOTAP_AMPDU_IS_ZEROLEN;
 242                if (status->flag & RX_FLAG_AMPDU_LAST_KNOWN)
 243                        flags |= IEEE80211_RADIOTAP_AMPDU_LAST_KNOWN;
 244                if (status->flag & RX_FLAG_AMPDU_IS_LAST)
 245                        flags |= IEEE80211_RADIOTAP_AMPDU_IS_LAST;
 246                if (status->flag & RX_FLAG_AMPDU_DELIM_CRC_ERROR)
 247                        flags |= IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR;
 248                if (status->flag & RX_FLAG_AMPDU_DELIM_CRC_KNOWN)
 249                        flags |= IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN;
 250                put_unaligned_le16(flags, pos);
 251                pos += 2;
 252                if (status->flag & RX_FLAG_AMPDU_DELIM_CRC_KNOWN)
 253                        *pos++ = status->ampdu_delimiter_crc;
 254                else
 255                        *pos++ = 0;
 256                *pos++ = 0;
 257        }
 258}
 259
 260/*
 261 * This function copies a received frame to all monitor interfaces and
 262 * returns a cleaned-up SKB that no longer includes the FCS nor the
 263 * radiotap header the driver might have added.
 264 */
 265static struct sk_buff *
 266ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
 267                     struct ieee80211_rate *rate)
 268{
 269        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(origskb);
 270        struct ieee80211_sub_if_data *sdata;
 271        int needed_headroom;
 272        struct sk_buff *skb, *skb2;
 273        struct net_device *prev_dev = NULL;
 274        int present_fcs_len = 0;
 275
 276        /*
 277         * First, we may need to make a copy of the skb because
 278         *  (1) we need to modify it for radiotap (if not present), and
 279         *  (2) the other RX handlers will modify the skb we got.
 280         *
 281         * We don't need to, of course, if we aren't going to return
 282         * the SKB because it has a bad FCS/PLCP checksum.
 283         */
 284
 285        /* room for the radiotap header based on driver features */
 286        needed_headroom = ieee80211_rx_radiotap_len(local, status);
 287
 288        if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS)
 289                present_fcs_len = FCS_LEN;
 290
 291        /* make sure hdr->frame_control is on the linear part */
 292        if (!pskb_may_pull(origskb, 2)) {
 293                dev_kfree_skb(origskb);
 294                return NULL;
 295        }
 296
 297        if (!local->monitors) {
 298                if (should_drop_frame(origskb, present_fcs_len)) {
 299                        dev_kfree_skb(origskb);
 300                        return NULL;
 301                }
 302
 303                return remove_monitor_info(local, origskb);
 304        }
 305
 306        if (should_drop_frame(origskb, present_fcs_len)) {
 307                /* only need to expand headroom if necessary */
 308                skb = origskb;
 309                origskb = NULL;
 310
 311                /*
 312                 * This shouldn't trigger often because most devices have an
 313                 * RX header they pull before we get here, and that should
 314                 * be big enough for our radiotap information. We should
 315                 * probably export the length to drivers so that we can have
 316                 * them allocate enough headroom to start with.
 317                 */
 318                if (skb_headroom(skb) < needed_headroom &&
 319                    pskb_expand_head(skb, needed_headroom, 0, GFP_ATOMIC)) {
 320                        dev_kfree_skb(skb);
 321                        return NULL;
 322                }
 323        } else {
 324                /*
 325                 * Need to make a copy and possibly remove radiotap header
 326                 * and FCS from the original.
 327                 */
 328                skb = skb_copy_expand(origskb, needed_headroom, 0, GFP_ATOMIC);
 329
 330                origskb = remove_monitor_info(local, origskb);
 331
 332                if (!skb)
 333                        return origskb;
 334        }
 335
 336        /* prepend radiotap information */
 337        ieee80211_add_rx_radiotap_header(local, skb, rate, needed_headroom,
 338                                         true);
 339
 340        skb_reset_mac_header(skb);
 341        skb->ip_summed = CHECKSUM_UNNECESSARY;
 342        skb->pkt_type = PACKET_OTHERHOST;
 343        skb->protocol = htons(ETH_P_802_2);
 344
 345        list_for_each_entry_rcu(sdata, &local->interfaces, list) {
 346                if (sdata->vif.type != NL80211_IFTYPE_MONITOR)
 347                        continue;
 348
 349                if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES)
 350                        continue;
 351
 352                if (!ieee80211_sdata_running(sdata))
 353                        continue;
 354
 355                if (prev_dev) {
 356                        skb2 = skb_clone(skb, GFP_ATOMIC);
 357                        if (skb2) {
 358                                skb2->dev = prev_dev;
 359                                netif_receive_skb(skb2);
 360                        }
 361                }
 362
 363                prev_dev = sdata->dev;
 364                sdata->dev->stats.rx_packets++;
 365                sdata->dev->stats.rx_bytes += skb->len;
 366        }
 367
 368        if (prev_dev) {
 369                skb->dev = prev_dev;
 370                netif_receive_skb(skb);
 371        } else
 372                dev_kfree_skb(skb);
 373
 374        return origskb;
 375}
 376
 377
 378static void ieee80211_parse_qos(struct ieee80211_rx_data *rx)
 379{
 380        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
 381        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
 382        int tid, seqno_idx, security_idx;
 383
 384        /* does the frame have a qos control field? */
 385        if (ieee80211_is_data_qos(hdr->frame_control)) {
 386                u8 *qc = ieee80211_get_qos_ctl(hdr);
 387                /* frame has qos control */
 388                tid = *qc & IEEE80211_QOS_CTL_TID_MASK;
 389                if (*qc & IEEE80211_QOS_CTL_A_MSDU_PRESENT)
 390                        status->rx_flags |= IEEE80211_RX_AMSDU;
 391
 392                seqno_idx = tid;
 393                security_idx = tid;
 394        } else {
 395                /*
 396                 * IEEE 802.11-2007, 7.1.3.4.1 ("Sequence Number field"):
 397                 *
 398                 *      Sequence numbers for management frames, QoS data
 399                 *      frames with a broadcast/multicast address in the
 400                 *      Address 1 field, and all non-QoS data frames sent
 401                 *      by QoS STAs are assigned using an additional single
 402                 *      modulo-4096 counter, [...]
 403                 *
 404                 * We also use that counter for non-QoS STAs.
 405                 */
 406                seqno_idx = NUM_RX_DATA_QUEUES;
 407                security_idx = 0;
 408                if (ieee80211_is_mgmt(hdr->frame_control))
 409                        security_idx = NUM_RX_DATA_QUEUES;
 410                tid = 0;
 411        }
 412
 413        rx->seqno_idx = seqno_idx;
 414        rx->security_idx = security_idx;
 415        /* Set skb->priority to 1d tag if highest order bit of TID is not set.
 416         * For now, set skb->priority to 0 for other cases. */
 417        rx->skb->priority = (tid > 7) ? 0 : tid;
 418}
 419
 420/**
 421 * DOC: Packet alignment
 422 *
 423 * Drivers always need to pass packets that are aligned to two-byte boundaries
 424 * to the stack.
 425 *
 426 * Additionally, should, if possible, align the payload data in a way that
 427 * guarantees that the contained IP header is aligned to a four-byte
 428 * boundary. In the case of regular frames, this simply means aligning the
 429 * payload to a four-byte boundary (because either the IP header is directly
 430 * contained, or IV/RFC1042 headers that have a length divisible by four are
 431 * in front of it).  If the payload data is not properly aligned and the
 432 * architecture doesn't support efficient unaligned operations, mac80211
 433 * will align the data.
 434 *
 435 * With A-MSDU frames, however, the payload data address must yield two modulo
 436 * four because there are 14-byte 802.3 headers within the A-MSDU frames that
 437 * push the IP header further back to a multiple of four again. Thankfully, the
 438 * specs were sane enough this time around to require padding each A-MSDU
 439 * subframe to a length that is a multiple of four.
 440 *
 441 * Padding like Atheros hardware adds which is between the 802.11 header and
 442 * the payload is not supported, the driver is required to move the 802.11
 443 * header to be directly in front of the payload in that case.
 444 */
 445static void ieee80211_verify_alignment(struct ieee80211_rx_data *rx)
 446{
 447#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
 448        WARN_ONCE((unsigned long)rx->skb->data & 1,
 449                  "unaligned packet at 0x%p\n", rx->skb->data);
 450#endif
 451}
 452
 453
 454/* rx handlers */
 455
 456static int ieee80211_is_unicast_robust_mgmt_frame(struct sk_buff *skb)
 457{
 458        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
 459
 460        if (skb->len < 24 || is_multicast_ether_addr(hdr->addr1))
 461                return 0;
 462
 463        return ieee80211_is_robust_mgmt_frame(hdr);
 464}
 465
 466
 467static int ieee80211_is_multicast_robust_mgmt_frame(struct sk_buff *skb)
 468{
 469        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
 470
 471        if (skb->len < 24 || !is_multicast_ether_addr(hdr->addr1))
 472                return 0;
 473
 474        return ieee80211_is_robust_mgmt_frame(hdr);
 475}
 476
 477
 478/* Get the BIP key index from MMIE; return -1 if this is not a BIP frame */
 479static int ieee80211_get_mmie_keyidx(struct sk_buff *skb)
 480{
 481        struct ieee80211_mgmt *hdr = (struct ieee80211_mgmt *) skb->data;
 482        struct ieee80211_mmie *mmie;
 483
 484        if (skb->len < 24 + sizeof(*mmie) ||
 485            !is_multicast_ether_addr(hdr->da))
 486                return -1;
 487
 488        if (!ieee80211_is_robust_mgmt_frame((struct ieee80211_hdr *) hdr))
 489                return -1; /* not a robust management frame */
 490
 491        mmie = (struct ieee80211_mmie *)
 492                (skb->data + skb->len - sizeof(*mmie));
 493        if (mmie->element_id != WLAN_EID_MMIE ||
 494            mmie->length != sizeof(*mmie) - 2)
 495                return -1;
 496
 497        return le16_to_cpu(mmie->key_id);
 498}
 499
 500
 501static ieee80211_rx_result
 502ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx)
 503{
 504        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
 505        char *dev_addr = rx->sdata->vif.addr;
 506
 507        if (ieee80211_is_data(hdr->frame_control)) {
 508                if (is_multicast_ether_addr(hdr->addr1)) {
 509                        if (ieee80211_has_tods(hdr->frame_control) ||
 510                                !ieee80211_has_fromds(hdr->frame_control))
 511                                return RX_DROP_MONITOR;
 512                        if (ether_addr_equal(hdr->addr3, dev_addr))
 513                                return RX_DROP_MONITOR;
 514                } else {
 515                        if (!ieee80211_has_a4(hdr->frame_control))
 516                                return RX_DROP_MONITOR;
 517                        if (ether_addr_equal(hdr->addr4, dev_addr))
 518                                return RX_DROP_MONITOR;
 519                }
 520        }
 521
 522        /* If there is not an established peer link and this is not a peer link
 523         * establisment frame, beacon or probe, drop the frame.
 524         */
 525
 526        if (!rx->sta || sta_plink_state(rx->sta) != NL80211_PLINK_ESTAB) {
 527                struct ieee80211_mgmt *mgmt;
 528
 529                if (!ieee80211_is_mgmt(hdr->frame_control))
 530                        return RX_DROP_MONITOR;
 531
 532                if (ieee80211_is_action(hdr->frame_control)) {
 533                        u8 category;
 534
 535                        /* make sure category field is present */
 536                        if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE)
 537                                return RX_DROP_MONITOR;
 538
 539                        mgmt = (struct ieee80211_mgmt *)hdr;
 540                        category = mgmt->u.action.category;
 541                        if (category != WLAN_CATEGORY_MESH_ACTION &&
 542                                category != WLAN_CATEGORY_SELF_PROTECTED)
 543                                return RX_DROP_MONITOR;
 544                        return RX_CONTINUE;
 545                }
 546
 547                if (ieee80211_is_probe_req(hdr->frame_control) ||
 548                    ieee80211_is_probe_resp(hdr->frame_control) ||
 549                    ieee80211_is_beacon(hdr->frame_control) ||
 550                    ieee80211_is_auth(hdr->frame_control))
 551                        return RX_CONTINUE;
 552
 553                return RX_DROP_MONITOR;
 554
 555        }
 556
 557        return RX_CONTINUE;
 558}
 559
 560#define SEQ_MODULO 0x1000
 561#define SEQ_MASK   0xfff
 562
 563static inline int seq_less(u16 sq1, u16 sq2)
 564{
 565        return ((sq1 - sq2) & SEQ_MASK) > (SEQ_MODULO >> 1);
 566}
 567
 568static inline u16 seq_inc(u16 sq)
 569{
 570        return (sq + 1) & SEQ_MASK;
 571}
 572
 573static inline u16 seq_sub(u16 sq1, u16 sq2)
 574{
 575        return (sq1 - sq2) & SEQ_MASK;
 576}
 577
 578
 579static void ieee80211_release_reorder_frame(struct ieee80211_sub_if_data *sdata,
 580                                            struct tid_ampdu_rx *tid_agg_rx,
 581                                            int index)
 582{
 583        struct ieee80211_local *local = sdata->local;
 584        struct sk_buff *skb = tid_agg_rx->reorder_buf[index];
 585        struct ieee80211_rx_status *status;
 586
 587        lockdep_assert_held(&tid_agg_rx->reorder_lock);
 588
 589        if (!skb)
 590                goto no_frame;
 591
 592        /* release the frame from the reorder ring buffer */
 593        tid_agg_rx->stored_mpdu_num--;
 594        tid_agg_rx->reorder_buf[index] = NULL;
 595        status = IEEE80211_SKB_RXCB(skb);
 596        status->rx_flags |= IEEE80211_RX_DEFERRED_RELEASE;
 597        skb_queue_tail(&local->rx_skb_queue, skb);
 598
 599no_frame:
 600        tid_agg_rx->head_seq_num = seq_inc(tid_agg_rx->head_seq_num);
 601}
 602
 603static void ieee80211_release_reorder_frames(struct ieee80211_sub_if_data *sdata,
 604                                             struct tid_ampdu_rx *tid_agg_rx,
 605                                             u16 head_seq_num)
 606{
 607        int index;
 608
 609        lockdep_assert_held(&tid_agg_rx->reorder_lock);
 610
 611        while (seq_less(tid_agg_rx->head_seq_num, head_seq_num)) {
 612                index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn) %
 613                                                        tid_agg_rx->buf_size;
 614                ieee80211_release_reorder_frame(sdata, tid_agg_rx, index);
 615        }
 616}
 617
 618/*
 619 * Timeout (in jiffies) for skb's that are waiting in the RX reorder buffer. If
 620 * the skb was added to the buffer longer than this time ago, the earlier
 621 * frames that have not yet been received are assumed to be lost and the skb
 622 * can be released for processing. This may also release other skb's from the
 623 * reorder buffer if there are no additional gaps between the frames.
 624 *
 625 * Callers must hold tid_agg_rx->reorder_lock.
 626 */
 627#define HT_RX_REORDER_BUF_TIMEOUT (HZ / 10)
 628
 629static void ieee80211_sta_reorder_release(struct ieee80211_sub_if_data *sdata,
 630                                          struct tid_ampdu_rx *tid_agg_rx)
 631{
 632        int index, j;
 633
 634        lockdep_assert_held(&tid_agg_rx->reorder_lock);
 635
 636        /* release the buffer until next missing frame */
 637        index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn) %
 638                                                tid_agg_rx->buf_size;
 639        if (!tid_agg_rx->reorder_buf[index] &&
 640            tid_agg_rx->stored_mpdu_num) {
 641                /*
 642                 * No buffers ready to be released, but check whether any
 643                 * frames in the reorder buffer have timed out.
 644                 */
 645                int skipped = 1;
 646                for (j = (index + 1) % tid_agg_rx->buf_size; j != index;
 647                     j = (j + 1) % tid_agg_rx->buf_size) {
 648                        if (!tid_agg_rx->reorder_buf[j]) {
 649                                skipped++;
 650                                continue;
 651                        }
 652                        if (skipped &&
 653                            !time_after(jiffies, tid_agg_rx->reorder_time[j] +
 654                                        HT_RX_REORDER_BUF_TIMEOUT))
 655                                goto set_release_timer;
 656
 657                        ht_dbg_ratelimited(sdata,
 658                                           "release an RX reorder frame due to timeout on earlier frames\n");
 659                        ieee80211_release_reorder_frame(sdata, tid_agg_rx, j);
 660
 661                        /*
 662                         * Increment the head seq# also for the skipped slots.
 663                         */
 664                        tid_agg_rx->head_seq_num =
 665                                (tid_agg_rx->head_seq_num + skipped) & SEQ_MASK;
 666                        skipped = 0;
 667                }
 668        } else while (tid_agg_rx->reorder_buf[index]) {
 669                ieee80211_release_reorder_frame(sdata, tid_agg_rx, index);
 670                index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn) %
 671                                                        tid_agg_rx->buf_size;
 672        }
 673
 674        if (tid_agg_rx->stored_mpdu_num) {
 675                j = index = seq_sub(tid_agg_rx->head_seq_num,
 676                                    tid_agg_rx->ssn) % tid_agg_rx->buf_size;
 677
 678                for (; j != (index - 1) % tid_agg_rx->buf_size;
 679                     j = (j + 1) % tid_agg_rx->buf_size) {
 680                        if (tid_agg_rx->reorder_buf[j])
 681                                break;
 682                }
 683
 684 set_release_timer:
 685
 686                mod_timer(&tid_agg_rx->reorder_timer,
 687                          tid_agg_rx->reorder_time[j] + 1 +
 688                          HT_RX_REORDER_BUF_TIMEOUT);
 689        } else {
 690                del_timer(&tid_agg_rx->reorder_timer);
 691        }
 692}
 693
 694/*
 695 * As this function belongs to the RX path it must be under
 696 * rcu_read_lock protection. It returns false if the frame
 697 * can be processed immediately, true if it was consumed.
 698 */
 699static bool ieee80211_sta_manage_reorder_buf(struct ieee80211_sub_if_data *sdata,
 700                                             struct tid_ampdu_rx *tid_agg_rx,
 701                                             struct sk_buff *skb)
 702{
 703        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
 704        u16 sc = le16_to_cpu(hdr->seq_ctrl);
 705        u16 mpdu_seq_num = (sc & IEEE80211_SCTL_SEQ) >> 4;
 706        u16 head_seq_num, buf_size;
 707        int index;
 708        bool ret = true;
 709
 710        spin_lock(&tid_agg_rx->reorder_lock);
 711
 712        buf_size = tid_agg_rx->buf_size;
 713        head_seq_num = tid_agg_rx->head_seq_num;
 714
 715        /* frame with out of date sequence number */
 716        if (seq_less(mpdu_seq_num, head_seq_num)) {
 717                dev_kfree_skb(skb);
 718                goto out;
 719        }
 720
 721        /*
 722         * If frame the sequence number exceeds our buffering window
 723         * size release some previous frames to make room for this one.
 724         */
 725        if (!seq_less(mpdu_seq_num, head_seq_num + buf_size)) {
 726                head_seq_num = seq_inc(seq_sub(mpdu_seq_num, buf_size));
 727                /* release stored frames up to new head to stack */
 728                ieee80211_release_reorder_frames(sdata, tid_agg_rx,
 729                                                 head_seq_num);
 730        }
 731
 732        /* Now the new frame is always in the range of the reordering buffer */
 733
 734        index = seq_sub(mpdu_seq_num, tid_agg_rx->ssn) % tid_agg_rx->buf_size;
 735
 736        /* check if we already stored this frame */
 737        if (tid_agg_rx->reorder_buf[index]) {
 738                dev_kfree_skb(skb);
 739                goto out;
 740        }
 741
 742        /*
 743         * If the current MPDU is in the right order and nothing else
 744         * is stored we can process it directly, no need to buffer it.
 745         * If it is first but there's something stored, we may be able
 746         * to release frames after this one.
 747         */
 748        if (mpdu_seq_num == tid_agg_rx->head_seq_num &&
 749            tid_agg_rx->stored_mpdu_num == 0) {
 750                tid_agg_rx->head_seq_num = seq_inc(tid_agg_rx->head_seq_num);
 751                ret = false;
 752                goto out;
 753        }
 754
 755        /* put the frame in the reordering buffer */
 756        tid_agg_rx->reorder_buf[index] = skb;
 757        tid_agg_rx->reorder_time[index] = jiffies;
 758        tid_agg_rx->stored_mpdu_num++;
 759        ieee80211_sta_reorder_release(sdata, tid_agg_rx);
 760
 761 out:
 762        spin_unlock(&tid_agg_rx->reorder_lock);
 763        return ret;
 764}
 765
 766/*
 767 * Reorder MPDUs from A-MPDUs, keeping them on a buffer. Returns
 768 * true if the MPDU was buffered, false if it should be processed.
 769 */
 770static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx)
 771{
 772        struct sk_buff *skb = rx->skb;
 773        struct ieee80211_local *local = rx->local;
 774        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
 775        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
 776        struct sta_info *sta = rx->sta;
 777        struct tid_ampdu_rx *tid_agg_rx;
 778        u16 sc;
 779        u8 tid, ack_policy;
 780
 781        if (!ieee80211_is_data_qos(hdr->frame_control))
 782                goto dont_reorder;
 783
 784        /*
 785         * filter the QoS data rx stream according to
 786         * STA/TID and check if this STA/TID is on aggregation
 787         */
 788
 789        if (!sta)
 790                goto dont_reorder;
 791
 792        ack_policy = *ieee80211_get_qos_ctl(hdr) &
 793                     IEEE80211_QOS_CTL_ACK_POLICY_MASK;
 794        tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK;
 795
 796        tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
 797        if (!tid_agg_rx)
 798                goto dont_reorder;
 799
 800        /* qos null data frames are excluded */
 801        if (unlikely(hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_NULLFUNC)))
 802                goto dont_reorder;
 803
 804        /* not part of a BA session */
 805        if (ack_policy != IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK &&
 806            ack_policy != IEEE80211_QOS_CTL_ACK_POLICY_NORMAL)
 807                goto dont_reorder;
 808
 809        /* not actually part of this BA session */
 810        if (!(status->rx_flags & IEEE80211_RX_RA_MATCH))
 811                goto dont_reorder;
 812
 813        /* new, potentially un-ordered, ampdu frame - process it */
 814
 815        /* reset session timer */
 816        if (tid_agg_rx->timeout)
 817                tid_agg_rx->last_rx = jiffies;
 818
 819        /* if this mpdu is fragmented - terminate rx aggregation session */
 820        sc = le16_to_cpu(hdr->seq_ctrl);
 821        if (sc & IEEE80211_SCTL_FRAG) {
 822                skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME;
 823                skb_queue_tail(&rx->sdata->skb_queue, skb);
 824                ieee80211_queue_work(&local->hw, &rx->sdata->work);
 825                return;
 826        }
 827
 828        /*
 829         * No locking needed -- we will only ever process one
 830         * RX packet at a time, and thus own tid_agg_rx. All
 831         * other code manipulating it needs to (and does) make
 832         * sure that we cannot get to it any more before doing
 833         * anything with it.
 834         */
 835        if (ieee80211_sta_manage_reorder_buf(rx->sdata, tid_agg_rx, skb))
 836                return;
 837
 838 dont_reorder:
 839        skb_queue_tail(&local->rx_skb_queue, skb);
 840}
 841
 842static ieee80211_rx_result debug_noinline
 843ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
 844{
 845        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
 846        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
 847
 848        /* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */
 849        if (rx->sta && !is_multicast_ether_addr(hdr->addr1)) {
 850                if (unlikely(ieee80211_has_retry(hdr->frame_control) &&
 851                             rx->sta->last_seq_ctrl[rx->seqno_idx] ==
 852                             hdr->seq_ctrl)) {
 853                        if (status->rx_flags & IEEE80211_RX_RA_MATCH) {
 854                                rx->local->dot11FrameDuplicateCount++;
 855                                rx->sta->num_duplicates++;
 856                        }
 857                        return RX_DROP_UNUSABLE;
 858                } else
 859                        rx->sta->last_seq_ctrl[rx->seqno_idx] = hdr->seq_ctrl;
 860        }
 861
 862        if (unlikely(rx->skb->len < 16)) {
 863                I802_DEBUG_INC(rx->local->rx_handlers_drop_short);
 864                return RX_DROP_MONITOR;
 865        }
 866
 867        /* Drop disallowed frame classes based on STA auth/assoc state;
 868         * IEEE 802.11, Chap 5.5.
 869         *
 870         * mac80211 filters only based on association state, i.e. it drops
 871         * Class 3 frames from not associated stations. hostapd sends
 872         * deauth/disassoc frames when needed. In addition, hostapd is
 873         * responsible for filtering on both auth and assoc states.
 874         */
 875
 876        if (ieee80211_vif_is_mesh(&rx->sdata->vif))
 877                return ieee80211_rx_mesh_check(rx);
 878
 879        if (unlikely((ieee80211_is_data(hdr->frame_control) ||
 880                      ieee80211_is_pspoll(hdr->frame_control)) &&
 881                     rx->sdata->vif.type != NL80211_IFTYPE_ADHOC &&
 882                     rx->sdata->vif.type != NL80211_IFTYPE_WDS &&
 883                     (!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_ASSOC)))) {
 884                /*
 885                 * accept port control frames from the AP even when it's not
 886                 * yet marked ASSOC to prevent a race where we don't set the
 887                 * assoc bit quickly enough before it sends the first frame
 888                 */
 889                if (rx->sta && rx->sdata->vif.type == NL80211_IFTYPE_STATION &&
 890                    ieee80211_is_data_present(hdr->frame_control)) {
 891                        unsigned int hdrlen;
 892                        __be16 ethertype;
 893
 894                        hdrlen = ieee80211_hdrlen(hdr->frame_control);
 895
 896                        if (rx->skb->len < hdrlen + 8)
 897                                return RX_DROP_MONITOR;
 898
 899                        skb_copy_bits(rx->skb, hdrlen + 6, &ethertype, 2);
 900                        if (ethertype == rx->sdata->control_port_protocol)
 901                                return RX_CONTINUE;
 902                }
 903
 904                if (rx->sdata->vif.type == NL80211_IFTYPE_AP &&
 905                    cfg80211_rx_spurious_frame(rx->sdata->dev,
 906                                               hdr->addr2,
 907                                               GFP_ATOMIC))
 908                        return RX_DROP_UNUSABLE;
 909
 910                return RX_DROP_MONITOR;
 911        }
 912
 913        return RX_CONTINUE;
 914}
 915
 916
 917static ieee80211_rx_result debug_noinline
 918ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
 919{
 920        struct sk_buff *skb = rx->skb;
 921        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
 922        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
 923        int keyidx;
 924        int hdrlen;
 925        ieee80211_rx_result result = RX_DROP_UNUSABLE;
 926        struct ieee80211_key *sta_ptk = NULL;
 927        int mmie_keyidx = -1;
 928        __le16 fc;
 929
 930        /*
 931         * Key selection 101
 932         *
 933         * There are four types of keys:
 934         *  - GTK (group keys)
 935         *  - IGTK (group keys for management frames)
 936         *  - PTK (pairwise keys)
 937         *  - STK (station-to-station pairwise keys)
 938         *
 939         * When selecting a key, we have to distinguish between multicast
 940         * (including broadcast) and unicast frames, the latter can only
 941         * use PTKs and STKs while the former always use GTKs and IGTKs.
 942         * Unless, of course, actual WEP keys ("pre-RSNA") are used, then
 943         * unicast frames can also use key indices like GTKs. Hence, if we
 944         * don't have a PTK/STK we check the key index for a WEP key.
 945         *
 946         * Note that in a regular BSS, multicast frames are sent by the
 947         * AP only, associated stations unicast the frame to the AP first
 948         * which then multicasts it on their behalf.
 949         *
 950         * There is also a slight problem in IBSS mode: GTKs are negotiated
 951         * with each station, that is something we don't currently handle.
 952         * The spec seems to expect that one negotiates the same key with
 953         * every station but there's no such requirement; VLANs could be
 954         * possible.
 955         */
 956
 957        /*
 958         * No point in finding a key and decrypting if the frame is neither
 959         * addressed to us nor a multicast frame.
 960         */
 961        if (!(status->rx_flags & IEEE80211_RX_RA_MATCH))
 962                return RX_CONTINUE;
 963
 964        /* start without a key */
 965        rx->key = NULL;
 966
 967        if (rx->sta)
 968                sta_ptk = rcu_dereference(rx->sta->ptk);
 969
 970        fc = hdr->frame_control;
 971
 972        if (!ieee80211_has_protected(fc))
 973                mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb);
 974
 975        if (!is_multicast_ether_addr(hdr->addr1) && sta_ptk) {
 976                rx->key = sta_ptk;
 977                if ((status->flag & RX_FLAG_DECRYPTED) &&
 978                    (status->flag & RX_FLAG_IV_STRIPPED))
 979                        return RX_CONTINUE;
 980                /* Skip decryption if the frame is not protected. */
 981                if (!ieee80211_has_protected(fc))
 982                        return RX_CONTINUE;
 983        } else if (mmie_keyidx >= 0) {
 984                /* Broadcast/multicast robust management frame / BIP */
 985                if ((status->flag & RX_FLAG_DECRYPTED) &&
 986                    (status->flag & RX_FLAG_IV_STRIPPED))
 987                        return RX_CONTINUE;
 988
 989                if (mmie_keyidx < NUM_DEFAULT_KEYS ||
 990                    mmie_keyidx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS)
 991                        return RX_DROP_MONITOR; /* unexpected BIP keyidx */
 992                if (rx->sta)
 993                        rx->key = rcu_dereference(rx->sta->gtk[mmie_keyidx]);
 994                if (!rx->key)
 995                        rx->key = rcu_dereference(rx->sdata->keys[mmie_keyidx]);
 996        } else if (!ieee80211_has_protected(fc)) {
 997                /*
 998                 * The frame was not protected, so skip decryption. However, we
 999                 * need to set rx->key if there is a key that could have been
1000                 * used so that the frame may be dropped if encryption would
1001                 * have been expected.
1002                 */
1003                struct ieee80211_key *key = NULL;
1004                struct ieee80211_sub_if_data *sdata = rx->sdata;
1005                int i;
1006
1007                if (ieee80211_is_mgmt(fc) &&
1008                    is_multicast_ether_addr(hdr->addr1) &&
1009                    (key = rcu_dereference(rx->sdata->default_mgmt_key)))
1010                        rx->key = key;
1011                else {
1012                        if (rx->sta) {
1013                                for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
1014                                        key = rcu_dereference(rx->sta->gtk[i]);
1015                                        if (key)
1016                                                break;
1017                                }
1018                        }
1019                        if (!key) {
1020                                for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
1021                                        key = rcu_dereference(sdata->keys[i]);
1022                                        if (key)
1023                                                break;
1024                                }
1025                        }
1026                        if (key)
1027                                rx->key = key;
1028                }
1029                return RX_CONTINUE;
1030        } else {
1031                u8 keyid;
1032                /*
1033                 * The device doesn't give us the IV so we won't be
1034                 * able to look up the key. That's ok though, we
1035                 * don't need to decrypt the frame, we just won't
1036                 * be able to keep statistics accurate.
1037                 * Except for key threshold notifications, should
1038                 * we somehow allow the driver to tell us which key
1039                 * the hardware used if this flag is set?
1040                 */
1041                if ((status->flag & RX_FLAG_DECRYPTED) &&
1042                    (status->flag & RX_FLAG_IV_STRIPPED))
1043                        return RX_CONTINUE;
1044
1045                hdrlen = ieee80211_hdrlen(fc);
1046
1047                if (rx->skb->len < 8 + hdrlen)
1048                        return RX_DROP_UNUSABLE; /* TODO: count this? */
1049
1050                /*
1051                 * no need to call ieee80211_wep_get_keyidx,
1052                 * it verifies a bunch of things we've done already
1053                 */
1054                skb_copy_bits(rx->skb, hdrlen + 3, &keyid, 1);
1055                keyidx = keyid >> 6;
1056
1057                /* check per-station GTK first, if multicast packet */
1058                if (is_multicast_ether_addr(hdr->addr1) && rx->sta)
1059                        rx->key = rcu_dereference(rx->sta->gtk[keyidx]);
1060
1061                /* if not found, try default key */
1062                if (!rx->key) {
1063                        rx->key = rcu_dereference(rx->sdata->keys[keyidx]);
1064
1065                        /*
1066                         * RSNA-protected unicast frames should always be
1067                         * sent with pairwise or station-to-station keys,
1068                         * but for WEP we allow using a key index as well.
1069                         */
1070                        if (rx->key &&
1071                            rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP40 &&
1072                            rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP104 &&
1073                            !is_multicast_ether_addr(hdr->addr1))
1074                                rx->key = NULL;
1075                }
1076        }
1077
1078        if (rx->key) {
1079                if (unlikely(rx->key->flags & KEY_FLAG_TAINTED))
1080                        return RX_DROP_MONITOR;
1081
1082                rx->key->tx_rx_count++;
1083                /* TODO: add threshold stuff again */
1084        } else {
1085                return RX_DROP_MONITOR;
1086        }
1087
1088        switch (rx->key->conf.cipher) {
1089        case WLAN_CIPHER_SUITE_WEP40:
1090        case WLAN_CIPHER_SUITE_WEP104:
1091                result = ieee80211_crypto_wep_decrypt(rx);
1092                break;
1093        case WLAN_CIPHER_SUITE_TKIP:
1094                result = ieee80211_crypto_En="L1078">1078        if (href="+code=rx" class="sref">rxfass="line211/rx.c#L1085" id="L1085" class="line" name="L1092">1092  RX_DROP_MOeyidx]);
10CCM/a>        case WLAN_CI6">1086fc)) {
f211/rx.c#L1057" id="L1057" class="line" name="L1094">1094                result = resul_decrypt" class="sref">ieee80211_crypto_En="L1078">1078        if (href="ame="L1087t">/*
211/rx.c#L1058" id="L1058" class="line" name="L1092">1092  "sref">cipr, we
10AES_CMACa>        case WLAN_1ould have 1een
1094                result = resul_decrypt" class="sref">ieee80211_crypto_En="L1078">1078        if (href14d6251c2941d2_3/1000">10921been expec1ed.
WLAN_1o3en expec1e   break;
1065                                                rxfass="1c802110rx.c#L1035" id="L1035" class="line" name="L103/a>1035  ?!                        /* TODO: add threshold1name="L1001">1006
1048                        return /* TODO: add threshold1n8me="L1001"">/*
)))
10dr vari1036/* TODO: add threshold1class="sre1">key;
     0class="comment">/* TODO: add threshold1c3en expec1sta) {
(1042                    (status|     flag & /* TODO: add threshold1ass="sref"1i++) {
i]);
10name="L1094">1094          =omment">/* TODO: add threshold1a6ss="sref1">key)
1094de=result"rx_name="x.c#L   1094debug_noin)1         }
10_more              struct 10_more     _decr" class="line" name="L1004">1004rx_             struct ieee80211_crypto_En="L1087" id="L1087" class="line"1ass="sref"1key) {
++) {
1004locaclass="sref">hdr1004">1004locac0211_sub_if_data" clalocaclass="sref">hdrlocac0211=omment">/* TODO: add threshold1class="sre1">i]);
1004s="sref">is_multic1004">1004s="0211_sub_if_data" clas="sref">is_multicast_eth=omment">/* TODO: add threshold1c3en expec1">key)
/* TODO: add threshold1css="sref"1    break;
hdrlocac0211ta *sdata = hdrlocac0211=omment">/* TODO: add threshold1c6ss="sref1         }
 *sdata = /* TODO: add threshold1c         1">key)
is_multicast_ethta1004s="sref">is_multic1004">1004s="0211_s)iub_if_data" claf="+code=rx" class="sref"/a>->rx->key;
hdrlocac0211>rx->RX_CO1TINUE;
1043                        return ;
 9961042     e="L996"> 996is_multicast_ether_addr(hdr->1s="comment1>/*
/* Broadcast/multicast robust managemen113ss="sref"1 be
1043                        return 
 is_             struct is_multicast_ether_addr(hdr->1s         1te.
1048                        return 
 996is_multicast_ether_addr(hdr->.
     bufoere /* TODO: add threshold1          1 */
hdrlocac0211>rx-> *1094falsh1048                        return RX_CO1TINUE;
1044
    , leent">   request a new class=from pan A>/* Broadcast/multicast robust managemen11class="sre1">fc);
hdrlocac0211>rx->rcu_dereference(rx<"L1078">1078        if (href1name="L1041">1046
1drlen)
1048                        return 1049
10ap_ref">s_refr"L1094">1094ap_ref">s_refr"_decr" class="line" name="Lref"info">1042        "info0211_sub_if_data" claf="+code=rx" class="sref">rx->

1004                struct ieee80211_sub_if_data *rx->rx->
1004locaclass="sref">hdr1004">1004locac0211_sub_if_data" clalocaclass="sref">hdrlocac0211ta *rx->hdrlocac0211=omment">/* TODO: add threshold1"sref">key1d, 1);
iatomic"in"_decrrx->1042     bs2>rx->s">1042     num_ref">s>rx<"L1078">1078        if (href1name="L1051">1056
rx->        case rx<"L1078">1078        if (href1ns="sref">1 */
hdrlocac0211/a>->is_multicaw0211y->key->1004HW_AP_LINK_PSe=key" class="sIEEE">1004HW_AP_LINK_PSref==KEY_FLAG_TAINTED" class="sref">1class="sre1">sta)
sdatarv_ref"ommen=ast_ether_addr" claslocaclass="sref">hdrlocac0211>rx->rx<>rx->        case STA_NOTIFY_SLEE/>rx<>rrx->L1078">1078        if (href1="sref">ke1idx]);
s_dbatus" class="sre"s_dbaast_ether_addr" clasf="+code=rx" class="sref">rx<>rx" class="lin" ca at>"STA nt"7;pM aid nt"7;d ametrs1power s">10mcla\n"Broadca,1078">1078        if (href1=="comment1">1060
rx->->rx->rx->->1078        if (href1=p_get_key1 */
) {
10ap_ref">s_endL1094">1094ap_ref">s_end_decr" class="line" name="Lref"info">1042        "info0211_sub_if_data" claf="+code=rx" class="sref">rx->1064
s_dbatus" class="sre"s_dbaast_ether_addr" clasf="+code=rx" class="sref">rx->rx<>rx" class="lin" ca at>"STA nt"7;pM aid nt"7;d axits1power s">10mcla\n"Broadca,1078">1078        if (href1=ame="L1051 be
rx->->rx->rx->->1078        if (href1=s="sref">1ys,
->rx->.
s_dbatus" class="sre"s_dbaast_ether_addr" clasf="+code=rx" class="sref">rx->rx<>rx" class="lin" ca at>"STA nt"7;pM aid nt"7;d s="com-ps-blocked\n"Broadca,1078">1078        if (href1f">key1&&
rx->->rx->rx->->1078        if (href1fp_get_key1&&
1078        if (href1fss="sref"1&&
1ddr1))
s_del"com_wakeup         struct s_del"com_wakeupast_ether_addr" clasf="+code=rx" class="sref">L1078">1078        if (href1f="comment1         }
1076        }
1077
s_transi             struct s_transi    _decr" class="line" name="L rx->hdrbo c0211_ub_if_data" claf="r"L1094">1094refr"_dec>rx->) {
))
1042        "info0211_sub_if_data" claf=""inf">1042        "inf0211ta *r" class="line" name="Lref"info">1042        "info0211>rx->L1078">1078        if (href1>RX_DROP_M1NITOR;
hdrbo c0211_ub_if_data" clain">s">1042     in">s0211=omment">/* TODO: add threshold1name="L1081">1081
/* TODO: add threshold1nss="sref"1unt++;
(1042        "inf0211/a>->hdrlocac0211/a>->is_multicaw0211y->key->1004HW_AP_LINK_PSe=key" class="sIEEE">1004HW_AP_LINK_PSref==K=omment">/* TODO: add threshold1ns="sref">1 */
     1  } else {
1035 emmensecomw* Broadcast/multicast robust managemen11>RX_DROP_M1NITOR;
s">1042     in">s0211ta *1042        "inf0211>rx->        case rx<"L1078">1078        if (href186">1086        }
1094refr"_deca>->s">1042     in">s0211) ||class="line" name="L1r"L1094">1094refr"_deca>->s">1042     in">s0211)>rx->1087
/* TODO: add threshold1nss="sref"1her) {
:
->1094refr"_dec>rx->:
s_refr"L1094">1094ap_ref">s_refr"_decrther_addr" clasf=""inf">1042        "inf0211"L1078">1078        if (href1class="sre1">rx);
1078        if (href1css="sref"1    break;
10ap_ref">s_endL1094">1094ap_ref">s_end_decrther_addr" clasf=""inf">1042        "inf0211"L1078">1078        if (href1cs="sref">1_TKIP:
rxfass="1ine2119rx.c#L1015" i"line" 0L1078">1078        if (href1cRX_DROP_M1eyidx]);
1086fc)) {
f211/rx.c#ss="line" name=EXPORT_SYMBO+code=key" classEXPORT_SYMBO+_decrther_addr" clas=s_transi             struct s_transi    _dec"L1078">1078        if (href1came="L1081t">/*
211911/rx.c#L988" id="L988" class="lin11 "sref">ci1r, we
1094de=result"rx_name="x.c#L   1094debug_noin
ieee80211_crypto_En="L1087" id="L1087" class="line"24d6251c2942d2_3/1000">
1004                struct ieee80211_sub_if_data *rcu_dereference(rx1078        if (href2o3en expec2e   break;
1004s="sref">is_multic1004">1004s="0211_sub_if_data" clas="sref">is_multicast_ethta *rcu_dereference(->rx->1004rx_f="042">1042     1004">1004rx_f="0420211_sub_if_data" claf="042">1042               ta *1004SKB_RXCBe=key" class="sIEEE">1004SKB_RXCB_decrther_addr" clasce" class="sref">rcu_dereference(1078        if (href2l5ss="sref2>lass="sref">rxfass="2c802120rx.c#L1015" i" class="line" nametkeyidx" class="srt/a> + 3,"ame="L1048">10a" class="sref">iac>rx->1006
1062                if (!1042                    (->1004RX_RA_MATCHe=key" class="sIEEE">1004RX_RA_MATCH0211)>rx->/*
)))
->rx->1042     vif0211y->1094typhx.c#L.1004IFTYPE_A/a>        case NL">1004IFTYPE_A/_deca>->key;
rx->1042     vif0211y->1094typhx.c#L.1004IFTYPE_A/_VLAN               NL">1004IFTYPE_A/_VLAN_En="L1087" id="L1087" class="line"2          2    else {
1048                        return ++) {
1065                        i]);
h statsnt">    1powers">1, so    1035                        key)
     (mmenlat * (       1035                        to        < sin/a>mmey1035h statd.)                        )2         }
->rx->hdrlocac0211/a>->is_multicaw0211y->key->1004HW_AP_LINK_PSe=key" class="sIEEE">1004HW_AP_LINK_PSref==st/multicast robust managemen12ass="sref"2key) {
1043                        return ++) {
i]);
key)
1035    1is>10351uAPSD d="L,ommens">    1willmprobablymmenmarked asleep     * sent with pairwise or station-t2          2         }
    1mustmmensrefused ..    * but for WEP we allow using a key2c6ss="sref2         }
key)
1062                if (!rx->        case rx<"=st/multicast robust managemen12a8me="L1002">key;
RX_CO2TINUE;
->1079                if (is_multicast_ether_addr(hdr->.     2  } else {
1062                if (!rx->        case .1062                if (!rx->./*
s_del"com_pol<_namponshre094">1094=s_del"com_pol<_namponshast_ether_addr" clas"L1062">1062                if (!1078        if (href23ss="sref"2 be
1078        if (href20         2 we
1062                if (!rx->1078        if (href236ss="sref29;t

     -. * Broadcast/multicast robust managemen12s flag is 2et?
rcu_dereference(1078        if (href2          2 */
)2&&
1048flag &QUEU"s 996 996is_multicast_ether_addr(hdr->->RX_CO2TINUE;
1042                    (->1004RX_DEFERRED_RELEAS                IEEE">1004RX_DEFERRED_RELEAS ref==a>->1044
 996 996is_multicast_ether_addr(hdr->->fc);
 is_ref"_qod  if (is_multicast_ether_addr(hdr->1046
 is_qod_nullfun" class="sref">ie="L996"> is_qod_nullfun"  if (is_multicast_ether_addr(hdr->.2drlen)
 g  _qod_ct<         struct is_multicast_eth)/a>->1004QOS_CTL_TID_MASK               IEEE">1004QOS_CTL_TID_MASKiac>rx<      ie="L996_1d_211a">rx<[0ss="line" nametkeyidx" class="srt/a> +  a>->7]ref="+code=RX_CONTINUE" class="2name="L1042">1049

RX_CO2 */
10 a separ> emmitmap of8trigger-   * but for WEP we allow using a key2e         2d, 1);
to pan ACs, so mmey1035alwaysommensass    * but for WEP we allow using a key2e         2">1056
2 */
1062                if (!rx->->1079       apsd_queueskey->iac>rx<)=Ka>.sta)
ke2idx]);
1060
period,ado  clcomm10 Broadcast/multicast robust managemen12=p_get_key2 */
->1062                if (!rx->        case ) {
RX_CO2idx]);
1064
1062                if (!rx->.s_del"com_ apsdre094">1094=s_del"com_ apsdast_ether_addr" clas"L1062">1062                if (!1078        if (href2=ame="L1052 be
1078        if (href2=s="sref">2ys,
1062                if (!rx->1078        if (href2=lass="sre2ll.
key2&&
2ddr1))
1094de=result"rx_name="x.c#L   1094debug_noinroces2">1042     =roces2ast_e" class="line" name="L ieee80211_crypto_En="L1087" id="L1087" class="line"2f="comment2         }
1076        }
1042        "info0211_sub_if_data" claf="+code=rx" class="sref"ta *rcu_dereference(2">1077
 *sdata = /* TODO: add threshold2ass="sref"2key) {
1004rx_f="042">1042     1004">1004rx_f="0420211_sub_if_data" claf="042">1042               ta *1004SKB_RXCBe=key" class="sIEEE">1004SKB_RXCB_decrther_addr" clasf="+code=rx" class="sref""L1078">1078        if (href2EY_FLAG_TA2NTED))
1004s="sref">is_multic1004">1004s="0211_sub_if_data" clas="sref">is_multicast_ethta1004s="sref">is_multic1004">1004s="0211_s)ther_addr" clasf="+code=rx" class="sref"/a>->rx->RX_DROP_M2NITOR;
1081
++;
2 */
     2  } else {
 emid=t4rx"="L9sspanIBSS packets which"ant"spanmmencurr clBroadcast/multicast robust managemen12>6">1076        }
to avoid keepomm1mmencurr clnIBSS st work al"co"in d="LsBroadcast/multicast robust managemen12>s="sref">2">1087
rt usomm1difoereclnBSSID    * but for WEP we allow using a key2nss="sref"2her) {
:
->rcu_dereference(rx->1042     vif0211y->1094typhx.c#L=/a>.1004IFTYPE_ADHOCre094">1094NL">1004IFTYPE_ADHOC_eth)//a>.:
1094u80211_sub_if_data" clabsskeyidx" class="srbsske>rx<      is_multicast_eth>rx->rcu_dereference(->rx);
.1004IFTYPE_ADHOCre094">1094NL">1004IFTYPE_ADHOC_eth)ref="+code=RX_CONTINUE" class="2css="sref"2    break;
->hdremmer_ltic_equac  if (rcu_dereference(rx(1094u0211y->1042     ibs2>rx->2_TKIP:
rx->rx<      rxfass="2ine2129rx.c#L1065" id="L1065" class=" cl-> is_             struct is_multicast_ether_addr(hdr->.]);
rx-> e_idx         structld=t4rx_r> e_idx>rx<      1042                    (1076fc)) {
f2129rx.c#L1007" id="L10075" c106844444444    if (!rx-> e_=status" class="sreid=t4rx_r> e_=sta>rx<      1042                    (2t">/*
2129rx.c#L1058" id="L1058iiiL1068d="L1086" class="line" name="L12 "sref">ci2r, we
is_multicast_ether_addr(is_multicltic1ref==K.toBroadcast/multicast robust managemen13b3en expec3e   break;
    1when >roces2ed    * but for WEP we allow using a key3lass="sref3>NULL;
lass="sref">rxfass="3c802130rx.c#L1065" id="L1065    if (!rx->rx<      yidx]);
-> is_             struct is_multicast_ether_addr(hdr->.1006
rx-> e_idx         structld=t4rx_r> e_idx>rx<      1042                    (/*
rx-> e_=status" class="sreid=t4rx_r> e_=sta>rx<      1042                    (key;
1042                    (->1004RX_RA_MATCHe=key" class="sIEEE">1004RX_RA_MATCH0211)>rx->) {
++) {
i]);
->rcu_dereference(rx->1042     vif0211y->1094typhx.c#L=/a>.1004IFTYPE_STATION               NL">1004IFTYPE_STATIONref""L1081" id="L1081" class="line"3c6ss="sref3">key)
->    "rx_ommen="sref">sdata    "rx_ommen=ast_ether_addr" clasce" class="sref">rcu_dereference(rx<>rx->is_multicast_eth)ref="+code=RX_CONTINUE" class="3aame="L1003    break;
rx->rx->1079      rx_bytesx.c#L+a *sdata = ->) {
1042                    (.++) {
rx->hdrld=t4signac>rx<      1042                    (hdrsignac>rxi]);
hdrewma_ltiast_ea>-&g" class="line" f="+code=rx" class="sref">rx->hdravg4signac>rx<>r-ss="line" name=f="042">1042                    (hdrsignac>rx<)ref="+code=RX_CONTINUE" class="3c3en expec3">key)
omm1mcla"="L9sacommenen* of8a -Broadcast/multicast robust managemen13came="L1003">key)
key;
)3         }
rx->hdrlocac0211/a>->is_multicaw0211y->key->1004HW_AP_LINK_PSe=key" class="sIEEE">1004HW_AP_LINK_PSref==a>->RX_CO3TINUE;
 996 996is_multicast_ether_addr(hdr->->     3  } else {
1042                    (->1004RX_DEFERRED_RELEAS                IEEE">1004RX_DEFERRED_RELEAS ref==a>->rcu_dereference(rx->1042     vif0211y->1094typhx.c#L=/a>.1004IFTYPE_A/a>        case NL">1004IFTYPE_A/_deca||L1049" id="L1049" class="line"303en expec3>/*
rcu_dereference(rx->1042     vif0211y->1094typhx.c#L=/a>.1004IFTYPE_A/_VLAN               NL">1004IFTYPE_A/_VLAN_En="K.
->rx->        case rx<"=.

-&wake transi    s1mmat ar-Broadcast/multicast robust managemen13s         3te.
    ,ommens">ndar Broadcast/multicast robust managemen130lass="sre3uld


-&wake transi    "spanmmenprobe request     * sent with pairwise or station-t3          3 */
)3&&
))
-> is_             struct is_multicast_ether_addr(hdr->->RX_CO3TINUE;
 996 996is_multicast_ether_addr(hdr->1044
->s_endL1094">1094ap_ref">s_end_decrther_addr" clasf="+code=rx" class="sref")ref="+code=RX_CONTINUE" class="3r6ss="sref3">fc);
1046
-> 996 996is_multicast_ether_addr(hdr->->s_sefr"L1094">1094ap_ref">s_refr"_decrther_addr" clasf="+code=rx" class="sref")ref="+code=RX_CONTINUE" class="3r us which3 */
1049
/*

     sil clly, sin/a>mmeyBroadcast/multicast robust managemen13eef">RX_CO3 */
    1power s">omm1mcla    * but for WEP we allow using a key3e         3d, 1);
-> is_nullfun" class="sref">ie="L996"> is_nullfun"  if (is_multicast_ether_addr(hdr->1056
 is_qod_nullfun" class="sref">ie="L996"> is_qod_nullfun"  if (is_multicast_ether_addr(hdr->.3 */
1094I=ci_DEBUG_INCast_ether_addr" clasce" class="sref">rcu_dereference(hdrlocac0211/a>->irx_h statrs_ rop_nullfun"ref")ref="+code=RX_CONTINUE" class="3class="sre3">sta)
ke3idx]);
1060
   =from"a STA>roadcast/multicast robust managemen13=p_get_key3 */
) {
pd"t"> _doadcast/multicast robust managemen13=ef">RX_CO3idx]);
   =to pan monitpaninterfacs    * but for WEP we allow using a key3name="L1063">1064
/*
-> 996ie="L996"> 996is_multicast_ether_addr(hdr->->
rcu_dereference(rx->1042     vif0211y->1094typhx.c#L=/a>.1004IFTYPE_A/a>        case NL">1004IFTYPE_A/_deca||L1049" id="L1049" class="line"3=s="sref">3ys,
rcu_dereference(rx->1042     vif0211y->1094typhx.c#L=/a>.1004IFTYPE_A/_VLAN               NL">1004IFTYPE_A/_VLAN_En=a>->
rcu_dereference(rx(1094u0211y->1042     vl690211y->.
rx->1079      key3&&
1004rx_unexpected_4ltic_->1079      cfg">1004rx_unexpected_4ltic_-ast_eL1081" id="L1081" class="line"3fp_get_key3&&
rcu_dereference(rx(rx->rx->->a>.1094GFP_ATOMICref")ref="+code=RX_CONTINUE" class="3ss="sref">3ddr1))
NULL;
1076        }
3">1077
     packed    * but for WEP we allow using a key3ass="sref"3key) {
rx->irx_packetsref"++ref="+code=RX_CONTINUE" class="3>RX_DROP_M3NITOR;
rcu_dereference(1078        if (href3name="L1083">1081
1048flag &QUEU"s++;
3 */
     3  } else {
roces21* Broadcast/multicast robust managemen13E6">1076        }
s="sref">3">1087
1094in1004"rag" cl_ clr="sref">sdata "rag" cl_ clr=x.c#i*L1077" id="L1077" class="line"3>ss="sref"3her) {
1004re>) emble_ltilass="sref">hdr1004">1004re>) emble_lti_decr" class="line" name="L1004">1004sub_if_             struct rx<>a>.:
hdrrunsign   inss="line" name="Lseqode=rx" class="seqref">rinss="line" name="Lrx_queue class="sref">irx_queue>rx<>a>.:
rx);
1004"rag" cl_ clr="sref">sdata "rag" cl_ clr=x.c#i*="line" name="L clr="sref">sdata3_TKIP:
rxfass="3ine2139rx.c#ef="+code=RX_CONTINUE" class="3"RX_DROP_M3eyidx]);
rx(1094"rag" cl_nex">rx1076fc)) {
f2139rx.c#L1007" i="line" name="L clr="sref">sdata-&g" class="line" f="+code=rx" class="sref">rx(rx(1094"rag" cl_nex">rx<++]ref="+code=RX_CONTINUE" class="3"s="sref">3t">/*
2139rx.c#L1058" i" cl->rx(1094"rag" cl_nex">rx< efera *1004FRAGMENT_MAXre094">1094IEEE">1004FRAGMENT_MAXref""L1081" id="L1081" class="line"3Hss="sref"3r, we
rx(1094"rag" cl_nex">rx< = 0ref="+code=RX_CONTINUE" class="4ould have 4een
sdata-&g" class="line"  clr="sref">sdata(1094f="_lis"ref=="L1081" id="L1081" class="line"4been expec4ed.
i__fkb_queue_purge_decra>-&g" class="line"  clr="sref">sdata(1094f="_lis"ref==ref="+code=RX_CONTINUE" class="4o3en expec4e   break;
NULL;
hdr__fkb_queue_taic_decra>-&g" class="line"  clr="sref">sdata(1094f="_lis"ref=,_sub_if_data" claf="+code=rx" class="sref");80" class="line" name="L98no need spanlockomm10 Broadcast/multicast robust managemen14l5ss="sref4>lass="sref">rxfass="4c802140rx.c#L1065" isub_if_data" claf="+code=rx" class="sref"      rxyidx]);
sdata(->1079      first "rag_ti>-ref"      1006
sdata(/*
sdata(irx_queue>rx *irx_queue>rx
sdata(sdatarx *hdrsdata(1079      ccmp>rx< = 0ref="+code=RX_CONTINUE" class="4fd6251c2944">key;
sdata(rx< = 0ref="+code=RX_CONTINUE" class="4feen expec4    else {
sdata++) {
i]);
key)
1094in1004"rag" cl_ clr="sref">sdata "rag" cl_ clr=x.c#i*L1077" id="L1077" class="line"4aame="L1004    break;
1004re>) emble_findL1094">10941004">1004re>) emble_find_decr" class="line" name="L1004">1004sub_if_             struct rx<>a>.hdrrunsign   inss="line" name="Lseqode=rx" class="seqref">a>.irx_queue>rx<>i" class="line" name="L1004">1004s="sref">is_multic1004">1004s="0211_sub_if_data" clas="sref">is_multicast_eth"L1081" id="L1081" class="line"4ass="sref"4key) {
++) {
1004"rag" cl_ clr="sref">sdata "rag" cl_ clr=x.c#i*="line" name="L clr="sref">sdatai]);
sdatarx<>i="line" name="Lidx         structidx>rxkey)
rx(1094"rag" cl_nex">rx->sdatarx< = 0rs="line" name="Li"sref">sdatarx< <gt;1004FRAGMENT_MAXre094">1094IEEE">1004FRAGMENT_MAXref"rs="line" name="Li"sref">sdatarx<++K8/a>.1004s="sref">is_multic1004">1004s="0211_sub_if_data" claf4s="sref">is_multicf4s="0211ref="+code=RX_CONTINUE" class="4 ame="L1004">key)
key;
rx<--ref="+code=RX_CONTINUE" class="4 9me="L1004         }
->rx< <gt0"L1081" id="L1081" class="line"4ref">RX_CO4TINUE;
rx *1004FRAGMENT_MAXre094">1094IEEE">1004FRAGMENT_MAXref" - 1ref="+code=RX_CONTINUE" class="40     4  } else {
sdata-&g" class="line" f="+code=rx" class="sref">rx(rx<]ref="+code=RX_CONTINUE" class="403en expec4>/*
->sdata-&g" class="line"  clr="sref">sdata(1094f="_lis"ref== ||i="line" name="L clr="sref">sdata(
sdata(irx_queue>rxirx_queue>rx
sdata(sdatarxhdr
is_multicf4s="0211ta1004s="sref">is_multic1004">1004s="0211_s)ther_addr" clas clr="sref">sdata(1094f="_lis"ref=y->1094nex">rx->rx->

is_multicast_ether_addr(hdr->is_multicf4s="0211er_addr(hdr->->st/multicast robust managemen14Lss="sref"4TINUE;
key)
      cpu_to_le">_decr/a> *1004FCTL_FTYPEre094">1094IEEE">1004FCTL_FTYPEref=="t||L1049" id="L1049" class="line"4r         4">1044
hdremmer_ltic_equac  if (is_multicast_ether_addr(is_multicltic1ref=>i="line" name="Lf4s="sref">is_multicf4s="0211er_addr(is_multicltic1ref==t||L1049" id="L1049" class="line"4r6ss="sref4">fc);
hdremmer_ltic_equac  if (is_multicast_ether_addr(is_multicltic2ref=>i="line" name="Lf4s="sref">is_multicf4s="0211er_addr(is_multicltic2ref=="L1081" id="L1081" class="line"4r         4">1046
)
->-&afte"sref">is_multicti>-&afte"  if (sdata(->1079      first "rag_ti>-ref" + 21* ence(1079      HZref=="t/a>.1049
i__fkb_queue_purge_decra>-&g" class="line"  clr="sref">sdata(1094f="_lis"ref==ref="+code=RX_CONTINUE" class="4s="comment4>/*
sdataRX_CO4 */
rx1056

sta)
1094=1094debug_no=nke4idx]);
1094=1004rx_             struct rcu_de"L1081" id="L1081" class="line"4=="comment4">1060

1004s="sref">is_multic1004">1004s="0211_sub_if_data" clas="sref">is_multicast_ethref="+code=RX_CONTINUE" class="4= done alr4key) {
key)
      u16x.c#Lence(isc_ethref="+code=RX_CONTINUE" class="4=ef">RX_CO4idx]);
key)
      __le">_deci="line" name="Lf" class="sref">ifc_ethref="+code=RX_CONTINUE" class="4=         4">1064
hdrr   /*
1004"rag" cl_ clr="sref">sdata "rag" cl_ clr=x.c#i*="line" name="L clr="sref">sdata
1094f="x.c#ref="+code=RX_CONTINUE" class="4=lass="sre4ys,
1004rx_f="042">1042     1004">1004rx_f="0420211_sence(1042               ref="+code=RX_CONTINUE" class="4=lass="sre4ll.

is_multicast_ethta1004s="sref">is_multic1004">1004s="0211_s)ther_addr" clascode=sdata" class="sref">sdata = ->rx->key4&&
ifc_ethta *is_multicast_ether_addr(hdr->->-> is_ctclass="sref">hdre="L996"> is_ctc  if (ifc_eth="L1081" id="L1081" class="line"4ss="sref">4ddr1))
NULL;
isc_ethta *_to_cpu"sref">sdata_to_cpu  if (is_multicast_ether_addr(hdrseq_ctrcref==ref="+code=RX_CONTINUE" class="476">1076        }
hdrisc_ethta>->1004SCTL_FRAGre094">1094IEEE">1004SCTL_FRAG1077
) {
 *sdata 996 996ifc_eth=a>->hdr))
is_multicast_ether_addr(is_multicltic1ref=)=K8/a>.RX_DROP_M4NITOR;
1081
1094oul++;
4 */
1094I=ci_DEBUG_INCast_ether_addr" clasce" class="sref">rcu_dereference(hdrlocac0211/a>->->1094f="_linearizhast_ether_addr" clasce" class="sref">rcu_dereference(1076        }
1087
) {
:
rx);
4_TKIP:
is_multicast_ethta1004s="sref">is_multic1004">1004s="0211_s)ther_addr" clascode=sdata" class="sref">sdata = ->rx->     4class="sref">rxfass="4ine21495x.c#L1007" i="line" name="Lfeqode=rx" class="seqref"   l->isc_ethta>->1004SCTL_SEQre094">1094IEEE">1004SCTL_SEQ_eth=a>>-&>>-& 4/a>->]);
1076fc)) {
f2149rx.c#L1007" i" cl->hdr.4t">/*
2149rx.c#L1058" id="L1058;" class="line" name="L98Tmis is5mmen"irst rrag" cl of annew -. * Broadcast/multicast robust managemen14css="sref"4r, we
sdata1004re>) emble_ltilass="sref">hdr1004">1004re>) emble_lti_decrther_addr" clascode=sdata" class="sref">sdata = rx<>s="line" name="L"raglass="sref">hdrr   a>.
sdata = ra>-&gether_addr" clasce" class="sref">rcu_dereference(->->rcu_dereference(sdata-&ga>->rcu_dereference(sdata(is_multicciphe"ref"  = ->        case -&ga>-&ga>->rx);
 996 996ifc_eth="t/a>.iqueue>rx *sdata = rx->lass="sref">rxfass="5c802150rx.c#L1035" id="L1035" class="line" name="L111111111* rrag" cl h   6"sequential PN valu-. * Broadcast/multicast robust managemen15l6ss="sref5>yidx]);
->sdata(1079      ccmp>rx< = 1ref="+code=RX_CONTINUE" class="5name="L1005">1006
(sdatasdata(a>./*
(rcu_dereference(sdata(sdata->1079      ccmp>rx->rx<[0ss="line" namequeue class="sref">iqueue>rx<]>a>.
(key;
1048flag &QUEU"s++) {
   =tmat should alre>dyibe pendomm1inBroadcast/multicast robust managemen15class="sre5">i]);
key)
_decL1053" id="L1053" class="line" * Broadcast/multicast robust managemen15aame="L1005    break;
sdata1004re>) emble_findL1094">10941004">1004re>) emble_find_decrther_addr" clascode=sdata" class="sref">sdata = rx<>s="line" name="L"raglass="sref">hdrr   a>.(sdata = r="line" name="Ls="sref">is_multicast_eth=ref="+code=RX_CONTINUE" class="5f9me="L1005         }
sdata.) {
1094I=ci_DEBUG_INCast_ether_addr" clasce" class="sref">rcu_dereference(hdrlocac0211/a>->++) {
1048i]);
key)
->sdata(1079      ccmp>rx<"t/a>.key)
sdatarxkey;
sdatarxiqueue>rxRX_CO5TINUE;
rcu_dereference(sdatarcu_dereference(sdata(is_multicciphe"ref" !          5  } else {
;
sdatasdata(3ence(sdatarx< = ence(sdatarx< &fera<0rs="line" name="Li"sref">sdatarx<--"t/a>.
rx<[0ss="line" namei"sref">sdatarx<]++ref="+code=RX_CONTINUE" class="53         5 we
sdatarx<]"L1081" id="L1081" class="line"506ss="sref59;t
kref="+code=RX_CONTINUE" class="53ame="L1005te.

iqueue>rx *sdata = rx->
sdata = sdata(sdata->1079      ccmp>rx->rx<[0ss="line" namequeue class="sref">iqueue>rx<]/a>->
rx<>i="line" name="Lrp          structrp >rx<>3ence(
sdatasdata(3ence(rx<>i="line" name="LCCM/_PN_LEN               CCM/_PN_LENref==ref="+code=RX_CONTINUE" class="5LAG_IV_STR5PPED))
;
1044
hdrskb_pulc_decrther_addr" clascode=sdata" class="sref">sdata = i="line" name="Li004">1004s="le          structi004">1004s="le   if (ifc_eth="ref="+code=RX_CONTINUE" class="5L6ss="sref5">fc);
hdr__fkb_queue_taic_decra>-&g" class="line"  clr="sref">sdata(1094f="_lis"ref=,_ther_addr" clascode=sdata" class="sref">sdata = 1046
sdata(sdatarx *hdr)
sdata(rx< +a *sdata = ->1004s96 996ifc_eth="t/a>.1049
 *sdata = rx/*
1048flag &QUEU"sRX_CO5 */
sdata = i__fkb_dequeue_decra>-&g" class="line"  clr="sref">sdata(1094f="_lis"ref="ref="+code=RX_CONTINUE" class="5e         5d, 1);
1094f="_taicroom_decrther_addr" clascode=sdata" class="sref">sdata = sdata(rx<"t/a>.1094I=ci_DEBUG_INCast_ether_addr" clasce" class="sref">rcu_dereference(hdrlocac0211/a>->is_multicrx_expand_fkb_head2ref="ref="+code=RX_CONTINUE" class="5eame="L1005">1056
sdatasdata = i0>i="line" name="L clr="sref">sdata(rx<>a>.1094GFP_ATOMIC_eth=""t/a>.sta)
1094I=ci_DEBUG_INCast_ether_addr" clasce" class="sref">rcu_dereference(hdrlocac0211/a>->ke5idx]);
i__fkb_queue_purge_decra>-&g" class="line"  clr="sref">sdata(1094f="_lis"ref==ref="+code=RX_CONTINUE" class="5=="comment5">1060
RX_CO5idx]);
i__fkb_dequeue_decra>-&g" class="line"  clr="sref">sdata(1094f="_lis"ref="""t/a>.1064
sdata1094f="_pulsdata = i="line" name="Lf="+code=rx" class="sref"/a>->->rx<>i="line" name="Lf="+code=rx" class="sref"/a>->/*



   =h   been re>) embled - process it now * Broadcast/multicast robust managemen15          5 */
1042               ta *1004SKB_RXCBre094">1094IEEE">1004SKB_RXCB_decrther_addr" clascode=sdata" class="sref">sdata = key5&&
1042               /a>->1004   FRAGMENT"sref">flag &IEEE">1004   FRAGMENT"s1094oulRX_CO5ddr1))
->rcu_dereference(rx<"L1081" id="L1081" class="line"5same="L1065>NULL;
rcu_dereference(rx->->is_multicast_ether_addr(is_multicltic1ref=)=ef="+code=RX_CONTINUE" class="5fame="L1055>        }
rcu_dereference(hdrlocac0211/a>->   CouclL1094">1094dot11Mul"icastReceivedF>   Coucl>rx<++ref="+code=RX_CONTINUE" class="5flass="sre5">1077
) {
 led_ce" class="sref">e="L996"> led_ceast_ether_addr" clasce" class="sref">rcu_dereference(hdrlocac0211)ref="+code=RX_CONTINUE" class="5EY_FLAG_TA5NTED))
1081
++;
RX_CO5 */
 =ci_1x_porte=hdr" class="sref">hdre="L996"> =ci_1x_porte=hdr" cast_e" class="line" name="L1004">1004rx_             struct rcu_de"L1081" id="L1081" class="line"54     5  } else {
RX_DROP_M5NITOR;
->sdatarcu_dereference(rx1076        }
sdata = rx<>i="line" name="Lflag &1087
flag &EACCES) {
:
rx);
5_TKIP:
  rop_unencryptede=key" class="se="L996">  rop_unencryptedast_e" class="line" name="L1004">1004rx_             struct rcu_de>i="line" name="L__le">key)
      __le">_deci="line" name="Lf" class="sref">ifc_eth"L1049" id="L1049" class="line"5c     5class="sref">rxfass="5ine2159rx.c#/a>.]);
1094f="x.c#ta *sdata = 1094f="x.c#ref="+code=RX_CONTINUE" class="5c6">1076fc)) {
f2159rx.c#L1007" i" class="line" name="L1004">1004rx_f="042">1042     1004">1004rx_f="0420211_sence(1042               ta *1004SKB_RXCBre094">1094IEEE">1004SKB_RXCB_decrther_addr" clasf="+code=rx" class="sref")ref="+code=RX_CONTINUE" class="5"s="sref">5t">/*
2159rx.c#ef="+code=RX_CONTINUE" class="5css="sref"5r, we
   si" cpan hardwant"hasBroadcast/multicast robust managemen16o1ld have 6eP104:
dy    * but for WEP we allow using a key6426251c2946d>rx);
1042               /a>->flag &   FLAG_DECRYPT"s_eth"L1049" id="L1049" class="line"6lass="sref6>NULL;
lass="sref">rxfass="6c802160rx.c#ef="+code=RX_CONTINUE" class="6l6ss="sref6>yidx]);
   si" ckey is5set. * Broadcast/multicast robust managemen16name="L1006">1006
->sdata 996 996ifc_eth=ta>-&ga>-&ga>->/*
 is_nullfun" class="sref">ie="L996"> is_nullfun"  if (ifc_eth=ta>-&ga>-&ga>->
 is_             struct ifc_eth=ta>-&ga>-&ga>->)))
rcu_dereference(sdatarcu_dereference(rx->key;
flag &EACCES++) {
i]);
key)
_dec     c intef="+code=RX_CONTINUE" class="6aame="L1006    break;
  rop_unencrypted_mgmlL1094">1094=1004rx_             struct rcu_de"L1081" id="L1081" class="line"6c8me="L1006         }
1004s="sref">is_multic1004">1004s="0211_sub_if_data" clas="sref">is_multicast_ethta1004s="sref">is_multic1004">1004s="0211_s)ther_addr" clascode=sdata" class="sref">sdata = ->rx->) {
1004rx_f="042">1042     1004">1004rx_f="0420211_sence(1042               ta *1004SKB_RXCBre094">1094IEEE">1004SKB_RXCB_decrther_addr" clascode=sdata" class="sref">sdata = ++) {
key)
      __le">_deci="line" name="Lf" class="sref">ifc_ethta *is_multicast_ether_addr(hdr->->i]);
key)
   si" cpan hardwant"hasBroadcast/multicast robust managemen16          6         }
dy    * but for WEP we allow using a key6c6ss="sref6         }
key)
->1042               /a>->flag &   FLAG_DECRYPT"s_eth"L1049" id="L1049" class="line"6a8me="L1006">key;
RX_CO6TINUE;
->rcu_dereference(rx-&ga>->sdata = rx<>i="line" name="L        case .     6  } else {
->sdata 996 996ifc_eth=ta>-&ga>-&ga>-> is_unicast robust mgml_">            struct    _decrther_addr" clascode=sdata" class="sref">sdata = -&ga>-&ga>->/*
rcu_dereference(sdata.
-> is_deauth         struct ifc_eth="L1049" id="L1049" class="line"63         6 we
sdata = rx->rcu_dereference(->rx<>L1049" id="L1049" class="line"63ame="L1006te.
rcu_dereference(->
-> is_dispano" class="sref">ie="L996"> is_dispano"  if (ifc_eth="L1049" id="L1049" class="line"639me="L1006key
icfghref="send_unprot_dispano"_decrther_addr" clascode=sdata" class="sref">sdata = rx->
rcu_dereference(->rx<>L1049" id="L1049" class="line"6          6 */
rcu_dereference(->flag &EACCES;
1044
sdata is_mul"icast robust mgml_">            struct    _decrther_addr" clascode=sdata" class="sref">sdata = -&ga>-&ga>->fc);
 get mmie_keyidx         structe="L996"> get mmie_keyidx_decrther_addr" clascode=sdata" class="sref">sdata = .1046
-> is_deauth         struct ifc_eth="L1049" id="L1049" class="line"6rlass="sre6drlen)
sdata = rx->
rcu_dereference(->rx<>L1049" id="L1049" class="line"6name="L1046">1049
rcu_dereference(->/*
-> is_dispano" class="sref">ie="L996"> is_dispano"  if (ifc_eth="L1049" id="L1049" class="line"6ep_get_key6dx,
icfghref="send_unprot_dispano"_decrther_addr" clascode=sdata" class="sref">sdata = rx->
rcu_dereference(->rx<>L1049" id="L1049" class="line"6nss="sref"6 */
rcu_dereference(->flag &EACCES1056

   siant"not allowed prior moBroadcast/multicast robust managemen16e us which6">sta)
ke6idx]);
1060
sdata is_action class="sref">ie="L996"> is_action  if (ifc_eth=ta>-&ga>-&gcclass="line" namce" class="sref">rcu_dereference(sdata-&ga>-&ga>->
 is_robust mgml_">            struct    _decra>->) {
1004s="sref">is_multic1004">1004s="0211_s)8(rcu_dereference(->rx<"""L1049" id="L1049" class="line"6=ef">RX_CO6idx]);
flag &EACCES1064
/*



key6&&
flag &__=1004rx_             struct rcu_de>i="line" name="Lbo class="sref">hdrbo c0211_sub_if_data" claporte=hdr" class="sref">hdrporte=hdr" cast_"L1049" id="L1049" class="line"6fp_get_key6&&
1004sub_if_             struct rx *sdata = rxRX_CO6ddr1))
1004s="sref">is_multic1004">1004s="0211_sub_if_data" clas="sref">is_multicast_ethta1004s="sref">is_multic1004">1004s="0211_s)ther_addr" clascode=sdata" class="sref">sdata = ->rx->hdrbo c0211_(hdrcheck_porte=hdr" c>rx *is_multiceths="0211_sub_if_data" claes="sref">is_multices="0211/a>->->1077
) {
hdrporte=hdr" cast_ta *))
-> 996is_multic1004">1004s96is_multicast_ether_addr(hdr->-&ga>-&ga>->RX_DROP_M6NITOR;
rx->1004IFTYPE_AP_VLAN               NL">1004IFTYPE_AP_VLAN_ethta>-&ga>-&gcclass="line" namf="+code=rx" class="sref">rx->sdatarx->ivlan>rx->rx<"L1081" id="L1081" class="line"6name="L1086">1081
->ss="sref"6unt++;
RX_CO6 */
->rx->1004IFTYPE_STATION               NL">1004IFTYPE_STATION_ethta>-&ga>-&ga>->     6  } else {
rx->sdatarx-> 996is_multic1004">1004s96is_multicast_ether_addr(hdr->.RX_DROP_M6NITOR;
1076        }
rx->sdatarx->1087
->lass="sre6her) {
hdrcheck_porte=hdr" c>rx *:
rx);
is_multicast_ether_addr(is_multicltic1ref=)ta>-&ga>-&ga>->6_TKIP:
rx->1004IFTYPE_AP_VLAN               NL">1004IFTYPE_AP_VLAN_ethta>-&ga>-&gclass="line" namf="+code=rx" class="sref">rx->sdatarx->ivlan>rx->rx<"L1081" id="L1081" class="line"6c     6class="sref">rxfass="6ine2169rx.c#L1065" id="L1065"line" -1ga>->]);
1076fc)) {
f2169rx.c#L1007" i="line" name="L"lide=sdata" class=et0211ta *flag &=sdata = i="line" name="Lf="+code=rx" class="sref">rx->rx->6t">/*
21698x.c#L1083" i" cl="line" name="L"lide=sdata" class=et0211taltgt0"ef="+code=RX_CONTINUE" class="6"lass="sre6r, we
->
:
is_multices="0211tais_multiceths="0211_s)8(rcu_dereference(->rx->rx);
is_multices="0211/a>->is_multicasdata = rx->hdrchdr" c_porteprotoc c>rx<"L1081" id="L1081" class="line"7o3en expec7e   break;
hdrporte=hdr" cast_ta *NULL;
->hdrcheck_porte=hdr" c>rx<"L1081" id="L1081" class="line"7o5ss="sref7>lass="sref">rxfass="7c802170rx.c#L1065" id="L1065"line" -1ga>->1006
/*

)))
key;
-&="s is5an">   =with emmerst  headerBroadcast/multicast robust managemen17f2ld have 7    else {
) {
hdrbo c0211_(-&allowedref">flag &=1004rx_             struct rcu_de>i="line" name="L__le">key)
      __le">_deci="line" name="Lf" class="sref">ifc_eth"L1049" id="L1049" class="line"7ass="sref"7i++) {
i]);
iu8_deci="line" name="Lpae_group_ltice=key" class="spae_group_ltic_dec[="line" name="LETH_ALEN               ETH_ALEN_dec]i="line" name="L__alignedref">flag &__aligned_decr2"L1049" id="L1049" class="line"7a6ss="sref7">key)
is_multiceths="0211_sub_if_data" claes="sref">is_multices="0211tais_multiceths="0211_s)8(rcu_dereference(->rx->) {
   sito us/pan PAE group lticess regardlessBroadcast/multicast robust managemen17ad6251c2947i++) {
   =was encryptednor"not    * but for WEP we allow using a key7a         7">i]);
key)
is_multices="0211/a>->is_multicasdata = rx->hdrchdr" c_porteprotoc c>rx-&ga>-&ga>->hdremmer_ltic_lquac_decrther_addr" clases="sref">is_multices="0211/a>->1094hi="line" name="Lcode=sdata" class="sref">sdata = rx->hdremmer_ltic_lquac_decrther_addr" clases="sref">is_multices="0211/a>->1094hi="line" name="Lpae_group_ltice=key" class="spae_group_ltic_dec"""L1049" id="L1049" class="line"7c6ss="sref7         }
key)
key;
 =ci_1x_porte=hdr" class="sref">hdre="L996"> =ci_1x_porte=hdr" cast_e="line" name="Lcode=sdata" class="sref)t||L1049" id="L1049" class="line"7 9me="L1007         }
  rop_unencryptedast_eub_if_data" clace" class="sref">rcu_de>i="line" name="Lf" class="sref">ifc_eth="L1049" id="L1049" class="line"7ref">RX_CO7TINUE;
     7  } else {
;
/*

_decL1053" id="L1053" class*i"lquire" that rx/a>-&="s is5an">   =with emmerst  headerBroadcast/multicast robust managemen173ame="L1007te.
 *1004rx_             struct rcu_de"L1049" id="L1049" class="line"7s flag is 7et?

1004sub_if_             struct rx *sdata = rxrx *rx->1094f="x.c#,_sence(;
is_multiceths="0211_sub_if_data" claes="sref">is_multices="0211tais_multiceths="0211_s)8(rcu_dereference(->rx1044
is_multicrta_info0211_sub_if_data" clads+code=rx" class="dsf">rxfc);
1004rx_f="042">1042     1004">1004rx_f="0420211_sence(1042               ta *1004SKB_RXCBre094">1094IEEE">1004SKB_RXCB_decrther_addr" clascode=sdata" class="sref">sdata = 1046
)
 = sdata = 1094f="x.c#ref="+code=RX_CONTINUE" class="7r us which7 */
(1049
/*
->rx->1004IFTYPE_A/a>        case NL">1004IFTYPE_A/ast_t||L1049" id="L1049" class="line"7ep_get_key7dx,
rx->1004IFTYPE_A/_VLAN               NL">1004IFTYPE_AP_VLAN_eth)ta>-&ga>-&ga>->
rx->1042     flao2>rx-&g *1004SDATA_DONT_BRIDGE_PACKETSref">flag &IEEE">1004SDATA_DONT_BRIDGE_PACKETS_eth)ta>-&ga>-&ga>->
1042               /a>->1042     rx_flao2>rx-&g *1004RX_RA_MATCHref">flag &IEEE">1004RX_RA_MATCH_eth)ta>-&ga>-&ga>->, 1);
rx->1004IFTYPE_AP_VLAN               NL">1004IFTYPE_AP_VLAN_etht||cclass="line" namf="+code=rx" class="sref">rx->sdatarx->ivlan>rx->rx<""t/a>.is_multices="0211/a>->1094h.1056
   sibothito higmerclayers inBroadcast/multicast robust managemen17e us which7">sta)
ke7idx]);
1060
sdatai="line" name="LGFP_ATOMIC+code=rx" classGFP_ATOMICu_de"ref="+code=RX_CONTINUE" class="7=p_get_key7 */
) {
"%s: failed mo clone mul"icastn">   \n"Broadca>L1049" id="L1049" class="line"7=ef">RX_CO7idx]);
1064
./*
rx *is_multicrta_info get  if (rx<>i="line" name="Lf="+code=rx" class="sref"/a>->rx<"ref="+code=RX_CONTINUE" class="7=ame="L1007 be
->rx<"t/a>.


   Broadcast/multicast robust managemen17 ="comment7&&
RX_CO7ddr1))
1094f="x.c#ref="+code=RX_CONTINUE" class="7same="L1067>NULL;
        }
1077
))
->.RX_DROP_M7NITOR;
flag &__maybe_unusedx.c#ref="+code=RX_CONTINUE" class="7name="L1087">1081
++;
flag &CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESSx.c#ef="+code=RX_CONTINUE" class="7>ef">RX_CO7 */
RX_DROP_M7NITOR;
   siant""lquired mo be aligned_doadcast/multicast robust managemen17>ame="L1007>        }
1087
) {
->->rx< + sizeofr" class="line" name="Leths="sref">is_multiceths="0211)))ta>-&g 3ref="+code=RX_CONTINUE" class="7Hame="L1087">rx);
->.->sdata.7_TKIP:
rxfass="7ine2179rx.c#L1065" id="L1065LLLLLLLLLLLLLLLL="line" name="Lf="+code=rx" class="su_deta *.1076fc)) {
f2179rx.c#L1007" id="L1007iiiL106888888888gt;iu8_decisub_if_data" clad            structref">rx< a *1094f="x.c#/a>->rx7t">/*
2179rx.c#L1058" id="L10588888888806888888(a> *is_multicrize_tx.c#L="line" name="Lle          structle >rx *rx< -a * *->rx<>L="line" name="Ld            structref">rx<>L="line" name="Lle          structle >rx<)ref="+code=RX_CONTINUE" class="8o1ld have 8eP104:
is_multicf="_set_taic_po"nse"  if (i="line" name="Lle          structle >rx<)ref="+code=RX_CONTINUE" class="8o2ld have 8e>rx);
rxfass="8c802180rx.c#="L1086" class="line" name="L18o6en expec8eyidx]);
.1006
/*
->hdrprotoc c>rx *1042     eth_typ _tran2  if (i="line" name="Ldev         structrev>rx<)ref="+code=RX_CONTINUE" class="8o9me="L1008", we
is_multicmemset  if (->i0, sizeofr(->key;
++) {
->.i]);
key)
   =(see cfghref="cid="ifyhrefd)    * but for WEP we allow using a key8f9me="L1008         }
) {
->hdrpriority>rx< += 256ref="+code=RX_CONTINUE" class="8ad6251c2948i++) {
hdrprotoc c>rx *1042     hton2  if (flag Ð_P =ci_3ref")ref="+code=RX_CONTINUE" class="8a         8">i]);
is_multicf="_reset_RX_work_header  if (key)
is_multicf="_reset_ONT_header  if (key)
key;
1004rx_result+code=rx" class1004">1004rx_resultx.c#L="line" name="Ldebug_noin-> *sdatarxsdata6class="line" name="L10Broa;
hdrc"+code=sdata"/m70         7keyid       struct rx->rx->))
1094f="x.c#,_sence(1094f="x.c#ref="+code=RX_CONTINUE" class="7r us which7 */
is_multicast_ethta1004s="sref">is_multic1004">1004s="0211_s)ther_addr" clascode=sdata" class="sref">sdata = rx7t">/*
2179rx.c#L1058" i8class="lin8" name="L170         7 we8/span83" classdev_quNTINUE" class="ref">ifc_eth"L1049" id="L1049" class="line"7ass="sref"7i++) {
hdr->.RX_DROP_M6NITOR;
< href="ne87t">2179rx.c#L1058" i8c"L1086" clas10Broadcast/multicast r8bust 83rta_info0211_sub_if_data" clads+codee(>rx<"/a>f="x.c#,_sence(>rx<"49" class="line"7ass=P_M6Nlilas7name="L1007">=P_M6Nlila>;
< href="ne87t">2179rx.c#L1058" i8cclass="linass*i"lquire" that rx/a>-8="s i8342     1004">1004rx_f="0420211_sence(1042               ta *1004SKB_RXCBre094">1094IEEE">1004SKB_RXCB_decrther_addr" clascode=sdata" class="sref">sdata = key;
hdre="L996"> =ci_u  }kel class="8ad6251cu  }kel a hre96RX_CO7TINUE;
->RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i8ef="+code=8ipher" clas7          7 *81004sub_i8_    84>rx-> =ci_u  }kel class="8ad6251cu  }kel a hre96RX_CO7TINUE;
is_multicf="_href="+code=sdata"/m7oRX_DROP_MONITOR>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i8eclass="li8e" name="Lrk_bufode=key" 8lass=84is_8ultic84t_f=">rx<"t/a>.104">1042     rx_flao2>rx-&g *1004RX_RA_MATCHref">flag &IEEE">1004RX_RA_MATCH_eth)ta>-&ga>-AMSDUsdata" class="sref">sdataa>-AMSDU
i8_mult84"/m7l6ss="sref7>yidx]);
code=sdata"/m7oRX_CONTINUE>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i8eclass="line" name="L1004">1004rx_f=8042">84 =ci_ef="+codes="sref">is_multicast_ether_addr(hdr->.RX_DROP_M6NITOR;
 = -&gf="+codev      ass="sref">rx->1004IFTYPE_A/_VLAN               NL">1004IFTYPE_AP_VLAN_eth)ta>-&ga>-&ga>->->96rx->rx->rx<""t/a>.RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i8 cll-&8t;rx->is_multicast_ether_addr(is_multicltic1ref=)ta>-&ga>-&ga>->6_TKIP:
rx->rx->1004IFTYPE_A/_VLAN               NL">1004IFTYPE_AP_VLAN_eth)ta>-&ga>-&ga>->1042 8     8       /a>->rx->rx->rx<""t/a>.rx->rx->1004IFTYPE_A/_VLAN               NL">1004IFTYPE_AP_VLAN_eth)ta>-&ga>-STATIref">sdata-&ga>-STATIready<, 1);
rx->rx->f="x.c#,_senmg"a hres+code=rx" clasuse_4codes="sref">is_muluse_4code
RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i8  = rx *rxrx->=P_M6Nlila>;
rx->isfd6251c2948">key;
RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i8="L1094105810583" id="L105988888888888888886. =ci_ef="+codess="7 _to/a>]3"042">1042            s="7 _to/a>]3"a href=ltic1sref">isfd6251c2948">key;
=P_M6Nlila>;

is_mul7ss+code>;
rx *rx->1004IFTYPE_A/_VLAN               NLOef="net/m7c802173rx.c#L1035" i8="L1007" i81068" cl->rx<"t/a>.rx->rx;&
>.1004IFTYextra_tx"+code=rx" class="sref")extra_tx"+code=rx>;
 = rx *while9" id="L1049" clas7herf=">rxemp" class="8ad6251c7herf=">rxemp" a hre=P_M6Nlila>;
rx->key;
rcode=rx" classxch7herdef=">ra hre=P_M6Nlila>;
1004rx_             struct RX_CO7TINUE;
key;
->
1004IFTYrx_packe>42     rx_flrx_packe>4ref=++ref="net/m8c802181rx.c#L1091" id="L1007" i81086" class="line" name="817sla8s="sre7">1077

1004IFTYrx_bust42     rx_flrx_bust4"sre7+ref="L1094">1094f="x.c#ref="+code=RX_CONTINUE" class="7r us which7 */
 = )87ass=et0211/a>->1004rx_             struct 1094f="x.c#ref="+code=RXhref="net/m8c802181rx.c#L1091" id cl-&g8;.->++88>rx->RX_CO7TINUEflag &CONFIG_HAVE_MAC      MESt;   si04">1004rx_resultx.c#L="line" name="Ldebug_noinis_multicast_ethta1fwdff">is_multicast_etfwdff">de=R" " name="L1004">1004s="sref">is_multic1004ref="net/m8c802181rx.c#L1091" id="L1069" c8ass="line" name="L1* Broa8cast/890ss=et0211/a> rx1" class="dsf">rxis_multicast_ethta1mesh_f">is_multicast_etmesh_f">"linref="net/m8c802181rx.c#L1091" id=RX_CONTIN8->(1094f="x.c#,_sence(1094f="x.c#ref="+code=RX_CONTINUE" class="7r us which7 */
1fwdf us which7 */->rx211_sub_ifL1008rx;&
>.href="L1094">1094f="x.c#ref="+code=RX_CONTINUE" class="7rL1008s="sref">rx;&
>.ref="net/m8c802181rx.c#L1091" id="L1094  c8LLLLLLLLLLLL="line" name=8Ldev_8free_f="+code= rx *sdata = rx(1042               ta *1004SKB_RXCBre094">1094IEEE">1004SKB_RXCB_decrther_addr" clascode=sdata" class="sref">sdata = key;
.1004rx_f="0420211_sence(a1042            a1"fmsh042">1042   fmshE">1004rx->1042  mesh"linref="net/m8c802181rx.c#L1091" idi"L1007" i8106888888888gt;iu8f="+codev      chf">ifc_eth"L1049" id="L1049" class="line"7assen18old have 8e>rx1004SKB_RXCB_decrthcp _to/f">ifc_eth"L1049" icp _to/f">ia href="+code=rx" clWLAN_REASON MESt_PATH_NOFORWARD>RX_CO7TINUE *is_multice=key" class=a>ifc_eth"L1049" iu1049" class="line"7assqfc_eth"L1049" iqde=R" class="line"7ref">L2ld have 8e>rxL2l"linref="net/m8c802181rx.c#L1091" idi"L1035" c8LLLLLLLLLLLL="line" name=8Lf="+89 *rx *is_multic1004">1004s="0211_s)ther_addr" clascode=sdata" class="sref">sdata = rx7t">/*
2179rx.c#L1058" i9="L1091" i9="L1LLLLLLLL="line" name=9Lf="_9et_taic_po"nseclass="line"7ref">L2ld have 8e>rxL2l"lin004SKB_RXCB_decrth">sdata =L2ld have 8e>rxsdata =L2la href="+code=rx" cllass="sref">hdr->.RX_DROP_M6NITOR;
2179rx.c#L1058" i9=2L1091" i9=/a>->) {
rx<"t/a>..     hton2  if7hermay_pul/X_CONTINUE" class="7ass="su_de"ref="+code=RX_CONTINUE" class="8fd6251c2948">key;
L2ld have 8e>rxL2l"lin + 6hb_6a href="+codef="_headroom"sr9class="lin9" name="L18o6en expec8eyi9x90"/m7l6ss="sref7>yidx]);
code=sdata"/m7oRX_DROP_MONITOR>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i9iiiiiii" c9="line" name="Lf="+code=r9" cla90iu8f="+codev      mesh_f">is_multicast_etmesh_f">"lin">1004s="0211_s)ther_addr" clascodesff">is_multicast_ethta1006
is_multiceths="02class="line"7ref">L2ld have 8e>rxL2l"lina href="ne87t">2179rx.c#L1058" i9=8L1007" i9=88806888888(a> *9s_multicmemsett/multicast robust managememensure ful/Lmesh rx<"re    ddr) {
..     hton2  if7hermay_pul/X_CONTINUE" class="7ass="su_de"ref="+code=RX_CONTINUE" class="8fd6251c2948">key;
L2ld have 8e>rxL2l"lin + SKB_RXCB_decrth">sdataL2ld have 8e>rxsdataL2lX_CONTINUE" class="7mesh_f">is_multicast_etmesh_f">"linhrb_6a href="+codef="_headroom"sr9="L1086" c9ass="line" name="L18f3en 9xpec891ssalignx.c#)t/a>.]);
code=sdata"/m7oRX_DROP_MONITOR>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i9class="lin9" name="L18ass="sref"8i++) 9
-&g9;) {
 =ci_004s="sref">is_multic1004">1004s="0211_s)ther_addr" clascode=sdata" class="sref">sdata = rx7t">/*
2179rx.c#L1058" i9="L1053" c9ass="line"         * Send9po wi916s="sref">iu8f="+codev      mesh_f">is_multicast_etmesh_f">"lin">1004s="0211_s)ther_addr" clascodesff">is_multicast_ethta1006
is_multiceths="02class="line"7ref">L2ld have 8e>rxL2l"lina href="ne87t">2179rx.c#L1058" i9="L1069" c9ass="line"         * keep9pan r91rx<"t/at/multicast robust manageow usii RMC, doicast t forward>) {
hdr->.RX_DROP_M6NITOR;
is_multicast_ether_addr(is_multicltic1ref=)ta>-&ga>-&ga>->6_TKIP:
is_multicltic1ref=)ta>-&ga>-&ga>->is_multicast_etmesh_f">"lin" class="line"7reass="sref">rxis_multicf="_/a>]);
code=sdata"/m7oRX_DROP_MONITOR>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i9="L1059="l9ne" name="Lf="_reset_ONT_9eader92rx<"t/a>..(as2174rx.c#L1042" i" class="lineis2174ra href="+code=rx" cllass="sref">hdr->.RX_DROP_M6NITOR;
104">1042     rx_flao2>rx-&g *1004RX_RA_MATCHref">flag &IEEE">1004RX_RA_MATCH_eth)ta>-&ga>-RA_MATCt;9ey      /a>]);
code=sdata"/m7oRX_CONTINUE>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i9 href="+co9e=sdata"/m8a8me="L1008">k9y9
1004rx_result+cod9=rx" 92" class="sref">hdrf=)"t/a>.is_multicast_etmesh_f">"lin-&g *RX_DRtthsda9a->RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i9f">sdata6c9ass="line" name="L10Broa<9a>;
<93hdrc"+9ode=sdata"/m70         7k9yid       struct"+co4rx_f="0420211_mesh_f">is_multicast_etmesh_f">"lin-&g *1004RX_RA_MATCHreflag &IEEE">1004RX_RA_MATCH_MESt_FLAGS_AE>RX_CO7TINUE;
is_multicf="_04s="0211_s)ther_addr"mesh_path042">1042  mesh_path"line" name="L1004">1mppath042">1042  mppath"lin href="ne87t">2179rx.c#L1058" i9f"L1059="l9e" name="L170ss="sref"7 b91proxied+codes="sref">is_mulproxied+code"lin href="ne87t">2179rx.c#L1058" i9f"L1059="l9" name="L170         7 we9/span93="+code=rx" classxmitchare" name="L1004">1mpp+codes="sref">is_mulmpp+code"lin href="ne87t">2179rx.c#L1058" i9f"L1086" c9as10Broadcast/multicast r9bust 93;
-9="s i93="sref")t/a>.is_multicast_ether_addr(is_multicltic1ref=)ta>-&ga>-&ga>->6_TKIPa,ref="net/m8c802181rx.c#L1065" i9lhref="+co9ass* Broadcast/multicast 9obust93ver mo local sf"ck * Broadcastname="L1004">1mpp+codes="sref">is_mulmpp+code"lin+codeETH_P =ci_3refass="sref">hdr->.2179rx.c#L1058" i9f href="+c9ast robust managemen1709m9="L1093" class="srefsf"ck * Broadcastname="L1004">1proxied+codes="sref">is_mulproxied+code"lin+codeETH_P =ci_3remesh_f">is_multicast_etmesh_f">"lin-&g *6_TKI href="ne87t">2179rx.c#L1058" i9f"L1059LLL9ref=" eliver_f="+code=rx"9class93ass=et0211/a>->is_multicast_etmesh_f">"lin-&g *1004RX_RA_MATCHreflag &IEEE">1004RX_RA_MATCH_MESt_FLAGS_AE_A5_Aifc_eth"L1049" iMESt_FLAGS_AE_A5_Ai>;
(< alreefyecheckenage              mesh_check>) {
1004sub_i9_    94have 8    else {
1mpp+codes="sref">is_mulmpp+code"lin+codeETH_P =ci_3refass="sref">hdr->.is_multicast_codef_TKI href="ne87t">2179rx.c#L1058" i9 class="li9e" name="LRX_" evic      9   st94ersref">is_multicf="_Broadcastname="L1004">1proxied+codes="sref">is_mulproxied+code"lin+codeETH_P =ci_3remesh_f">is_multicast_etmesh_f">"lin-&g *2_TKI href="ne87t">2179rx.c#L1058" i9 "L1059="l9e" name="Lrk_bufode=key" 9lass=94expec8eTKIP:
f2179rx.c#L1007" i9 class="li9e" name="Leths="sref">is_9ultic94="+code=rx" classxmit_f=">rxRX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i9 "L1086" c9e" name="Lrta_infosref">i9_mult94"/m7l6ss="sref7>yidx1004rx_f=9042">941077
2179rx.c#L1058" i9a = -&ghhhhtname="L1004">1mppath042">1042  mppath"lin+codeETH_P =ci_3rempp+pathfL1okups="sref">is_mulmpp+pathfL1okupa href=ltic1sref">isproxied+codes="sref">is_mulproxied+code"lin" class="line"7re="7 lass="sre7&&
2179rx.c#L1058" i9a"L1059LLL9hrexmit_f="+code=rx" clas9xmit_94ass=et0211/a>->tttt">hdrf=)"t/a>.1042  mppath"lina,ref="net/m8c802181rx.c#L1065" i9 href="+co9e=sdata"/m7s="comment7>/*9/span95tructfals >rx->>-&ghhhhtname="L1004">1mpp+pathfcods="sref">is_mulmpp+pathfcoda href=ltic1sref">isproxied+codes="sref">is_mulproxied+code"lin" class="line"7rempp+codes="sref">is_mulmpp+code"lin" class="line"7re="7 lass="sre7&&
2179rx.c#L1058" i9 cll-&9t;f2179rx.c#L1007" i9="L1-&9t;is_multicf="_Broadcastname="L1004">1spinfL10k_bh042">1042  spinfL10k_bha hre1042  mppath"linRX_CONTINUE" class="ao2>efL10kis_multicast_etao2>efL10k2179rx.c#L1058" i9 "L1059="l9gt;rx->->tttt">hdrf=)"t/a>.(<_equ08s="sref">rxaddr(<_equ08X_CONTINUE" class="7mppath042">1042  mppath"linRX_CONTINUE" class="mpp042">1042  mpp"lin" class="line"7rempp+codes="sref">is_mulmpp+code"linrb_6a href="+codef="_headroom"sr9=class="li9t;1042 9     9       /a>->->>-&ghhhhtname="L1004">1memcp class="8ad6251cmemcp X_CONTINUE" class="7mppath042">1042  mppath"linRX_CONTINUE" class="mpp042">1042  mpp"lin" class="line"7rempp+codes="sref">is_mulmpp+code"lin" class="line"7re8">iALEef">sdataiALEe2179rx.c#L1058" i9 "L1086" c9t;rx->1spinfunL10k_bh042">1042  spinfunL10k_bha hre1042  mppath"linRX_CONTINUE" class="ao2>efL10kis_multicast_etao2>efL10k2179rx.c#L1058" i9 class="li9="line" name="Lis_mul"ica9t emm9r_ltice=key" class="x2179rx.c#L1058" i9  = .is_multicast_ether_addr(is_multicltic1ref=)ta>-&ga>-&ga>->6_TKIP:
is_multicf=)"t/a>.(<_equ08s="sref">rxaddr(<_equ08X_CONTINUE" class="7" class="vio>rx->1004IFTYcodes="sref">is_mulcode"lin" class="line"7refass="sref">hdr->.RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i9="L1094105910583" id="L105988888888898888896. =ci_qfc_eth"L1049" iqde=R004SKB_RXCB_decrth">sdatarxatarxatakey;
s="sref">hdr->2179rx.c#L1058" i9=class="li91068ub_if_data" clads+cod9=rx" 9lass="dsf">rx<"+co4rx_f="0420211_sence(f=">rxstopp" name="L1004">1004rx_     f=">rxstopp" a hrerx;&
>.->rx<"t/a004RX_RA_MATCH_eth)ta>-&gIFSTA MESt_CTR_INC;1042   fmshE">1ONTINUE" class="8oropp"       sNITOgestiold have 8e>rx2179rx.c#L1058" i9= = -&ghhhhhref="+code=sdata"/m7oRX_DROP_MONITOR>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" i9="L1035" c9ass="line" name="L111111191111196">rx *ref="net/m7c802173rx.c#="L1086"9="L1069" c9ass="line" name="L1111111911111970>rx *rxmappBroa_noinkey;
2179rx.c#L1058" i9="L1069" c9ass="line" name="L111111191111197.is_multicast_etmesh_f">"lin-&g *RX_DRtth-&gIFSTA MESt_CTR_INCX_CONTINUE" class="7"fmsh042">1042   fmshE">1ONTINUE" class="8oropp"       sNtther" clas6>RX_DRoropp"       sNtthde=RP href="ne87t">2179rx.c#L1058" i9="L1094105910583" id="L(2179rx.c#L1058" i9="L1065}i"910583" id="L(.1042   fmshE">1RX_CONTINUE" class="mshcfoa_noin1004IFTYdot11MeshForwardBroa_noin = -&ghhhhgotoNTINUE" class="8ouug_noin;
< href="ne87t">2179rx.c#L1058" i9="L1035" c9ass="line"7EY_FLAG_TA7NTE9)97-&g9;rx *key;
2179rx.c#L1058" i9="L980""ns9="line" name="Lalign+code9rx" c98       struct"+corf=)"t/a>.++98ersref">is_multicf="_f=)"t/a>.10c80"" cl_ratelimit" X_CONT/multicast rstrBroa>"%s: failed toNcloneLmesh      \n"{
rx->->tttts_multicf="_f=)"t/a>.10cICIde=RP href="ne87t">2179rx.c#L1058" i9="L10941059ass="line" name="L10Broad9ast/m98="+code=rx" classxmitgotoNTINUE" class="8ouug_noin;
< href="ne87t">2179rx.c#L1058" i9="L1035" c9ass="line"         * Əalign98de=rx" class=ref="net/m7c802173rx.c#="L1086"9=iiiiiiiii9ass="line"         * sinc9 alln98iu8f="+codev      fwdff">is_multicast_etfwdff">de=R0041004s="0211_s)ther_addr" clascode=sdata" class="sref">sdata = 7t">/*
2179rx.c#L1058" i9="L1035" c9ass="line" name="L1* obus9 ma. 98sref">is_multice=key" class=" class="dsf">rxsdata 2179rx.c#L1058" i9="L1035" c9ass="line" name="L1* belo9    *98">rx *rx1" class="dsf">rx2179rx.c#L1058" i9="L1069" c9ass="line" name="L1* Broa9cast/990>rx *rx *1004RX_RA_MATCHreflag &I|04SKB_RXCB_decrther_addr" cTX_INTFL_NEEDcTXPROCESSINGsdata" class="sref">sdataTX_INTFL_NEEDcTXPROCESSING>
2179rx.c#L1058" i9="L980""ns9ne" name="Lalign+code=rx"9class99t_taic_po"nseclass="line"7re" class="dsf">rx *RX_DRITOR;
rx->2179rx.c#L1058" i9=RX_CONTIN9->rx *RX_DRITOR;
     rx_fljiffit4"lin004SKB_RXCB_decrthjiffit42     rx_fljiffit4"lin href="ne87t">2179rx.c#L1058" i9=line" nam98888" cl->is_multicast_ether_addr(isfwdff">is_multicast_etfwdff">de=R-&ga>->6_TKIPa,ref="net/m8c802181rx.c#L1065" i9="L1094  c9LLLLLLLLLLLL="line" name=9Ldev_99="+code=rx" classxmit004RX_RA_MATCH_eth)ta>-&gIFSTA MESt_CTR_INC;1042   fmshE">1ONTINUE" class="8fwded_mtheris_multicast_etfwded_mther"linr href="ne87t">2179rx.c#L1058" i9="L1065LLL9LLLLLLLLLLLL="line" name=9Lf="+99>rx->1memcp class="8ad6251cmemcp X_CONTINUE" class="7fwdff">is_multicast_etfwdff">de=R-&ga>->2_TKI" class="line"7re="7 lass="sre7&&
1004IFTYcodes="sref">is_mulcode"lin" class="line"7re8">iALEef">sdataiALEe2179rx.c#L1058" i9iiiiiiiiii91068di"L108/a>..is_mulmesh_nexthopfL1okupa href="+code=rx" clfwdf us which7 */rx<"t/a004RX_RA_MATCH_eth)ta>-&gIFSTA MESt_CTR_INC;1042   fmshE">1ONTINUE" class="8fwded_unitheris_multicast_etfwded_unither2179rx.c#L1058" i9i"L1035" c9888806888888(a> *is_multr) {
f2179rx.c#L1007" i9i"L1035" c9LLLLLLLLLLLL="line" name=9Lf="+99ass=et0211/a>->) {
20idrx->1mesh_path_error_tss="sref">rxmesh_path_error_tsX_CONTINUE" class="7"fmsh042">1042   fmshE">1RX_CONTINUE" class="mshcfoa_noin1004IFTYelest mNtther" clas6>RX_DRelest mNtthE">1ONTINUE" class="8fwdff">is_multicast_etfwdff">de=R-&ga>->f="net/m8c80218211/rx.c#L98020i1=8" i0520ie" name="Lalign+code=rx20ie">20ihave 8    else {
rx1ONTINUE" class="8fwdff">is_multicast_etfwdff">de=R-&ga>->2_TKI" class="line"7re="7 lass="sre7&&
2179rx.c#L1058" 20i2=8" i0520i/a>->20iersref">is_multicf="_f=)"t/a>.-&gIFSTA MESt_CTR_INC;1042   fmshE">1ONTINUE" class="8oropp"       sNno_routIname="L1004">10oropp"       sNno_routI2179rx.c#L1058" 20i3=8" i0520i888" cl->20i            WARN_ON  004RX_RA_MATCH_="+code=rx" class="sref"="+code=RX_CONTINUE" class="7fwdf us which7 */2179rx.c#L1058" 20i4=8" i0520iLLLLLLLLLLL="line" name20iLL>20i="+code=rx" classxmithref="+code=sdata"/m7oRX_DROP_MONITOR>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" 20i5=8" i0520iLLLLLLLLLLL="line" name20iLL>20ide=rx" class=ref="net/m7c802173rx.c#="L108620i6=8" i0520i068di"L108/a>.iu8f="+codev      eth)ta>-&gIFSTA MESt_CTR_INC;1042   fmshE">1ONTINUE" class="8fwded_     sis_multicast_etfwded_     s"linr href="ne87t">2179rx.c#L1058" 20i8=8" i0520i88806888888(a> *20isref">is_multice=key" class="         sdd_pendBro" name="L1004">1004rx_       sdd_pendBro" naX_CONTINUE" class="7L1008s="sref">rx;&
>.ONTINUE" class="8fwdf us which7 */2179rx.c#L1058" 20i9=8" i0520iLLLLLLLLLLL="line" name20iLL>20iass=etTINUE" class="8ouug_noin;
<:href="ne87t">2179rx.c#L1058" 201d=8" i05201058;is_multicast_ether_addr(is_multicltic1ref=)ta>-&ga>-&ga>->6_TKIP201sxmit_f=">rx-f="+codev      ="7 lass="sre7&&

1004RX_RA_MATCHreflag &IEEE">1004RX_RA_MATCH_IFF_PROMISC;is_multicf="_/a>]);
code=sdata"/m7oRX_CONTINUE>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" 2013=8" i0520" name="L18ass="sref"8i<20" n>201            W {
2179rx.c#L1058" 2014=8" i0520;201="+code=rx" classxmithref="+code=sdata"/m7oRX_DROP_MONITOR>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" 2015=8" i0520ass="line" name="L10Broa20ass>201de=rxref="net/m7c802173rx.c#="L10862016=8" i0520ass="line"         * Sen20ass>2012011004rx_resultx.c#L="line" name="Ldebug_noinf2179rx.c#L1007" 20-1=8" i0520ne" name="Lxmit_f="+code20ne">20-       struct rx *sdata = rx20-ssalignx.c#)tnce(rx211_sub_ifL1008rx;&
>.href="L1094">1094f="x.c#ref="+code=RX_CONTINUE" class="7rL1008s="sref">rx;&
>.ref="net/m8c802181rx.c#L1091" 20-3=8" i0520ne" name="Lf="_reset_ONT20ne">20-       struct 10c80"spaicI
<004SKB_RXCB_decrth7"7 lass="sre7&&

20-ree_f="+code= is_multicast_ethta1004s="sref">is_multic1004">1004s="0211_s)ther_addr" clascode=sdata" class="sref">sdata = rxrx7t">/*
2179rx.c#L1058" 20-5=8" i0520ass="line" name="L18c6ss20ass>20-s7=6ss="sref7re="L996"> =ci_chf">ifc_eth"L1049" id="L1049" class="line"7assf">RX_CO7TINUE;
hdr->.RX_DROP_M6NITOR;
< href="ne87t">2179rx.c#L1058" 20-6=8" i0520e" name="L18came="L1008"20e" >20-6s="sref">iu8f="+codev      bopher" clas6>RX_DRboph49" class="line"7assportode=cipher" clas6>RX_DRportode=ciph>;
< href="ne87t">2179rx.c#L1058" 20-7=8" i0520e=sdata"/m8a8me="L1008">20e=s>20-7rx->hdr;
< href="ne87t">2179rx.c#L1058" 20-8=8" i0520de1004">1004rx_result+co20de1>20-sd20ref>20-9/a>..(as2174rx.c#L1042" i" class="lineis2174ra href="+code=rx" cllass="sref">hdr->.RX_DROP_M6NITOR;
is_multicf="_/a>]);
code=sdata"/m7oRX_CONTINUE>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" 2031=8" i0520ode=sdata"/m70         720ode>20a.(as2174r_pug_t ma.c#L1042" i" class="lineis2174r_pug_t ma href="+code=rx" cllass="sref">hdr->.RX_DROP_M6NITOR;
20afo_ratelimitede=key" ;RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" 2034=8" i0520" name="L170         7 w20" n>20a20as7=6ss="sref7r/multicast robust manag{
20ass>20a6s="sr/multicast robust manede=key" * Send unexpected-4ef">-ow usievt m toNho04"pd. For ol"re versions,{
20a7s="sr/multicast robust manede=key" * anageorop ddreow usitoNcookenamonitor " namfaces.{
20a8s="sr/multicast robust manede=key" * {
20a9/a>.((sdata/a>(hdr->.RX_DROP_M6NITOR;
:
20ipxmit_f=">rx-f="+codev      ="7 lass="sre7&&
1004IFTYtypIname="L1004">10typI
-&gIFTYPE_APname="L1004">10NLta>-&gIFTYPE_AP>;
f2179rx.c#L1007" 2041=8" i0520e" name="L1004">1004sub_20e" >20ihave 8    else {
rx:
20iersref">is_multicf="_Broarf=)"t/a>.10test_andrmit_a =flagrx;
20i">rx->->ttttTINUE" class="8cfg="line" nunexpected_4ef">_     ass="sre7&&cfg="line" nunexpected_4ef">_     a hreef="net/m6c802169rx.c#L1094" 2044=8" i0520e" name="Leths="sref">is20e" >20i      /a>->->>-&ghhhhtname="L1004">1ass="sref">rx->
<" class="line"7reass="sref">rx1004IFTYcodes="sref">is_mulcode"lin" class="line"7reGFP_ATOMIC;2179rx.c#L1058" 20i5=8" i0520e" name="Lrta_infosref">20e" >20i"/m7l6ss="sref7>yidx]);
code=sdata"/m7oRX_DROP_MONITOR>RX_CO7TINUE;
< href="ne87t">2179rx.c#L1058" 20i6=8" i0520e" name="L1004">1004rx_f20e" >20i42     10)href="ne87t">2179rx.c#L1058" 20i7=8" i0520e=sdata"/m7rlass="sre7dr20e=s>20iis_multice=key" class=erss="sref">hdr;
<+codeETH_P =ci_3re__">sdatasdatarxRX_DRportode=ciph>;

2179rx.c#L1058" 20i9=8" i0520hrexmit_f="+code=rx" cla20hre>20i9/a>.hdr; /20e=s>20e=/m7l6ss="sref7>yidx]); code=sdata"/m7oRX_DROP_UNUbABLc#L9802037=8" i0520ne"7re8">iALEl_ss="li9e" name="LRX_" e17l_ss="li9e" name="LRX_" e17l_ss="li9eclass="ao2a>->8="sref7>yidx1004rx_ f=_M6NITallownahref="+code=rx" class="sref">rxRX_CO7TINUE; RX_CO7TINUE; < href="ne87t">2179rx.c#L1058" 203458" i0520e"1042 9e".rx->1004IFTYtypIname="L1004">10typI -&gIFTYPE_APna_VN_Sme="L1004">10NLta>-&gIFTYPE_AP>;_VN_Sa h/a>: RX_DRportode=ciph>;

: f2179rx.c#L1007" 204158" i0520e=L1<1035" id="L1035" cla9e=L1rx<"t/a004RX_RA_MATCH_etlass="sref">sdata = rx *rx<"t/a004RX_RA_MATCH_etuass="8ad6251cunna "+coNL">1004IFTYcod="sref">is_mulmeap

2179rx.c#L1058" 20i958" i0520hrs="line" name="L11111119hrs="gt;-> <004SKB_RXCB_decrth7"7 lass="sre7&& e=s==et0211/a>->rx->2179rx.c#L1058" 20i767c802173rk="" clclass="line" namx9rk="">e=s2href="net/m7c802173rx.c#L1035" 20a568" i0520e"8888888888="line" name=9e"888>e=s_ratelimitede"+code=rx" class="sref">rxrx <004SKB_RXCB_decrth7"me="L1008", we e=s href="net/m7c802173rx.c#L1035" 20a568" i0520e"8/a>.e=s=6ss="sref7re="L996"> =ci_chme="L1008", we ">10 rx_flao2>rxsa "+coNL">1004IFTYcorx_packe0 rx_flaorx_packe0e=s="sref">iu8f="+codev bome="L1008", we ">10 rx_flao2>rxsa "+coNL">1004IFTYcorx_bytis_multicast_etfwrx_bytis"sref+f="+code=rx" class="sref">rxrxrx->e=s href="net/m8c802182rx.c# c 204868" i0520hr8806888888(1035" id="L19hr880>e=sclass="sref">hdrfINUE" class="7"l08s="sref">rx;& >.: rx;& >.1004IFTYco=cip ast_ta 1004IFTYtydyid=ic_ps_timeug_noinref 0a>: e=ss=et0211/a>-><=)"t/a>.is_multicast_ether_addr(e=s=lass="srefsf"ck * Broadc(4s="0211_s)ther_addr" cdrhdr-drrxrx7t">/* e=sve 8 else { rx;& >.e=ssref">is_multicf="=)"t/a>.efL/a> rx_flao2>rxe f2179rx.c#L1007" 204178" i0520e"s="line" name="L11111119e"s=">e=srx->->ttttTINUE" class="8cfmod_times_multicast_etmesod_timeshreic hrlass="line"7assL1008s="sref">rx;& >. rx_fljiffit4"lin004+ef="ne/7">f2179rx.c#L1007" 204178" i0520e"583" id="L(e=s /a>->->>-&NUE" class="8cfmsecsoxatffit42 rx_fljimsecsoxatffit42rx;& >.1004IFTYco=cip ast_ta 1004IFTYtydyid=ic_ps_timeug_noin2179rx.c#L1058" i9e=s8" i0520e"583" id="L(e=s=rx" class=ref="net/m7c802173rx.c#="L108620i678" i0520e"68d="L1086" class="line9e"68d>e=s href="net/m7c802170rx.c#L1007" 20i778" i0520e=86" class="line" name="9e=86">e=s="sref">iu8f="+codev etsdataame="L1004">1004rx_ sd4eliv/a>amehref="+code=rx" class="sref">rx2179rx.c#L1058" i9e=s8" i0520hrs="line" name="L17s us 9hrs=">e=s href="net/m7c802171rx.c#L1029" 20-978" i0520hrs="line"7EY_FLAG_TA7NTE9hrs=">e=ss=et0211/a>-&a href="+code=sdata"RX_DRQUEUEDX_CO7TINUEe=a ina f="net/m7c802173rx.c#="L108620i68name="LRX_line" name="Lalign+code9X_lin>e=aa href=)"t/a>8="sref7>yidxe=asref"">1004rx_resultx.c#L="line" name="Ldebug_noine=arxrx211_sub_ifL1="Lh_ctr=href=re7&& f2179rx.c#L1007" 204188" i0520e"s="line" * Əe"s=">e=a=rx" class=rere7&& rxrxrxsdata baaRX_" evic stbaa" class="sref">baaRX_" 004s="0211_s)ther_addr" clascode=sdbaa" class="sref">sdata baaRX_" e="+code=rx" clasructref">rx7t">/* 2179rx.c#L1058" 20-588" i0520e=s="line" * mo 29e=s=">e=a7rx" class=rere7&& rxrx2179rx.c#L1058" 20-588" i0520hrs="line" name="L1* obus9hrs=">e=aef">is_multice=key" class=erufc_eth"L1049" id=u49" class="line"7assf"">1rt_seq_num/a> rx_flao2>rrt_seq_num2179rx.c#L1058" 20-588" i0520hrs="line" name="L1* belo9hrs=">e=arx *rx2179rx.c#L1058" 20-598" i0520e=s="line" name="L1* Broa9e=s=">e=s=href="net/m8c802182rx.c# c 20199name="LRX_" name="Lalign+code=rx"9X_" n>e=s struct"+corfe=key" class=er0el class="8ad6251cunkel a hrerf=)"t/a>.(as217cer" clas6>RX_DRelnce(as217cerhref="+code=rx" clasbaa" class="sref">baaRX_"href=)"t/a>.RX_DROP_M6NITOR; ->->e=ssref">is_multicf="_/a>]); code=sdata"/m7oRX_CONTINUE>RX_CO7TINUE; < href="ne87t">2179rx.c#L1058" 201398" i0520e"88" cl->e=s3href="net/m8c802182rx.c# c 201998" i0520e"LLLLLLLLLL="line" name=9e"LLL>e=s4 struct"+corfe=key" class=ernce(as217backg_nc_eth"L1049" iqdnce(as217backg_nchref="+code=rx" clasbaa" class="sref">baaRX_"href=)"t/a>.RX_DROP_M6NITOR; f2179rx.c#L1007" 204198" i0520e"LLLLLLLLLL="line" name=9e"LLL>e=sm7l6ss="sref7>yidxf2179rx.c#L1007" 204198" i0520e"68di"L108/a>.e=stice=key" class="x *ifc_eth"L1049" id="L1049" class="line"7assf"=cipher" clas6>RX_DRITOR; 1rt_seq_num/a> rx_flao2>rrt_seq_num2179rx.c#L1058" 20-598" i0520e=6888888888gt;rx<"t/a00}a href="+NULL+mef"packed"sref">rx2179rx.c#L1058" 20-598" i0520hr8806888888(a> *e=s href="net/m7c802171rx.c#L1029" 20-998" i0520hrLLLLLLLLLL="line" name=9hrLLL>e=ss=et0211/a>->tttt">hdrf=)"t/a>.rx20i1rx->]); code=sdata"/m7oRX_COOP_MONITOR>RX_CO7TINUE; < href="ne87t">2179rx.c#L1058" 2031=8" i0520i1" name="Lalign+code=rx20i1">20i10a href=)"t/a>8="sref7>yidx->20i1rsref">is_multicf="_f=corfe=key" class=erercop X_nbin rx_flao2rcop X_nbinkey; sdata baaRX_"class="line"7reGF=cipher" clas6>RX_DRITOR; ->20i1 WARN_ON 00000000000000000000 hrlass="line"7assL1baa74rx.c#L1042" i" clabaa74rx.20i1"+code=rx" classxmithricf="_/a>]); code=sdata"/m7oRX_COOP_MONITOR>RX_CO7TINUE; < href="ne87t">2179rx.c#L1058" 2031=5" i0520i1LLLLLLLLLL="line" name=9e1L>20i1e=rx" ef="ne87t">2179rx.c#L1058" 2031=6" i0520i1L8di"L108/a>.rx1004IFTYco=cipher" clas6>RX_DRITOR; ref>ref 12ref="ne87t">2179rx.c#L1058" 2031=7" i0520i1L888888888gt; *20i10class="srefsf"ck * Brvic sttid_hgg_s="sref">rx10c8scu_dede=edennahref="+code=rx" class="sref">rx1004IFTYcotid_s="sref">rxrx2179rx.c#L1058" i9e1=8" i0520i1LLLLLLLLLL="line" name20i1L>20i10s=et0211/a>->tttt">hdrf=)"t/a>.rxRX_CO7TINUE; < href="ne87t">2179rx.c#L1058" 2031=8" i05201186" class="line" name=20118>20111a href=)"t/a>8="sref7>yidxis_multicf="_/aass="line"7re="7>1rt_seq_num/a> rx_flao2>rrt_seq_num1004IFTYco7>1rt_seq_num/a> rx_flao2>rrt_seq_numref>ref 4ref="ne87t">2179rx.c#L1058" 2031=8" i0520i1name="L18ass="sref"8i<20"1n>201113href="net/m8c802182rx.c# c 2011=8" i0520;1a hrexmit_f="+code=rx"20;1a>2011"+code=rx" classxmithrmulticast robust manageun_t mt sesons, times { yidxrx *20111tice=key" class="x *rx *20111class="dsf">rx<"t/a00lass="x *rx *2179rx.c#L1058" i9e1=8" i0520a1s="line" name="L1* pan20a1s>20111 href="net/m7c802171rx.c#L1029" 20-1=8" i0520a1s="line" name="L1* Bro20a1s>20111s=et0211/a>->rx *2179rx.c#L1058" i9e1=8" i0520-1gt;20-12ve 8 else { rxrx->rx20-12sref">is_multicf="_/a"dsf">rx<"t/a00lass="x *2179rx.c#L1058" i9e1=8" i0520i1" name="Lf="_reset_ONT20n1">20-12 WARN_ON 004RX_RA_MATCH_="spin1un008k_multicast_etmespin1un008khreic hrlass="line"7assL1tid_hgg_s="sref">rx *2179rx.c#L1058" i9e1=8" i0520;1" name="Ldev_queue_xmi20n1">20-12 href="net/m7c802173rx.c#L1035" 20a1=8" i0520a1s="line" name="L18c6ss20a1s>20-12m7l6ss="sref7>yidxkey; 2179rx.c#L1058" i9e1=6" i0520i1 name="L18came="L1008"20e1 >20-12tice=key" class="x20e1s>20-1rx->1004rx_result+co20d11>20-1a href="net/m7c802171rx.c#L1029" 20-1=8" i0520r1f="rx_h_amsdu"sref">sd20r1f>20-1/a>.20a1a hrefmulticast robust manede=key" * anso we cticop ddallea mainoa_ OR;w usits to20a1o_ratemulticast robust manede=key" * { 20a13+code=rx" cla>]); code=sdata"/m7oRX_COOP_MONITOR>RX_CO7TINUE; < href="ne87t">2179rx.c#L1058" 2031=8" i0520a110Broadcast/multicast 20a11>20a13=rxref="net/m7c802173rx.c#="L10862011=8" i0520a1s*i"lquire" that rx/a>20a1s>20a13 href="net/m7c802170rx.c#L1007" 20i1=8" i0520a1s* Broadcast/multicast20a1s>20a1s="sr/">1004rvoid/mt_f="+code=ro9ss="line" pros.{s_sa_queryg_nc_eth"L1049" iqdnce(aspros.{s_sa_queryg_nchref=re7&& rx *sdata = 20a13class="srefsf"ck * Broadcastnsf">rx<"t/a00000000re7&& 20a13s=et0211/a>->rx20i14_su href="ne/7">f2179rx.c#L1007" 20-1=8" i0520e1 name="L1004">1004sub_20e1 >20i1ave 8 else e(rx211_sub_ifL1008rx;& >.href="L1094">1094rx;& >.ref="net/m8c802181rx.c#L1091" 20-1=8" i0520e1 name="LRX_" evic 20e1 >20i1rsref">is_multre7&& rx20i14 struct is_mulmeres=e=RXf="net/m8c802181rx.c#L1091" 20-1=8" i0520"1 name="Leths="sref">is20e1 >20i14 href="net/m7c802173rx.c#L1035" 20a1=8" i0520e1 name="Lrta_infosref">20e1 >20i145>..(rx;&dr(1004IFTYcodes="sref">is_mulcode"lin" b_href="ne/7">f2179rx.c#L1007" 2041=8" i0520e1 name="L1004">1004rx_f20e1 >20i14tice=key" class="xrx<"t/a00>]); cf="net/m8c802181rx.c#L1091" 20-1=8" i0520a1ef="+code=rx" class="s20h1e>20i1ref">is_multicf="net/m7c802173rx.c#="L10862011=8" i0520h1exmit_f="+code=rx" cla20h1e>20i1/a>..(rx;&dr(1004IFTYcomgd"sref">rx1004IFTYcobssid"sref">rx->15ve 8 else { .(rx;&dr(rx1004IFTYcomgd"sref">rx1004IFTYcobssid"sref">rxf2179rx.c#L1007" 2041m7c802173r1is_multicf="_/aaulticast robust manageunNotofromdreowcurrmNtwAP " notot rociatamoyet. { 1042 9e1is_multicf="net/m7c802173rx.c#="L1086201158" i0520e12179rx.c#L1058" 203158" i0520e1line" name="Lis_mul"ica9e1lingt1rxis_mulmeres=e=RXeltice=key" class=ctuass="8ad6251cunna "+coNL">1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcosa_querys="sre7&&<_queryf2179rx.c#L1007" 2041m8" i0520e1L1<1035" id="L1035" cla9e1L1rx<"t/a004ulticast robust manageunToo short SA Query-&f="net/m7c802173rx.c#="L1086201168" i0520e1s="line" name="L11111119e1s=">e16=href="net/m8c802182rx.c# c 20116name="LRX1L1(e1sve 8 else vic structref">rxis_mulmeres=e=RX) + e=key" class=o9008s="sref">rx;& >.re href="+code=cipherwlticltic1ref=)tawref=" coNL">1004IFTYcoextra_tx_headroom/a> rx_flaoextra_tx_headrooma " href="ne87t">2179rx.c#L1058" i9e167c802173r1="" clclass="line" namx9r1="">e16alignx.c#)t"+co4rx_f="0420211_unructref">rxe16_ratelimitede=key" ;. =ci_ch2rco_t mrvL/a> rx_flao2rco_t mrvLCONTINUE" class="7fw6251c2948">key; rx;& >.re href="+code=cipherwlticltic1ref=)tawref=" coNL">1004IFTYcoextra_tx_headroom/a> rx_flaoextra_tx_headrooma " href="ne87t">2179rx.c#L1058" i9e168" i0520e168ub_if_data" clads+cod9e168u>e1s="sref">iu8f="+codev bores="sref">is_mulmeres=e=RX 004s="0211_s)ther_addr" clascode=sdmgm_noin =ci_ch2rcopg_noinkey; 2179rx.c#L1058" i9e168" i0520e168" cl->e16="sref">iu8f="+codev etmemse_noinis_mulmeres=e=RX, 0cl24href="ne87t">2179rx.c#L1058" i9e168" i0520a18806888888(1035" id="L19h1880>e16ef">is_multice=key" class=ermemcpys="sre7&&ammemcpyhref="+code=rx" classes="sref">is_mulmeres=e=RX_CONTINUE" class="7"s=noin10NLETH_ALESa " href="ne87t">2179rx.c#L1058" i9e168" i0520h1s="line" name="L11111119h1s=">e16rx *is_mulmeres=e=RX_CONTINUE" class="7"sss="sre7&&1004IFTYcodes="sref">is_mulcode"lin" class="line"7re=dETH_ALESme="L1004">10NLETH_ALESa " href="ne87t">2179rx.c#L1058" i9e178" i0520e1s="line" name="L11111119e1s=">e1s=lass="srefsf href="+NULL+mememcpys="sre7&&ammemcpyhref="+code=rx" classes="sref">is_mulmeres=e=RX_CONTINUE" class="7"bssid"sref">rx1004IFTYcomgd"sref">rx1004IFTYcobssid"sref">rx10NLETH_ALESa " href="ne87t">2179rx.c#L1058" i9e17name="LRX1s="line" name="L11111119X1s=">e17ve 8 else vic stses="sref">is_mulmeres=e=RX_CONTINUE" class="7""+code=cipher" clas6>RX_DROP_M6NITOR; ifc_eth"L1049" id==puoxat>ifchref="+code=rx" clasIEEElassdeYPE_APMGMss="sre7&&WLIEEElassdeYPE_APMGMs e1ssref">is_multicf="""""""""""""""""""""""""""""""+code=rx" clasIEEElassdeSPE_AP>CTIOSme="L1004">10NLIEEElassdeSPE_AP>CTIOSa " href="ne87t">2179rx.c#L1058" i9e178" i0520e1s="line" name="L11111119e1s=">e17_ratelimitede"+code=rx" clas2rcopg_noinkey; is_mulmeres=e=RXeltice=key" class=ctuass="8ad6251cunna "+coNL">1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcosa_querys="sre7&&<_query2179rx.c#L1058" i9e178" i0520e1583" id="L(e1s /a>->is_mulmeres=e=RXeltice=key" class=ctuass="8ad6251cunna "+coNL">1004IFTYcoactid have 8e>rx1004IFTYcocategorys="sre7&&amcategory =ci_chres="sref">is_mulmeres=e=RXeltice=key" class=ctuass="8ad6251cunna "+coNL">1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcosa_querys="sre7&&<_query1004IFTYcoactid have 8e>rxCTIOS_SARQUERY_RESPONSRX_CO7TINUECTIOS_SARQUERY_RESPONSRe=RXf="net/m8c802181rx.c#L1091" 20-1s8" i0520e168d="L1086" class="line9e168d>e17="sref">iu8f="+codev bomemcpys="sre7&&ammemcpyhref="+code=rx" classes="sref">is_mulmeres=e=RX_CONTINUE" class="7"uass="8ad6251cunna "+coNL">1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcosa_querys="sre7&&<_query1004IFTYcotrans_id"sref">rxe17class="dsf">rx<"t/a0ass="line"7re=dmgm_noin1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcosa_querys="sre7&&<_query1004IFTYcotrans_id"sref">rxe17class="srefsf"ck * B"+code=rx" clasAN_STSARQUERY_TR_ID_LESme="L1004">10NLAN_STSARQUERY_TR_ID_LESa " href="ne87t">2179rx.c#L1058" i9e178" i0520h1s="line"7EY_FLAG_TA7NTE9h1s=">e17a>.e18=lass="srefsf href="+NULL+mex" classdetx>ame="L1004">1004rx_ sdtx>ameCONTINUE" class="7fw6lass="vio>rx->key; 2179rx.c#L1058" i9e18name="LRX1line" name="Lalign+code9X1lin>e1aa href="net/m7c802173rx.c#="L1086201187c802173r1 class="7>ss="sref"7unt9r1 cl>e182href="net/m7c802173rx.c#L1035" 20a188" i0520e1LCONFIG_HAVE_EFFICIENT_9e1LCO>e1arx1004rx_resultx.c#L="line" name="Ldebug_noine1a /x_resultx.c#L="line" name="Lhemgm__che8k_multicast_etmeline" name="Lhemgm__che8khref=re7&& f2179rx.c#L1007" 204188" i0520e1s="line" * sinc9e1s=">e1a6rx" class=rere7&& =ci_chs="sref">rxrx7t">/* 2179rx.c#L1058" i9e188" i0520e1s="line" * mo 29e1s=">e1a7rx" class=rere7&& 10us_multicast_etfwss="line" nam">10us href="+code=sdata" c">10us_multicast_etfw">10us hreff="+code=rx" clasIEEElassdeSKB_RXCBme="L1004">10NLIEEElassdeSKB_RXCBhref="+code=rx" class="sref">rxrx2179rx.c#L1058" i9e188" i0520a1s="line" name="L1* obus9h1s=">e18 href="net/m7c802171rx.c#L1029" 20-188" i0520h1s="line" name="L1* belo9h1s=">e18a>.e19sref"multicast robust manede=key" * anFromdhere on, look only at managt mNtw usits e19 hrefmulticast robust manede=key" * anDn> and OR;w usits are already handled ->e19_ratemulticast robust manede=key" * { e1s4 struct"+corfe=key" class=ers="sref">rxrxrxe1sm7l6ss="sref7>yidx]); code=sdata"/m7oRX_COOP_MONITOR>RX_CO7TINUE; < href="ne87t">2179rx.c#L1058" 203198" i0520e168di"L108/a>.rcor--x_f="0420211_sence(RX_DROP_M6NITOR; *e19class="srefsf"ck * Bra hrefode=sdata"/m7oRX_COOP_MONITOR>RX_CO7TINUE; < href="ne87t">2179rx.c#L1058" 203198" i0520h1LLLLLLLLLL="line" name=9h1LLL>e19a>.20i20 struct"+codee=key" class=ers="sref">rxrx->1004IFTYtypIname="L1004">10typI -&gIFTYPE_APname="L1004">10tyta>-&gIFTYPE_APnaina &: 20i20ve 8 else { (rx(RX_DROP_M6NITOR; ->20i2rsref">is_multicf=!ee=key" class=ers="sref">rxf2179rx.c#L1007" 2042=8" i0520i288" cl->20i2 WARN_ON 00inmp;& 20i20 href="net/m7c802173rx.c#L1035" 20a2=5" i0520i2LLLLLLLLLL="line" name=9e2L>20i20m7l6ss="sref7>yidxrxrx;& >.re href="+code=cipherwlticltic1ref=)tawref=" coNL">1004IFTYcoflags_multicast_etfwflagsina &: .10us_multicast_etfw">10us hreRX_CONTINUE" class="7igns="sref">rx;&7igns= < href="ne87t">2179rx.c#L1058" 2032=7" i0520i2L888888888gt; *20i20class="srefsf"ck * Brvic stcfgline" neptodeobsasbeacd have 8e>rxrxrx;& >.re href="+code=cipherwlticltic1ref=)tawref=" coNL">1004IFTYcowiphys="sre7&&amwiphya " c="net/m8c802181rx.c#L1091" 20-2=8" i0520i2LLLLLLLLLL="line" name20i2L>20i20s=et0211/a>->tttt">>>>>>>>>>>>>>>>>>>>>>>>>>>>>="L996"> =ci_chs="sref">rxrx7t">/* rxrxrx10us hreRX_CONTINUE" class="f_nc_eth"L1049" iqdf_nchrefclass="line"7re=d6i_noin2179rx.c#L1058" i9e2=8" i05201286" class="line" name=20128>20121ve 8 else { rx2179rx.c#L1058" i9e2=2" i0520i2s="line" name="L18f3en20a2s>2012rsref">is_multf="net/m7c802173rx.c#="L10862012=8" i0520i2name="L18ass="sref"8i<20"2n>201213href="net/m8c802182rx.c# c 2012=8" i0520;2a hrexmit_f="+code=rx"20;2a>201214 struct"+corf!ee=key" class=ers>10us_multicast_etfw">10us hreRX_CONTINUE" class="rx_flags_multicast_etfwrx_flagsina &: yidxRX_CO7TINUE; < href="ne87t">2179rx.c#L1058" 2032=6" i0520i2s="line" * Sen20a2s>20121 href="net/m7c802170rx.c#L1007" 20i2=7" i0520i2s="line" * kee20a2s>20121class="dsf">rcor-x_f="0420211_sence(rx2179rx.c#L1058" 2032=8" i0520i2s="line" name="L1* Bro20a2s>20121a>.RX_CO7TINUE; < href="ne87t">2179rx.c#L1058" 2012=8" i0520n2" name="Lxmit_f="+code20n2">20-22a href="net/m7c802173rx.c#="L10862012=8" i0520n2" name="Lf="_reset_RX_20n2">20-222href="net/m7c802173rx.c#L1035" 20a2=8" i0520i2" name="Lf="_reset_ONT20n2">20-22rx1004rx_resultx.c#L="line" name="Ldebug_noin20-22 /x_resultx.c#L="line" name="Lheactid have 8e>rxf2179rx.c#L1007" 2042=6" i0520i2 name="L18came="L1008"20e2 >20-226rx" class=rere7&& rx211_sub_ifL1008rx;& >.href="L1094">1094rxrx;& >.reref="ne87t">2179rx.c#L1058" 2012=7" i0520i2sdata"/m8a8me="L1008">20e2s>20-227rx" class=rere7&& rx *sdata = rxsdata = 2179rx.c#L1058" 2012=8" i0520i21004">1004rx_result+co20d21>20-228rx" class=rere7&& =ci_chs="sref">rxrx7t">/* 2179rx.c#L1058" i9e2=8" i0520r2f="rx_h_amsdu"sref">sd20r2f>20-2/a>.10us_multicast_etfwss="line" nam">10us href="+code=sdata" c">10us_multicast_etfw">10us hreff="+code=rx" clasIEEElassdeSKB_RXCBme="L1004">10NLIEEElassdeSKB_RXCBhref="+code=rx" class="sref">rxrx2179rx.c#L1058" i9e2=8" i0520a2s="line" name="L10Broa20a2s>20a23 struct"+cnmp;& rxrxrxrx2179rx.c#L1058" i9e2=8" i0520n2e=sdata"/m70 720o2e>20a23a href=)"t/a>8="sref7>yidxRX_DROP_M6NITOR; 20a23_ratelimitede=key" ;RX_CO7TINUE; < href="ne87t">2179rx.c#L1058" 2012=8" i0520"2name="L170 7 w20"2n>20a23 href="net/m7c802173rx.c#L1035" 20a2=8" i0520a210Broadcast/multicast 20a21>20a23=6ss="sref7re=ulticast robust manageunop ddtoo smalle usits { 20a2s>20a23tice=key" clacorfe=key" class=er0d have 8e>rxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_6a href="+codef="_headroom"s2022=8" i0520a2s* Broadcast/multicast20a2s>20a23class="dsf">rx<"t/a00>]); code=sdata"/m7oRX_COOP_MOUNUSABLRX_CO7TINUE2179rx.c#L1058" 2032=8" i0520a2t robust managemen170920a2t>20a23 href="net/m7c802171rx.c#L1029" 20-2=8" i0520r2f=" eliver_f="+code=rx20r2f>20a23s=et0211/a>-&hdrf=)"t/a>.rx1004IFTYcoactid have 8e>rx1004IFTYcocategorys="sre7&&amcategory 20i24x->2179rx.c#L1058" 2032=8" i0520e2 name="L1004">1004sub_20e2 >20i24a href=)"t/a>8="sref7>yidx20i24alignx.c#)t"+co4r-ee=key" class=ers>10us_multicast_etfw">10us hreRX_CONTINUE" class="rx_flags_multicast_etfwrx_flagsina &: 20i24_ratelimitede=key" ;2179rx.c#L1058" 2032=8" i0520"2 name="Leths="sref">is20e2 >20i24 href="net/m7c802173rx.c#L1035" 20a2=8" i0520e2 name="Lrta_infosref">20e2 >20i245>.1004IFTYcoactid have 8e>rx1004IFTYcocategorys="sre7&&amcategory f2179rx.c#L1007" 2042=8" i0520e2 name="L1004">1004rx_f20e2 >20i24tice=key" clacase "+code=rx" clasAN_STCATEGORY_Hss="sre7&&WLAN_STCATEGORY_Hsice=:ef="ne/7">f2179rx.c#L1007" 2042=8" i0520a2sdata"/m7rlass="sre7dr20e2s>20i24class="dsf">rx<"t/a00multicast robust manageun_tjeampHT actid e usits fromd">100ons notosupptodoa_ HT { .rx1004IFTYcoht_ca="sref">is_mulmeht_ca=a e=coNL">1004IFTYcoht_supptoded"sref">rx20i24s=et0211/a>->tttt">>>>>>>>>gotop;& rx2179rx.c#L1058" 2032=8" i0520e2sdata"/m7s="comment7>/20e2s>20e25=href="net/m8c802182rx.c# c 2012 name="LRX2" e17l_ss="li9eclass="ao22>->25ve 8 else { sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APSTATIOSme="L1004">10NLta>-&gIFTYPE_APSTATIOSa e= &: is_multicf="_/a/a00mTINUE" class="7ass="sref">sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APMESH_POINss="sre7&&WLta>-&gIFTYPE_APMESH_POINsa e= &: sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APAP_VN_Ss="sre7&&WLta>-&gIFTYPE_APAP_VN_Sa e= &: 1042 9e2is_multic=key" ;sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APAPs="sre7&&WLta>-&gIFTYPE_APAPa e= &: sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APADHOCnoin-&gIFTYPE_APADHOCsub_6a href="+codef="_headroom"s202258" i0520e2line" name="Lis_mul"ica9e2lingt25tice=key" class="x; are p_t mnt { ->tttt">hdrfe=key" class=er0d have 8e>rxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_ + 26a href="+codef="_headroom"s202268" i0520e2s="line" name="L11111119e2s=">e26x->rx2179rx.c#L1058" 20326name="LRX2L1(e26a href=)"t/a>8="sref7>yidxe26sref">is_multicf="_/aswitchrfe=key" class=ermgm_noin1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcoht_smps"sref">rx1004IFTYcoactid have 8e>rxf2179rx.c#L1007" 204268" i0520e28888888888="line" name=9e2888>e26_ratelimitede=key" ;CTIOS_SMPSs="sre7&&WLAN_STHTT>CTIOS_SMPSice=:href="ne/7">f2179rx.c#L1007" 204268" i0520"2583" id="L10598888888889e2583>e264f">is_multic=key" ;rxrx2179rx.c#L1058" 203268" i0520e28/a>.yidx1004IFTYcou8ass="8ad6251cunnclass="+code=sdata" c"mps"sref">rx2179rx.c#L1058" 203268" i0520e268ub_if_data" clads+cod9e268u>e26 href="net/m7c802170rx.c#L1007" 20i268" i0520e268" cl->e26class="dsf">rx<"t/a00lass="x1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcoht_smps"sref">rx1004IFTYcosmpsTOR;"sref">rx; f2179rx.c#L1007" 204268" i0520h2s="line" name="L11111119h2s=">e26s=et0211/a>->tttt">>>>>>>>>case "+code=rx" clasAN_STHTTSMPSONTINROL_DISABLRDX_CO7TINUEf2179rx.c#L1007" 204278" i0520e2s="line" name="L11111119e2s=">e27x->rx2179rx.c#L1058" 20327name="LRX2s="line" name="L11111119X2s=">e27ve 8 else { e2ssref">is_multicf=""""""""""""case "+code=rx" clasAN_STHTTSMPSONTINROL_STATICnoinf2179rx.c#L1007" 204278" i0520e2s="line" name="L11111119e2s=">e27_ratelimitede=key" ;rx2179rx.c#L1058" 203278" i0520"2583" id="L(e274f">is_multic=key" ;yidxf2179rx.c#L1007" 204278" i0520e268d="L1086" class="line9e268d>e27tice=key" class="xrx2179rx.c#L1058" 203278" i0520e286" class="line" name="9e286">e27class="dsf">rx<"t/a0e27class="srefsf"ck * BBBBBBBBBBdefault:ef="ne/7">f2179rx.c#L1007" 204278" i0520h2s="line"7EY_FLAG_TA7NTE9h2s=">e27s=et0211/a>->tttt">>>>>>>>>>>>>>>>>gotop;& rx2179rx.c#L1058" 203288" i0520e2a href="+code=rx" class9e2a h>e28x->rx2179rx.c#L1058" 203287c802173r2 class="7>ss="sref"7unt9r2 cl>e282href="net/m7c802173rx.c#L1035" 20a288" i0520e2LCONFIG_HAVE_EFFICIENT_9e2LCO>e28_ratelimitede=key" ;e284f">is_multic=key" ;rx1004IFTYcoht_ca="sref">is_mulmeht_ca=a e=coNL">1004IFTYcoca="sref">is_mulmeca=a e= href="net/m8c802182rx.c# c 201288" i0520e2s="line" * Əe2s=">e28m7l6ss="sref7>yidxrxis_mulmehandled < href="ne87t">2179rx.c#L1058" 203288" i0520e2s="line" * mo 29e2s=">e28 href="net/m8c802182rx.c# c 204288" i0520a2s="line" name="L1* obus9h2s=">e28class="srefsf"ck * BBBBBBBBBB"+code=rx" class="sref">rx1004IFTYcoht_ca="sref">is_mulmeht_ca=a e=coNL">1004IFTYcoca="sref">is_mulmeca=a e= href= ~"+code=sdata" cIEEElassdeHTTCAP_SM_PSs="sre7&&WLIEEElassdeHTTCAP_SM_PS 2179rx.c#L1058" 203288" i0520h2s="line" name="L1* belo9h2s=">e28s=et0211/a>->tttt">>>>>>>>>"+code=rx" class="sref">rx1004IFTYcoht_ca="sref">is_mulmeht_ca=a e=coNL">1004IFTYcoca="sref">is_mulmeca=a e= |f="+code=rx" clas"mps"sref">rx2179rx.c#L1058" 203298" i0520e2s="line" name="L1* Broa9e2s=">e29=href="net/m8c802182rx.c# c 20129name="LRX2" name="Lalign+code=rx"9X2" n>e29ve 8 else { rx1094rxrx;& >.re href="+code=cipherwlticltic1ref=)tawref=" coNL">1004IFTYcowiphys="sre7&&amwiphya " _CONTINUE" class="7"bands"sref">rx10us hreRX_CONTINUE" class="band"sref">rx2179rx.c#L1058" 203297c802173r2a>->->e292href="net/m7c802173rx.c#L1035" 20a298" i0520e288" cl->e29_ratelimitede=key" ;1094;_satITupdatI"sref">rx;_satITupdatIratefe=key" class=er008s="sref">rx;& >.reclass="line"7re=d6band"sref">rxrxe294f">is_multic=key" ;10942179rx.c#L1058" 203298" i0520e2LLLLLLLLLL="line" name=9e2LLL>e2sm7l6ss="sref7>yidxis_mulmehandled < href="ne87t">2179rx.c#L1058" 203298" i0520e268di"L108/a>.rx<"t/a0f2179rx.c#L1007" 204298" i0520a28806888888(a> *e29class="srefsf"ck * Braaaaaaaagotop;& rx2179rx.c#L1058" 203298" i0520h2LLLLLLLLLL="line" name=9h2LLL>e29s=et0211/a>->tttt">f="net/m7c802173rx.c#="L10862013=8" i0520i3=8LLLLLLLL="line" name20i3=>20i30=href="net/m8c802182rx.c# c 2013=8" i0520i3" name="Lalign+code=rx20i3">20i30ve 8 else { ->20i3rsref">is_multcase "+code=rx" clasAN_STCATEGORY_BACKnoinf2179rx.c#L1007" 2043=8" i0520i388" cl->20i3 WARN_ON 00idrfNTINUE" class="7ass="sref">sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APSTATIOSme="L1004">10NLta>-&gIFTYPE_APSTATIOSa e= &: 20i304f">is_multic=key" ;sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APMESH_POINss="sre7&&WLta>-&gIFTYPE_APMESH_POINsa e= &: 20i30m7l6ss="sref7>yidxsdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APAP_VN_Ss="sre7&&WLta>-&gIFTYPE_APAP_VN_Sa e= &: .sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APAPs="sre7&&WLta>-&gIFTYPE_APAPa e= &: rx<"t/a0sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APADHOCnoin-&gIFTYPE_APADHOCsub_6a href="+codef="_headroom"s2023=8" i0520i38806888888(a> *20i30class="srefsf"ck * Br{ 20i30a>.20131ve 8 else { rxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_ + 16a href="+codef="_headroom"s2023=2" i0520i3s="line" name="L18f3en20a3s>20131sref">is_multicf=""""""""""""breakf="net/m8c802182rx.c# c 2013=8" i0520i3name="L18ass="sref"8i<20"3n>201313href="net/m8c802182rx.c# c 2013=8" i0520;3a hrexmit_f="+code=rx"20;3a>201314f">is_multic=key" ;1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcoaddba__nc_eth"L1049" iqdaddba__nca "+coNL">1004IFTYcoactid _ clahave 8e>rxf2179rx.c#L1007" 2043=8" i0520a3s="line" name="L10Broa20a3s>20131m7l6ss="sref7>yidxCTIOS_ADDBA_REQnoinCTIOS_ADDBA_REQice=:ef="ne/7">f2179rx.c#L1007" 2043=6" i0520i3s="line" * Sen20a3s>20131tice=key" class="xrxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_ +ef="ne/7">f2179rx.c#L1007" 2043=7" i0520i3s="line" * kee20a3s>20131class="dsf">rx<"t/a01004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcoaddba__nc_eth"L1049" iqdaddba__nca "+)b_="net/m7c802170rx.c#L1007" 20i3=8" i0520i3s="line" name="L1* pan20a3s>20131class="srefsf"ck * Brrrrrrrrrrrrrrrrrgotop;& rx2179rx.c#L1058" 2033=8" i0520i3s="line" name="L1* Bro20a3s>20131s=et0211/a>->tttt">>>>>>>>>breakf="net/m8c802182rx.c# c 2013=8" i0520-3gt;CTIOS_ADDBA_RESPs="sre7&&WLAN_ST>CTIOS_ADDBA_RESPice=:ef="ne/7">f2179rx.c#L1007" 2043=8" i0520n3" name="Lxmit_f="+code20n3">20-32ve 8 else { rxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_ +ef="ne/7">f2179rx.c#L1007" 2043=8" i0520n3" name="Lf="_reset_RX_20n3">20-32sref">is_multicf="""""""""""""""""""""""seof(" ss="line"7assL1mgm_noin1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcoaddba__ns="sref">is_mulmeaddba__ns=a "+)b_="net/m7c802170rx.c#L1007" 20i3=8" i0520i3" name="Lf="_reset_ONT20n3">20-32_ratelimitede=key" ;rx2179rx.c#L1058" 2033=8" i0520;3" name="Ldev_queue_xmi20n3">20-324f">is_multic=key" ;yidxCTIOS_DELBAs="sre7&&WLAN_ST>CTIOS_DELBAice=:ef="ne/7">f2179rx.c#L1007" 2043=6" i0520i3 name="L18came="L1008"20e3 >20-32tice=key" class="xrxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_ +ef="ne/7">f2179rx.c#L1007" 2043=7" i0520i3sdata"/m8a8me="L1008">20e3s>20-32class="dsf">rx<"t/a01004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcodelbsref">7t">/*1004rx_result+co20d31>20-32class="srefsf"ck * Brrrrrrrrrrrrrrrrrgotop;& rx2179rx.c#L1058" 2033=8" i0520r3f="rx_h_amsdu"sref">sd20r3f>20-32s=et0211/a>->tttt">>>>>>>>>breakf="net/m8c802182rx.c# c 2013=8" i0520a3s="line" name="L10Broa20a3s>20a33x->f2179rx.c#L1007" 2043=8" i0520n3e=sdata"/m70 720o3e>20a33ve 8 else { rx2179rx.c#L1058" 2033=8" i0520n3f="+code cl s20r3f>20a33sref">is_multicf=""""f="net/m7c802173rx.c#="L10862013=8" i0520e3 name="L170ss="sref"7 20e3 >20a333href="net/m8c802182rx.c# c 2013=8" i0520"3name="L170 7 w20"3n>20a334f">is_multic=key" ;rx2179rx.c#L1058" 2033=8" i0520a310Broadcast/multicast 20a31>20a33=6ss="sref7recase "+code=rx" clasAN_STCATEGORY_SPECTRUM_MGMss="sre7&&WLAN_STCATEGORY_SPECTRUM_MGMsice=:ef="ne/7">f2179rx.c#L1007" 2043=8" i0520a3s*i"lquire" that rx/a>20a3s>20a33tice=key" class="x10us hreRX_CONTINUE" class="band"sref">rx20a33class="dsf">rx<"t/a00>>>>>>>>breakf="net/m8c802182rx.c# c 2013=8" i0520i3t robust managemen170920a3t>20a33 href="net/m7c802171rx.c#L1029" 20-3=8" i0520r3f=" eliver_f="+code=rx20r3f>20a33s=et0211/a>->tttt">hdrfe=key" class=er7ass="sref">sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APSTATIOSme="L1004">10NLta>-&gIFTYPE_APSTATIOSa e=6a href="+codef="_headroom"s2023=8" i0520i3her" clas7 7 20i3h>20i34x->1004sub_20e3 >20i34a href=)"t/a>8="sref7>yidx20i34sref">is_multicf=""""multicast robust manageunverify actid _ cla is p_t mnt { 20i34_ratelimitede=key" ;rxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_ + 16a href="+codef="_headroom"s2023=8" i0520"3 name="Leths="sref">is20e3 >20i344f">is_multic=key" ;20e3 >20i345>.1004rx_f20e3 >20i34tice=key" class="x1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcomeasurt mNtnoin1004IFTYcoactid _ clahave 8e>rxf2179rx.c#L1007" 2043=8" i0520a3sdata"/m7rlass="sre7dr20e3s>20i34class="dsf">rx<"t/a00case "+code=rx" clasAN_ST>CTIOS_SPCT_MSR_REQnoinCTIOS_SPCT_MSR_REQice=:ef="ne/7">f2179rx.c#L1007" 2043=8" i0520a3ef="+code=rx" class="s20h3e>20i34class="srefsf"ck * Br=key" ;rxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_ +ef="ne/7">f2179rx.c#L1007" 2043=8" i0520r3exmit_f="+code=rx" cla20h3e>20i34s=et0211/a>->tttt">>>>>>>>>class="x1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcomeasurt mNtnoin->35ve 8 else { sdata = rx2179rx.c#L1058" 2033 8" i0520e3is_multicf="_/a/a000000gotop;& is_mulmehandled < href="ne87t">2179rx.c#L1058" 2033 8" i0520e3;CTIOS_SPCT_CHL_SWITCHX_CO7TINUECTIOS_SPCT_CHL_SWITCHice=:ef="ne/7">f2179rx.c#L1007" 2043 8" i0520"31042 9e3is_multic=key" ;rxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_ +ef="ne/7">f2179rx.c#L1007" 2043 8" i0520e31004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcochan_switchass="8ad6251cunchan_switcha "+)b_="net/m7c802170rx.c#L1007" 20i3=8" i0520a3line" name="Lis_mul"ica9e3lingt35tice=key" class="xsdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APSTATIOSme="L1004">10NLta>-&gIFTYPE_APSTATIOSa e=6a href="+codef="_headroom"s202358" i0520h3s="line" name="L11111119h3s="gt35s=et0211/a>->tttt">lse { e36=href="net/m8c802182rx.c# c 20136name="LRX3L1(e36ve 8 else { .rx;ðer_addr_equs=e 8 fe=key" class=ermgm_noinrxsdata = 1004IFTYcomgd"sref">rx1004IFTYcobssid"sref">rxe36sref">is_multicf="_/alse { e363href="net/m8c802182rx.c# c 201368" i0520"3583" id="L10598888888889e3583>e364f">is_multic=key" ;rx2179rx.c#L1058" 203368" i0520e38/a>.yidxe36tice=key" class="x->e36class="dsf">rcase "+code=rx" clasAN_STCATEGORY_SA_QUERYs="sre7&&WLAN_STCATEGORY_SA_QUERYice=:ef="ne/7">f2179rx.c#L1007" 204368" i0520a38806888888(1035" id="L19h3880>e36class="srefsf"ck * Brhdrfe=key" class=er0d have 8e>rxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_ +ef="ne/7">f2179rx.c#L1007" 204368" i0520h3s="line" name="L11111119h3s=">e36s=et0211/a>->tttt">>>>>>>>> 00seof(" ss="line"7assL1mgm_noin1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcosa_querys="sre7&&amsa_querya "+)b_="net/m7c802170rx.c#L1007" 20i378" i0520e3s="line" name="L11111119e3s=">e37x->e37a href=)"t/a>8="sref7>yidxe3ssref">is_multicf=""""switchrfe=key" class=ermgm_noin1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcosa_querys="sre7&&amsa_querya "+coNL">1004IFTYcoactid have 8e>rxf2179rx.c#L1007" 204378" i0520e3s="line" name="L11111119e3s=">e37_ratelimitede=key" ;CTIOS_SA_QUERY_REQUESss="sre7&&WLAN_ST>CTIOS_SA_QUERY_REQUESsice=:ef="ne/7">f2179rx.c#L1007" 204378" i0520"3583" id="L(e374f">is_multic=key" ;sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APSTATIOSme="L1004">10NLta>-&gIFTYPE_APSTATIOSa e=6a href="+codef="_headroom"s202378" i0520e3583" id="L(e37m7l6ss="sref7>yidxsdata = rx2179rx.c#L1058" 203378" i0520e386" class="line" name="9e386">e37class="dsf">rx<"t/a0is_mulmehandled < href="ne87t">2179rx.c#L1058" 203378" i0520a3s="line" name="L17s us 9h3s=">e37class="srefsf"ck * BBf="net/m7c802173rx.c#="L1086201378" i0520h3s="line"7EY_FLAG_TA7NTE9h3s=">e37s=et0211/a>->tttt">breakf="net/m8c802182rx.c# c 201388" i0520e3a href="+code=rx" class9e3a h>e38x->f2179rx.c#L1007" 20438name="LRX3line" name="Lalign+code9X3lin>e38ve 8 else { rxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_ +ef="ne/7">f2179rx.c#L1007" 204387c802173r3 class="7>ss="sref"7unt9r3 cl>e38sref">is_multicf="_/alse { 1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcoself pro_noin1004IFTYcoactid _ clahave 8e>rxe38_ratelimitede=key" ;e38 href="net/m7c802173rx.c#L1035" 20a388" i0520e3s="line" * Əe3s=">e38m7l6ss="sref7>yidx1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcoself pro_noin1004IFTYcoactid _ clahave 8e>rxf2179rx.c#L1007" 204388" i0520e3s="line" * sinc9e3s=">e38tice=key" class="x10NLAN_STSPPMESH_PEERING_OPESice=:ef="ne/7">f2179rx.c#L1007" 204388" i0520e3s="line" * mo 29e3s=">e38class="dsf">rx<"t/a00case "+code=rx" clasAN_STSPPMESH_PEERING_CLOSRX_CO7TINUEf2179rx.c#L1007" 204388" i0520a3s="line" name="L1* obus9h3s=">e38class="srefsf"ck * BBcase "+code=rx" clasAN_STSPPMESH_PEERING_CONFIRMX_CO7TINUEf2179rx.c#L1007" 204388" i0520h3s="line" name="L1* belo9h3s=">e38s=et0211/a>->tttt">>>>>>>>>co4r-x_f="0420211_sence((sdata = e39x->rx2179rx.c#L1058" 20339name="LRX3" name="Lalign+code=rx"9X3" n>e39ve 8 else { sdata = 1004IFTYcomeshass="8ad6251cunmeshe 8 coNL">1004IFTYcosecuritys="sre7&&amsecuritya +cc!f="+code=rx" clasIEEElassdeMESH_SEC_NONRX_CO7TINUE->->e39sref">is_multicf="_/alse { ->e39_ratelimitede=key" ;e394f">is_multic=key" ;rx2179rx.c#L1058" 203398" i0520e3LLLLLLLLLL="line" name=9e3LLL>e3sm7l6ss="sref7>yidxf2179rx.c#L1007" 204398" i0520e368di"L108/a>.f2179rx.c#L1007" 204398" i0520e36888888888gt;rx<"t/a0<<<<<<<<((sdata = *e39class="srefsf"ck * Braaaaaaaa/a00"_/agotop;& rx2179rx.c#L1058" 203398" i0520h3LLLLLLLLLL="line" name=9h3LLL>e39s=et0211/a>->tttt">aaaaaaaabreakf="net/m8c802182rx.c# c 2014=8" i0520i4=8LLLLLLLL="line" name20i4=>20i40x->20i40ve 8 else { ->20i4rsref">is_multcase "+code=rx" clasAN_STCATEGORY_MESH_>CTIOSX_CO7TINUECTIOSice=:ef="ne/7">f2179rx.c#L1007" 2044=8" i0520i488" cl->20i4 WARN_ON 00idrfNTINUE" class="0d have 8e>rxCTIOS_SIZRX_CO7TINUECTIOS_SIZRsub_ +ef="ne/7">f2179rx.c#L1007" 2044=4" i0520i48LLLLLLLLL="line" name=9e4L>20i404f">is_multic=key" ;1004IFTYcoactid have 8e>rx1004IFTYcouass="8ad6251cunna "+coNL">1004IFTYcomesh_actid have 8e>rx1004IFTYcoactid _ clahave 8e>rx20i40m7l6ss="sref7>yidx.rx<"t/a0((sdata = *20i40class="srefsf"ck * Br{ 20i40s=et0211/a>->tttt">hdrfe=key" class=ermesh_actid ecaspath_se="sref">rx;&mesh_actid ecaspath_se=e 8 fe=key" class=ermgm_noinis_mulmemesh_path_se=ecashwm=e 8 fe=key" class=er7ass="sref">sdata = 20141ve 8 else { is_multicf=""""gotop;& rx2179rx.c#L1058" 2034=8" i0520i4name="L18ass="sref"8i<20"4n>20141 WARf="net/m7c802173rx.c#="L10862014=8" i0520;4a hrexmit_f="+code=rx"20;4a>20141 href="net/m7c802173rx.c#L1035" 20a4=8" i0520a4s="line" name="L10Broa20a4s>20141m7l6ss="sref7returnp;& 2179rx.c#L1058" 2034=6" i0520i4s="line" * Sen20a4s>20141 href="net/m7c802170rx.c#L1007" 20i4=7" i0520i4s="line" * kee20a4s>20141class=;& rxf2179rx.c#L1007" 2044=8" i0520i4s="line" name="L1* pan20a4s>20141class="srefsfe=key" class=er7as0us_multicast_etfw">10us hreRX_CONTINUE" class="rx_flags_multicast_etfwrx_flagslass=|f="+code=rx" clasIEEElassde_X_MALFORMEDT>CTIOS_FRMX_CO7TINUECTIOS_FRM < href="ne87t">2179rx.c#L1058" 2034=9" i0520i4s="line" name="L1* Bro20a4s>20141s=et0211/a>-&multicast robust manageunwill7returnpin the next handlers { 2179rx.c#L1058" 2034=8" i0520n4" name="Lxmit_f="+code20n4">20-42a href=)"t/a>8="sref7>yidx20-42sref">;& is_mulmehandled < h:ef="ne/7">f2179rx.c#L1007" 2044=8" i0520i4" name="Lf="_reset_ONT20n4">20-42_ratelimitedehdrfe=key" class=ers="sref">rx20-424f">is_multic=key" ;rx2179rx.c#L1058" 2034=8" i0520a4s="line" name="L18c6ss20a4s>20-42m7l6ss="sref7NTINUE" class="dev_kfree_skb_multicast_etfwdev_kfree_skbe 8 fe=key" class=ers="sref">rx2179rx.c#L1058" 2034=6" i0520i4 name="L18came="L1008"20e4 >20-42tice=key" clareturnp;& 2179rx.c#L1058" 2034=7" i0520i4sdata"/m8a8me="L1008">20e4s>20-42 href="net/m8c802182rx.c# c 2044=8" i0520i41004">1004rx_result+co20d41>20-42class="+code=sdata" cqueuahave 8e>rxf2179rx.c#L1007" 2044=9" i0520i4f="rx_h_amsdu"sref">sd20r4f>20-42s=et0211/a>-&e=key" class=ers="sref">rx10typkt_pIna=et02f="+code=rx" clasIEEElassdeSDATAOQUEUR_PE_APFRAMRX_CO7TINUE2179rx.c#L1058" 2034=8" i0520a4s="line" name="L10Broa20a4s>20a43x->rxsdata = rxrx2179rx.c#L1058" 2034=8" i0520n4e=sdata"/m70 720o4e>20a43ve 8 else x_f="0420211_sence((rx;& >.re href="+code=cipherwlticltic1ref=)tawref=" , hrefe=key" class=er7ass="sref">sdata = 2179rx.c#L1058" 2034=8" i0520n4f="+code cl s20r4f>20a43sref">is_multhdrfe=key" class=ers="sref">rx20a43 WARN_ON 00e=key" class=ers="sref">rx2179rx.c#L1058" 2034=8" i0520"4name="L170 7 w20"4n>20a434f">is_multicreturnp;& 2179rx.c#L1058" 2034=8" i0520a410Broadcast/multicast 20a41>20a43=6ss=f="net/m7c802173rx.c#="L10862014=8" i0520a4s*i"lquire" that rx/a>20a4s>20a43 href="net/m7c802170rx.c#L1007" 20i4=8" i0520a4s* Broadcast/multicast20a4s>20a43class">10ic x_f="0420211_sence((20a43 hrefx_f="0420211_sence((sdata(rx20a43s=et0ref="ne/7">f2179rx.c#L1007" 2044=8" i0520i4her" clas7 7 20i4h>20i44x->10us hre2f="+code=rx" clasIEEElassdeSKB_RXCBX_CO7TINUErx2179rx.c#L1058" 2034=8" i0520e4 name="L1004">1004sub_20e4 >20i44ve 8 else int x_f="0420211_sesig_multicast_etfwsig hre2f=0ref="ne87t">2179rx.c#L1058" 2034=8" i0520n4 name="LRX_" evic 20e4 >20i442href="net/m7c802173rx.c#L1035" 20a4=8" i0520e4 name="Lrk_bufode=key"20e4 >20i44_ratelimitedemulticast robust manageunskip known-bad actid e usits andcreturnpthempin the next handler { is20e4 >20i444f">is_multicidrfNTINUE" class="7as0us_multicast_etfw">10us hreRX_CONTINUE" class="rx_flags_multicast_etfwrx_flagslass= href="+code=rx" clasIEEElassde_X_MALFORMEDT>CTIOS_FRMX_CO7TINUECTIOS_FRM < h_="net/m7c802170rx.c#L1007" 20i4=8" i0520e4 name="Lrta_infosref">20e4 >20i44m7l6ss="sref7>yidx2179rx.c#L1058" 2034=8" i0520a4 name="L1004">1004rx_f20e4 >20i44 href="net/m7c802170rx.c#L1007" 20i4=8" i0520a4sdata"/m7rlass="sre7dr20e4s>20i44class="dsf">rmulticast robust manageu20i44s=et0multicast robust manag7>yidx->45ve 8 multicast robust manag7>yidxyidx1042 9e4is_multicidrfNTINUE" class="s="sref">rxrx;& >.re href="+code=cipherwlticltic1ref=)tawref=" coNL">1004IFTYcoflags_multicast_etfwflagslass= href="+code=rx" clasIEEElassdeHW_SIGNAL_DBMX_CO7TINUE10us hreRX_CONTINUE" class="signs="sref">rx;&signs= < href="ne87t">2179rx.c#L1058" 2034=8" i0520a4line" name="Lis_mul"ica9e4lingt45 href="net/m7c802170rx.c#L1007" 20i4 8" i0520a4L1<1035" id="L1035" cla9e4L1is_multicidrfNTINUE" class="cfg/a>((rxsdata = 10us hreRX_CONTINUE" class="f_nc_eth"L1049" iqdf_nce 8 class="line"7re=d7ig_multicast_etfwsig hrec="net/m8c802181rx.c#L1091" 20-4=8" i0520a4s="line" name="L11111119h4s="gt4rxsdatarx->tttt">lse { f2179rx.c#L1007" 204468" i0520e4s="line" name="L11111119e4s=">e46x->rxrx2179rx.c#L1058" 203467c802173r4="" clclass="line" namx9r4="">e46sref">is_multicf="_/aNTINUE" class="dev_kfree_skb_multicast_etfwdev_kfree_skbe 8 fe=key" class=ers="sref">rx2179rx.c#L1058" 203468" i0520e48888888888="line" name=9e4888>e46 WARN_ON 00returnp;& 2179rx.c#L1058" 203468" i0520"4583" id="L10598888888889e4583>e464f">is_multicf="net/m7c802173rx.c#="L1086201468" i0520e48/a>.e46 href="net/m7c802170rx.c#L1007" 20i468" i0520a468" cl->e46class="dsf">rreturnp;& 2179rx.c#L1058" 203468" i0520a48806888888(1035" id="L19h4880>e46classf="net/m7c802173rx.c#="L1086201469" i0520i4s="line" name="L11111119h4s=">e46a>.e47x">10ic x_f="0420211_sence((e47a hrex_f="0420211_sence((sdata(rxe4ssref"ref="ne/7">f2179rx.c#L1007" 204478" i0520e4s="line" name="L11111119e4s=">e47_ratelimitedestruct x_f="0420211_sence(rx;&nce(rx;& >.re2f=NTINUE" class="s="sref">rxrx;& >.reref="ne87t">2179rx.c#L1058" 203478" i0520"4583" id="L(e474f">is_multicstruct x_f="0420211_sence((rxsdata2179rx.c#L1058" 203478" i0520e4583" id="L(e47m7l6ss="sref7struct x_f="0420211_sesk_bufp ast_ta 2179rx.c#L1058" 203478" i0520e468d="L1086" class="line9e468d>e47tice=key" clastruct x_f="0420211_sence(sdata(sdata = rxsdata = 2179rx.c#L1058" 203478" i0520a486" class="line" name="9e486">e47class="dsf">rstruct x_f="0420211_sence((10us hre2f="+code=rx" clasIEEElassdeSKB_RXCBX_CO7TINUErx2179rx.c#L1058" 203478" i0520a4s="line" name="L17s us 9h4s=">e47 href="net/m7c802171rx.c#L1029" 20-478" i0520h4s="line"7EY_FLAG_TA7NTE9h4s=">e47s=et0211/a>-&co4r-x_f="0420211_sence(rx(rx;& usit_contro=a hrbb="net/m7c802171rx.c#L1029" 20-488" i0520e4a href="+code=rx" class9e4a h>e48x->2179rx.c#L1058" 20348name="LRX4line" name="Lalign+code9X4lin>e48a href=)"t/a>8="sref7>yidxe48sref">is_multmulticast robust manageue48_ratemulticast robust manag7>yidx1pd is _ns=onsible for handloa_ any actid e48 hrefmulticast robust manag7>yidxe48classmulticast robust manag7>yidx1pd shall alsonuse the managt mNt usite48s=et0multicast robust manag7>yidxe49xmulticast robust manag7>yidxe49ve 8 multicast robust manag7>yidxis_multhdrf!fNTINUE" class="7as0us_multicast_etfw">10us hreRX_CONTINUE" class="rx_flags_multicast_etfwrx_flagslass= href="+code=rx" clasIEEElassde_X_MALFORMEDT>CTIOS_FRMX_CO7TINUECTIOS_FRM < h_ &: ->e49_ratelimitede=keyfe=key" class=er7ass="sref">sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APAPme="L1004">10tyta>-&gIFTYPE_APAPa +cc||="net/m8c802182rx.c# c 201498" i0520"4LLLLLLLLLL="line" name=9e4LLL>e494f">is_multic=key"e=key" class=er7ass="sref">sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APAP_VLASme="L1004">10NLta>-&gIFTYPE_APAP_VLASa hrbb="net/m7c802171rx.c#L1029" 20-498" i0520e4LLLLLLLLLL="line" name=9e4LLL>e4sm7l6ss="sref7>yidx2179rx.c#L1058" 203498" i0520e468di"L108/a>.is_multicidrfNTINUE" class="casmulticast_ether_addrhave 8e>rxsdata *e49class="srefsf"ck * Brreturnp;& 2179rx.c#L1058" 203498" i0520h4LLLLLLLLLL="line" name=9h4LLL>e49a>.20i50x->20i50ve 8 else hdrfe=key" class=ermgm_noin1004IFTYcoactid have 8e>rx1004IFTYcocategorynoin->20i50sref">is_multicf="_/areturnp;& 2179rx.c#L1058" 2035=8" i0520i588" cl->20i503href="net/m8c802182rx.c# c 2015=4" i0520i58LLLLLLLLL="line" name=9e5L>20i504f">is_multice=key" class=ern7kb_multicast_etfwnskbe 8 2f=NTINUE" class="7kb_copy_expand"sref">rxrxrx;& >.re href="+code=cipherwlticltic1ref=)tawref=" coNL">1004IFTYcoextra_tx_headroomicltic1ref=)tawextra_tx_headroome 8 cl0c="net/m8c802181rx.c#L1091" 20-5=5" i0520i5LLLLLLLLLL="line" name=9e5L>20i50m7l6ss="sref7>yidx2179rx.c#L1058" 2035=6" i0520i5L8di"L108/a>.f2179rx.c#L1007" 2045=7" i0520i5L888888888gt;rx<"t/a0sdata2179rx.c#L1058" 2035=8" i0520i58806888888(a> *20i50 href="net/m7c802171rx.c#L1029" 20-5=9" i0520i58LLLLLLLLL="line" name=9h5L>20i50s=et0211/a>->tttt">e=key" class=ernmgm_noin1004IFTYcoactid have 8e>rx1004IFTYcocategorynoin2179rx.c#L1058" 2035=8" i05201558;sdatasdata=a hrclass="line"7re=dETH_ALESme="L1004">10NLETH_ALESa hrbref="ne87t">2179rx.c#L1058" 2035=8" i05201586" class="line" name=20158>20151ve 8 else { sdata=a hrclass="line"7re=ds="sref">rxsdata = 1004IFTYtyaddrhave 8e>rx10NLETH_ALESa hrbref="ne87t">2179rx.c#L1058" 2035=2" i0520i5s="line" name="L18f3en20a5s>201512href="net/m7c802173rx.c#L1035" 20a5=8" i0520i5name="L18ass="sref"8i<20"5n>20151 WARN_ON 00e=key" class=ermemsetnoin2179rx.c#L1058" 2035=4" i0520i5a hrexmit_f="+code=rx"20;5a>20151 href="net/m7c802173rx.c#L1035" 20a5=8" i0520a5s="line" name="L10Broa20a5s>20151m7l6ss="sref7>yidx((rxsdata = 2179rx.c#L1058" 2035=6" i0520i5s="line" * Sen20a5s>201516e 8 else f="net/m7c802173rx.c#="L10862015=7" i0520i5s="line" * kee20a5s>20151class="dsf">rmNUE" class="7"dev_kfree_skb_multicast_etfwdev_kfree_skbe 8 fe=key" class=ers="sref">rx2179rx.c#L1058" 2035=8" i0520i5s="line" name="L1* pan20a5s>20151class="srefsfreturnp;& 2179rx.c#L1058" 2035=9" i0520i5s="line" name="L1* Bro20a5s>20151s=et0f="net/m7c802173rx.c#="L10862015=8" i0520-5gt;20-52a hre">10ic x_f="0420211_sence((20-52sref"x_f="0420211_sence((sdata(rx20-52_rateref="ne/7">f2179rx.c#L1007" 2045=8" i0520;5" name="Ldev_queue_xmi20n5">20-524f">is_multicstruct x_f="0420211_sence(sdata(sdata = rxsdata = 2179rx.c#L1058" 2035=8" i0520a5s="line" name="L18c6ss20a5s>20-52m7l6ss="sref7struct x_f="0420211_sence((rxsdata2179rx.c#L1058" 2035=6" i0520i5 name="L18came="L1008"20e5 >20-52tice=key" claNTINUE" class="__les="line" ata10tyspI 2179rx.c#L1058" 2035=7" i0520i5sdata"/m8a8me="L1008">20e5s>20-52 href="net/m8c802182rx.c# c 2045=8" i0520i51004">1004rx_result+co20d51>20-52class="srefsfe=key" class=er7aIname="L1004">10tyspI rx;& usit_contro=a hr= href="+code=rx" clascpu_to_les="line" ata2179rx.c#L1058" 2035=9" i0520i5f="rx_h_amsdu"sref">sd20r5f>20-52a>.((sdata = 20a53ve 8 else { sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APADHOCnoin-&gIFTYPE_APADHOCa hr= href href="net/m8c802182rx.c# c 2015=8" i0520n5f="+code cl s20r5f>20a53sref">is_multicf=e=key" class=er7ass="sref">sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APSTATIOSme="L1004">10NLta>-&gIFTYPE_APSTATIOSa e=6a href="+codef="_headroom"s2025=8" i0520e5 name="L170ss="sref"7 20e5 >20a53 WARN_ON 00returnp;& 2179rx.c#L1058" 2035=8" i0520"5name="L170 7 w20"5n>20a53 href="net/m7c802173rx.c#L1035" 20a5=8" i0520a510Broadcast/multicast 20a51>20a53m7l6ss="sref7switchrfe=key" class=er7aIname="L1004">10tyspI f2179rx.c#L1007" 2045=8" i0520a5s*i"lquire" that rx/a>20a5s>20a53tice=key" clacase "+code=rx" clascpu_to_les="line" ataf2179rx.c#L1007" 2045=8" i0520a5s* Broadcast/multicast20a5s>20a537ice=key" clacase "+code=rx" clascpu_to_les="line" ata10NLIEEElassdeSPE_APBEACOSa +cb:ef="ne/7">f2179rx.c#L1007" 2045=8" i0520i5t robust managemen170920a5t>20a538ice=key" clacase "+code=rx" clascpu_to_les="line" ata10tyIEEElassdeSPE_APPROBE_RESPa +cb:ef="ne/7">f2179rx.c#L1007" 2045=9" i0520i5f=" eliver_f="+code=rx20r5f>20a53s=et0211/a>->tttt">eulticast robust manageunprocess for all: mesh, mlme,pibss * 20i54x->1004sub_20e5 >20i54ve 8 else case "+code=rx" clascpu_to_les="line" ata10tyIEEElassdeSPE_APASSOC_RESPa +cb:ef="ne/7">f2179rx.c#L1007" 2045=8" i0520n5 name="LRX_" evic 20e5 >20i54sref">is_multcase "+code=rx" clascpu_to_les="line" ata10tyIEEElassdeSPE_APREASSOC_RESPa +cb:ef="ne/7">f2179rx.c#L1007" 2045=8" i0520e5 name="Lrk_bufode=key"20e5 >20i54_ratelimitedecase "+code=rx" clascpu_to_les="line" ataf2179rx.c#L1007" 2045=8" i0520"5 name="Leths="sref">is20e5 >20i544f">is_multiccase "+code=rx" clascpu_to_les="line" ataf2179rx.c#L1007" 2045=8" i0520a5 name="Lrta_infosref">20e5 >20i54m7l6ss="sref7>yidxsdata1004rx_f20e5 >20i54tice=key" class="xrxsdatarx<"t/a0<<<<<<<<2179rx.c#L1058" 2035=8" i0520i5ef="+code=rx" class="s20h5e>20i54 href="net/m7c802171rx.c#L1029" 20-5=9" i0520i5exmit_f="+code=rx" cla20h5e>20i54s=et0211/a>->tttt">eulticast robust manageunprocess only for ">10ion * sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APSTATIOSme="L1004">10NLta>-&gIFTYPE_APSTATIOSa e=6a href="+codef="_headroom"s2025=8" i0520e5" e17l_ss="li9eclass="ao25>->55ve 8 else { 2179rx.c#L1058" 2035=8" i0520n5is_multicf="_/abreakf="net/m8c802182rx.c# c 2015 8" i0520e5;10tyIEEElassdeSPE_APPROBE_REQa +cb:ef="ne/7">f2179rx.c#L1007" 2045 8" i0520"51042 9e5is_multic=key"t">eulticast robust manageunprocess only for ibss * sdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APADHOCnoin-&gIFTYPE_APADHOCa hr6a href="+codef="_headroom"s2025=8" i0520a5line" name="Lis_mul"ica9e5lingt55tice=key" class="x2179rx.c#L1058" 2035=8" i0520a5L1<1035" id="L1035" cla9e5L1rx<"t/a0f2179rx.c#L1007" 2045 9" i0520i5s="line" name="L11111119h5s="gt55s=et0211/a>->tttt">returnp;& 2179rx.c#L1058" 203568" i0520e5s="line" name="L11111119e5s=">e56x->8="sref7>yidxe56sref">is_multmulticast robust manageu queua upe usit andckick off workpto process it * e56 WARe=key" class=ers="sref">rx10typkt_pIna=et02f="+code=rx" clasIEEElassdeSDATAOQUEUR_PE_APFRAMRX_CO7TINUE2179rx.c#L1058" 203568" i0520"5583" id="L10598888888889e5583>e564f">is_multice=key" class=er7kb_queua_tai;"sref">rxsdata = rxrx2179rx.c#L1058" 203568" i0520e58/a>.(rxrx;& >.re href="+code=cipherwlticltic1ref=)tawref=" , hrefe=key" class=er7ass="sref">sdata = 2179rx.c#L1058" 203568" i0520e568ub_if_data" clads+cod9e568u>e566e 8 else hdrfe=key" class=ers="sref">rx->e56class="dsf">rx<"t/a0rx2179rx.c#L1058" 203568" i0520a58806888888(1035" id="L19h5880>e56 href="net/m7c802171rx.c#L1029" 20-569" i0520i5s="line" name="L11111119h5s=">e56s=et0211/a>-&returnp;& 2179rx.c#L1058" 203578" i0520e5s="line" name="L11111119e5s=">e57xf="net/m7c802173rx.c#="L108620157name="LRX5s="line" name="L11111119X5s=">e57a href=)"t/a>8="sref7>yidxe57sref"multicast robust manageu TODO:7use IEEElassde_X_FRAGMENTED * e57_rate">10ic void NTINUE" class="nce((sdata(rxis_multic=key"t">>>>>>>>>>>>>>>>>>>>>>>>>struct x_f="0420211_sence(rx(rxf2179rx.c#L1007" 204578" i0520e568d="L1086" class="line9e568d>e57tice=key" clastruct x_f="0420211_sence(sdata(sdata = 2179rx.c#L1058" 203578" i0520a586" class="line" name="9e586">e57class="dsf">rstruct x_f="0420211_sence(rx;&nce(rx;& >.re2f=NTINUE" class="s="sref">rxrx;& >.reref="ne87t">2179rx.c#L1058" 203578" i0520a5s="line" name="L17s us 9h5s=">e578lass="dsf">rstruct x_f="0420211_sesk_bufp ast_ta rx.reref="ne87t">2179rx.c#L1058" 203579" i0520i5s="line"7EY_FLAG_TA7NTE9h5s=">e57s=et0211/a>-&struct x_f="0420211_se>21_devica"sref">rx21_devicae 8 =*e=key" class=erprev_devass="8ad6251cunprev_deve 8 2f=NTINUE" class="NULLnoin.reref="ne87t">2179rx.c#L1058" 203588" i0520e5a href="+code=rx" class9e5a h>e58x->10us hre2f="+code=rx" clasIEEElassdeSKB_RXCBX_CO7TINUE2179rx.c#L1058" 20358name="LRX5line" name="Lalign+code9X5lin>e58ve 8 else int x_f="0420211_seneeded_headroomicltic1ref=)tawneeded_headroom>.reref="ne87t">2179rx.c#L1058" 203587c802173r5 class="7>ss="sref"7unt9r5 cl>e582href="net/m7c802173rx.c#L1035" 20a588" i0520e5LCONFIG_HAVE_EFFICIENT_9e5LCO>e58_ratelimitedemulticast robust manageue58 hrefmulticast robust manag7>yidxis_multicidrfNTINUE" class="s="sref">rxe58class="srefsf"ck * Brgoto="+code=rx" clasout_free_skb_multicast_etfwout_free_skb>.reref="ne87t">2179rx.c#L1058" 203589" i0520i5s="line" name="L1* belo9h5s=">e58s=et0211/a>-&e=key" class=ers="sref">rx2179rx.c#L1058" 203598" i0520e5s="line" name="L1* Broa9e5s=">e59=href="net/m8c802182rx.c# c 20159name="LRX5" name="Lalign+code=rx"9X5" n>e591ratelimitedemulticast robust manageu If there are no cooked monitor interfacts, just uee the SKBa* is_multhdrf!NTINUE" class=t008s="sref">rx;& >.re href="+code=cipherwcooked_mntrs_multicast_etfwcooked_mntrslass_="net/m7c802170rx.c#L1007" 20i598" i0520e588" cl->e59_ratelimitede=key* Brgoto="+code=rx" clasout_free_skb_multicast_etfwout_free_skb>.reref="ne87t">2179rx.c#L1058" 203598" i0520"5LLLLLLLLLL="line" name=9e5LLL>e59 href="net/m7c802173rx.c#L1035" 20a598" i0520e5LLLLLLLLLL="line" name=9e5LLL>e5sm7l6ss="sref7multicast robust manageu room for the radiotap header basedeon driver fe10urts * .(rx(rx;& >.reclass="line"7re=d7as0us_multicast_etfw">10us hre6ref="ne87t">2179rx.c#L1058" 203598" i0520e56888888888gt; *e59class="srefsfhdrfe=key" class=er7kb_headroomicltic1ref=)taw7kb_headroome 8 fe=key" class=er7kb_multicast_etfwskbe 8 6 <f="+code=rx" clasneeded_headroomicltic1ref=)tawneeded_headroom>.re2 href href="net/m8c802182rx.c# c 201598" i0520h5LLLLLLLLLL="line" name=9h5LLL>e59s=et0211/a>->tte=key" class=erp7kb_expand_headass="8ad6251cunp7kb_expand_heade 8 fe=key" class=er7kb_multicast_etfwskbe 8 class="line"7re=dneeded_headroomicltic1ref=)tawneeded_headroom>.recl0c0ass="line"7re=dGFP_ATOMICnoin20i60x->.reref="ne87t">2179rx.c#L1058" 2036=8" i0520i6" name="Lalign+code=rx20i6">20i60a href=)"t/a>8="sref7>yidx->20i60sref">is_multmulticast robust manageu prependcradiotap inform10ion * ->20i60 WARe=key" class=ernce(rx(rx;& >.reclass="line"7re=d7kb_multicast_etfwskbe 8 class="line"7re=dsata"sref">rx.rec="net/m8c80218211/rx.c#L9802036=4" i0520i68LLLLLLLLL="line" name=9e6L>20i604f">is_multic=key"t">>>>>>>>>>>>>>>>>>>>>>>>>lass="line"7re=dfalsa"sref">rx2179rx.c#L1058" 2036=5" i0520i6LLLLLLLLLL="line" name=9e6L>20i605>..2179rx.c#L1058" 2036=7" i0520i6L888888888gt;rmNUE" class="7"7kb_multicast_etfwskbe 8 RX_CONTINUE" class="ip_sut mdass="8ad6251cunip_sut md>.re2f="+code=rx" clasCHECKSUM_UNNECESSARYass="8ad6251cunCHECKSUM_UNNECESSARY>.reref="ne87t">2179rx.c#L1058" 2036=8" i0520i6L806888888(a> *20i60class="srefsfe=key" class=er7kb_multicast_etfwskbe 8 RX_CONTINUE" class="pkt_pIname="L1004">10typkt_pIna=et02f="+code=rx" clasPACKET_OTHERHOSTme="L1004">10tyPACKET_OTHERHOST>.reref="ne87t">2179rx.c#L1058" 2036=9" i0520i6LLLLLLLLLL="line" name=9h6L>20i60s=et0211/a>-&e=key" class=er7kb_multicast_etfwskbe 8 RX_CONTINUE" class="protoco="sref">rx;&protoco==et02f="+code=rx" clashtons_multicast_etfwhtonse 8 fe=key" class=erETH_P_.c#_2_multicast_etfwETH_P_.c#_2 hre6ref="ne87t">2179rx.c#L1058" 2036=8" i05201658;20161ve 8 else e=key" class=er0ist_for_each_manry_rcu"sref">rx;&aist_for_each_manry_rcue 8 fe=key" class=er7ass="sref">sdata = rx;& >.re href="+code=cipherwinterfactsass="8ad6251cuninterfactslassclass="line"7re=daist"sref">rx;&aiste 8 6 ref="ne/7">f2179rx.c#L1007" 2046=2" i0520i6s="line" name="L18f3en20a6s>20161sref">is_multicf="_/aco4r-x_f="0420211_sence( = <_runnoa_"sref">sdata(sdata = 20161 WARN_ON 0000000000continueref="ne87t">2179rx.c#L1058" 2036=4" i0520i6a hrexmit_f="+code=rx"20;6a>20161 href="net/m7c802173rx.c#L1035" 20a6=8" i0520a6s="line" name="L10Broa20a6s>20161m7l6ss="sref7>yidxsdata = 1004IFTYtypIname="L1004">10typI -&gIFTYPE_APMONITORX_CO7TINUE-&gIFTYPE_APMONITORlass=||="net/m8c802182rx.c# c 2016=6" i0520i6s="line" * Sen20a6s>20161tice=key" class="xsdata = rx;&na "+coNL">1004IFTYcomntr_flags_multicast_etfwmntr_flagslass= href="+code=rx" clasMONITOR_FLAG_COOKPFRAMRS_multicast_etfwMONITOR_FLAG_COOKPFRAMRSa hrbb="net/m8c802182rx.c# c 2016=7" i0520i6s="line" * kee20a6s>20161class="dsf">rx<"t/a0<<<<<<<<2179rx.c#L1058" 2036=8" i0520i6s="line" name="L1* pan20a6s>20161 href="net/m7c802171rx.c#L1029" 20-6=9" i0520i6s="line" name="L1* Bro20a6s>20161s=et0211/a>->tttt">hdrfe=key" class=erprev_devass="8ad6251cunprev_deve 8 6 ref="ne/7">f2179rx.c#L1007" 2046=8" i0520-6gt;.re2f=NTINUE" class="7kb_clomultulticast_etfw7kb_clomue 8 fe=key" class=er7kb_multicast_etfwskbe 8 class="line"7re=dGFP_ATOMICnoin2179rx.c#L1058" 2036=8" i0520n6" name="Lxmit_f="+code20n6">20-62ve 8 else { .re6 ref="ne/7">f2179rx.c#L1007" 2046=2" i0520i6" name="Lf="_reset_RX_20n6">20-62sref">is_multicf="_/ahre="_tn else e=key" class=er7kb2_multicast_etfwskb2>.re_CONTINUE" class="7"devass="8ad6251cundeve 8 2f=NTINUE" class="prev_devass="8ad6251cunprev_deve 8 ref="ne87t">2179rx.c#L1058" 2036=8" i0520i6" name="Lf="_reset_ONT20n6">20-62 WARN_ON 0000000000 else e=key" class=er>21if_receive_skb_multicast_etfw>21if_receive_skbe 8 fe=key" class=er7kb2_multicast_etfwskb2>.re6ref="ne87t">2179rx.c#L1058" 2036=4" i0520i6" name="Ldev_queue_xmi20n6">20-624f">is_multic=key"t">>>>>>>>>f="net/m7c802173rx.c#="L10862016=8" i0520a6s="line" name="L18c6ss20a6s>20-62m7l6ss="sref7>yidx20-62 href="net/m7c802170rx.c#L1007" 20i6=7" i0520i6sdata"/m8a8me="L1008">20e6s>20-62class="dsf">rx<"t/a0sdata = 2179rx.c#L1058" 2036=8" i0520i61004">1004rx_result+co20d61>20-62class="srefsf"ck * BrNTINUE" class="7ass="sref">sdata = 1004IFTYcorx_packets_multicast_etfwrx_packetsa e=++ref="ne87t">2179rx.c#L1058" 2036=9" i0520i6f="rx_h_amsdu"sref">sd20r6f>20-62s=et0211/a>->tttt">e=key" class=er7ass="sref">sdata = 1004IFTYcorx_byttsass="8ad6251cunrx_bytts=et02+f=NTINUE" class="7kb_multicast_etfwskbe 8 RX_CONTINUE" class="0d have 8e>rx2179rx.c#L1058" 2036=8" i0520a6s="line" name="L10Broa20a6s>20a63x->20a63a href=)"t/a>8="sref7>yidxis_multhdrfe=key" class=erprev_devass="8ad6251cunprev_deve 8 6 ref="ne/7">f2179rx.c#L1007" 2046=8" i0520e6 name="L170ss="sref"7 20e6 >20a63 WARN_ON 00NTINUE" class="7kb_multicast_etfwskbe 8 RX_CONTINUE" class="devass="8ad6251cundeve 8 2f=NTINUE" class="prev_devass="8ad6251cunprev_deve 8 ref="ne87t">2179rx.c#L1058" 2036=8" i0520"6name="L170 7 w20"6n>20a634f">is_multic=key"t">e=key" class=er>21if_receive_skb_multicast_etfw>21if_receive_skbe 8 fe=key" class=er7kb_multicast_etfwskbe 8 6ref="ne87t">2179rx.c#L1058" 2036=8" i0520a610Broadcast/multicast 20a61>20a63m7l6ss="sref7>yidx2179rx.c#L1058" 2036=6" i0520i6s*i"lquire" that rx/a>20a6s>20a63tice=key" claf="net/m7c802173rx.c#="L10862016=7" i0520i6s* Broadcast/multicast20a6s>20a63 href="net/m8c802182rx.c# c 2046=8" i0520i6t robust managemen170920a6t>20a638ice=k"+code=rx" clasout_free_skb_multicast_etfwout_free_skb>.re:ef="ne/7">f2179rx.c#L1007" 2046=9" i0520i6f=" eliver_f="+code=rx20r6f>20a63s=et0211/a>-&e=key" class=erdev_kfree_skb_multicast_etfwdev_kfree_skbe 8 fe=key" class=er7kb_multicast_etfwskbe 8 6ref="ne87t">2179rx.c#L1058" 2036=8" i0520i6her" clas7 7 20i6h>20i64xf="net/m7c802173rx.c#="L10862016=8" i0520e6 name="L1004">1004sub_20e6 >20i64a href=)"t/a>8="sref7>yidx20i64sref"">10ic void NTINUE" class="nce((sdata(rx20i64 WARN_ON 0000000000 else c=key"t">e=key" class=ernce((is20e6 >20i644f">iref="ne/7">f2179rx.c#L1007" 2046=8" i0520a6 name="Lrta_infosref">20e6 >20i64m7l6ss="sref7switchrfe=key" class=errtsass="8ad6251cunreslass_ ref="ne/7">f2179rx.c#L1007" 2046=8" i0520a6 name="L1004">1004rx_f20e6 >20i64tice=key" clacase "+code=rx" clasRXODROP_MONITORX_CO7TINUEf2179rx.c#L1007" 2046=8" i0520a6sdata"/m7rlass="sre7dr20e6s>20i64class="dsf">rx<"t/a0<"+code=rx" clasI.c#_DEBUG_INCX_CO7TINUErxsdata = rx;& >.re href="+code=cipherwrx_handlers_dropass="8ad6251cunrx_handlers_drope 8 6ref="ne87t">2179rx.c#L1058" 2036=8" i0520i6ef="+code=rx" class="s20h6e>20i64class="srefsf"ck * Brhdrfe=key" class=ers="sref">rx20i64s=et0211/a>->tttt">x<"t/a0<"+code=rx" class="sref">rx2179rx.c#L1058" 2036=8" i0520e6sdata"/m7s="comment7>/20e6s>20e65x->->65ve 8 else case "+code=rx" clasRXOCONTINURX_CO7TINUEf2179rx.c#L1007" 2046=8" i0520n6is_multicf="_/astruct x_f="0420211_sence(rx(rx2179rx.c#L1058" 2036 8" i0520e6;rx(rx2179rx.c#L1058" 2036 8" i0520"61042 9e6is_multic=key"t">struct x_f="0420211_sence((10us hreref="ne87t">2179rx.c#L1058" 2036 8" i0520a6.10us hre2f="+code=rx" clasIEEElassdeSKB_RXCBX_CO7TINUErx2179rx.c#L1058" 2036=8" i0520a6L1<1035" id="L1035" cla9e6L1rxrxrx;& >.re href="+code=cipherwlticltic1ref=)tawref=" coNL">1004IFTYcowiphynoin.re href="+code=cipherwbands_multicast_etfwbands>.re[e=key" class=er7as0us_multicast_etfw">10us hre href="+code=cipherwband_multicast_etfwband hre]ref="ne87t">2179rx.c#L1058" 2036=9" i0520i6s="line" name="L11111119h6s="gt65s=et0211/a>->tttt">co4r-fe=key" class=er7as0us_multicast_etfw">10us hre href="+code=cipherwflag_multicast_etfwflaglass= href="+code=rx" clas_X_FLAG_HTme="L1004">10ty_X_FLAG_HTa hrbb="net/m8c802182rx.c# c 201668" i0520e6s="line" name="L11111119e6s=">e66x->rxrx10us hre href="+code=cipherwrata_id="sref">rx2179rx.c#L1058" 20366name="LRX6L1(e66a href=)"t/a>8="sref7>yidxe66sref">is_multicf="_/ax_f="0420211_sence((rxrx2179rx.c#L1058" 203668" i0520e68888888888="line" name=9e6888>e66 WARN_ON 00breakf="net/m8c802182rx.c# c 201668" i0520"6583" id="L10598888888889e6583>e664f">is_multic=key"t">f="net/m7c802173rx.c#="L1086201668" i0520e68/a>.f2179rx.c#L1007" 204668" i0520e668ub_if_data" clads+cod9e668u>e66tice=key" class="xrxsdata = rx;& >.re href="+code=cipherwrx_handlers_dropass="8ad6251cunrx_handlers_drope 8 6ref="ne/7">f2179rx.c#L1007" 204668" i0520a668" cl->e66class="dsf">rx<"t/a0rxrx2179rx.c#L1058" 203669" i0520i6s="line" name="L11111119h6s=">e66s=et0211/a>->tttt">e=key" class=erdev_kfree_skb_multicast_etfwdev_kfree_skbe 8 fe=key" class=ers="sref">rx2179rx.c#L1058" 203678" i0520e6s="line" name="L11111119e6s=">e67x->e67ve 8 else case "+code=rx" clasRXOQUEURDX_CO7TINUEf2179rx.c#L1007" 204677c802173r6s="line" name="L11111119r6s=">e67sref">is_multicf="_/ax_f="0420211_seI.c#_DEBUG_INCX_CO7TINUErxsdata = rx;& >.re href="+code=cipherwrx_handlers_queuadass="8ad6251cunrx_handlers_queuade 8 6ref="ne87t">2179rx.c#L1058" 203678" i0520e6s="line" name="L11111119e6s=">e67 WARN_ON 00breakf="net/m8c802182rx.c# c 201678" i0520"6583" id="L(e674f">is_multicf="net/m7c802173rx.c#="L1086201678" i0520e6583" id="L(e67m7l6sf="net/m7c802173rx.c#="L1086201678" i0520e668d="L1086" class="line9e668d>e67 href="net/m7c802170rx.c#L1007" 20i678" i0520a686" class="line" name="9e686">e67class">10ic void NTINUE" class="nce((sdata(rxe678lassref="ne/7">f2179rx.c#L1007" 204679" i0520i6s="line"7EY_FLAG_TA7NTE9h6s=">e67s=et0211/a>-&e=key" class=ernce((2179rx.c#L1058" 203688" i0520e6a href="+code=rx" class9e6a h>e68x->2179rx.c#L1058" 20368name="LRX6line" name="Lalign+code9X6lin>e68a href=)"t/a>8="sref7>yidxe682href#def="s="+code=rx" clasCALL_RXHX_CO7TINUE8="sref7>yidxe68_ratelimitededo {="srefsf"ck * Br else \f=)"t/a>8="sref7>yidxe684f">is_multic=key"t">e=key" class=errtsass="8ad6251cunreslass2f=NTINUE" class="s=hass="8ad6251cuns=hlassfe=key" class=ers="sref">rx8="sref7>yidxyidx8="sref7>yidx8="sref7>yidxis_multic} while (06ref="ne87t">2179rx.c#L1058" 203688" i0520a6s="line" name="L1* obus9h6s=">e68 href="net/m7c802171rx.c#L1029" 20-689" i0520i6s="line" name="L1* belo9h6s=">e68s=et0211/a>-&e=key" class=erspin/008kass="8ad6251cunspin/008klassf hrefe=key" class=ers="sref">rxrx;& >.re href="+code=cipherwrx_7kb_queua"sref">rx1004IFTYco008kass="8ad6251cun008klass6ref="ne87t">2179rx.c#L1058" 203698" i0520e6s="line" name="L1* Broa9e6s=">e69x->rxrx;& >.re href="+code=cipherwrunnoa_/rx_handler"sref">rxe69ve 8 else { 2179rx.c#L1058" 203697c802173r6a>->->e692href="net/m7c802173rx.c#L1035" 20a698" i0520e688" cl->e69_ratelimitedee=key" class=ers="sref">rxrx;& >.re href="+code=cipherwrunnoa_/rx_handler"sref">rx10typru2179rx.c#L1058" 203698" i0520"6LLLLLLLLLL="line" name=9e6LLL>e69 href="net/m7c802173rx.c#L1035" 20a698" i0520e6LLLLLLLLLL="line" name=9e6LLL>e6sm7l6ss="sref7while (fe=key" class=er7kb_multicast_etfwskbe 8 2f=NTINUE" class="__7kb_dequeua"sref">rxrxrx;& >.re href="+code=cipherwrx_7kb_queua"sref">rxf2179rx.c#L1007" 204698" i0520e668di"L108/a>.rxrx;& >.re href="+code=cipherwrx_7kb_queua"sref">rx1004IFTYco008kass="8ad6251cun008klass6ref="ne87t">2179rx.c#L1058" 203698" i0520a66888888888gt; *e69class="srefsf"ck * BrNulticast robust manageue69s=et0multicast robust manag7>yidx20i70xmulticast robust manag7>yidx20i70a hremulticast robust manag7>yidx10ion->20i70sref"multicast robust manag7>yidx->20i70 WARN_ON 00NTINUE" class="s="sref">rx2179rx.c#L1058" 2037=4" i0520i78LLLLLLLLL="line" name=9e7L>20i70 href="net/m7c802173rx.c#L1035" 20a7=5" i0520i7LLLLLLLLLL="line" name=9e7L>20i70m7l6ss="sref7>yidx((.(sdata(rx<"t/a0<"+code=rx" clasCALL_RXHX_CO7TINUE(rx;&nce( *20i70class="srefsf"ck * BrNTINUE" class="CALL_RXHX_CO7TINUE(1_process"sref">rx;&nce(1_processode=_="net/m7c802170rx.c#L1007" 20i7=9" i0520i7LLLLLLLLLL="line" name=9h7L>20i70s=et0211/a>->tttt">e=key" class=erCALL_RXHX_CO7TINUE((((20171ve 8 else { ((20171 WARN_ON 00idrfNTINUE" class="cce((rxsdata = 201714f">is_multic=key"t">>>>>>>>>m=key" class=erCALL_RXHX_CO7TINUE(sdata(2179rx.c#L1058" 2037=8" i0520a7s="line" name="L10Broa20a7s>20171m7l6s#endifef="ne87t">2179rx.c#L1058" 2037=6" i0520i7s="line" * Sen20a7s>20171tice=key" class="x(sdata(20171class="dsf">rx<"t/a0(sdata((rx;&nce(2179rx.c#L1058" 2037=9" i0520i7s="line" name="L1* Bro20a7s>20171s=et0211/a>->tttt">m=key" class=erCALL_RXHX_CO7TINUE(sdata((sdata(20-72ve 8 else { (rx;&nce(20-72sref">is_multicf="_/am=key" class=erCALL_RXHX_CO7TINUE(sdata(20-72 WARN_ON 00m=key" class=erCALL_RXHX_CO7TINUE(sdata(20-72 href="net/m7c802173rx.c#L1035" 20a7=8" i0520a7s="line" name="L18c6ss20a7s>20-72m7l6ss"+code=rx" class=h_nex_noinf2179rx.c#L1007" 2047=6" i0520i7 name="L18came="L1008"20e7 >20-72tice=key" class="x((rx2179rx.c#L1058" 2037=7" i0520i7sdata"/m8a8me="L1008">20e7s>20-72class="dsf">rx<"t/a0rxrx;& >.re href="+code=cipherwrx_7kb_queua"sref">rx1004IFTYco008kass="8ad6251cun008klass6ref="ne87t">2179rx.c#L1058" 2037=8" i0520i71004">1004rx_result+co20d71>20-72class#undefnm=key" class=erCALL_RXHX_CO7TINUE2179rx.c#L1058" 2037=9" i0520i7f="rx_h_amsdu"sref">sd20r7f>20-72s=et0211/a>-&f="net/m7c802173rx.c#="L10862017=8" i0520a7s="line" name="L10Broa20a7s>20a73=href="net/m8c802182rx.c# c 2017=8" i0520n7e=sdata"/m70 720o7e>20a73ve 8 else e=key" class=ers="sref">rxrx;& >.re href="+code=cipherwrunnoa_/rx_handler"sref">rxrx2179rx.c#L1058" 2037=8" i0520n7f="+code cl s20r7f>20a732href="net/m7c802173rx.c#L1035" 20a7=8" i0520e7 name="L170ss="sref"7 20e7 >20a73 "+code=rx" clasun008kass="8ad6251cunun008ke 8 :ef="ne/7">f2179rx.c#L1007" 2047=8" i0520"7name="L170 7 w20"7n>20a734f">is_multice=key" class=er7pin/un008kass="8ad6251cun7pin/un008klassf hrefe=key" class=ers="sref">rxrx;& >.re href="+code=cipherwrx_7kb_queua"sref">rx1004IFTYco008kass="8ad6251cun008klass6ref="ne/7">f2179rx.c#L1007" 2047=8" i0520a710Broadcast/multicast 20a71>20a73m7l6sf="net/m7c802173rx.c#="L10862017=6" i0520i7s*i"lquire" that rx/a>20a7s>20a73 href="net/m7c802170rx.c#L1007" 20i7=7" i0520i7s* Broadcast/multicast20a7s>20a73class">10ic void NTINUE" class="nce((sdata(rx20a738lassref="ne/7">f2179rx.c#L1007" 2047=9" i0520i7f=" eliver_f="+code=rx20r7f>20a73s=et0211/a>-&e=key" class=ernce((2179rx.c#L1058" 2037=8" i0520i7her" clas7 7 20i7h>20i74=href="net/m8c802182rx.c# c 2017=8" i0520e7 name="L1004">1004sub_20e7 >20i74a hre#def="s="+code=rx" clasCALL_RXHX_CO7TINUE8="sref7>yidx20i74sref">is_multdo {="srefsf"ck * Br else \f=)"t/a>8="sref7>yidx20i74 WARN_ON 00"+code=sdata" crtsass="8ad6251cunreslass2f=NTINUE" class="s=hass="8ad6251cuns=hlassfe=key" class=ers="sref">rx8="sref7>yidxis20e7 >20i744f">is_multic=key"t">hdrfe=key" class=errtsass="8ad6251cunreslass2!f="+code=rx" clasRXOCONTINURX_CO7TINUE8="sref7>yidx20e7 >20i74m7l6ss="sref7>yidx8="sref7>yidx1004rx_f20e7 >20i74tice=key" cla} while (06ref="ne87t">2179rx.c#L1058" 2037=8" i0520a7sdata"/m7rlass="sre7dr20e7s>20i74 href="net/m8c802182rx.c# c 2047=8" i0520i7ef="+code=rx" class="s20h7e>20i74class="srefsfe=key" class=erCALL_RXHX_CO7TINUE(sdata(20i74s=et0="net/m7c802170rx.c#L1007" 20i7=8" i0520e7sdata"/m7s="comment7>/20e7s>20e75x->(sdata(rx->75a href=)"t/a>8="sref7>yidxis_multm=key" class=ernce((rx2179rx.c#L1058" 2037 8" i0520"71042 9e7f2179rx.c#L1007" 2047=8" i0520a7line" name="Lis_mul"ica9e7lingt75tice=key" claNTINUE" class="nce((rx2179rx.c#L1058" 2037=8" i0520a7L1<1035" id="L1035" cla9e7L12179rx.c#L1058" 2037=9" i0520i7s="line" name="L11111119h7s="gt75s=et0f="net/m7c802173rx.c#="L1086201768" i0520e7s="line" name="L11111119e7s=">e76=href="net/m8c802182rx.c# c 20176name="LRX7L1(e76a hremulticast robust manageue76sref"multicast robust manag7* This func0ion makes p; ls into the RX path, thereforee76 multicast robust manag7* it haspto be invoked under RCURread 008k.imulticast robust manag7* .1_infoass="8ad6251cun7>1_infolass=*e=key" class=er7ass="sre7&&a = e76tice=ref="ne/7">f2179rx.c#L1007" 204768" i0520a768" cl->e76class="dsf">rstruct x_f="0420211_sence(sdata(rxf2179rx.c#L1007" 204768" i0520i78806888888(1035" id="L19h7880>e76class="srefsf"ck * BrcoNL">1004IFTYco7ass="sre7&&a = f2179rx.c#L1007" 204769" i0520i7s="line" name="L11111119h7s=">e76s=et0211/a>->tttt">coNL">1004IFTYco7ass="sref">sdata = sdata = f2179rx.c#L1007" 204778" i0520e7s="line" name="L11111119e7s=">e77x->1004IFTYco008s="sref">rx;& >.re2f=NTINUE" class="7ass="sre7&&a = rx;& >.recef="ne/7">f2179rx.c#L1007" 20477name="LRX7s="line" name="L11111119X7s=">e77ve 8 else { e77sref">is_multicf="_/acoNL">1004IFTYco7ecurity_id="sref">rx.re2f=NTINUE" class="tidass="8ad6251cuntidode=cef="ne/7">f2179rx.c#L1007" 204778" i0520e7s="line" name="L11111119e7s=">e77 WARN_ON 00coNL">1004IFTYco7eqno_id="sref">rx.re2f=NTINUE" class="tidass="8ad6251cuntidode=cef="ne/7">f2179rx.c#L1007" 204778" i0520"7583" id="L(e774f">is_multic=key"t">coNL">1004IFTYcoflags_multicast_etfwflagslass== 0cef="ne/7">f2179rx.c#L1007" 204778" i0520e7583" id="L(e77m7l6ss="sref7}ref="ne87t">2179rx.c#L1058" 203778" i0520e768d="L1086" class="line9e768d>e776lass="dsf">rstruct x_f="0420211_setid_hredu_s="sref">rxrx2179rx.c#L1058" 203778" i0520a786" class="line" name="9e786">e77 href="net/m8c802182rx.c# c 204778" i0520a7s="line" name="L17s us 9h7s=">e77class="srefsfe=key" class=ertid_hgg_s="sref">rxrxrx1004IFTYcotid_s="sref">rx2179rx.c#L1058" 203779" i0520i7s="line"7EY_FLAG_TA7NTE9h7s=">e77s=et0211/a>-&co4r-x_f="0420211_setid_hgg_s="sref">rxe78x->2179rx.c#L1058" 20378name="LRX7line" name="Lalign+code9X7lin>e78a href=)"t/a>8="sref7>yidxe78sref">is_multm=key" class=erspin/008kass="8ad6251cunspin/008klassf hrefe=key" class=ertid_hgg_s="sref">rx2179rx.c#L1058" 203788" i0520e7LCONFIG_HAVE_EFFICIENT_9e7LCO>e78_ratelimitedee=key" class=ernce(sdata(sdata = rx2179rx.c#L1058" 203788" i0520"7s="line" name="L10Broad9e7s=">e784f">is_multice=key" class=er7pin/un008kass="8ad6251cun7pin/un008klassf hrefe=key" class=ertid_hgg_s="sref">rx2179rx.c#L1058" 203788" i0520e7s="line" * Əe7s=">e785>.rx2179rx.c#L1058" 203788" i0520a7s="line" * mo 29e7s=">e787f">if="net/m7c802173rx.c#="L1086201788" i0520a7s="line" name="L1* obus9h7s=">e78 href="net/m7c802171rx.c#L1029" 20-789" i0520i7s="line" name="L1* belo9h7s=">e78s=et0multicast robust manageu main receive path7* e79=href="net/m8c802182rx.c# c 20179name="LRX7" name="Lalign+code=rx"9X7" n>e79ve 8 ">10ic int=NTINUE" class="prepare_for_handlersnoinsdata(rxf2179rx.c#L1007" 204797c802173r7a>->->e79sref">is_multicf="_/ahre="_tn else struct x_f="0420211_sence((->e79_rateref="ne/7">f2179rx.c#L1007" 204798" i0520"7LLLLLLLLLL="line" name=9e7LLL>e794f">is_multicstruct x_f="0420211_sence(sdata(sdata = rxsdata = 2179rx.c#L1058" 203798" i0520e7LLLLLLLLLL="line" name=9e7LLL>e7sm7l6ss="sref7struct x_f="0420211_sesk_bufp ast_ta rx2179rx.c#L1058" 203798" i0520e768di"L108/a>.rstruct x_f="0420211_sence((10us hre2f="+code=rx" clasIEEElassdeSKB_RXCBX_CO7TINUE2179rx.c#L1058" 203798" i0520a76888888888gt;((sdata = 1004IFTYcotype"sref">sdata2179rx.c#L1058" 203798" i0520a78806888888(a> *e79class="srefsfint=NTINUE" class="mul0icas_noin2179rx.c#L1058" 203799" i0520i7LLLLLLLLLL="line" name=9h7LLL>e79s=et0="net/m7c802170rx.c#L1007" 20i8=8" i0520i8=8LLLLLLLL="line" name20i8=>20i80x->sdata = 1004IFTYcotype"sref">sdataf2179rx.c#L1007" 2048=1" i0520i8= name="Lalign+code=rx"9X8">20i80ve 8 else case "+code=rx" clasNL/a>(sdata(f2179rx.c#L1007" 2048=2" i0520i8=>->20i80sref">is_multicf="_/aco4r-x_f="0420211_sebssidass="8ad6251cunbssid hre2 href href=-x_f="0420211_se7ass="sref">sdata = sdata1004IFTYcomgdass="8ad6251cunmgdf= hcoNL">1004IFTYcouse_4addrass="8ad6251cunuse_4addrlass_="net/m7c802170rx.c#L1007" 20i8=8" i0520i888" cl->20i80 WARN_ON 0000000000return 0ref="ne87t">2179rx.c#L1058" 2038=4" i0520i88LLLLLLLLL="line" name=9e8L>20i804f">is_multic=key"t">hdrf-x_f="0420211_semul0icas_noin2179rx.c#L1058" 2038=5" i0520i88LLLLLLLLL="line" name=9e8L>20i80m7l6ss="sref7>yidxrx;ðer_addr_equs=e 8 fNTINUE" class=t7ass="sref">sdata = 1004IFTYcoaddrass="8ad6251cunaddrlassclx_f="0420211_sehdrass="8ad6251cunhdrlassRX_CONTINUE" class=thddr1ass="8ad6251cunhddr1e 8 __=ref="ne/7">f2179rx.c#L1007" 2048=6" i0520i888di"L108/a>.hdrf-fNTINUE" class=t7ass="sref">sdata = f2179rx.c#L1007" 2048=7" i0520i88888888888gt;rx<"t/a0<<<<<<<<<<<<sdata = sdata1004IFTYcomgdass="8ad6251cunmgdf= hcoNL">1004IFTYcouse_4addrass="8ad6251cunuse_4addrlass_="net/m7c802170rx.c#L1007" 20i8=8" i0520i88806888888(a> *20i80class="srefsf"ck * BrN_ON 0000000000return 0ref="ne87t">2179rx.c#L1058" 2038=9" i0520i88LLLLLLLLL="line" name=9h8L>20i80s=et0211/a>->tttt"><<<<<<<10us hre href="+code=cipherwrx_flags_multicast_etfwrx_flagslass= href= ~"+code=rx" clasIEEElassdeRX_RA_MATCHX_CO7TINUE2179rx.c#L1058" 2038=8" i05201858;20181ve 8 else { is_multcase "+code=rx" clasNL/a>((f2179rx.c#L1007" 2048=8" i0520i8name="L18ass="sref"8i<20"8n>20181 WARN_ON 00idrf-x_f="0420211_sebssidass="8ad6251cunbssid hre_="net/m7c802170rx.c#L1007" 20i8=4" i0520i8a hrexmit_f="+code=rx"20;8a>201814f">is_multic=key"t">>>>>>>>>return 0ref="ne87t">2179rx.c#L1058" 2038=8" i0520a8s="line" name="L10Broa20a8s>20181m7l6ss="sref7>yidx(sdata(rx;&fusit_contro=e 8 __=ref="ne/7">f2179rx.c#L1007" 2048=6" i0520i8s="line" * Sen20a8s>20181tice=key" class="x>>>>>>>return 1ref="ne87t">2179rx.c#L1058" 2038=7" i0520i8s="line" * kee20a8s>20181class="dsf">rx<"t/a0<} else idrf-x_f="0420211_sence(sdata(sdata = sdata1004IFTYcoibss"sref">rx;&nbssode=coNL">1004IFTYcobssidass="8ad6251cunbssid hre__=ref="ne/7">f2179rx.c#L1007" 2048=8" i0520i8s="line" name="L1* pan20a8s>20181class="srefsf"ck * Br>>>>>>>>return 0ref="ne87t">2179rx.c#L1058" 2038=9" i0520i8s="line" name="L1* Bro20a8s>20181s=et0211/a>->tttt">} else idrf-x_f="0420211_semul0icas_noin2179rx.c#L1058" 2038=8" i0520-8gt;rx;ðer_addr_equs=e 8 fNTINUE" class=t7ass="sref">sdata = 1004IFTYcoaddrass="8ad6251cunaddrlassclx_f="0420211_sehdrass="8ad6251cunhdrlassRX_CONTINUE" class=thddr1ass="8ad6251cunhddr1e 8 __=ref="ne/7">f2179rx.c#L1007" 2048=1" i0520i8" name="Lxmit_f="+code20n8">20-82ve 8 else { yidxsdata = 20-82sref">is_multicf="_/a"ck * Br>>>>>>>>return 0ref="ne87t">2179rx.c#L1058" 2038=8" i0520i8" name="Lf="_reset_ONT20n8">20-82 WARN_ON 0000000000x_f="0420211_se7as0us_multicast_etfw">10us hre href="+code=cipherwrx_flags_multicast_etfwrx_flagslass= href= ~"+code=rx" clasIEEElassdeRX_RA_MATCHX_CO7TINUE2179rx.c#L1058" 2038=4" i0520i8" name="Ldev_queue_xmi20n8">20-824f">is_multic=key"t">f else idrf-x_f="0420211_ses="sref">rxf2179rx.c#L1007" 2048=8" i0520a8s="line" name="L18c6ss20a8s>20-82m7l6ss="sref7>yidxrx2179rx.c#L1058" 2038=6" i0520i8 name="L18came="L1008"20e8 >20-82tice=key" class="xyidx10us hre href="+code=cipherwflag_multicast_etfwflaglass= href="+code=rx" clas_X_FLAG_HTme="L1004">10ty_X_FLAG_HTa hrbef="ne87t">2179rx.c#L1058" 2038=7" i0520i8sdata"/m8a8me="L1008">20e8s>20-82class="dsf">rx<"t/a0rx1004rx_result+co20d81>20-82class="srefsf"ck * Br>>>>>>>>else="net/m8c80218211/rx.c#L9802038=9" i0520i8f="rx_h_amsdu"sref">sd20r8f>20-82s=et0211/a>->tttt"><<<<<<<<00000000x_f="0420211_serata_id="sref">rx10us hre href="+code=cipherwrata_id="sref">rx2179rx.c#L1058" 2038=8" i0520a8s="line" name="L10Broa20a8s>20a83x->(sdata = f2179rx.c#L1007" 2048=8" i0520n8e=sdata"/m70 720o8e>20a83ve 8 else { yidx<<<<<<<<00000000x_f="0420211_seBITme="L1004">10tyBITe 8 fNTINUE" class=trata_id="sref">rx2179rx.c#L1058" 2038=8" i0520n8f="+code cl s20r8f>20a83sref">is_multicf="_/af="net/m7c802173rx.c#="L10862018=8" i0520e8 name="L170ss="sref"7 20e8 >20a83 WARN_ON 00breakf="net/m8c802182rx.c# c 2018=8" i0520"8name="L170 7 w20"8n>20a834f">is_multiccase "+code=rx" clasNL/a>(10tyNL/a>(f2179rx.c#L1007" 2048=8" i0520a810Broadcast/multicast 20a81>20a83m7l6ss="sref7>yidx2179rx.c#L1058" 2038=6" i0520i8s*i"lquire" that rx/a>20a8s>20a83tice=key" class="xyid-x_f="0420211_seether_addr_equs="sref">rx;ðer_addr_equs=e 8 fNTINUE" class=t7ass="sref">sdata = 1004IFTYcoaddrass="8ad6251cunaddrlassclx_f="0420211_sehdrass="8ad6251cunhdrlassRX_CONTINUE" class=thddr1ass="8ad6251cunhddr1e 8 __=ref="ne/7">f2179rx.c#L1007" 2048=7" i0520i8s* Broadcast/multicast20a8s>20a83class="dsf">rx<"t/a0sdata = 20a83class="srefsf"ck * BrN_ON 0000000000return 0ref="ne87t">2179rx.c#L1058" 2038=9" i0520i8f=" eliver_f="+code=rx20r8f>20a83s=et0="net/m7c802170rx.c#L1007" 20i8=8" i0520i8her" clas7 7 20i8h>20i84x->10us hre href="+code=cipherwrx_flags_multicast_etfwrx_flagslass= href= ~"+code=rx" clasIEEElassdeRX_RA_MATCHX_CO7TINUE2179rx.c#L1058" 2038=8" i0520e8 name="L1004">1004sub_20e8 >20i84ve 8 else { 20i84sref">is_multicf="_/abreakf="net/m8c802182rx.c# c 2018=8" i0520e8 name="Lrk_bufode=key"20e8 >20i84 WARcase "+code=rx" clasNL/a>(sdata(f2179rx.c#L1007" 2048=8" i0520"8 name="Leths="sref">is20e8 >20i844f">is_multiccase "+code=rx" clasNL/a>(sdata(f2179rx.c#L1007" 2048=8" i0520a8 name="Lrta_infosref">20e8 >20i84m7l6ss="sref7>yidxf2179rx.c#L1007" 2048=8" i0520a8 name="L1004">1004rx_f20e8 >20i84tice=key" class="xhdrf-x_f="0420211_seether_addr_equs="sref">rx;ðer_addr_equs=e 8 fNTINUE" class=t7ass="sref">sdata = 1004IFTYcoaddrass="8ad6251cunaddrlassclx_f="0420211_sehdrass="8ad6251cunhdrlassRX_CONTINUE" class=thddr1ass="8ad6251cunhddr1e 8 __ef="ne/7">f2179rx.c#L1007" 2048=7" i0520i8sdata"/m7rlass="sre7dr20e8s>20i84class="dsf">rx<"t/a02179rx.c#L1058" 2038=8" i0520i8ef="+code=rx" class="s20h8e>20i84class="srefsf"ck * Br} else idrf-x_f="0420211_sence(sdata(sdata = 1004IFTYcoaddrass="8ad6251cunaddrlass__=ref="ne/7">f2179rx.c#L1007" 2048=9" i0520i8exmit_f="+code=rx" cla20h8e>20i84s=et0211/a>->tttt"><<<<<<<->85a hremulticast robust manag7>yidxyidxyidx1042 9e8imulticast robust manag7>yidx(sdata(f2179rx.c#L1007" 2048=8" i0520a8line" name="Lis_mul"ica9e8lingt85tice=key" class="x>>>>>>>>return 1ref="ne87t">2179rx.c#L1058" 2038=8" i0520a8L1<1035" id="L1035" cla9e8L1rx<"t/a0(sdata(rx;&fusit_contro=e 8 __ef="ne87t">2179rx.c#L1058" 2038=8" i0520i8s="line" name="L11111119h8s="gt85class="srefsf"ck * BrN_ON 0000000000return 0ref="ne87t">2179rx.c#L1058" 2038=9" i0520i8s="line" name="L11111119h8s="gt85s=et0211/a>->tttt"><<<<<<<10us hre href="+code=cipherwrx_flags_multicast_etfwrx_flagslass= href= ~"+code=rx" clasIEEElassdeRX_RA_MATCHX_CO7TINUE2179rx.c#L1058" 203868" i0520e8s="line" name="L11111119e8s=">e86x->(e86ve 8 else { e86sref">is_multcase "+code=rx" clasNL/a>(sdata(f2179rx.c#L1007" 204868" i0520e88888888888="line" name=9e8888>e86 WARN_ON 00idrfNTINUE" class="bssidass="8ad6251cunbssid hre2||d-x_f="0420211_sence(sdata(rx;&fusit_contro=e 8 __ef="ne87t">2179rx.c#L1058" 203868" i0520"8583" id="L10598888888889e8583>e864f">is_multic=key"t">>>>>>>>>return 0ref="ne87t">2179rx.c#L1058" 203868" i0520e88/a>.yidxrx;ðer_addr_equs=e 8 fNTINUE" class=t7ass="sref">sdata = sdata1004IFTYcowds_multicast_etfwwdsf= hcoNL">1004IFTYcoremote_addrass="8ad6251cunremote_addr hreclx_f="0420211_sehdrass="8ad6251cunhdrlassRX_CONTINUE" class=thddr2ass="8ad6251cunhddrsref"__ef="ne87t">2179rx.c#L1058" 203868" i0520a868ub_if_data" clads+cod9e868u>e86tice=key" class="x>>>>>>>return 0ref="ne87t">2179rx.c#L1058" 203868" i0520a868" cl->e86class="dsf">rx<"t/a0(sdata(f2179rx.c#L1007" 204869" i0520i8s="line" name="L11111119h8s=">e86s=et0211/a>->tttt">hdrf-e=key" class=ernce(sdata(2179rx.c#L1058" 203878" i0520e8s="line" name="L11111119e8s=">e87x->(sdata(rx;&fusit_contro=e 8 _2 href hrefef="ne87t">2179rx.c#L1058" 20387name="LRX8s="line" name="L11111119X8s=">e87ve 8 else { (sdata(rx;&fusit_contro=e 8 _2 href hrefef="ne87t">2179rx.c#L1058" 203877c802173r8s="line" name="L11111119r8s=">e87sref">is_multicf="_/annnn-e=key" class=ernce(sdata(rx;&fusit_contro=e 8 __ef="ne87t">2179rx.c#L1058" 203878" i0520e8s="line" name="L11111119e8s=">e87 WARN_ON 00>>>>>>>>return 0ref="ne87t">2179rx.c#L1058" 203878" i0520"8583" id="L(e874f">is_multic=key"t">idrf-x_f="0420211_seether_addr_equs="sref">rx;ðer_addr_equs=e 8 fNTINUE" class=t7ass="sref">sdata = 1004IFTYcoaddrass="8ad6251cunaddrlassclx_f="0420211_sehdrass="8ad6251cunhdrlassRX_CONTINUE" class=thddr1ass="8ad6251cunhddr1e 8 __ef="ne/7">f2179rx.c#L1007" 204878" i0520e8583" id="L(e87m7l6ss="sref7>yidx10us hre href="+code=cipherwrx_flags_multicast_etfwrx_flagslass= href= ~"+code=rx" clasIEEElassdeRX_RA_MATCHX_CO7TINUE2179rx.c#L1058" 203878" i0520e868d="L1086" class="line9e868d>e87tice=key" class="xe87class="dsf">rdefault:ef="ne/7">f2179rx.c#L1007" 204878" i0520a8s="line" name="L17s us 9h8s=">e87class="srefsf"ck * Brmulticast robust manageu should never get herea* m=key" class=erWARN_ON_ONCE"sref">sdata2179rx.c#L1058" 203888" i0520e8a href="+code=rx" class9e8a h>e88x->ss="sref"7unt9r8 cl>e882href="net/m7c802173rx.c#L1035" 20a888" i0520e8LCONFIG_HAVE_EFFICIENT_9e8LCO>e88_ratelimitedereturn 1ref="ne87t">2179rx.c#L1058" 203888" i0520"8s="line" name="L10Broad9e8s=">e884f">if="net/m7c802173rx.c#="L1086201888" i0520e8s="line" * Əe8s=">e885>.imulticast robust manag7* This func0ion returns whether or not the SKBe88 hrefmulticast robust manag7* wasrdeste="d for RX processing or not, which,e88s=et0multicast robust managa* if consume is true, is equiva0d tpto whethere89xmulticast robust manag7* or not the skb wasrconsumed.e89a hremulticast robust manag7* 10ic NTINUE" class="boo="sref">rx;&boo=ratele=key" class=ernce(sdata(sdata(rxf2179rx.c#L1007" 204898" i0520e888" cl->e89 WARN_ON 00>>>>>>>>>>>>>>>>>>>>>>>>>>>>struct x_f="0420211_sesk_bufp ast_ta rx;&boo=ratele=key" class=erconsume"sref">rx;&consumee 8 _ef="ne/7">f2179rx.c#L1007" 204898" i0520"8LLLLLLLLLL="line" name=9e8LLL>e894f">iref="ne/7">f2179rx.c#L1007" 204898" i0520e8LLLLLLLLLL="line" name=9e8LLL>e8sm7l6ss="sref7struct x_f="0420211_sence(rx;&nce(rx;& >.re2f=NTINUE" class="s="sref">rxrx;& >.reref="ne87t">2179rx.c#L1058" 203898" i0520e868di"L108/a>.rstruct x_f="0420211_sence(sdata(sdata = rxsdata = 2179rx.c#L1058" 203898" i0520a86888888888gt;rstruct x_f="0420211_sence((10us hre2f="+code=rx" clasIEEElassdeSKB_RXCBX_CO7TINUE2179rx.c#L1058" 203898" i0520a88806888888(a> *e89class="srefsfstruct x_f="0420211_sence((sdata2179rx.c#L1058" 203899" i0520i8LLLLLLLLLL="line" name=9h8LLL>e89s=et0211/a>-&cnt=NTINUE" class="preparesnoin2179rx.c#L1058" 2039=8" i0520i9=8LLLLLLLL="line" name20i9=>20i90=href="net/m8c802182rx.c# c 2019=1" i0520i9= name="Lalign+code=rx"9X9">20i90ve 8 else NTINUE" class="s="sref">rx2179rx.c#L1058" 2039=2" i0520i9=>->20i90sref">is_multx_f="0420211_se7as0us_multicast_etfw">10us hre href="+code=cipherwrx_flags_multicast_etfwrx_flagslass=|f="+code=rx" clasIEEElassdeRX_RA_MATCHX_CO7TINUE2179rx.c#L1058" 2039=8" i0520i988" cl->20i90 WARNTINUE" class="preparesnoinrx2179rx.c#L1058" 2039=4" i0520i98LLLLLLLLL="line" name=9e9L>20i90 href="net/m7c802173rx.c#L1035" 20a9=5" i0520i98LLLLLLLLL="line" name=9e9L>20i90m7l6ss="sref7idrf-x_f="0420211_sepreparesnoinf2179rx.c#L1007" 2049=6" i0520i988di"L108/a>.sdata2179rx.c#L1058" 2039=7" i0520i98888888888gt; *20i90class="srefsfidrf-x_f="0420211_seconsume"sref">rx;&consumee 8 _=ref="ne/7">f2179rx.c#L1007" 2049=9" i0520i98LLLLLLLLL="line" name=9h9L>20i90s=et0211/a>->tttt">NTINUE" class=t7kb_multicast_etfwskbe 8 2f=NTINUE" class="7kb_copy_multicast_etfwskb_copye 8 fNTINUE" class=t7kb_multicast_etfwskbe 8 clx_f="0420211_seGFP_ATOMICX_CO7TINUE2179rx.c#L1058" 2039=8" i05201958;f2179rx.c#L1007" 2049=1" i0520i986" class="line" name=20198>20191ve 8 else { f2179rx.c#L1007" 2049=2" i0520i9s="line" name="L18f3en20a9s>20191sref">is_multicf="_/annnna>->tttt">NTINUE" class=twiphy_debug_multicast_etfwwiphy_debuge 8 fNTINUE" class=t008s="sref">rx;& >.re href="+code=cipherwhwass="8ad6251cunhwf= hcoNL">1004IFTYcowiphy_multicast_etfwwiphyode=cef="ne/7">f2179rx.c#L1007" 2049=8" i0520i9name="L18ass="sref"8i<20"9n>20191 WARN_ON 00icf="_/annnna>->tttt">Nulticast robstring">"failedpto copy skb for %s\n"f2179rx.c#L1007" 2049=4" i0520i9a hrexmit_f="+code=rx"20;9a>201914f">is_multic=key"t">>>>>>>>>nnnna>->tttt">NTINUE" class=t7ass="sref">sdata = 2179rx.c#L1058" 2039=8" i0520a9s="line" name="L10Broa20a9s>20191m7l6ss="sref7>yidx2179rx.c#L1058" 2039=6" i0520i9s="line" * Sen20a9s>20191tice=key" class="x20191 href="net/m8c802182rx.c# c 2049=8" i0520i9s="line" name="L1* pan20a9s>20191class="srefsf"ck * BrNTINUE" class="s="sref">rx2179rx.c#L1058" 2039=9" i0520i9s="line" name="L1* Bro20a9s>20191s=et0211/a>-&f="net/m7c802173rx.c#="L10862019=8" i0520-9gt;20-92ve 8 else NTINUE" class="nce((rx2179rx.c#L1058" 2039=2" i0520i9" name="Lf="_reset_RX_20n9">20-92sref">is_multreturn NTINUE" class=ttruenoin2179rx.c#L1058" 2039=8" i0520i9" name="Lf="_reset_ONT20n9">20-92 f="net/m7c802173rx.c#="L10862019=4" i0520i9" name="Ldev_queue_xmi20n9">20-92 href="net/m7c802173rx.c#L1035" 20a9=8" i0520a9s="line" name="L18c6ss20a9s>20-92m7l6sxulticast robust manageu20-92tice=xulticast robust manag u This is the actual Rx fusits handler. as it blongspto Rx path7it must20e9s>20-927f">imulticast robust manag7* be p; ledpwith7rcu_read_008k protec0ion.1004rx_result+co20d91>20-92 hrefmulticast robust manag7* sd20r9f>20-92s=et0">10ic void NTINUE" class="__nce(((f2179rx.c#L1007" 2049=8" i0520a9s="line" name="L10Broa20a9s>20a93x->f2179rx.c#L1007" 2049=8" i0520n9e=sdata"/m70 720o9e>20a93ve 8 ref="ne/7">f2179rx.c#L1007" 2049=8" i0520n9f="+code cl s20r9f>20a93sref">is_multstruct x_f="0420211_sence(rx;&nce(rx;& >.re2f=NTINUE" class="hw_to/008s="sref">rx;&hw_to/008s=lassfe=key" class=erhwass="8ad6251cunhwf= h_ref="ne87t">2179rx.c#L1058" 2039=8" i0520e9 name="L170ss="sref"7 20e9 >20a93 WARstruct x_f="0420211_sence(sdata(sdata = 2179rx.c#L1058" 2039=4" i0520i9name="L170 7 w20"9n>20a934f">is_multicstruct x_f="0420211_sence((2179rx.c#L1058" 2039=8" i0520a910Broadcast/multicast 20a91>20a93m7l6ss="sref7NTINUE" class="__les="line" eode=r__les=ratele=key" class=erfc"sref">sdata2179rx.c#L1058" 2039=6" i0520i9s*i"lquire" that rx/a>20a9s>20a936lass="dsf">rstruct x_f="0420211_sence(sdata(rx2179rx.c#L1058" 2039=7" i0520i9s* Broadcast/multicast20a9s>20a93class="dsf">rstruct x_f="0420211_sence(sdata(2179rx.c#L1058" 2039=8" i0520i9t robust managemen170920a9t>20a93class="srefsfstruct x_f="0420211_ses <_info_multicast_etfw">1_infolass=*e=key" class=er7as_multicast_etfw">1e 8 cl*e=key" class=ertmp"sref">sdata2179rx.c#L1058" 2039=9" i0520i9f=" eliver_f="+code=rx20r9f>20a93s=et0211/a>-&cnt=NTINUE" class="errass="8ad6251cunerr>.re2f=0ref="ne87t">2179rx.c#L1058" 2039=8" i0520i9her" clas7 7 20i9h>20i94=href="net/m8c802182rx.c# c 2019=8" i0520e9 name="L1004">1004sub_20e9 >20i94ve 8 else NTINUE" class="fc"sref">sdata(sdatarx;&fusit_contro=e 8 ref="ne87t">2179rx.c#L1058" 2039=8" i0520n9 name="LRX_" evic 20e9 >20i94sref">is_multx_f="0420211_sememse_noinrxrx2179rx.c#L1058" 2039=8" i0520e9 name="Lrk_bufode=key"20e9 >20i94 WARNTINUE" class="s="sref">rx1004IFTYco7kb_multicast_etfwskbe 8 2f=NTINUE" class="7kb_multicast_etfwskbe 8 ref="ne87t">2179rx.c#L1058" 2039=8" i0520"9 name="Leths="sref">is20e9 >20i944f">is_multicNTINUE" class="s="sref">rx1004IFTYco008s="sref">rx;& >.re2f=NTINUE" class="008s="sref">rx;& >.reref="ne87t">2179rx.c#L1058" 2039=8" i0520a9 name="Lrta_infosref">20e9 >20i945>.1004rx_f20e9 >20i94tice=key" claidrfe=key" class=ernce(sdata(sdatasdataf2179rx.c#L1007" 2049=7" i0520i9sdata"/m7rlass="sre7dr20e9s>20i94class="dsf">rx<"t/a0rx;& >.re href="+code=cipherwdot11ReceivedFrag manCoun_noin.re++ref="ne87t">2179rx.c#L1058" 2039=8" i0520i9ef="+code=rx" class="s20h9e>20i94 href="net/m7c802171rx.c#L1029" 20-9=9" i0520i9exmit_f="+code=rx" cla20h9e>20i94s=et0211/a>-&idrfe=key" class=ernce((sdataf2179rx.c#L1007" 2049=8" i0520e9sdata"/m7s="comment7>/20e9s>20e95x->->95ve 8 else { (rx(sdataf2179rx.c#L1007" 2049=8" i0520n9is_multicf="_/annnna>-&NTINUE" class="errass="8ad6251cunerr>.re2f=-NTINUE" class="ENOBUFS"sref">sdata.reref="ne87t">2179rx.c#L1058" 2039=8" i0520e9;1042 9e9is_multic=key"t">>>>>>>>>NTINUE" class="errass="8ad6251cunerr>.re2f=NTINUE" class="7kb_2">1arize_multicast_etfwskb_2">1arizee 8 fNTINUE" class=t7kb_multicast_etfwskbe 8 _ref="ne87t">2179rx.c#L1058" 2039 8" i0520a9f2179rx.c#L1007" 2049=8" i0520a9line" name="Lis_mul"ica9e9lingt95tice=key" class="x.re2f=-x_f="0420211_sepskb_may_pul="sref">rx;&pskb_may_pul=e 8 fNTINUE" class=t7kb_multicast_etfwskbe 8 clx_f="0420211_sence(rx(sdata2179rx.c#L1058" 2039 7" i0520i9L1<1035" id="L1035" cla9e9L1rf="net/m7c802173rx.c#="L10862019=8" i0520i9s="line" name="L11111119h9s="gt95 href="net/m7c802171rx.c#L1029" 20-9=9" i0520i9s="line" name="L11111119h9s="gt95s=et0211/a>-&idrfe=key" class=ererrass="8ad6251cunerr>.re_=ref="ne/7">f2179rx.c#L1007" 204968" i0520e9s="line" name="L11111119e9s=">e96x->2179rx.c#L1058" 20396name="LRX9L1(e96ve 8 else { 2179rx.c#L1058" 203968" i0520n9="" clclass="line" namx9r9="">e96sref">is_multf="net/m7c802173rx.c#="L1086201968" i0520e98888888888="line" name=9e9888>e96 ="net/m7c802173rx.c#="L1086201968" i0520"9583" id="L10598888888889e9583>e964f">is_multicNTINUE" class="hdrass="8ad6251cunhdrlass2f=(struct x_f="0420211_sence((sdata2179rx.c#L1058" 203968" i0520a98/a>.rx2179rx.c#L1058" 203968" i0520a968ub_if_data" clads+cod9e968u>e96tice=key" claNTINUE" class="nce((rx2179rx.c#L1058" 203967" i0520i968" cl->e96 href="net/m8c802182rx.c# c 204968" i0520i98806888888(1035" id="L19h9880>e96class="srefsfidrfe=key" class=erunlikely_multicast_etfwunlikelye 8 fNTINUE" class=tnce(sdata(rx;&fusit_contro=e 8 _2||ef="ne/7">f2179rx.c#L1007" 204969" i0520i9s="line" name="L11111119h9s=">e96s=et0211/a>->tttt">" claNTINUE" class="nce(sdata(rx;&fusit_contro=e 8 ___ef="ne/7">f2179rx.c#L1007" 204978" i0520e9s="line" name="L11111119e9s=">e97x->(rx(rx;& >.reclx_f="0420211_se7kb_multicast_etfwskbe 8 _ref="ne87t">2179rx.c#L1058" 20397name="LRX9s="line" name="L11111119X9s=">e97ve 8 ef="ne87t">2179rx.c#L1058" 203978" i0520n9s="line" name="L11111119r9s=">e97sref">is_multidrfe=key" class=ernce(sdata(sdataf2179rx.c#L1007" 204978" i0520e9s="line" name="L11111119e9s=">e97 WARN_ON 00e=key" class=erprev_7ass="sre7&&a prev_7asode=2f=NTINUE" class="NULLs="sre7&&a NULLa hrref="ne87t">2179rx.c#L1058" 203978" i0520"9583" id="L(e97 href="net/m7c802173rx.c#L1035" 20a978" i0520e9583" id="L(e97m7l6ss="sref7>yidxrx;& >.reclx_f="0420211_sehdrass="8ad6251cunhdrlassRX_CONTINUE" class=thddr2ass="8ad6251cunhddrsref"c x_f="0420211_ses <_multicast_etfw">1e 8 cle=key" class=ertmp"sref">sdataf2179rx.c#L1007" 204978" i0520a968d="L1086" class="line9e968d>e97tice=key" class="xis_multidrf-x_f="0420211_seprev_7ass="sre7&&a prev_7asode=_=ref="ne/7">f2179rx.c#L1007" 204977" i0520i986" class="line" name="9e986">e97class="dsf">rx<"t/a01e 8 ref="ne87t">2179rx.c#L1058" 203978" i0520i9s="line" name="L17s us 9h9s=">e97class="srefsf"ck * Brrrrrrrrrrrrrrrrrcontinueref="ne87t">2179rx.c#L1058" 203979" i0520i9s="line"7EY_FLAG_TA7NTE9h9s=">e97s=et0211/a>->tttt">>>>>>>>>f="net/m7c802173rx.c#="L1086201988" i0520e9a href="+code=rx" class9e9a h>e98=href="net/m8c802182rx.c# c 20198name="LRX9line" name="Lalign+code9X9lin>e98ve 8 else { rx1004IFTYco7 <_multicast_etfw">1e 8 2f=NTINUE" class="prev_7ass="sre7&&a prev_7asode=ref="ne87t">2179rx.c#L1058" 203987c802173r9 class="7>ss="sref"7unt9r9 cl>e98sref">is_multicf="_/annnna>-&NTINUE" class="s="sref">rx1004IFTYco7ass="sref">sdata = sdata = 2179rx.c#L1058" 203988" i0520e9LCONFIG_HAVE_EFFICIENT_9e9LCO>e98 WARN_ON 00icf="_/aNTINUE" class="nce(sdata(rxsdata2179rx.c#L1058" 203988" i0520"9s="line" name="L10Broad9e9s=">e98 href="net/m7c802173rx.c#L1035" 20a988" i0520e9s="line" * Əe9s=">e98m7l6ss="sref7>yidx1e 8 ref="ne87t">2179rx.c#L1058" 203988" i0520e9s="line" * sinc9e9s=">e98tice=key" class="xe98class="srefsf"ck * Bridrfe=key" class=erprev_7ass="sre7&&a prev_7asode=_=ref="ne/7">f2179rx.c#L1007" 204989" i0520i9s="line" name="L1* belo9h9s=">e98s=et0211/a>->tttt"><<<<<<<rx1004IFTYco7 <_multicast_etfw">1e 8 2f=NTINUE" class="prev_7ass="sre7&&a prev_7asode=ref="ne87t">2179rx.c#L1058" 203998" i0520e9s="line" name="L1* Broa9e9s=">e99x->rx1004IFTYco7ass="sref">sdata = sdata = 2179rx.c#L1058" 20399name="LRX9" name="Lalign+code=rx"9X9" n>e99ve 8 ef="ne87t">2179rx.c#L1058" 203997c802173r9a>->->e99sref">is_multicf="_/annnna>-&idrfe=key" class=ernce(sdata(rxf2179rx.c#L1007" 204998" i0520e988" cl->e99 WARN_ON 00>>>>>>>>>>>>>>>>returnref="ne87t">2179rx.c#L1058" 203998" i0520"9LLLLLLLLLL="line" name=9e9LLL>e994f">is_multic=key"t">>>>>>>>>gotolx_f="0420211_seounaoin2179rx.c#L1058" 203998" i0520e9LLLLLLLLLL="line" name=9e9LLL>e99m7l6ss="sref7>yidx.rf="net/m7c802173rx.c#="L1086201998" i0520a96888888888gt; *e99class="srefsfNTINUE" class="prevs="sre7&&a prevode=2f=NTINUE" class="NULLs="sre7&&a NULLa hrref="ne87t">2179rx.c#L1058" 203999" i0520i9LLLLLLLLLL="line" name=9h9LLL>e99s=et0="net/m7c802170rx.c#L1007" 2030=8" i052030=8" LLLLLL="line" name=930=8">30=8lass="srefsfNTINUE" class="list_for_each_entry_rcu"sref">rx;&aist_for_each_entry_rcue 8 fNTINUE" class=t7ass="sref">sdata = rx;& >.re href="+code=cipherwinterfacesnoinrx;&aistode=_=ref/pre>rxdoine"i052c3/58/c056798c4ea9cb08f2e9f784d6251c294dd2_3/30=8">"net/m7c802170rx.c#L1007" 2030=1" i052030= name="Lalign+code=rx"930= n>30=ve 8 else { ( = <_running"sref">rx(sdata = f2179rx.c#L1007" 2030=2" i052030=>->->30=sref">is_multicf="_/annnna>-&continueref="ne87t">2179rx.c#L1058" 2030=3" i052030=8" cl->30= ="net/m7c802173rx.c#="L10862030=4" i052030=LLLLLLLLL="line" name=930=LL>30=4f">is_multic=key"t">idrfNTINUE" class=t7ass="sref">sdata = 1004IFTYcotypenoin(f2179rx.c#L1007" 2030=5" i052030=LLLLLLLLL="line" name=930=LL>30=m7l6ss="sref7>yidxsdata = 1004IFTYcotypenoinsdata(f2179rx.c#L1007" 2030=6" i052030=8di"L108/a>.2179rx.c#L1058" 2030=7" i052030=888888888gt; *30=class="srefsf"ck * Brmulticast robust manageu30=s=et0multicast robust managaaaaaaaaaaaaaaaaa* fusit&isrdeste="d for this interface, but>idrit's305a hremulticast robust manag7>yidx305sref"multicast robust manag7>yidx305 ="net/m7c802173rx.c#="L1086203014" i052030a hrexmit_f="+code=rx"2030a h>3054f">is_multic=key"t">idrf-x_f="0420211_seprevs="sre7&&a prevode=_=ref="ne/7">f2179rx.c#L1007" 203055" i052030s="line" name="L10Broa2030s=">305m7l6ss="sref7>yidxsdata = 2179rx.c#L1058" 203056" i052030s="line" * Sen2030s=">305tice=key" class="xis_multcontinueref="ne87t">2179rx.c#L1058" 203017" i052030s="line" * kee2030s=">305class="dsf">rx<"t/a0305 href="net/m7c802171rx.c#L1029" 203059" i052030s="line" name="L1* Bro2030s=">305s=et0211/a>->tttt">NTINUE" class=ts="sref">rx1004IFTYco7 <_multicast_etfw">1e 8 2f=NTINUE" class="s <_info_get/bss_multicast_etfw">1_info_get/bsse 8 fNTINUE" class=tprevs="sre7&&a prevode=clx_f="0420211_sehdrass="8ad6251cunhdrlassRX_CONTINUE" class=thddr2ass="8ad6251cunhddrsref"_ref="ne87t">2179rx.c#L1058" 203028" i052030gt;NTINUE" class=ts="sref">rx1004IFTYco7ass="sref">sdata = 2179rx.c#L1058" 203021" i052030" name="Lxmit_f="+code2030" n>30gve 8 else { (sdata(rxsdata2179rx.c#L1058" 2030g2" i052030" name="Lf="_reset_RX_2030" n>30g2href="net/m7c802173rx.c#L1035" 2030g3" i052030" name="Lf="_reset_ONT2030" n>30g WARN_ON 00e=key" class=erprevs="sre7&&a prevode=2f=NTINUE" class="7ass="sref">sdata = 2179rx.c#L1058" 203024" i052030" name="Ldev_queue_xmi2030" n>30g4f">is_multicf="net/m7c802173rx.c#="L1086203025" i052030s="line" name="L18c6ss2030s=">30g5>.30gtice=key" claidrfe=key" class=erprevs="sre7&&a prevode=_=ref="ne/7">f2179rx.c#L1007" 203027" i052030sdata"/m8a8me="L1008">2030sda>30gclass="dsf">rx<"t/a0rx1004IFTYco7 <_multicast_etfw">1e 8 2f=NTINUE" class="s <_info_get/bss_multicast_etfw">1_info_get/bsse 8 fNTINUE" class=tprevs="sre7&&a prevode=clx_f="0420211_sehdrass="8ad6251cunhdrlassRX_CONTINUE" class=thddr2ass="8ad6251cunhddrsref"_ref="ne87t">2179rx.c#L1058" 203028" i0520301004">1004rx_result+co2030100>30gclass="srefsf"ck * BrNTINUE" class="s="sref">rx1004IFTYco7ass="sref">sdata = 2179rx.c#L1058" 203029" i052030f="rx_h_amsdu"sref">sd2030f=">30gs=et0="net/m7c802170rx.c#L1007" 203038" i052030s="line" name="L10Broa2030s=">30s=f">is_multic=key"t">idrfNTINUE" class=tnce(sdata(rxf2179rx.c#L1007" 2030s1" i052030e=sdata"/m70 72030e=s>30sve 8 else { 2179rx.c#L1058" 2030s2" i052030f="+code cl s2030f=">30ssref">is_multf="net/m7c802173rx.c#="L10862030s3" i052030 name="L170ss="sref"7 2030 na>30s ="net/m7c802173rx.c#="L1086203034" i052030name="L170 7 w2030nam>30s4f">isx_f="0420211_seounaoinf2179rx.c#L1007" 2030s5" i05203010Broadcast/multicast 203010B>30sm7l6ss="sref7NTINUE" class="dev_kfree_7kb_multicast_etfwdev_kfree_7kbe 8 fNTINUE" class=t7kb_multicast_etfwskbe 8 _ref="ne87t">2179rx.c#L1058" 2030s6" i052030s*i"lquire" that rx/a>2030s*i>30stice=f="net/m7c802173rx.c#="L10862030s7" i052030s* Broadcast/multicast2030s* >30s href="net/m8c802182rx.c# c 203038" i052030t robust managemen17092030t r>30s hrefmulticast robust manageu30ss=et0multicast robust managa* This is the receive path7handler. It is p; ledpby a low level driver when an30he=et0multicast robust managa* /rx.11 MPDU is received from the hardware.1004sub_2030 na>30ha hremulticast robust manag7* 30hsref"void NTINUE" class="nce(sdata((f2179rx.c#L1007" 2030h3" i052030 name="Lrk_bufode=key"2030 na>30h ref="ne/7">f2179rx.c#L1007" 203044" i052030 name="Leths="sref">is2030 na>30h4f">is_multicstruct x_f="0420211_sence(rx;&nce(rx;& >.re2f=NTINUE" class="hw_to/008s="sref">rx;&hw_to/008s=lassfe=key" class=erhwass="8ad6251cunhwf= h_ref="ne87t">2179rx.c#L1058" 2030h5" i052030 name="Lrta_infosref">2030 na>30hm7l6ss="sref7struct x_f="0420211_sence(sdata(sdata2179rx.c#L1058" 2030h6" i052030 name="L1004">1004rx_f2030 na>30h6lass="dsf">rstruct x_f="0420211_sence(rx(rx2179rx.c#L1058" 2030h7" i052030sdata"/m7rlass="sre7dr2030sda>30hclass="dsf">rstruct x_f="0420211_sence((10us hre2f="+code=rx" clasIEEElassdeSKB_RXCBX_CO7TINUE2179rx.c#L1058" 2030h8" i052030ef="+code=rx" class="s2030ef=>30h href="net/m7c802171rx.c#L1029" 203049" i052030exmit_f="+code=rx" cla2030exm>30hs=et0211/a>-&NTINUE" class=tWARN_ON_ONCE"sref">sdata2179rx.c#L1058" 203058" i052030sdata"/m7s="comment7>/2030sda>30sdhref="net/m7c802171rx.c#L1029" 203051" i052030" e17l_ss="li9eclass="ao30" e>30sve 8 else idrfNTINUE" class=tWARN_ON"sref">sdata10us hre href="+code=cipherwband"sref">rxf2179rx.c#L1007" 203052" i05203030ssref">is_multicf="_/annnnNTINUE" class=t7as0us_multicast_etfw">10us hre href="+code=cipherwband"sref">rxsdataf2179rx.c#L1007" 203053" i052030;30s WARN_ON 00gotolx_f="0420211_sedrop_multicast_etfwdrope 8 ref="ne87t">2179rx.c#L1058" 203054" i0520301042 93030s href="net/m7c802173rx.c#L1035" 2030s5" i05203030sm7l6ss="sref7NTINUE" class="7band"sref">rxrx;& >.re href="+code=cipherwhwass="8ad6251cunhwf= hcoNL">1004IFTYcowiphy_multicast_etfwwiphyode= href="+code=cipherwbands_multicast_etfwbandsode=[NTINUE" class=t7as0us_multicast_etfw">10us hre href="+code=cipherwband"sref">rx2179rx.c#L1058" 203056" i052030line" name="Lis_mul"ica930lin>30stice=key" claidrfe=key" class=erWARN_ON"sref">sdatarxf2179rx.c#L1007" 203057" i052030L1<1035" id="L1035" cla930L1<>30sclass="dsf">rx<"t/a02179rx.c#L1058" 203058" i052030s="line" name="L1111111930s=">30s href="net/m7c802171rx.c#L1029" 203059" i052030s="line" name="L1111111930s=">30ss=et0211/a>-&Nulticast robust manageu30s=ref"multicast robust manag7>yidx(30sa hremulticast robust manag7>yidx30ssref"multicast robust manag7>yidx30s3 hremulticast robust manag7>yidx.30stice=key" claidrfe=key" class=erunlikely_multicast_etfwunlikelye 8 fNTINUE" class=t008s="sref">rx;& >.re href="+code=cipherwquiescing"sref">rxrx;& >.re href="+code=cipherwsuspended"sref">rxf2179rx.c#L1007" 203067" i05203068" cl->30sclass="dsf">rx<"t/a02179rx.c#L1058" 203068" i0520308806888888(1035" id="L1930880>30s href="net/m7c802171rx.c#L1029" 203069" i052030s="line" name="L1111111930s=">30ss=et0211/a>-&Nulticast robust manageu We might be during a HW reconfig,7prevd tpRx for the ssit&reasona* 30s=ice=key" claidrfe=key" class=erunlikely_multicast_etfwunlikelye 8 fNTINUE" class=t008s="sref">rx;& >.re href="+code=cipherwin_reconfig_multicast_etfwnn_reconfige 8 __ef="ne/7">f2179rx.c#L1007" 203071" i052030s="line" name="L1111111930s=">30sve 8 else { 2179rx.c#L1058" 203072" i052030s="line" name="L1111111930s=">30s2href="net/m7c802173rx.c#L1035" 203073" i052030s="line" name="L1111111930s=">30s3=et0211/a>-&Nulticast robust manageu30s7ice=key" claidrfe=key" class=erWARN_ON"sref">sdatarx;& >.re href="+code=cipherwstarted_multicast_etfw">1rtede 8 __ef="ne/7">f2179rx.c#L1007" 203078" i052030s="line" name="L17s us 930s=">30sclass="srefsf"ck * Brgotolx_f="0420211_sedrop_multicast_etfwdrope 8 ref="ne87t">2179rx.c#L1058" 203079" i052030s="line"7EY_FLAG_TA7NTE930s=">30ss=et0="net/m7c802170rx.c#L1007" 203088" i052030a href="+code=rx" class930a h>30a ice=key" claidrfe=key" class=erlikely_multicast_etfwlikelye 8 f!fNTINUE" class=t7as0us_multicast_etfw">10us hre href="+code=cipherwflag_multicast_etfwflage 8 =&hreflx_f="0420211_seRX_FLAG_FAILED_PLCP_CRCX_CO7TINUEf2179rx.c#L1007" 203081" i052030line" name="Lalign+code930lin>30ave 8 else { 30asref"multicast robust manag7>yidx30a3 hremulticast robust manag7>yidx30a4 hremulticast robust manag7>yidxyidx10us hre href="+code=cipherwflag_multicast_etfwflage 8 =&hreflx_f="0420211_seRX_FLAG_HTX_CO7TINUEf2179rx.c#L1007" 203087" i052030s="line" * mo 2930s=">30aclass="dsf">rx<"t/a030a hrefmulticast robust manag7777777777777777777777777* rate_idx is MCS index, which p;n be [0-76]30as=et0multicast robust managaaaaaaaaaaaaaaaaa77777777* as docu manedpon:30s==et0multicast robust managaaaaaaaaaaaaaaaaa77777777*30sa hremulticast robust manag7>yidx(->->30ssref"multicast robust manag7>yidx->30s3 hremulticast robust manag7>yidx30s4 hremulticast robust manag7>yidxyidx30sm7l6sxulticast robust manag7>yidxyidx.rx<"t/a0sdata10us hre href="+code=cipherwrate_idx"sref">sdataf2179rx.c#L1007" 203098" i0520308806888888(a> *30sclass="srefsf"ck * BrrrrrrrrrrrrrrrrrnNTINUE" class=t7as0us_multicast_etfw">10us hre href="+code=cipherwrate_idx"sref">sdataf2179rx.c#L1007" 2030s9" i052030LLLLLLLLLL="line" name=930LLL>30ss=et0211/a>->tttt"><<<<<<<"Rate markedpas ticHT rate but>pt redp"f2179rx.c#L1007" 2031=8" i052031=8" LLLLLL="line" name=931=8">310x->"">10us hrefrate_idx is not "f2179rx.c#L1007" 2031=1" i052031= name="Lalign+code=rx"931= n>31=ve 8 else { "ticMCS index [0-76]: %d (0x%02x)\n"f2179rx.c#L1007" 2031=2" i052031=>->->31=sref">is_multicf="_/annnna>-&rrrrrrrrnNTINUE" class=t7as0us_multicast_etfw">10us hre href="+code=cipherwrate_idx"sref">sdataf2179rx.c#L1007" 2031=3" i052031=8" cl->310 WARN_ON 00>>>>>>>>>>>>>>>>nNTINUE" class=t7as0us_multicast_etfw">10us hre href="+code=cipherwrate_idx"sref">sdataf2179rx.c#L1007" 2031=4" i052031=LLLLLLLLL="line" name=931=LL>31=4f">is_multic=key"t">>>>>>>>>>>>>>>>>gotolx_f="0420211_sedrop_multicast_etfwdrope 8 ref="ne87t">2179rx.c#L1058" 2031=5" i052031=LLLLLLLLL="line" name=931=LL>31=m7l6ss="sref7>yidxf2179rx.c#L1007" 2031=6" i052031=8di"L108/a>.sdata10us hre href="+code=cipherwrate_idx"sref">sdataf2179rx.c#L1007" 2031=7" i052031=888888888gt;rx<"t/a0>>nNTINUE" class=t7as0us_multicast_etfw">10us hre href="+code=cipherwrate_idx"sref">sdatarxf2179rx.c#L1007" 2031=8" i052031=806888888(a> *31=class="srefsf"ck * Br>>>>>>>>>>>>>>>>gotolx_f="0420211_sedrop_multicast_etfwdrope 8 ref="ne87t">2179rx.c#L1058" 2031=9" i052031=LLLLLLLLL="line" name=931=LL>310s=et0211/a>->tttt"><<<<<<<sdatarx10us hre href="+code=cipherwrate_idx"sref">sdata2179rx.c#L1058" 203118" i05203158;311ve 8 else f="net/m7c802173rx.c#="L1086203152" i052031s="line" name="L18f3en2031s=">3112href="net/m7c802173rx.c#L1035" 203153" i052031name="L18ass="sref"8i<2031nam>311 WARNTINUE" class="7as0us_multicast_etfw">10us hre href="+code=cipherwrx_flags_multicast_etfwrx_flagse 8 =f=0ref="ne87t">2179rx.c#L1058" 203114" i052031a hrexmit_f="+code=rx"2031a h>311 href="net/m7c802173rx.c#L1035" 203155" i052031s="line" name="L10Broa2031s=">315m7l6ss="sref7eulticast robust manageu311 hrefmulticast robust manag777777777* receive processing311s=et0multicast robust managaaaaaaaaa* 2179rx.c#L1058" 203121" i052031" name="Lxmit_f="+code2031" n>312ve 8 ef="ne87t">2179rx.c#L1058" 203122" i052031" name="Lf="_reset_RX_2031" n>31227l6ss="sref7eulticast robust manageu3123 hremulticast robust manag7>yidx3124 hremulticast robust manag7>yidx312m7l6sxulticast robust manag7>yidx312tice=xulticast robust manag >yidx2031sda>312classxulticast robust manag >yidx1004rx_result+co2031100>312class="srefsfNTINUE" class="7kb_multicast_etfwskbe 8 2f=NTINUE" class="nce((rx;& >.re, NTINUE" class=t7kb_multicast_etfwskbe 8 clx_f="0420211_sesata"sref">sdata2179rx.c#L1058" 203129" i052031f="rx_h_amsdu"sref">sd2031f=">312s=et0211/a>-&idrf-x_f="0420211_se7kb_multicast_etfwskbe 8 _ ref="ne/7">f2179rx.c#L1007" 203138" i052031s="line" name="L10Broa2031s=">31s=f">is_multic=key"t">NTINUE" class="rcu_read/un008k_multicast_etfwrcu_read/un008ke 8 f_ref="ne87t">2179rx.c#L1058" 2031s1" i052031e=sdata"/m70 72031e=s>31sve 8 else { 2179rx.c#L1058" 2031s2" i052031f="+code cl s2031f=">31ssref">is_multf="net/m7c802173rx.c#="L10862031s3" i052031 name="L170ss="sref"7 2031 na>31s ="net/m7c802173rx.c#="L1086203134" i052031name="L170 7 w2031nam>3134f">is_multicNTINUE" class="nce(sdata(rx;& >.re,="net/m7c802173rx.c#="L1086203135" i05203110Broadcast/multicast 203110B>313m7l6ss="sref7>yidx(sdatarx;&fusit_contro=e 8 ,="net/m7c802173rx.c#="L1086203136" i052031s*i"lquire" that rx/a>2031s*i>313tice=key" class="xis_multx_f="0420211_se7kb_multicast_etfwskbe 8 RX_CONTINUE" class="0d have 8e>rx2179rx.c#L1058" 2031s7" i052031s* Broadcast/multicast2031s* >3137f">is_multicNTINUE" class="__nce((2179rx.c#L1058" 2031s8" i052031t robust managemen17092031t r>313 href="net/m7c802171rx.c#L1029" 203139" i052031f=" eliver_f="+code=rx2031f=">313s=et0211/a>-&NTINUE" class=trcu_read/un008k_multicast_etfwrcu_read/un008ke 8 f_ref="ne87t">2179rx.c#L1058" 203148" i052031her" clas7 7 2031her>314dhref="net/m7c802171rx.c#L1029" 2031h1" i052031 name="L1004">1004sub_2031 na>314ve 8 else returnref="ne87t">2179rx.c#L1058" 2031h2" i052031 name="LRX_" evic 2031 na>31hsref"lx_f="0420211_sedrop_multicast_etfwdrope 8 :ef="ne/7">f2179rx.c#L1007" 2031h3" i052031 name="Lrk_bufode=key"2031 na>314 WARNTINUE" class="kfree_7kb_multicast_etfwkfree_7kbe 8 fNTINUE" class=t7kb_multicast_etfwskbe 8 _ref="ne87t">2179rx.c#L1058" 203144" i052031 name="Leths="sref">is2031 na>31h4f">if="net/m7c802173rx.c#="L10862031h5" i052031 name="Lrta_infosref">2031 na>31hm7l6sNTINUE" class=tEXPORT_SYMBOLs="sre7&&a EXPORT_SYMBOLe 8 fNTINUE" class=tnce(sdata(2179rx.c#L1058" 203146" i052031 name="L1004">1004rx_f2031 na>31h6lassef="ne87t">2179rx.c#L1058" 203147" i052031sdata"/m7rlass="sre7dr2031sda>314classxulticast robust manag/* This is a version of the rx7handler that p;n be p; ledpfrom hard irq31hs=et0void NTINUE" class="nce(sdata((f2179rx.c#L1007" 203158" i052031sdata"/m7s="comment7>/2031sda>31sdhrefref="ne/7">f2179rx.c#L1007" 203151" i052031" e17l_ss="li9eclass="ao31" e>31sve 8 else struct x_f="0420211_sence(rx;&nce(rx;& >.re2f=NTINUE" class="hw_to/008s="sref">rx;&hw_to/008s=lassfe=key" class=erhwass="8ad6251cunhwf= h_ref="ne87t">2179rx.c#L1058" 203152" i0520313152href="net/m7c802173rx.c#L1035" 203153" i052031;315 WARNTINUE" class="BUILD_BUG_ON"sref">sdata2179rx.c#L1058" 203154" i0520311042 93131s href="net/m7c802173rx.c#L1035" 2031s5" i05203131sm7l6ss="sref7NTINUE" class="7kb_multicast_etfwskbe 8 RX_CONTINUE" class="pkt_typenoin.re2f=NTINUE" class="IEEElassdeRX_MSGnoin2179rx.c#L1058" 203156" i052031line" name="Lis_mul"ica931lin>31stice=key" claNTINUE" class="7kb_queue_tai="sref">rx;&7kb_queue_tai=e 8 f hrefe=key" class=er008s="sref">rx;& >.re href="+code=cipherw7kb_queue"sref">rx;&7kb_queuef= hc x_f="0420211_se7kb_multicast_etfwskbe 8 _ref="ne87t">2179rx.c#L1058" 203157" i052031L1<1035" id="L1035" cla931L1<>3157f">is_multicNTINUE" class="tasklet_schedule_multicast_etfwtasklet_schedulee 8 f hrefe=key" class=er008s="sref">rx;& >.re href="+code=cipherwtasklet_multicast_etfwtasklete 8 _ref="ne87t">2179rx.c#L1058" 203158" i052031s="line" name="L1111111931s=">31s hreff="net/m7c802173rx.c#="L1086203159" i052031s="line" name="L1111111931s=">31ss=et0NTINUE" class=tEXPORT_SYMBOLs="sre7&&a EXPORT_SYMBOLe 8 fNTINUE" class=tnce(sdata(2179rx.c#L1058" 203168" i052031s="line" name="L1111111931s=">31s=ref"m/pre>

The original LXR 7oftware by the f="ne87t"http://sourceforge.>217projects/lxr">LXR ust unityf= hc this experi manal version by f="ne87t"mai=to:lxr@me=ux.no;&axr@me=ux.nof= h. axr.me=ux.no kindly hostedpby f="ne87t"http://www.redpill-me=pro.no;&Redpill Le=pro ASf= hc provider of Le=uxtconsulting and opera0ionspservices since 1995.