Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c405c629 authored by Johannes Berg's avatar Johannes Berg
Browse files

mac80211: manage carrier state in mesh



Instead of assuming the carrier is on all
the time in mesh manage it with joining
and leaving the mesh.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 2d56577b
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -539,12 +539,16 @@ static int ieee80211_do_open(struct net_device *dev, bool coming_up)
		changed |= ieee80211_reset_erp_info(sdata);
		ieee80211_bss_info_change_notify(sdata, changed);

		if (sdata->vif.type == NL80211_IFTYPE_STATION ||
		    sdata->vif.type == NL80211_IFTYPE_ADHOC ||
		    sdata->vif.type == NL80211_IFTYPE_AP)
		switch (sdata->vif.type) {
		case NL80211_IFTYPE_STATION:
		case NL80211_IFTYPE_ADHOC:
		case NL80211_IFTYPE_AP:
		case NL80211_IFTYPE_MESH_POINT:
			netif_carrier_off(dev);
		else
			break;
		default:
			netif_carrier_on(dev);
		}

		/*
		 * set default queue parameters so drivers don't
+4 −0
Original line number Diff line number Diff line
@@ -610,6 +610,8 @@ void ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata)
						BSS_CHANGED_HT |
						BSS_CHANGED_BASIC_RATES |
						BSS_CHANGED_BEACON_INT);

	netif_carrier_on(sdata->dev);
}

void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata)
@@ -617,6 +619,8 @@ void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata)
	struct ieee80211_local *local = sdata->local;
	struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;

	netif_carrier_off(sdata->dev);

	ifmsh->mesh_id_len = 0;
	ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED);
	sta_info_flush(local, NULL);