static void agnx_bss_info_changed(struct ieee80211_hw *dev, struct ieee80211_vif *vif, struct ieee80211_bss_conf *conf, u32 changed) { struct agnx_priv *priv = dev->priv; void __iomem *ctl = priv->ctl; AGNX_TRACE; if (!(changed & BSS_CHANGED_BSSID)) return; spin_lock(&priv->lock); if (memcmp(conf->bssid, priv->bssid, ETH_ALEN)) { agnx_set_bssid(priv, conf->bssid); memcpy(priv->bssid, conf->bssid, ETH_ALEN); hash_write(priv, conf->bssid, BSSID_STAID); sta_init(priv, BSSID_STAID); /* FIXME needed? */ sta_power_init(priv, BSSID_STAID); agnx_write32(ctl, AGNX_BM_MTSM, 0xff & ~0x1); } spin_unlock(&priv->lock); } /* agnx_bss_info_changed */
int main () { // regular station struct station_class station_regular; struct in_addr ip_addresses[2]; unsigned experiment_wait; ////////////////////////////////////////////////////////////////// // Initial operations INFO ("STA NODE STARTED."); // convert IP address to internal representation if (inet_aton (IP_ADDRESS_REGULAR, &(ip_addresses[ID_REGULAR])) == 0) { WARNING ("Address '%s' does not appear to be valid.", IP_ADDRESS_REGULAR); return ERROR; } // make wait period long enough to observe association timeout experiment_wait = 10; ////////////////////////////////////////////////////////////////// // Regular station initialization INFO ("Initializing regular station '%u'...", ID_REGULAR); // create regular station sta_init (&station_regular, FALSE, ID_REGULAR, ip_addresses, BEACON_INTERVAL); #ifdef MESSAGE_DEBUG // display parameters sta_print (&station_regular); #endif ////////////////////////////////////////////////////////////////// // Wait for association to take place INFO ("Running for %u s...", experiment_wait); sleep (experiment_wait); ////////////////////////////////////////////////////////////////// // Regular station finalization INFO ("Finalizing regular station '%u'...", station_regular.id); // finalize regular station sta_finalize (&station_regular); return SUCCESS; }
int main (int argc, char *argv[]) { struct station_class station; int is_ap; unsigned station_id; char station_ip_char[20]; struct in_addr station_ip; unsigned execution_duration; ////////////////////////////////////////////////////////////////// // Initial operations if (argc < 3) { WARNING ("You must provide the node type, id and IP address:"); WARNING ("stationd AP|STA id ip_address"); return ERROR; } if (strncmp (argv[1], "AP", 2) == 0) is_ap = TRUE; else if (strncmp (argv[1], "STA", 3) == 0) is_ap = FALSE; else { WARNING ("Node type '%s' is unrecognized", argv[1]); return ERROR; } station_id = atoi (argv[2]); strncpy (station_ip_char, argv[3], 20); INFO ("Station daemon started: type=%s id=%d IP=%s", argv[1], station_id, argv[3]); // convert IP address to internal representation if (inet_aton (station_ip_char, &(station_ip)) == 0) { WARNING ("Address '%s' does not appear to be valid.", station_ip_char); return ERROR; } execution_duration = 10; ////////////////////////////////////////////////////////////////// // Station daemon initialization INFO ("Initializing station daemon '%u'...", station_id); // create station sta_init (&station, is_ap, station_id, &(station_ip), BEACON_INTERVAL); #ifdef MESSAGE_DEBUG // display parameters sta_print (&station); #endif ////////////////////////////////////////////////////////////////// // Wait for association to take place INFO ("Executing daemon for %u s...", execution_duration); sleep (execution_duration); ////////////////////////////////////////////////////////////////// // Station finalization INFO ("Shutting down station daemon '%u'...", station.id); // finalize station sta_finalize (&station); return SUCCESS; }