brcms_c_set_addrmatch(wl->wlc, RCM_BSSID_OFFSET, info->bssid);
                spin_unlock_bh(&wl->lock);
        }
+       if (changed & BSS_CHANGED_SSID) {
+               /* BSSID changed, for whatever reason (IBSS and managed mode) */
+               spin_lock_bh(&wl->lock);
+               brcms_c_set_ssid(wl->wlc, info->ssid, info->ssid_len);
+               spin_unlock_bh(&wl->lock);
+       }
        if (changed & BSS_CHANGED_BEACON) {
                /* Beacon data changed, retrieve new beacon (beaconing modes) */
                struct sk_buff *beacon;
 
        brcms_c_set_addrmatch(bsscfg->wlc, RCM_BSSID_OFFSET, bsscfg->BSSID);
 }
 
+void brcms_c_set_ssid(struct brcms_c_info *wlc, u8 *ssid, size_t ssid_len)
+{
+       u8 len = min_t(u8, sizeof(wlc->bsscfg->SSID), ssid_len);
+       memset(wlc->bsscfg->SSID, 0, sizeof(wlc->bsscfg->SSID));
+
+       memcpy(wlc->bsscfg->SSID, ssid, len);
+       wlc->bsscfg->SSID_len = len;
+}
+
 static void brcms_b_set_shortslot(struct brcms_hardware *wlc_hw, bool shortslot)
 {
        wlc_hw->shortslot = shortslot;
 
 extern void brcms_c_set_new_beacon(struct brcms_c_info *wlc,
                                   struct sk_buff *beacon, u16 tim_offset,
                                   u16 dtim_period);
+extern void brcms_c_set_ssid(struct brcms_c_info *wlc, u8 *ssid,
+                            size_t ssid_len);
 
 #endif                         /* _BRCM_PUB_H_ */