nl80211: rename NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE
Javier Cardona [Thu, 7 Apr 2011 22:08:27 +0000 (15:08 -0700)]
To NL80211_MESH_SETUP_IE. This reflects our ability to insert any ie
into a mesh beacon, not simply path selection ies.

Signed-off-by: Javier Cardona <javier@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

include/linux/nl80211.h
include/net/cfg80211.h
net/mac80211/cfg.c
net/mac80211/ieee80211_i.h
net/mac80211/mesh.c
net/mac80211/mesh_plink.c
net/mac80211/tx.c
net/wireless/mesh.c
net/wireless/nl80211.c

index 16eea72..ecf6b68 100644 (file)
@@ -545,6 +545,7 @@ enum nl80211_commands {
 /* source-level API compatibility */
 #define NL80211_CMD_GET_MESH_PARAMS NL80211_CMD_GET_MESH_CONFIG
 #define NL80211_CMD_SET_MESH_PARAMS NL80211_CMD_SET_MESH_CONFIG
+#define NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE NL80211_MESH_SETUP_IE
 
 /**
  * enum nl80211_attrs - nl80211 netlink attributes
@@ -1719,9 +1720,9 @@ enum nl80211_meshconf_params {
  * vendor specific path metric or disable it to use the default Airtime
  * metric.
  *
- * @NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE: A vendor specific information
- * element that vendors will use to identify the path selection methods and
- * metrics in use.
+ * @NL80211_MESH_SETUP_IE: Information elements for this mesh, for instance, a
+ * robust security network ie, or a vendor specific information element that
+ * vendors will use to identify the path selection methods and metrics in use.
  *
  * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number
  * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use
@@ -1730,7 +1731,7 @@ enum nl80211_mesh_setup_params {
        __NL80211_MESH_SETUP_INVALID,
        NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL,
        NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC,
-       NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE,
+       NL80211_MESH_SETUP_IE,
 
        /* keep last */
        __NL80211_MESH_SETUP_ATTR_AFTER_LAST,
index ba7384a..1d02ddf 100644 (file)
@@ -689,8 +689,8 @@ struct mesh_config {
  * @mesh_id_len: length of the mesh ID, at least 1 and at most 32 bytes
  * @path_sel_proto: which path selection protocol to use
  * @path_metric: which metric to use
- * @vendor_ie: vendor information elements (optional)
- * @vendor_ie_len: length of vendor information elements
+ * @ie: vendor information elements (optional)
+ * @ie_len: length of vendor information elements
  *
  * These parameters are fixed when the mesh is created.
  */
@@ -699,8 +699,8 @@ struct mesh_setup {
        u8 mesh_id_len;
        u8  path_sel_proto;
        u8  path_metric;
-       const u8 *vendor_ie;
-       u8 vendor_ie_len;
+       const u8 *ie;
+       u8 ie_len;
 };
 
 /**
index bf5d28d..d9428af 100644 (file)
@@ -1034,26 +1034,25 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
        u8 *new_ie;
        const u8 *old_ie;
 
-       /* first allocate the new vendor information element */
+       /* allocate information elements */
        new_ie = NULL;
-       old_ie = ifmsh->vendor_ie;
+       old_ie = ifmsh->ie;
 
-       ifmsh->vendor_ie_len = setup->vendor_ie_len;
-       if (setup->vendor_ie_len) {
-               new_ie = kmemdup(setup->vendor_ie, setup->vendor_ie_len,
+       if (setup->ie_len) {
+               new_ie = kmemdup(setup->ie, setup->ie_len,
                                GFP_KERNEL);
                if (!new_ie)
                        return -ENOMEM;
        }
+       ifmsh->ie_len = setup->ie_len;
+       ifmsh->ie = new_ie;
+       kfree(old_ie);
 
        /* now copy the rest of the setup parameters */
        ifmsh->mesh_id_len = setup->mesh_id_len;
        memcpy(ifmsh->mesh_id, setup->mesh_id, ifmsh->mesh_id_len);
        ifmsh->mesh_pp_id = setup->path_sel_proto;
        ifmsh->mesh_pm_id = setup->path_metric;
-       ifmsh->vendor_ie = new_ie;
-
-       kfree(old_ie);
 
        return 0;
 }
index 6eb2c85..6450100 100644 (file)
@@ -488,8 +488,8 @@ struct ieee80211_if_mesh {
        struct mesh_config mshcfg;
        u32 mesh_seqnum;
        bool accepting_plinks;
-       const u8 *vendor_ie;
-       u8 vendor_ie_len;
+       const u8 *ie;
+       u8 ie_len;
 };
 
 #ifdef CONFIG_MAC80211_MESH
index 2a57cc0..1c244c0 100644 (file)
@@ -279,9 +279,9 @@ void mesh_mgmt_ies_add(struct sk_buff *skb, struct ieee80211_sub_if_data *sdata)
            MESHCONF_CAPAB_ACCEPT_PLINKS : 0x00;
        *pos++ = 0x00;
 
-       if (sdata->u.mesh.vendor_ie) {
-               int len = sdata->u.mesh.vendor_ie_len;
-               const u8 *data = sdata->u.mesh.vendor_ie;
+       if (sdata->u.mesh.ie) {
+               int len = sdata->u.mesh.ie_len;
+               const u8 *data = sdata->u.mesh.ie;
                if (skb_tailroom(skb) > len)
                        memcpy(skb_put(skb, len), data, len);
        }
index 44b5393..c705b20 100644 (file)
@@ -161,7 +161,7 @@ static int mesh_plink_frame_tx(struct ieee80211_sub_if_data *sdata,
                __le16 reason) {
        struct ieee80211_local *local = sdata->local;
        struct sk_buff *skb = dev_alloc_skb(local->hw.extra_tx_headroom + 400 +
-                       sdata->u.mesh.vendor_ie_len);
+                       sdata->u.mesh.ie_len);
        struct ieee80211_mgmt *mgmt;
        bool include_plid = false;
        static const u8 meshpeeringproto[] = { 0x00, 0x0F, 0xAC, 0x2A };
index ce4596e..17b10be 100644 (file)
@@ -2262,7 +2262,7 @@ struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
 
                /* headroom, head length, tail length and maximum TIM length */
                skb = dev_alloc_skb(local->tx_headroom + 400 +
-                               sdata->u.mesh.vendor_ie_len);
+                               sdata->u.mesh.ie_len);
                if (!skb)
                        goto out;
 
index 73e39c1..0d4b226 100644 (file)
@@ -53,8 +53,8 @@ const struct mesh_config default_mesh_config = {
 const struct mesh_setup default_mesh_setup = {
        .path_sel_proto = IEEE80211_PATH_PROTOCOL_HWMP,
        .path_metric = IEEE80211_PATH_METRIC_AIRTIME,
-       .vendor_ie = NULL,
-       .vendor_ie_len = 0,
+       .ie = NULL,
+       .ie_len = 0,
 };
 
 int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev,
index 297d7ce..ccd825a 100644 (file)
@@ -2823,7 +2823,7 @@ static const struct nla_policy
        nl80211_mesh_setup_params_policy[NL80211_MESH_SETUP_ATTR_MAX+1] = {
        [NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL] = { .type = NLA_U8 },
        [NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC] = { .type = NLA_U8 },
-       [NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE] = { .type = NLA_BINARY,
+       [NL80211_MESH_SETUP_IE] = { .type = NLA_BINARY,
                .len = IEEE80211_MAX_DATA_LEN },
 };
 
@@ -2925,13 +2925,14 @@ static int nl80211_parse_mesh_setup(struct genl_info *info,
                 IEEE80211_PATH_METRIC_VENDOR :
                 IEEE80211_PATH_METRIC_AIRTIME;
 
-       if (tb[NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE]) {
+
+       if (tb[NL80211_MESH_SETUP_IE]) {
                struct nlattr *ieattr =
-                       tb[NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE];
+                       tb[NL80211_MESH_SETUP_IE];
                if (!is_valid_ie_attr(ieattr))
                        return -EINVAL;
-               setup->vendor_ie = nla_data(ieattr);
-               setup->vendor_ie_len = nla_len(ieattr);
+               setup->ie = nla_data(ieattr);
+               setup->ie_len = nla_len(ieattr);
        }
 
        return 0;