Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Jun 2017 15:09:18 -0300
From:      Renato Botelho <garga@FreeBSD.org>
To:        freebsd-net@freebsd.org
Cc:        adrian@FreeBSD.org
Subject:   Failover Mode Between Ethernet and Wireless Interfaces
Message-ID:  <86519ec0-64f0-9395-cafc-95ab8599f1ca@FreeBSD.org>

next in thread | raw e-mail | index | archive | help
Last night I was configuring a new laptop and decided to give it [1] a
try. I figured out this section of handbook (similar instructions are on
lagg(4) manpage) is outdated, based on FreeBSD 10.x.

Then I modified a bit the commands and tried to get it configured on
12-CURRENT, without success. I spoke with adrian@, who told me this
setup doesn't work on FreeBSD > 10, because on newer versions Wireless
interfaces mac address cannot be changed.

My next attempt was to do the other way round and make lagg to use wlan0
mac address instead of em0's. but even doing this my wireless interface
ended up not working.

After further investigation I noted that a simple command:

# ifconfig wlan0 ether $wlan0_current_mac_address

is enough to break it on 12-CURRENT.

I've checked if_setlladdr() source code and noted it always replace the
mac address, even if the same is already configured on the interface. Is
it the expected behavior?

Just as a PoC I've applied the following patch to if_setlladdr():

Index: sys/net/if.c
===================================================================
--- sys/net/if.c	(revision 320097)
+++ sys/net/if.c	(working copy)
@@ -3519,6 +3519,10 @@
 		ifa_free(ifa);
 		return (EINVAL);
 	}
+	if (memcmp(lladdr, LLADDR(sdl), len) == 0) {
+		ifa_free(ifa);
+		return (0);
+	}
 	switch (ifp->if_type) {
 	case IFT_ETHER:
 	case IFT_FDDI:

And configured it to use wlan0 mac address on rc.conf:

ifconfig_em0="ether 60:67:20:c5:2d:48 up"
wlans_iwn0="wlan0"
ifconfig_wlan0="WPA"
cloned_interfaces="lagg0"
ifconfig_lagg0="up laggproto failover laggport em0 laggport wlan0 DHCP"

and it's now working as expected.

Other than that, I believe if wlan interfaces cannot have their mac
address changed, ifconfig should return an error when user attempts to
do it, and if_setlladdr() should do the same.

Thoughts?

[1]
https://www.freebsd.org/doc/handbook/network-aggregation.html#networking-lagg-wired-and-wireless
-- 
Renato Botelho



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86519ec0-64f0-9395-cafc-95ab8599f1ca>