return 0;
 }
+
+int
+ieee80211softmac_handle_reassoc_req(struct net_device * dev,
+                                   struct ieee80211_reassoc_request * resp)
+{
+       struct ieee80211softmac_device *mac = ieee80211_priv(dev);
+       struct ieee80211softmac_network *network;
+
+       function_enter();
+
+       network = ieee80211softmac_get_network_by_bssid(mac, resp->header.addr3);
+       if (!network) {
+               dprintkl(KERN_INFO PFX "reassoc request from unknown network\n");
+               return 0;
+       }
+       ieee80211softmac_assoc(mac, network);
+       return 0;
+}
 
        softmac->ieee->handle_auth = ieee80211softmac_auth_resp;
        softmac->ieee->handle_deauth = ieee80211softmac_deauth_resp;
        softmac->ieee->handle_assoc_response = ieee80211softmac_handle_assoc_response;
+       softmac->ieee->handle_reassoc_request = ieee80211softmac_handle_reassoc_req;
        softmac->ieee->handle_disassoc = ieee80211softmac_handle_disassoc;
        softmac->scaninfo = NULL;
 
 
                                           struct ieee80211_network * network);
 int ieee80211softmac_handle_disassoc(struct net_device * dev,
                                     struct ieee80211_disassoc * disassoc);
+int ieee80211softmac_handle_reassoc_req(struct net_device * dev,
+                                       struct ieee80211_reassoc_request * reassoc);
 void ieee80211softmac_assoc_timeout(void *d);
 
 /* some helper functions */