|
@@ -4039,6 +4039,18 @@ unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr);
|
|
|
* that do not do the 802.11/802.3 conversion on the device.
|
|
|
*/
|
|
|
|
|
|
+/**
|
|
|
+ * ieee80211_data_to_8023_exthdr - convert an 802.11 data frame to 802.3
|
|
|
+ * @skb: the 802.11 data frame
|
|
|
+ * @ehdr: pointer to a &struct ethhdr that will get the header, instead
|
|
|
+ * of it being pushed into the SKB
|
|
|
+ * @addr: the device MAC address
|
|
|
+ * @iftype: the virtual interface type
|
|
|
+ * Return: 0 on success. Non-zero on error.
|
|
|
+ */
|
|
|
+int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
|
|
|
+ const u8 *addr, enum nl80211_iftype iftype);
|
|
|
+
|
|
|
/**
|
|
|
* ieee80211_data_to_8023 - convert an 802.11 data frame to 802.3
|
|
|
* @skb: the 802.11 data frame
|
|
@@ -4046,8 +4058,11 @@ unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr);
|
|
|
* @iftype: the virtual interface type
|
|
|
* Return: 0 on success. Non-zero on error.
|
|
|
*/
|
|
|
-int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr,
|
|
|
- enum nl80211_iftype iftype);
|
|
|
+static inline int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr,
|
|
|
+ enum nl80211_iftype iftype)
|
|
|
+{
|
|
|
+ return ieee80211_data_to_8023_exthdr(skb, NULL, addr, iftype);
|
|
|
+}
|
|
|
|
|
|
/**
|
|
|
* ieee80211_data_from_8023 - convert an 802.3 frame to 802.11
|
|
@@ -4065,22 +4080,20 @@ int ieee80211_data_from_8023(struct sk_buff *skb, const u8 *addr,
|
|
|
/**
|
|
|
* ieee80211_amsdu_to_8023s - decode an IEEE 802.11n A-MSDU frame
|
|
|
*
|
|
|
- * Decode an IEEE 802.11n A-MSDU frame and convert it to a list of
|
|
|
- * 802.3 frames. The @list will be empty if the decode fails. The
|
|
|
- * @skb is consumed after the function returns.
|
|
|
+ * Decode an IEEE 802.11 A-MSDU and convert it to a list of 802.3 frames.
|
|
|
+ * The @list will be empty if the decode fails. The @skb must be fully
|
|
|
+ * header-less before being passed in here; it is freed in this function.
|
|
|
*
|
|
|
- * @skb: The input IEEE 802.11n A-MSDU frame.
|
|
|
+ * @skb: The input A-MSDU frame without any headers.
|
|
|
* @list: The output list of 802.3 frames. It must be allocated and
|
|
|
* initialized by by the caller.
|
|
|
* @addr: The device MAC address.
|
|
|
* @iftype: The device interface type.
|
|
|
* @extra_headroom: The hardware extra headroom for SKBs in the @list.
|
|
|
- * @has_80211_header: Set it true if SKB is with IEEE 802.11 header.
|
|
|
*/
|
|
|
void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
|
|
|
const u8 *addr, enum nl80211_iftype iftype,
|
|
|
- const unsigned int extra_headroom,
|
|
|
- bool has_80211_header);
|
|
|
+ const unsigned int extra_headroom);
|
|
|
|
|
|
/**
|
|
|
* cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame
|