aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 61a4ad7cc1c2..574b8bb121e1 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -291,6 +291,14 @@ struct mac80211_hwsim_data {
291 bool ps_poll_pending; 291 bool ps_poll_pending;
292 struct dentry *debugfs; 292 struct dentry *debugfs;
293 struct dentry *debugfs_ps; 293 struct dentry *debugfs_ps;
294
295 /*
296 * Only radios in the same group can communicate together (the
297 * channel has to match too). Each bit represents a group. A
298 * radio can be in more then one group.
299 */
300 u64 group;
301 struct dentry *debugfs_group;
294}; 302};
295 303
296 304
@@ -412,7 +420,8 @@ static bool mac80211_hwsim_tx_frame(struct ieee80211_hw *hw,
412 420
413 if (!data2->started || !data2->radio_enabled || 421 if (!data2->started || !data2->radio_enabled ||
414 !hwsim_ps_rx_ok(data2, skb) || 422 !hwsim_ps_rx_ok(data2, skb) ||
415 data->channel->center_freq != data2->channel->center_freq) 423 data->channel->center_freq != data2->channel->center_freq ||
424 !(data->group & data2->group))
416 continue; 425 continue;
417 426
418 nskb = skb_copy(skb, GFP_ATOMIC); 427 nskb = skb_copy(skb, GFP_ATOMIC);
@@ -720,6 +729,7 @@ static void mac80211_hwsim_free(void)
720 spin_unlock_bh(&hwsim_radio_lock); 729 spin_unlock_bh(&hwsim_radio_lock);
721 730
722 list_for_each_entry(data, &tmplist, list) { 731 list_for_each_entry(data, &tmplist, list) {
732 debugfs_remove(data->debugfs_group);
723 debugfs_remove(data->debugfs_ps); 733 debugfs_remove(data->debugfs_ps);
724 debugfs_remove(data->debugfs); 734 debugfs_remove(data->debugfs);
725 ieee80211_unregister_hw(data->hw); 735 ieee80211_unregister_hw(data->hw);
@@ -872,6 +882,24 @@ DEFINE_SIMPLE_ATTRIBUTE(hwsim_fops_ps, hwsim_fops_ps_read, hwsim_fops_ps_write,
872 "%llu\n"); 882 "%llu\n");
873 883
874 884
885static int hwsim_fops_group_read(void *dat, u64 *val)
886{
887 struct mac80211_hwsim_data *data = dat;
888 *val = data->group;
889 return 0;
890}
891
892static int hwsim_fops_group_write(void *dat, u64 val)
893{
894 struct mac80211_hwsim_data *data = dat;
895 data->group = val;
896 return 0;
897}
898
899DEFINE_SIMPLE_ATTRIBUTE(hwsim_fops_group,
900 hwsim_fops_group_read, hwsim_fops_group_write,
901 "%llx\n");
902
875static int __init init_mac80211_hwsim(void) 903static int __init init_mac80211_hwsim(void)
876{ 904{
877 int i, err = 0; 905 int i, err = 0;
@@ -976,6 +1004,8 @@ static int __init init_mac80211_hwsim(void)
976 1004
977 hw->wiphy->bands[band] = sband; 1005 hw->wiphy->bands[band] = sband;
978 } 1006 }
1007 /* By default all radios are belonging to the first group */
1008 data->group = 1;
979 1009
980 /* Work to be done prior to ieee80211_register_hw() */ 1010 /* Work to be done prior to ieee80211_register_hw() */
981 switch (regtest) { 1011 switch (regtest) {
@@ -1100,6 +1130,9 @@ static int __init init_mac80211_hwsim(void)
1100 data->debugfs_ps = debugfs_create_file("ps", 0666, 1130 data->debugfs_ps = debugfs_create_file("ps", 0666,
1101 data->debugfs, data, 1131 data->debugfs, data,
1102 &hwsim_fops_ps); 1132 &hwsim_fops_ps);
1133 data->debugfs_group = debugfs_create_file("group", 0666,
1134 data->debugfs, data,
1135 &hwsim_fops_group);
1103 1136
1104 setup_timer(&data->beacon_timer, mac80211_hwsim_beacon, 1137 setup_timer(&data->beacon_timer, mac80211_hwsim_beacon,
1105 (unsigned long) hw); 1138 (unsigned long) hw);