summaryrefslogtreecommitdiffstats
path: root/sys/net80211
diff options
context:
space:
mode:
authoravos <avos@FreeBSD.org>2016-05-06 11:41:49 +0000
committeravos <avos@FreeBSD.org>2016-05-06 11:41:49 +0000
commita5193740b95ef87e9ab4864032a28f58cb60085a (patch)
tree55169753e534c8b098774df2f8381143a01a3133 /sys/net80211
parent74aed2e95ef2746898aa3d9d8fd45df6be70fd74 (diff)
downloadFreeBSD-src-a5193740b95ef87e9ab4864032a28f58cb60085a.zip
FreeBSD-src-a5193740b95ef87e9ab4864032a28f58cb60085a.tar.gz
net80211: restore 'iflladdr_event' event handler.
Now 'ether' argument to ifconfig can be used as an alias to 'wlanaddr'. PR: 208933
Diffstat (limited to 'sys/net80211')
-rw-r--r--sys/net80211/ieee80211_freebsd.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_freebsd.c b/sys/net80211/ieee80211_freebsd.c
index 690e123..373b053 100644
--- a/sys/net80211/ieee80211_freebsd.c
+++ b/sys/net80211/ieee80211_freebsd.c
@@ -851,6 +851,7 @@ ieee80211_load_module(const char *modname)
}
static eventhandler_tag wlan_bpfevent;
+static eventhandler_tag wlan_ifllevent;
static void
bpf_track(void *arg, struct ifnet *ifp, int dlt, int attach)
@@ -879,6 +880,21 @@ bpf_track(void *arg, struct ifnet *ifp, int dlt, int attach)
}
/*
+ * Change MAC address on the vap (if was not started).
+ */
+static void
+wlan_iflladdr(void *arg __unused, struct ifnet *ifp)
+{
+ /* NB: identify vap's by if_init */
+ if (ifp->if_init == ieee80211_init &&
+ (ifp->if_flags & IFF_UP) == 0) {
+ struct ieee80211vap *vap = ifp->if_softc;
+
+ IEEE80211_ADDR_COPY(vap->iv_myaddr, IF_LLADDR(ifp));
+ }
+}
+
+/*
* Module glue.
*
* NB: the module name is "wlan" for compatibility with NetBSD.
@@ -892,12 +908,15 @@ wlan_modevent(module_t mod, int type, void *unused)
printf("wlan: <802.11 Link Layer>\n");
wlan_bpfevent = EVENTHANDLER_REGISTER(bpf_track,
bpf_track, 0, EVENTHANDLER_PRI_ANY);
+ wlan_ifllevent = EVENTHANDLER_REGISTER(iflladdr_event,
+ wlan_iflladdr, NULL, EVENTHANDLER_PRI_ANY);
wlan_cloner = if_clone_simple(wlanname, wlan_clone_create,
wlan_clone_destroy, 0);
return 0;
case MOD_UNLOAD:
if_clone_detach(wlan_cloner);
EVENTHANDLER_DEREGISTER(bpf_track, wlan_bpfevent);
+ EVENTHANDLER_DEREGISTER(iflladdr_event, wlan_ifllevent);
return 0;
}
return EINVAL;
OpenPOWER on IntegriCloud