* @NL80211_MESHCONF_TTL: specifies the value of TTL field set at a source mesh
  * point.
  *
+ * @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a
+ * source mesh point for path selection elements.
+ *
  * @NL80211_MESHCONF_AUTO_OPEN_PLINKS: whether we should automatically
  * open peer links when we detect compatible mesh peers.
  *
        NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL,
        NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME,
        NL80211_MESHCONF_HWMP_ROOTMODE,
+       NL80211_MESHCONF_ELEMENT_TTL,
 
        /* keep last */
        __NL80211_MESHCONF_ATTR_AFTER_LAST,
 
        u16 dot11MeshMaxPeerLinks;
        u8  dot11MeshMaxRetries;
        u8  dot11MeshTTL;
+       /* ttl used in path selection information elements */
+       u8  element_ttl;
        bool auto_open_plinks;
        /* HWMP parameters */
        u8  dot11MeshHWMPmaxPREQretries;
 
                conf->dot11MeshMaxRetries = nconf->dot11MeshMaxRetries;
        if (_chg_mesh_attr(NL80211_MESHCONF_TTL, mask))
                conf->dot11MeshTTL = nconf->dot11MeshTTL;
+       if (_chg_mesh_attr(NL80211_MESHCONF_ELEMENT_TTL, mask))
+               conf->dot11MeshTTL = nconf->element_ttl;
        if (_chg_mesh_attr(NL80211_MESHCONF_AUTO_OPEN_PLINKS, mask))
                conf->auto_open_plinks = nconf->auto_open_plinks;
        if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, mask))
 
 IEEE80211_IF_FILE(dot11MeshHoldingTimeout,
                u.mesh.mshcfg.dot11MeshHoldingTimeout, DEC);
 IEEE80211_IF_FILE(dot11MeshTTL, u.mesh.mshcfg.dot11MeshTTL, DEC);
+IEEE80211_IF_FILE(element_ttl, u.mesh.mshcfg.element_ttl, DEC);
 IEEE80211_IF_FILE(auto_open_plinks, u.mesh.mshcfg.auto_open_plinks, DEC);
 IEEE80211_IF_FILE(dot11MeshMaxPeerLinks,
                u.mesh.mshcfg.dot11MeshMaxPeerLinks, DEC);
        MESHPARAMS_ADD(dot11MeshConfirmTimeout);
        MESHPARAMS_ADD(dot11MeshHoldingTimeout);
        MESHPARAMS_ADD(dot11MeshTTL);
+       MESHPARAMS_ADD(element_ttl);
        MESHPARAMS_ADD(auto_open_plinks);
        MESHPARAMS_ADD(dot11MeshMaxPeerLinks);
        MESHPARAMS_ADD(dot11MeshHWMPactivePathTimeout);
 
        ifmsh->mshcfg.dot11MeshHoldingTimeout = MESH_HOLD_T;
        ifmsh->mshcfg.dot11MeshMaxRetries = MESH_MAX_RETR;
        ifmsh->mshcfg.dot11MeshTTL = MESH_TTL;
+       ifmsh->mshcfg.element_ttl = MESH_DEFAULT_ELEMENT_TTL;
        ifmsh->mshcfg.auto_open_plinks = true;
        ifmsh->mshcfg.dot11MeshMaxPeerLinks =
                MESH_MAX_ESTAB_PLINKS;
 
 #define PERR_RCODE_NO_ROUTE     12
 #define PERR_RCODE_DEST_UNREACH 13
 
+#define MESH_DEFAULT_ELEMENT_TTL 31
+
 /* Public interfaces */
 /* Various */
 int ieee80211_fill_mesh_addresses(struct ieee80211_hdr *hdr, __le16 *fc,
 
        *pos++ = WLAN_EID_PERR;
        *pos++ = ie_len;
        /* ttl */
-       *pos++ = MESH_TTL;
+       *pos++ = ttl;
        /* number of destinations */
        *pos++ = 1;
        /*
 
        if (reply) {
                lifetime = PREQ_IE_LIFETIME(preq_elem);
-               ttl = ifmsh->mshcfg.dot11MeshTTL;
+               ttl = ifmsh->mshcfg.element_ttl;
                if (ttl != 0) {
                        mhwmp_dbg("replying to the PREQ\n");
                        mesh_path_sel_frame_tx(MPATH_PREP, 0, target_addr,
                sdata->u.mesh.last_sn_update = jiffies;
        }
        lifetime = default_lifetime(sdata);
-       ttl = sdata->u.mesh.mshcfg.dot11MeshTTL;
+       ttl = sdata->u.mesh.mshcfg.element_ttl;
        if (ttl == 0) {
                sdata->u.mesh.mshstats.dropped_frames_ttl++;
                spin_unlock_bh(&mpath->state_lock);
        mesh_path_sel_frame_tx(MPATH_RANN, 0, sdata->vif.addr,
                               cpu_to_le32(++ifmsh->sn),
                               0, NULL, 0, broadcast_addr,
-                              0, MESH_TTL, 0, 0, 0, sdata);
+                              0, sdata->u.mesh.mshcfg.element_ttl,
+                              0, 0, 0, sdata);
 }
 
                        mpath->flags &= ~MESH_PATH_ACTIVE;
                        ++mpath->sn;
                        spin_unlock_bh(&mpath->state_lock);
-                       mesh_path_error_tx(MESH_TTL, mpath->dst,
-                                       cpu_to_le32(mpath->sn),
+                       mesh_path_error_tx(sdata->u.mesh.mshcfg.element_ttl,
+                                       mpath->dst, cpu_to_le32(mpath->sn),
                                        cpu_to_le16(PERR_RCODE_DEST_UNREACH),
                                        bcast, sdata);
                } else
                mpath = mesh_path_lookup(da, sdata);
                if (mpath)
                        sn = ++mpath->sn;
-               mesh_path_error_tx(MESH_TTL, skb->data, cpu_to_le32(sn),
+               mesh_path_error_tx(sdata->u.mesh.mshcfg.element_ttl, skb->data,
+                                  cpu_to_le32(sn),
                                   cpu_to_le16(PERR_RCODE_NO_ROUTE), ra, sdata);
        }
 
 
                        cur_params.dot11MeshMaxRetries);
        NLA_PUT_U8(msg, NL80211_MESHCONF_TTL,
                        cur_params.dot11MeshTTL);
+       NLA_PUT_U8(msg, NL80211_MESHCONF_ELEMENT_TTL,
+                       cur_params.element_ttl);
        NLA_PUT_U8(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS,
                        cur_params.auto_open_plinks);
        NLA_PUT_U8(msg, NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES,
        [NL80211_MESHCONF_MAX_PEER_LINKS] = { .type = NLA_U16 },
        [NL80211_MESHCONF_MAX_RETRIES] = { .type = NLA_U8 },
        [NL80211_MESHCONF_TTL] = { .type = NLA_U8 },
+       [NL80211_MESHCONF_ELEMENT_TTL] = { .type = NLA_U8 },
        [NL80211_MESHCONF_AUTO_OPEN_PLINKS] = { .type = NLA_U8 },
 
        [NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES] = { .type = NLA_U8 },
                        mask, NL80211_MESHCONF_MAX_RETRIES, nla_get_u8);
        FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshTTL,
                        mask, NL80211_MESHCONF_TTL, nla_get_u8);
+       FILL_IN_MESH_PARAM_IF_SET(tb, cfg, element_ttl,
+                       mask, NL80211_MESHCONF_ELEMENT_TTL, nla_get_u8);
        FILL_IN_MESH_PARAM_IF_SET(tb, cfg, auto_open_plinks,
                        mask, NL80211_MESHCONF_AUTO_OPEN_PLINKS, nla_get_u8);
        FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshHWMPmaxPREQretries,