mac80211: fix the increment of mesh precedence value
authorChun-Yeow Yeoh <yeohchunyeow@gmail.com>
Wed, 22 Jan 2014 06:53:04 +0000 (14:53 +0800)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 4 Feb 2014 20:48:15 +0000 (21:48 +0100)
The mesh precedence value in ieee80211_channel_switch
should be incremented or set to 1 only if this is the
initiator of mesh channel switch. For non-initiator,
the precedence value has updated using the Mesh
Channel Switch Parameters element. Fix this.

Signed-off-by: Chun-Yeow Yeoh <yeohchunyeow@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/cfg.c

index 032081c4cc6530c4837362d244cd667b9c03ceb6..e948b382cd4508961c8bd148f2a51684b523ed56 100644 (file)
@@ -3207,13 +3207,13 @@ int ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
                    params->chandef.chan->band)
                        return -EINVAL;
 
-               if (!ifmsh->pre_value)
-                       ifmsh->pre_value = 1;
-               else
-                       ifmsh->pre_value++;
-
-               if (ifmsh->csa_role == IEEE80211_MESH_CSA_ROLE_NONE)
+               if (ifmsh->csa_role == IEEE80211_MESH_CSA_ROLE_NONE) {
                        ifmsh->csa_role = IEEE80211_MESH_CSA_ROLE_INIT;
+                       if (!ifmsh->pre_value)
+                               ifmsh->pre_value = 1;
+                       else
+                               ifmsh->pre_value++;
+               }
 
                /* see comments in the NL80211_IFTYPE_AP block */
                if (params->count > 1) {