]> Git Repo - linux.git/commitdiff
Merge branch 'upstream-fixes'
authorJohn W. Linville <[email protected]>
Wed, 15 Mar 2006 22:02:08 +0000 (17:02 -0500)
committerJohn W. Linville <[email protected]>
Wed, 15 Mar 2006 22:02:08 +0000 (17:02 -0500)
1  2 
drivers/net/tg3.c
net/ieee80211/ieee80211_crypt_ccmp.c
net/ieee80211/ieee80211_rx.c

diff --combined drivers/net/tg3.c
index 0f3798f8188330849fa29ed54b658b9a342dc918,b8f1524da5578b7d4b34f53713d370fae3e361da..c0878f304e540eab5bd98f086262e755632d9406
@@@ -7802,7 -7802,7 +7802,7 @@@ static int tg3_test_link(struct tg3 *tp
  }
  
  /* Only test the commonly used registers */
 -static int tg3_test_registers(struct tg3 *tp)
 +static const int tg3_test_registers(struct tg3 *tp)
  {
        int i, is_5705;
        u32 offset, read_mask, write_mask, val, save_val, read_val;
@@@ -8016,7 -8016,7 +8016,7 @@@ out
  
  static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
  {
 -      static u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
 +      static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
        int i;
        u32 j;
  
@@@ -10543,8 -10543,6 +10543,6 @@@ static char * __devinit tg3_bus_string(
                        strcat(str, "66MHz");
                else if (clock_ctrl == 6)
                        strcat(str, "100MHz");
-               else if (clock_ctrl == 7)
-                       strcat(str, "133MHz");
        } else {
                strcpy(str, "PCI:");
                if (tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED)
index 097bcea2129f5ab5a78a81b852b002fd304c8321,3840d1911f2b2a2e04f0a99f22c8573ed117e429..78b2d13e80e3638cba22d9a6f0bb7df727856829
@@@ -131,7 -131,7 +131,7 @@@ static void ccmp_init_blocks(struct cry
        a4_included = ((fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) ==
                       (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS));
        qc_included = ((WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_DATA) &&
-                      (WLAN_FC_GET_STYPE(fc) & 0x08));
+                      (WLAN_FC_GET_STYPE(fc) & IEEE80211_STYPE_QOS_DATA));
        aad_len = 22;
        if (a4_included)
                aad_len += 6;
        ieee80211_ccmp_aes_encrypt(tfm, b0, s0);
  }
  
 -static int ieee80211_ccmp_hdr(struct sk_buff *skb, int hdr_len, void *priv)
 +static int ieee80211_ccmp_hdr(struct sk_buff *skb, int hdr_len,
 +                            u8 *aeskey, int keylen, void *priv)
  {
        struct ieee80211_ccmp_data *key = priv;
        int i;
        if (skb_headroom(skb) < CCMP_HDR_LEN || skb->len < hdr_len)
                return -1;
  
 +      if (aeskey != NULL && keylen >= CCMP_TK_LEN)
 +              memcpy(aeskey, key->key, CCMP_TK_LEN);
 +
        pos = skb_push(skb, CCMP_HDR_LEN);
        memmove(pos, pos + CCMP_HDR_LEN, hdr_len);
        pos += hdr_len;
@@@ -242,7 -238,7 +242,7 @@@ static int ieee80211_ccmp_encrypt(struc
                return -1;
  
        data_len = skb->len - hdr_len;
 -      len = ieee80211_ccmp_hdr(skb, hdr_len, priv);
 +      len = ieee80211_ccmp_hdr(skb, hdr_len, NULL, 0, priv);
        if (len < 0)
                return -1;
  
index 6b8469da29b15513e15962faa0be62890924c241,7ac6a7165d9c3d01eec2d084daa12badd2ecaa57..785d5a170a7fa11eb0b858427120fe7642c80d83
@@@ -369,8 -369,8 +369,8 @@@ int ieee80211_rx(struct ieee80211_devic
  
        /* Put this code here so that we avoid duplicating it in all
         * Rx paths. - Jean II */
 +#ifdef CONFIG_WIRELESS_EXT
  #ifdef IW_WIRELESS_SPY                /* defined in iw_handler.h */
 -#ifdef CONFIG_NET_RADIO
        /* If spy monitoring on */
        if (ieee->spy_data.spy_number > 0) {
                struct iw_quality wstats;
                /* Update spy records */
                wireless_spy_update(ieee->dev, hdr->addr2, &wstats);
        }
 -#endif                                /* CONFIG_NET_RADIO */
  #endif                                /* IW_WIRELESS_SPY */
 +#endif                                /* CONFIG_WIRELESS_EXT */
  
  #ifdef NOT_YET
        hostap_update_rx_stats(local->ap, hdr, rx_stats);
        /* skb: hdr + (possibly fragmented) plaintext payload */
        // PR: FIXME: hostap has additional conditions in the "if" below:
        // ieee->host_decrypt && (fc & IEEE80211_FCTL_PROTECTED) &&
 -      if ((frag != 0 || (fc & IEEE80211_FCTL_MOREFRAGS))) {
 +      if ((frag != 0) || (fc & IEEE80211_FCTL_MOREFRAGS)) {
                int flen;
                struct sk_buff *frag_skb = ieee80211_frag_cache_get(ieee, hdr);
                IEEE80211_DEBUG_FRAG("Rx Fragment received (%u)\n", frag);
                memset(skb->cb, 0, sizeof(skb->cb));
                skb->dev = dev;
                skb->ip_summed = CHECKSUM_NONE; /* 802.11 crc not sufficient */
 -              netif_rx(skb);
 +              if (netif_rx(skb) == NET_RX_DROP) {
 +                      /* netif_rx always succeeds, but it might drop
 +                       * the packet.  If it drops the packet, we log that
 +                       * in our stats. */
 +                      IEEE80211_DEBUG_DROP
 +                          ("RX: netif_rx dropped the packet\n");
 +                      stats->rx_dropped++;
 +              }
        }
  
        rx_exit:
@@@ -937,45 -930,6 +937,45 @@@ static int ieee80211_parse_qos_info_par
        return rc;
  }
  
 +#ifdef CONFIG_IEEE80211_DEBUG
 +#define MFIE_STRING(x) case MFIE_TYPE_ ##x: return #x
 +
 +static const char *get_info_element_string(u16 id)
 +{
 +      switch (id) {
 +              MFIE_STRING(SSID);
 +              MFIE_STRING(RATES);
 +              MFIE_STRING(FH_SET);
 +              MFIE_STRING(DS_SET);
 +              MFIE_STRING(CF_SET);
 +              MFIE_STRING(TIM);
 +              MFIE_STRING(IBSS_SET);
 +              MFIE_STRING(COUNTRY);
 +              MFIE_STRING(HOP_PARAMS);
 +              MFIE_STRING(HOP_TABLE);
 +              MFIE_STRING(REQUEST);
 +              MFIE_STRING(CHALLENGE);
 +              MFIE_STRING(POWER_CONSTRAINT);
 +              MFIE_STRING(POWER_CAPABILITY);
 +              MFIE_STRING(TPC_REQUEST);
 +              MFIE_STRING(TPC_REPORT);
 +              MFIE_STRING(SUPP_CHANNELS);
 +              MFIE_STRING(CSA);
 +              MFIE_STRING(MEASURE_REQUEST);
 +              MFIE_STRING(MEASURE_REPORT);
 +              MFIE_STRING(QUIET);
 +              MFIE_STRING(IBSS_DFS);
 +              MFIE_STRING(ERP_INFO);
 +              MFIE_STRING(RSN);
 +              MFIE_STRING(RATES_EX);
 +              MFIE_STRING(GENERIC);
 +              MFIE_STRING(QOS_PARAMETER);
 +      default:
 +              return "UNKNOWN";
 +      }
 +}
 +#endif
 +
  static int ieee80211_parse_info_param(struct ieee80211_info_element
                                      *info_element, u16 length,
                                      struct ieee80211_network *network)
                        break;
  
                case MFIE_TYPE_TIM:
 -                      IEEE80211_DEBUG_MGMT("MFIE_TYPE_TIM: ignored\n");
 +                      network->tim.tim_count = info_element->data[0];
 +                      network->tim.tim_period = info_element->data[1];
 +                      IEEE80211_DEBUG_MGMT("MFIE_TYPE_TIM: partially ignored\n");
                        break;
  
                case MFIE_TYPE_ERP_INFO:
                        printk(KERN_ERR
                               "QoS Error need to parse QOS_PARAMETER IE\n");
                        break;
 +                      /* 802.11h */
 +              case MFIE_TYPE_POWER_CONSTRAINT:
 +                      network->power_constraint = info_element->data[0];
 +                      network->flags |= NETWORK_HAS_POWER_CONSTRAINT;
 +                      break;
 +
 +              case MFIE_TYPE_CSA:
 +                      network->power_constraint = info_element->data[0];
 +                      network->flags |= NETWORK_HAS_CSA;
 +                      break;
 +
 +              case MFIE_TYPE_QUIET:
 +                      network->quiet.count = info_element->data[0];
 +                      network->quiet.period = info_element->data[1];
 +                      network->quiet.duration = info_element->data[2];
 +                      network->quiet.offset = info_element->data[3];
 +                      network->flags |= NETWORK_HAS_QUIET;
 +                      break;
 +
 +              case MFIE_TYPE_IBSS_DFS:
 +                      if (network->ibss_dfs)
 +                              break;
 +                      network->ibss_dfs =
 +                          kmalloc(info_element->len, GFP_ATOMIC);
 +                      if (!network->ibss_dfs)
 +                              return 1;
 +                      memcpy(network->ibss_dfs, info_element->data,
 +                             info_element->len);
 +                      network->flags |= NETWORK_HAS_IBSS_DFS;
 +                      break;
 +
 +              case MFIE_TYPE_TPC_REPORT:
 +                      network->tpc_report.transmit_power =
 +                          info_element->data[0];
 +                      network->tpc_report.link_margin = info_element->data[1];
 +                      network->flags |= NETWORK_HAS_TPC_REPORT;
 +                      break;
  
                default:
 -                      IEEE80211_DEBUG_MGMT("unsupported IE %d\n",
 -                                           info_element->id);
 +                      IEEE80211_DEBUG_MGMT
 +                          ("Unsupported info element: %s (%d)\n",
 +                           get_info_element_string(info_element->id),
 +                           info_element->id);
                        break;
                }
  
  static int ieee80211_handle_assoc_resp(struct ieee80211_device *ieee, struct ieee80211_assoc_response
                                       *frame, struct ieee80211_rx_stats *stats)
  {
 -      struct ieee80211_network network_resp;
 +      struct ieee80211_network network_resp = {
 +              .ibss_dfs = NULL,
 +      };
        struct ieee80211_network *network = &network_resp;
        struct net_device *dev = ieee->dev;
  
@@@ -1342,9 -1253,6 +1342,9 @@@ static void update_network(struct ieee8
        int qos_active;
        u8 old_param;
  
 +      ieee80211_network_reset(dst);
 +      dst->ibss_dfs = src->ibss_dfs;
 +
        memcpy(&dst->stats, &src->stats, sizeof(struct ieee80211_rx_stats));
        dst->capability = src->capability;
        memcpy(dst->rates, src->rates, src->rates_len);
        dst->listen_interval = src->listen_interval;
        dst->atim_window = src->atim_window;
        dst->erp_value = src->erp_value;
 +      dst->tim = src->tim;
  
        memcpy(dst->wpa_ie, src->wpa_ie, src->wpa_ie_len);
        dst->wpa_ie_len = src->wpa_ie_len;
@@@ -1406,9 -1313,7 +1406,9 @@@ static void ieee80211_process_probe_res
                                                    *stats)
  {
        struct net_device *dev = ieee->dev;
 -      struct ieee80211_network network;
 +      struct ieee80211_network network = {
 +              .ibss_dfs = NULL,
 +      };
        struct ieee80211_network *target;
        struct ieee80211_network *oldest = NULL;
  #ifdef CONFIG_IEEE80211_DEBUG
                                             escape_essid(target->ssid,
                                                          target->ssid_len),
                                             MAC_ARG(target->bssid));
 +                      ieee80211_network_reset(target);
                } else {
                        /* Otherwise just pull from the free list */
                        target = list_entry(ieee->network_free_list.next,
                                     "BEACON" : "PROBE RESPONSE");
  #endif
                memcpy(target, &network, sizeof(*target));
 +              network.ibss_dfs = NULL;
                list_add_tail(&target->list, &ieee->network_list);
        } else {
                IEEE80211_DEBUG_SCAN("Updating '%s' (" MAC_FMT ") via %s.\n",
                                     is_beacon(beacon->header.frame_ctl) ?
                                     "BEACON" : "PROBE RESPONSE");
                update_network(target, &network);
 +              network.ibss_dfs = NULL;
        }
  
        spin_unlock_irqrestore(&ieee->lock, flags);
  
        if (is_beacon(beacon->header.frame_ctl)) {
                if (ieee->handle_beacon != NULL)
-                       ieee->handle_beacon(dev, beacon, &network);
+                       ieee->handle_beacon(dev, beacon, target);
        } else {
                if (ieee->handle_probe_response != NULL)
-                       ieee->handle_probe_response(dev, beacon, &network);
+                       ieee->handle_probe_response(dev, beacon, target);
        }
  }
  
@@@ -1593,43 -1495,10 +1593,43 @@@ void ieee80211_rx_mgt(struct ieee80211_
                                              header);
                break;
  
 +      case IEEE80211_STYPE_ACTION:
 +              IEEE80211_DEBUG_MGMT("ACTION\n");
 +              if (ieee->handle_action)
 +                      ieee->handle_action(ieee->dev,
 +                                          (struct ieee80211_action *)
 +                                          header, stats);
 +              break;
 +
 +      case IEEE80211_STYPE_REASSOC_REQ:
 +              IEEE80211_DEBUG_MGMT("received reassoc (%d)\n",
 +                                   WLAN_FC_GET_STYPE(le16_to_cpu
 +                                                     (header->frame_ctl)));
 +
 +              IEEE80211_WARNING("%s: IEEE80211_REASSOC_REQ received\n",
 +                                ieee->dev->name);
 +              if (ieee->handle_reassoc_request != NULL)
 +                      ieee->handle_reassoc_request(ieee->dev,
 +                                                  (struct ieee80211_reassoc_request *)
 +                                                   header);
 +              break;
 +
 +      case IEEE80211_STYPE_ASSOC_REQ:
 +              IEEE80211_DEBUG_MGMT("received assoc (%d)\n",
 +                                   WLAN_FC_GET_STYPE(le16_to_cpu
 +                                                     (header->frame_ctl)));
 +
 +              IEEE80211_WARNING("%s: IEEE80211_ASSOC_REQ received\n",
 +                                ieee->dev->name);
 +              if (ieee->handle_assoc_request != NULL)
 +                      ieee->handle_assoc_request(ieee->dev);
 +              break;
 +
        case IEEE80211_STYPE_DEAUTH:
 -              printk("DEAUTH from AP\n");
 +              IEEE80211_DEBUG_MGMT("DEAUTH\n");
                if (ieee->handle_deauth != NULL)
 -                      ieee->handle_deauth(ieee->dev, (struct ieee80211_auth *)
 +                      ieee->handle_deauth(ieee->dev,
 +                                          (struct ieee80211_deauth *)
                                            header);
                break;
        default:
This page took 0.075636 seconds and 4 git commands to generate.