[PATCH] Use P2P_IE_VENDOR_TYPE instead of combination of OUI_WFA and P2P_OUI_TYPE

Rahul Jain rahul.jain at samsung.com
Wed Feb 26 01:22:23 EST 2014


hi,

I have modified all files under hostap.git which ever is using OUI_WFA and P2P_OUI_TYPE combination with P2P_IE_VENDOR_TYPE.

I am not able to modify ieee802_11_common.c file as ieee802_11_parse_vendor_specific() will require lot of changes.

Patch for review

From d274748eb2928c7967b0bc204510b239aa71ce31 Mon Sep 17 00:00:00 2001
From: Rahul Jain <rahul.jain at samsung.com>
Date: Wed, 26 Feb 2014 11:48:07 +0530
Subject: [PATCH] Use P2P_IE_VENDOR_TYPE instead of combination of OUI_WFA and
  P2P_OUI_TYPE

Signed-off-by: Rahul Jain <rahul.jain at samsung.com>
---
 src/ap/ctrl_iface_ap.c |    5 ++---
 src/ap/p2p_hostapd.c   |    5 ++---
 src/p2p/p2p.c          |   23 ++++++++---------------
 src/p2p/p2p_build.c    |    9 +++------
 src/p2p/p2p_sd.c       |   45 ++++++++++++---------------------------------
 5 files changed, 27 insertions(+), 60 deletions(-)
diff --git a/src/ap/ctrl_iface_ap.c b/src/ap/ctrl_iface_ap.c
index 8c0cbab..c27cf3b 100644
--- a/src/ap/ctrl_iface_ap.c
+++ b/src/ap/ctrl_iface_ap.c
@@ -250,9 +250,8 @@ static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype,
 
  *pos++ = WLAN_EID_VENDOR_SPECIFIC;
  *pos++ = 4 + 3 + 1;
- WPA_PUT_BE24(pos, OUI_WFA);
- pos += 3;
- *pos++ = P2P_OUI_TYPE;
+ WPA_PUT_BE32(pos, P2P_IE_VENDOR_TYPE);
+ pos += 4;
 
  *pos++ = P2P_ATTR_MINOR_REASON_CODE;
  WPA_PUT_LE16(pos, 1);
diff --git a/src/ap/p2p_hostapd.c b/src/ap/p2p_hostapd.c
index 795d313..9be640c 100644
--- a/src/ap/p2p_hostapd.c
+++ b/src/ap/p2p_hostapd.c
@@ -96,9 +96,8 @@ u8 * hostapd_eid_p2p_manage(struct hostapd_data *hapd, u8 *eid)
  u8 bitmap;
  *eid++ = WLAN_EID_VENDOR_SPECIFIC;
  *eid++ = 4 + 3 + 1;
- WPA_PUT_BE24(eid, OUI_WFA);
- eid += 3;
- *eid++ = P2P_OUI_TYPE;
+ WPA_PUT_BE32(eid, P2P_IE_VENDOR_TYPE);
+ eid += 4;
 
  *eid++ = P2P_ATTR_MANAGEABILITY;
  WPA_PUT_LE16(eid, 1);
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index 6f3cd68..e6518ee 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -1662,18 +1662,15 @@ static void p2p_rx_action_public(struct p2p_data *p2p, const u8 *da,
   len--;
   if (len < 3)
    return;
-  if (WPA_GET_BE24(data) != OUI_WFA)
+  if (WPA_GET_BE32(data) != P2P_IE_VENDOR_TYPE)
    return;
 
-  data += 3;
-  len -= 3;
+  data += 4;
+  len -= 4;
   if (len < 1)
    return;
 
-  if (*data != P2P_OUI_TYPE)
-   return;
-
-  p2p_rx_p2p_action(p2p, sa, data + 1, len - 1, freq);
+  p2p_rx_p2p_action(p2p, sa, data, len, freq);
   break;
  case WLAN_PA_GAS_INITIAL_REQ:
   p2p_rx_gas_initial_req(p2p, sa, data + 1, len - 1, freq);
@@ -1706,15 +1703,10 @@ void p2p_rx_action(struct p2p_data *p2p, const u8 *da, const u8 *sa,
  if (len < 4)
   return;
 
- if (WPA_GET_BE24(data) != OUI_WFA)
+ if (WPA_GET_BE32(data) != P2P_IE_VENDOR_TYPE)
   return;
- data += 3;
- len -= 3;
-
- if (*data != P2P_OUI_TYPE)
-  return;
- data++;
- len--;
+ data += 4;
+ len -= 4;
 
  /* P2P action frame */
  p2p_dbg(p2p, "RX P2P Action from " MACSTR, MAC2STR(sa));
@@ -1722,6 +1714,7 @@ void p2p_rx_action(struct p2p_data *p2p, const u8 *da, const u8 *sa,
 
  if (len < 1)
   return;
+
  switch (data[0]) {
  case P2P_NOA:
   p2p_dbg(p2p, "Received P2P Action - Notice of Absence");
diff --git a/src/p2p/p2p_build.c b/src/p2p/p2p_build.c
index 664fade..e9b683d 100644
--- a/src/p2p/p2p_build.c
+++ b/src/p2p/p2p_build.c
@@ -17,8 +17,7 @@
 void p2p_buf_add_action_hdr(struct wpabuf *buf, u8 subtype, u8 dialog_token)
 {
  wpabuf_put_u8(buf, WLAN_ACTION_VENDOR_SPECIFIC);
- wpabuf_put_be24(buf, OUI_WFA);
- wpabuf_put_u8(buf, P2P_OUI_TYPE);
+ wpabuf_put_be32(buf, P2P_IE_VENDOR_TYPE);
 
  wpabuf_put_u8(buf, subtype); /* OUI Subtype */
  wpabuf_put_u8(buf, dialog_token);
@@ -31,8 +30,7 @@ void p2p_buf_add_public_action_hdr(struct wpabuf *buf, u8 subtype,
 {
  wpabuf_put_u8(buf, WLAN_ACTION_PUBLIC);
  wpabuf_put_u8(buf, WLAN_PA_VENDOR_SPECIFIC);
- wpabuf_put_be24(buf, OUI_WFA);
- wpabuf_put_u8(buf, P2P_OUI_TYPE);
+ wpabuf_put_be32(buf, P2P_IE_VENDOR_TYPE);
 
  wpabuf_put_u8(buf, subtype); /* OUI Subtype */
  wpabuf_put_u8(buf, dialog_token);
@@ -47,8 +45,7 @@ u8 * p2p_buf_add_ie_hdr(struct wpabuf *buf)
  /* P2P IE header */
  wpabuf_put_u8(buf, WLAN_EID_VENDOR_SPECIFIC);
  len = wpabuf_put(buf, 1); /* IE length to be filled */
- wpabuf_put_be24(buf, OUI_WFA);
- wpabuf_put_u8(buf, P2P_OUI_TYPE);
+ wpabuf_put_be32(buf, P2P_IE_VENDOR_TYPE);
  wpa_printf(MSG_DEBUG, "P2P: * P2P IE header");
  return len;
 }
diff --git a/src/p2p/p2p_sd.c b/src/p2p/p2p_sd.c
index 26b9c2d..497a1f3 100644
--- a/src/p2p/p2p_sd.c
+++ b/src/p2p/p2p_sd.c
@@ -171,8 +171,7 @@ static struct wpabuf * p2p_build_sd_query(u16 update_indic,
 
  /* ANQP Query Request Frame */
  len_pos = gas_anqp_add_element(buf, ANQP_VENDOR_SPECIFIC);
- wpabuf_put_be24(buf, OUI_WFA);
- wpabuf_put_u8(buf, P2P_OUI_TYPE);
+ wpabuf_put_be32(buf, P2P_IE_VENDOR_TYPE);
  wpabuf_put_le16(buf, update_indic); /* Service Update Indicator */
  wpabuf_put_buf(buf, tlvs);
  gas_anqp_set_element_len(buf, len_pos);
@@ -218,8 +217,7 @@ static struct wpabuf * p2p_build_sd_response(u8 dialog_token, u16 status_code,
  if (tlvs) {
   /* ANQP Query Response Frame */
   len_pos = gas_anqp_add_element(buf, ANQP_VENDOR_SPECIFIC);
-  wpabuf_put_be24(buf, OUI_WFA);
-  wpabuf_put_u8(buf, P2P_OUI_TYPE);
+  wpabuf_put_be32(buf, P2P_IE_VENDOR_TYPE);
    /* Service Update Indicator */
   wpabuf_put_le16(buf, update_indic);
   wpabuf_put_buf(buf, tlvs);
@@ -250,8 +248,7 @@ static struct wpabuf * p2p_build_gas_comeback_resp(u8 dialog_token,
   /* ANQP Query Response Frame */
   wpabuf_put_le16(buf, ANQP_VENDOR_SPECIFIC); /* Info ID */
   wpabuf_put_le16(buf, 3 + 1 + 2 + total_len);
-  wpabuf_put_be24(buf, OUI_WFA);
-  wpabuf_put_u8(buf, P2P_OUI_TYPE);
+  wpabuf_put_be32(buf, P2P_IE_VENDOR_TYPE);
   /* Service Update Indicator */
   wpabuf_put_le16(buf, update_indic);
  }
@@ -393,17 +390,11 @@ void p2p_rx_gas_initial_req(struct p2p_data *p2p, const u8 *sa,
   return;
  }
 
- if (WPA_GET_BE24(pos) != OUI_WFA) {
-  p2p_dbg(p2p, "Unsupported ANQP OUI %06x", WPA_GET_BE24(pos));
+ if (WPA_GET_BE32(pos) != P2P_IE_VENDOR_TYPE) {
+  p2p_dbg(p2p, "Unsupported ANQP OUI %06x", WPA_GET_BE32(pos));
   return;
  }
- pos += 3;
-
- if (*pos != P2P_OUI_TYPE) {
-  p2p_dbg(p2p, "Unsupported ANQP vendor type %u", *pos);
-  return;
- }
- pos++;
+ pos += 4;
 
  if (pos + 2 > end)
   return;
@@ -571,17 +562,11 @@ void p2p_rx_gas_initial_resp(struct p2p_data *p2p, const u8 *sa,
   return;
  }
 
- if (WPA_GET_BE24(pos) != OUI_WFA) {
-  p2p_dbg(p2p, "Unsupported ANQP OUI %06x", WPA_GET_BE24(pos));
-  return;
- }
- pos += 3;
-
- if (*pos != P2P_OUI_TYPE) {
-  p2p_dbg(p2p, "Unsupported ANQP vendor type %u", *pos);
+ if (WPA_GET_BE32(pos) != P2P_IE_VENDOR_TYPE) {
+  p2p_dbg(p2p, "Unsupported ANQP OUI %06x", WPA_GET_BE32(pos));
   return;
  }
- pos++;
+ pos += 4;
 
  if (pos + 2 > end)
   return;
@@ -795,17 +780,11 @@ void p2p_rx_gas_comeback_resp(struct p2p_data *p2p, const u8 *sa,
  if (pos + 4 > end)
   return;
 
- if (WPA_GET_BE24(pos) != OUI_WFA) {
-  p2p_dbg(p2p, "Unsupported ANQP OUI %06x", WPA_GET_BE24(pos));
-  return;
- }
- pos += 3;
-
- if (*pos != P2P_OUI_TYPE) {
-  p2p_dbg(p2p, "Unsupported ANQP vendor type %u", *pos);
+ if (WPA_GET_BE32(pos) != P2P_IE_VENDOR_TYPE) {
+  p2p_dbg(p2p, "Unsupported ANQP OUI %06x", WPA_GET_BE32(pos));
   return;
  }
- pos++;
+ pos += 4;
 
  if (pos + 2 > end)
   return;
-- 
1.7.9.5


------- Original Message -------
Sender : Jouni Malinen<j at w1.fi>
Date : Feb 25, 2014 19:16 (GMT+05:30)
Title : Re: [PATCH] Use P2P_IE_VENDOR_TYPE instead of combination of OUI_WFA and P2P_OUI_TYPE

On Tue, Feb 25, 2014 at 12:02:07PM +0000, Rahul Jain wrote:
> Subject: [PATCH] Use P2P_IE_VENDOR_TYPE instead of combination of OUI_WFA and
>  P2P_OUI_TYPE

> diff --git a/src/p2p/p2p_build.c b/src/p2p/p2p_build.c
> @@ -17,8 +17,7 @@
>  void p2p_buf_add_action_hdr(struct wpabuf *buf, u8 subtype, u8 dialog_token)
>  {
>   wpabuf_put_u8(buf, WLAN_ACTION_VENDOR_SPECIFIC);
> - wpabuf_put_be24(buf, OUI_WFA);
> - wpabuf_put_u8(buf, P2P_OUI_TYPE);
> + wpabuf_put_be32(buf, P2P_IE_VENDOR_TYPE);

Why? I don't see much of a practical difference with this, but the
commit here would leave number of places within src/p2p still using the
OUI_WFA + P2P_OUI_TYPE combination, so this does not seem to make this
any more consistent that it is today.

I guess it could be justifiable to make this consistent, but in that
case, I'd expect the changes to go through all files in hostap.git and
likely also to remove P2P_OUI_TYPE define at the same time.

-- 
Jouni Malinen                                            PGP id EFC895FA



Thanks
-Rahul Jain


More information about the HostAP mailing list