|
@@ -76,6 +76,39 @@
|
|
|
* below.
|
|
|
*/
|
|
|
|
|
|
+/**
|
|
|
+ * DOC: Virtual interface / concurrency capabilities
|
|
|
+ *
|
|
|
+ * Some devices are able to operate with virtual MACs, they can have
|
|
|
+ * more than one virtual interface. The capability handling for this
|
|
|
+ * is a bit complex though, as there may be a number of restrictions
|
|
|
+ * on the types of concurrency that are supported.
|
|
|
+ *
|
|
|
+ * To start with, each device supports the interface types listed in
|
|
|
+ * the %NL80211_ATTR_SUPPORTED_IFTYPES attribute, but by listing the
|
|
|
+ * types there no concurrency is implied.
|
|
|
+ *
|
|
|
+ * Once concurrency is desired, more attributes must be observed:
|
|
|
+ * To start with, since some interface types are purely managed in
|
|
|
+ * software, like the AP-VLAN type in mac80211 for example, there's
|
|
|
+ * an additional list of these, they can be added at any time and
|
|
|
+ * are only restricted by some semantic restrictions (e.g. AP-VLAN
|
|
|
+ * cannot be added without a corresponding AP interface). This list
|
|
|
+ * is exported in the %NL80211_ATTR_SOFTWARE_IFTYPES attribute.
|
|
|
+ *
|
|
|
+ * Further, the list of supported combinations is exported. This is
|
|
|
+ * in the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute. Basically,
|
|
|
+ * it exports a list of "groups", and at any point in time the
|
|
|
+ * interfaces that are currently active must fall into any one of
|
|
|
+ * the advertised groups. Within each group, there are restrictions
|
|
|
+ * on the number of interfaces of different types that are supported
|
|
|
+ * and also the number of different channels, along with potentially
|
|
|
+ * some other restrictions. See &enum nl80211_if_combination_attrs.
|
|
|
+ *
|
|
|
+ * All together, these attributes define the concurrency of virtual
|
|
|
+ * interfaces that a given device supports.
|
|
|
+ */
|
|
|
+
|
|
|
/**
|
|
|
* enum nl80211_commands - supported nl80211 commands
|
|
|
*
|
|
@@ -954,6 +987,14 @@ enum nl80211_commands {
|
|
|
* @NL80211_ATTR_SCHED_SCAN_INTERVAL: Interval between scheduled scan
|
|
|
* cycles, in msecs.
|
|
|
*
|
|
|
+ * @NL80211_ATTR_INTERFACE_COMBINATIONS: Nested attribute listing the supported
|
|
|
+ * interface combinations. In each nested item, it contains attributes
|
|
|
+ * defined in &enum nl80211_if_combination_attrs.
|
|
|
+ * @NL80211_ATTR_SOFTWARE_IFTYPES: Nested attribute (just like
|
|
|
+ * %NL80211_ATTR_SUPPORTED_IFTYPES) containing the interface types that
|
|
|
+ * are managed in software: interfaces of these types aren't subject to
|
|
|
+ * any restrictions in their number or combinations.
|
|
|
+ *
|
|
|
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
|
|
* @__NL80211_ATTR_AFTER_LAST: internal use
|
|
|
*/
|
|
@@ -1149,6 +1190,9 @@ enum nl80211_attrs {
|
|
|
|
|
|
NL80211_ATTR_SCHED_SCAN_INTERVAL,
|
|
|
|
|
|
+ NL80211_ATTR_INTERFACE_COMBINATIONS,
|
|
|
+ NL80211_ATTR_SOFTWARE_IFTYPES,
|
|
|
+
|
|
|
/* add attributes here, update the policy in nl80211.c */
|
|
|
|
|
|
__NL80211_ATTR_AFTER_LAST,
|
|
@@ -1201,7 +1245,9 @@ enum nl80211_attrs {
|
|
|
* @NL80211_IFTYPE_ADHOC: independent BSS member
|
|
|
* @NL80211_IFTYPE_STATION: managed BSS member
|
|
|
* @NL80211_IFTYPE_AP: access point
|
|
|
- * @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points
|
|
|
+ * @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points; VLAN interfaces
|
|
|
+ * are a bit special in that they must always be tied to a pre-existing
|
|
|
+ * AP type interface.
|
|
|
* @NL80211_IFTYPE_WDS: wireless distribution interface
|
|
|
* @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames
|
|
|
* @NL80211_IFTYPE_MESH_POINT: mesh point
|
|
@@ -2206,4 +2252,78 @@ enum nl80211_wowlan_triggers {
|
|
|
MAX_NL80211_WOWLAN_TRIG = NUM_NL80211_WOWLAN_TRIG - 1
|
|
|
};
|
|
|
|
|
|
+/**
|
|
|
+ * enum nl80211_iface_limit_attrs - limit attributes
|
|
|
+ * @NL80211_IFACE_LIMIT_UNSPEC: (reserved)
|
|
|
+ * @NL80211_IFACE_LIMIT_MAX: maximum number of interfaces that
|
|
|
+ * can be chosen from this set of interface types (u32)
|
|
|
+ * @NL80211_IFACE_LIMIT_TYPES: nested attribute containing a
|
|
|
+ * flag attribute for each interface type in this set
|
|
|
+ * @NUM_NL80211_IFACE_LIMIT: number of attributes
|
|
|
+ * @MAX_NL80211_IFACE_LIMIT: highest attribute number
|
|
|
+ */
|
|
|
+enum nl80211_iface_limit_attrs {
|
|
|
+ NL80211_IFACE_LIMIT_UNSPEC,
|
|
|
+ NL80211_IFACE_LIMIT_MAX,
|
|
|
+ NL80211_IFACE_LIMIT_TYPES,
|
|
|
+
|
|
|
+ /* keep last */
|
|
|
+ NUM_NL80211_IFACE_LIMIT,
|
|
|
+ MAX_NL80211_IFACE_LIMIT = NUM_NL80211_IFACE_LIMIT - 1
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * enum nl80211_if_combination_attrs -- interface combination attributes
|
|
|
+ *
|
|
|
+ * @NL80211_IFACE_COMB_UNSPEC: (reserved)
|
|
|
+ * @NL80211_IFACE_COMB_LIMITS: Nested attributes containing the limits
|
|
|
+ * for given interface types, see &enum nl80211_iface_limit_attrs.
|
|
|
+ * @NL80211_IFACE_COMB_MAXNUM: u32 attribute giving the total number of
|
|
|
+ * interfaces that can be created in this group. This number doesn't
|
|
|
+ * apply to interfaces purely managed in software, which are listed
|
|
|
+ * in a separate attribute %NL80211_ATTR_INTERFACES_SOFTWARE.
|
|
|
+ * @NL80211_IFACE_COMB_STA_AP_BI_MATCH: flag attribute specifying that
|
|
|
+ * beacon intervals within this group must be all the same even for
|
|
|
+ * infrastructure and AP/GO combinations, i.e. the GO(s) must adopt
|
|
|
+ * the infrastructure network's beacon interval.
|
|
|
+ * @NL80211_IFACE_COMB_NUM_CHANNELS: u32 attribute specifying how many
|
|
|
+ * different channels may be used within this group.
|
|
|
+ * @NUM_NL80211_IFACE_COMB: number of attributes
|
|
|
+ * @MAX_NL80211_IFACE_COMB: highest attribute number
|
|
|
+ *
|
|
|
+ * Examples:
|
|
|
+ * limits = [ #{STA} <= 1, #{AP} <= 1 ], matching BI, channels = 1, max = 2
|
|
|
+ * => allows an AP and a STA that must match BIs
|
|
|
+ *
|
|
|
+ * numbers = [ #{AP, P2P-GO} <= 8 ], channels = 1, max = 8
|
|
|
+ * => allows 8 of AP/GO
|
|
|
+ *
|
|
|
+ * numbers = [ #{STA} <= 2 ], channels = 2, max = 2
|
|
|
+ * => allows two STAs on different channels
|
|
|
+ *
|
|
|
+ * numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4
|
|
|
+ * => allows a STA plus three P2P interfaces
|
|
|
+ *
|
|
|
+ * The list of these four possiblities could completely be contained
|
|
|
+ * within the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute to indicate
|
|
|
+ * that any of these groups must match.
|
|
|
+ *
|
|
|
+ * "Combinations" of just a single interface will not be listed here,
|
|
|
+ * a single interface of any valid interface type is assumed to always
|
|
|
+ * be possible by itself. This means that implicitly, for each valid
|
|
|
+ * interface type, the following group always exists:
|
|
|
+ * numbers = [ #{<type>} <= 1 ], channels = 1, max = 1
|
|
|
+ */
|
|
|
+enum nl80211_if_combination_attrs {
|
|
|
+ NL80211_IFACE_COMB_UNSPEC,
|
|
|
+ NL80211_IFACE_COMB_LIMITS,
|
|
|
+ NL80211_IFACE_COMB_MAXNUM,
|
|
|
+ NL80211_IFACE_COMB_STA_AP_BI_MATCH,
|
|
|
+ NL80211_IFACE_COMB_NUM_CHANNELS,
|
|
|
+
|
|
|
+ /* keep last */
|
|
|
+ NUM_NL80211_IFACE_COMB,
|
|
|
+ MAX_NL80211_IFACE_COMB = NUM_NL80211_IFACE_COMB - 1
|
|
|
+};
|
|
|
+
|
|
|
#endif /* __LINUX_NL80211_H */
|