__le16 transaction;
        __le16 status;
        /* challenge */
-       struct libipw_info_element info_element[];
+       u8 variable[];
 } __packed;
 
 struct libipw_channel_switch {
        union {
                struct libipw_action_exchange {
                        u8 token;
-                       struct libipw_info_element info_element[0];
                } exchange;
                struct libipw_channel_switch channel_switch;
 
 struct libipw_probe_request {
        struct libipw_hdr_3addr header;
        /* SSID, supported rates */
-       struct libipw_info_element info_element[];
+       u8 variable[];
 } __packed;
 
 struct libipw_probe_response {
        __le16 capability;
        /* SSID, supported rates, FH params, DS params,
         * CF params, IBSS params, TIM (if beacon), RSN */
-       struct libipw_info_element info_element[];
+       u8 variable[];
 } __packed;
 
 /* Alias beacon for probe_response */
        __le16 capability;
        __le16 listen_interval;
        /* SSID, supported rates, RSN */
-       struct libipw_info_element info_element[];
+       u8 variable[];
 } __packed;
 
 struct libipw_reassoc_request {
        __le16 capability;
        __le16 listen_interval;
        u8 current_ap[ETH_ALEN];
-       struct libipw_info_element info_element[];
+       u8 variable[];
 } __packed;
 
 struct libipw_assoc_response {
        __le16 status;
        __le16 aid;
        /* supported rates */
-       struct libipw_info_element info_element[];
+       u8 variable[];
 } __packed;
 
 struct libipw_txb {
 
        network->wpa_ie_len = 0;
        network->rsn_ie_len = 0;
 
-       if (libipw_parse_info_param
-           (frame->info_element, stats->len - sizeof(*frame), network))
+       if (libipw_parse_info_param((void *)frame->variable,
+                                   stats->len - sizeof(*frame), network))
                return 1;
 
        network->mode = 0;
        network->wpa_ie_len = 0;
        network->rsn_ie_len = 0;
 
-       if (libipw_parse_info_param
-           (beacon->info_element, stats->len - sizeof(*beacon), network))
+       if (libipw_parse_info_param((void *)beacon->variable,
+                                   stats->len - sizeof(*beacon), network))
                return 1;
 
        network->mode = 0;
        struct libipw_network *target;
        struct libipw_network *oldest = NULL;
 #ifdef CONFIG_LIBIPW_DEBUG
-       struct libipw_info_element *info_element = beacon->info_element;
+       struct libipw_info_element *info_element = (void *)beacon->variable;
 #endif
        unsigned long flags;