cfg80211: add P2P Device abstraction
In order to support using a different MAC address for the P2P Device address we must first have a P2P Device abstraction that can be assigned a MAC address. This abstraction will also be useful to support offloading P2P operations to the device, e.g. periodic listen for discoverability. Currently, the driver is responsible for assigning a MAC address to the P2P Device, but this could be changed by allowing a MAC address to be given to the NEW_INTERFACE command. As it has no associated netdev, a P2P Device can only be identified by its wdev identifier but the previous patches allowed using the wdev identifier in various APIs, e.g. remain-on-channel. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
@@ -800,6 +800,10 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
|
||||
if (otype == NL80211_IFTYPE_AP_VLAN)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* cannot change into P2P device type */
|
||||
if (ntype == NL80211_IFTYPE_P2P_DEVICE)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!rdev->ops->change_virtual_intf ||
|
||||
!(rdev->wiphy.interface_modes & (1 << ntype)))
|
||||
return -EOPNOTSUPP;
|
||||
@@ -877,6 +881,9 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
|
||||
case NUM_NL80211_IFTYPES:
|
||||
/* not happening */
|
||||
break;
|
||||
case NL80211_IFTYPE_P2P_DEVICE:
|
||||
WARN_ON(1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1041,8 +1048,15 @@ int cfg80211_can_use_iftype_chan(struct cfg80211_registered_device *rdev,
|
||||
list_for_each_entry(wdev_iter, &rdev->wdev_list, list) {
|
||||
if (wdev_iter == wdev)
|
||||
continue;
|
||||
if (!netif_running(wdev_iter->netdev))
|
||||
continue;
|
||||
if (wdev_iter->netdev) {
|
||||
if (!netif_running(wdev_iter->netdev))
|
||||
continue;
|
||||
} else if (wdev_iter->iftype == NL80211_IFTYPE_P2P_DEVICE) {
|
||||
if (!wdev_iter->p2p_started)
|
||||
continue;
|
||||
} else {
|
||||
WARN_ON(1);
|
||||
}
|
||||
|
||||
if (rdev->wiphy.software_iftypes & BIT(wdev_iter->iftype))
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user