Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 183914
b: refs/heads/master
c: c21dbf9
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Jan 26, 2010
1 parent 54e90f1 commit 98444fd
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 19 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 18c949070b57d2cbcc0b25c5cfa003ece204e468
refs/heads/master: c21dbf9214bce129f92e1af05552553ff0e318ed
16 changes: 16 additions & 0 deletions trunk/include/net/cfg80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -1658,6 +1658,22 @@ void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
*/
unsigned int cfg80211_classify8021d(struct sk_buff *skb);

/**
* cfg80211_find_ie - find information element in data
*
* @eid: element ID
* @ies: data consisting of IEs
* @len: length of data
*
* This function will return %NULL if the element ID could
* not be found or if the element is invalid (claims to be
* longer than the given data), or a pointer to the first byte
* of the requested element, that is the byte containing the
* element ID. There are no checks on the element length
* other than having to fit into the given data.
*/
const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len);

/*
* Regulatory helper functions for wiphys
*/
Expand Down
38 changes: 20 additions & 18 deletions trunk/net/wireless/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,9 @@ void cfg80211_bss_expire(struct cfg80211_registered_device *dev)
dev->bss_generation++;
}

static u8 *find_ie(u8 num, u8 *ies, int len)
const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len)
{
while (len > 2 && ies[0] != num) {
while (len > 2 && ies[0] != eid) {
len -= ies[1] + 2;
ies += ies[1] + 2;
}
Expand All @@ -155,11 +155,12 @@ static u8 *find_ie(u8 num, u8 *ies, int len)
return NULL;
return ies;
}
EXPORT_SYMBOL(cfg80211_find_ie);

static int cmp_ies(u8 num, u8 *ies1, size_t len1, u8 *ies2, size_t len2)
{
const u8 *ie1 = find_ie(num, ies1, len1);
const u8 *ie2 = find_ie(num, ies2, len2);
const u8 *ie1 = cfg80211_find_ie(num, ies1, len1);
const u8 *ie2 = cfg80211_find_ie(num, ies2, len2);
int r;

if (!ie1 && !ie2)
Expand All @@ -185,9 +186,9 @@ static bool is_bss(struct cfg80211_bss *a,
if (!ssid)
return true;

ssidie = find_ie(WLAN_EID_SSID,
a->information_elements,
a->len_information_elements);
ssidie = cfg80211_find_ie(WLAN_EID_SSID,
a->information_elements,
a->len_information_elements);
if (!ssidie)
return false;
if (ssidie[1] != ssid_len)
Expand All @@ -204,19 +205,19 @@ static bool is_mesh(struct cfg80211_bss *a,
if (!is_zero_ether_addr(a->bssid))
return false;

ie = find_ie(WLAN_EID_MESH_ID,
a->information_elements,
a->len_information_elements);
ie = cfg80211_find_ie(WLAN_EID_MESH_ID,
a->information_elements,
a->len_information_elements);
if (!ie)
return false;
if (ie[1] != meshidlen)
return false;
if (memcmp(ie + 2, meshid, meshidlen))
return false;

ie = find_ie(WLAN_EID_MESH_CONFIG,
a->information_elements,
a->len_information_elements);
ie = cfg80211_find_ie(WLAN_EID_MESH_CONFIG,
a->information_elements,
a->len_information_elements);
if (!ie)
return false;
if (ie[1] != sizeof(struct ieee80211_meshconf_ie))
Expand Down Expand Up @@ -395,11 +396,12 @@ cfg80211_bss_update(struct cfg80211_registered_device *dev,

if (is_zero_ether_addr(res->pub.bssid)) {
/* must be mesh, verify */
meshid = find_ie(WLAN_EID_MESH_ID, res->pub.information_elements,
res->pub.len_information_elements);
meshcfg = find_ie(WLAN_EID_MESH_CONFIG,
res->pub.information_elements,
res->pub.len_information_elements);
meshid = cfg80211_find_ie(WLAN_EID_MESH_ID,
res->pub.information_elements,
res->pub.len_information_elements);
meshcfg = cfg80211_find_ie(WLAN_EID_MESH_CONFIG,
res->pub.information_elements,
res->pub.len_information_elements);
if (!meshid || !meshcfg ||
meshcfg[1] != sizeof(struct ieee80211_meshconf_ie)) {
/* bogus mesh */
Expand Down

0 comments on commit 98444fd

Please sign in to comment.