Message ID | 1424705624-7964-1-git-send-email-me@bobcopeland.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Johannes Berg |
Headers | show |
On Mon, 2015-02-23 at 10:33 -0500, Bob Copeland wrote: > Due to the checks in get_hwsim_data_ref_from_addr, wmediumd > was only able to use the second mac address (those starting with > 0x42). This is confusing and needlessly limiting, so allow any > configured address. > > While at it, use ether_addr_equal since data->addresses and the > address from the netlink payload are aligned(2). As I mentioned on IRC, I think you should iterate the interfaces to identify the currently live MAC addresses instead of the fake "hw addresses" we assign to each hwsim radio. johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index 1204853..be8bb18 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c @@ -907,8 +907,7 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw, goto nla_put_failure; } - if (nla_put(skb, HWSIM_ATTR_ADDR_TRANSMITTER, - ETH_ALEN, data->addresses[1].addr)) + if (nla_put(skb, HWSIM_ATTR_ADDR_TRANSMITTER, ETH_ALEN, hdr->addr2)) goto nla_put_failure; /* We get the skb->data */ @@ -2608,14 +2607,18 @@ static struct mac80211_hwsim_data *get_hwsim_data_ref_from_addr(const u8 *addr) { struct mac80211_hwsim_data *data; bool _found = false; + int i; spin_lock_bh(&hwsim_radio_lock); list_for_each_entry(data, &hwsim_radios, list) { - if (memcmp(data->addresses[1].addr, addr, ETH_ALEN) == 0) { - _found = true; - break; + for (i = 0; i < ARRAY_SIZE(data->addresses); i++) { + if (ether_addr_equal(data->addresses[i].addr, addr)) { + _found = true; + goto end_loop; + } } } +end_loop: spin_unlock_bh(&hwsim_radio_lock); if (!_found)
Due to the checks in get_hwsim_data_ref_from_addr, wmediumd was only able to use the second mac address (those starting with 0x42). This is confusing and needlessly limiting, so allow any configured address. While at it, use ether_addr_equal since data->addresses and the address from the netlink payload are aligned(2). Signed-off-by: Bob Copeland <me@bobcopeland.com> --- drivers/net/wireless/mac80211_hwsim.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)