nl80211: Optional IEs into scan request

This extends the NL80211_CMD_TRIGGER_SCAN command to allow applications
to specify a set of information element(s) to be added into Probe
Request frames with NL80211_ATTR_IE. This provides support for the
MLME-SCAN.request primitive parameter VendorSpecificInfo and can be
used, e.g., to implement WPS scanning.

Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index dee17e5..e0431a1 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -884,7 +884,8 @@
 }
 
 void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst,
-			      u8 *ssid, size_t ssid_len)
+			      u8 *ssid, size_t ssid_len,
+			      u8 *ie, size_t ie_len)
 {
 	struct ieee80211_local *local = sdata->local;
 	struct ieee80211_supported_band *sband;
@@ -903,7 +904,7 @@
 	}
 
 	skb = dev_alloc_skb(local->hw.extra_tx_headroom + sizeof(*mgmt) + 200 +
-			    extra_preq_ie_len);
+			    ie_len + extra_preq_ie_len);
 	if (!skb) {
 		printk(KERN_DEBUG "%s: failed to allocate buffer for probe "
 		       "request\n", sdata->dev->name);
@@ -950,6 +951,8 @@
 		*pos = rate->bitrate / 5;
 	}
 
+	if (ie)
+		memcpy(skb_put(skb, ie_len), ie, ie_len);
 	if (extra_preq_ie)
 		memcpy(skb_put(skb, extra_preq_ie_len), extra_preq_ie,
 		       extra_preq_ie_len);