meta = (struct hostap_skb_tx_data *) skb->cb;
        memset(meta, 0, sizeof(*meta));
        meta->magic = HOSTAP_SKB_TX_DATA_MAGIC;
-       meta->wds = use_wds;
+       if (use_wds)
+               meta->flags |= HOSTAP_TX_FLAGS_WDS;
        meta->ethertype = ethertype;
        meta->iface = iface;
 
        case AP_TX_CONTINUE_NOT_AUTHORIZED:
                if (local->ieee_802_1x &&
                    HOSTAP_FC_GET_TYPE(fc) == WLAN_FC_TYPE_DATA &&
-                   meta->ethertype != ETH_P_PAE && !meta->wds) {
+                   meta->ethertype != ETH_P_PAE &&
+                   !(meta->flags & HOSTAP_TX_FLAGS_WDS)) {
                        printk(KERN_DEBUG "%s: dropped frame to unauthorized "
                               "port (IEEE 802.1X): ethertype=0x%04x\n",
                               dev->name, meta->ethertype);
 
 static void pspoll_send_buffered(local_info_t *local, struct sta_info *sta,
                                 struct sk_buff *skb)
 {
+       struct hostap_skb_tx_data *meta;
+
        if (!(sta->flags & WLAN_STA_PS)) {
                /* Station has moved to non-PS mode, so send all buffered
                 * frames using normal device queue. */
 
        /* add a flag for hostap_handle_sta_tx() to know that this skb should
         * be passed through even though STA is using PS */
-       memcpy(skb->cb, AP_SKB_CB_MAGIC, AP_SKB_CB_MAGIC_LEN);
-       skb->cb[AP_SKB_CB_MAGIC_LEN] = AP_SKB_CB_BUFFERED_FRAME;
+       meta = (struct hostap_skb_tx_data *) skb->cb;
+       meta->flags |= HOSTAP_TX_FLAGS_BUFFERED_FRAME;
        if (!skb_queue_empty(&sta->tx_buf)) {
                /* indicate to STA that more frames follow */
-               skb->cb[AP_SKB_CB_MAGIC_LEN] |= AP_SKB_CB_ADD_MOREDATA;
+               meta->flags |= HOSTAP_TX_FLAGS_ADD_MOREDATA;
        }
        dev_queue_xmit(skb);
 }
                atomic_inc(&sta->users);
        spin_unlock(&local->ap->sta_table_lock);
 
-       if (local->iw_mode == IW_MODE_MASTER && sta == NULL && !meta->wds &&
+       if (local->iw_mode == IW_MODE_MASTER && sta == NULL &&
+           !(meta->flags & HOSTAP_TX_FLAGS_WDS) &&
            meta->iface->type != HOSTAP_INTERFACE_MASTER &&
            meta->iface->type != HOSTAP_INTERFACE_AP) {
 #if 0
        if (!(sta->flags & WLAN_STA_PS))
                goto out;
 
-       if (memcmp(skb->cb, AP_SKB_CB_MAGIC, AP_SKB_CB_MAGIC_LEN) == 0) {
-               if (skb->cb[AP_SKB_CB_MAGIC_LEN] & AP_SKB_CB_ADD_MOREDATA) {
-                       /* indicate to STA that more frames follow */
-                       hdr->frame_control |=
-                               __constant_cpu_to_le16(WLAN_FC_MOREDATA);
-               }
+       if (meta->flags & HOSTAP_TX_FLAGS_ADD_MOREDATA) {
+               /* indicate to STA that more frames follow */
+               hdr->frame_control |= __constant_cpu_to_le16(WLAN_FC_MOREDATA);
+       }
 
-               if (skb->cb[AP_SKB_CB_MAGIC_LEN] & AP_SKB_CB_BUFFERED_FRAME) {
-                       /* packet was already buffered and now send due to
-                        * PS poll, so do not rebuffer it */
-                       goto out;
-               }
+       if (meta->flags & HOSTAP_TX_FLAGS_BUFFERED_FRAME) {
+               /* packet was already buffered and now send due to
+                * PS poll, so do not rebuffer it */
+               goto out;
        }
 
        if (skb_queue_len(&sta->tx_buf) >= STA_MAX_TX_BUFFER) {
 
 /* maximum number of frames to buffer per STA */
 #define STA_MAX_TX_BUFFER 32
 
-/* Flags used in skb->cb[6] to control how the packet is handled in TX path.
- * skb->cb[0..5] must contain magic value 'hostap' to indicate that cb[6] is
- * used. */
-#define AP_SKB_CB_MAGIC "hostap"
-#define AP_SKB_CB_MAGIC_LEN 6
-#define AP_SKB_CB_BUFFERED_FRAME BIT(0)
-#define AP_SKB_CB_ADD_MOREDATA BIT(1)
-
-
 /* STA flags */
 #define WLAN_STA_AUTH BIT(0)
 #define WLAN_STA_ASSOC BIT(1)
 
 
 #define HOSTAP_SKB_TX_DATA_MAGIC 0xf08a36a2
 
-/* TX meta data - stored in skb->cb buffer, so this must be not increase over
- * 48-byte limit */
+/*
+ * TX meta data - stored in skb->cb buffer, so this must not be increased over
+ * the 40-byte limit
+ */
 struct hostap_skb_tx_data {
-       unsigned int magic; /* HOSTAP_SKB_TX_DATA_MAGIC */
-       int rate; /* transmit rate */
+       u32 magic; /* HOSTAP_SKB_TX_DATA_MAGIC */
+       u8 rate; /* transmit rate */
+#define HOSTAP_TX_FLAGS_WDS BIT(0)
+#define HOSTAP_TX_FLAGS_BUFFERED_FRAME BIT(1)
+#define HOSTAP_TX_FLAGS_ADD_MOREDATA BIT(2)
+       u8 flags; /* HOSTAP_TX_FLAGS_* */
+       u16 tx_cb_idx;
        struct hostap_interface *iface;
        unsigned long jiffies; /* queueing timestamp */
-       int wds;
        unsigned short ethertype;
-       int tx_cb_idx;
 };