Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Testing Batman-adv on ethernet #703

Closed
wants to merge 12 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/lime-proto-batadv/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ define Package/$(PKG_NAME)
CATEGORY:=LiMe
MAINTAINER:=Gioacchino Mazzurco <[email protected]>
URL:=http://libremesh.org
DEPENDS:=+lime-system +lua +libuci-lua +kmod-batman-adv +kmod-dummy
DEPENDS:=+lime-system +lua +libuci-lua +kmod-batman-adv
PKGARCH:=all
endef

Expand Down
46 changes: 30 additions & 16 deletions packages/lime-proto-batadv/files/usr/lib/lua/lime/proto/batadv.lua
Original file line number Diff line number Diff line change
Expand Up @@ -54,20 +54,6 @@ function batadv.configure(args)
uci:save(cfg_file)
lan.setup_interface("bat0", nil)

--! Avoid dmesg flooding caused by BLA. Create a dummy0 interface with
--! custom MAC, as dummy0 is created very soon on boot it is added as
--! first and then main interface to batman so BLA messages are sent
--! from that MAC avoiding generating warning like:
--! br-lan: received packet on bat0 with own address as source address
local owrtInterfaceName = network.limeIfNamePrefix.."batadv_dummy_if"
local dummyMac = network.primary_mac(); dummyMac[1] = "aa"
uci:set("network", owrtInterfaceName, "interface")
uci:set("network", owrtInterfaceName, "ifname", "dummy0")
uci:set("network", owrtInterfaceName, "macaddr", table.concat(dummyMac, ":"))
uci:set("network", owrtInterfaceName, "proto", batadv.ifc_proto)
uci:set("network", owrtInterfaceName, batadv.type_option, "bat0")
uci:save("network")

-- enable alfred on bat0 if installed
if utils.is_installed("alfred") then
uci:set("alfred", "alfred", "batmanif", "bat0")
Expand All @@ -78,13 +64,13 @@ end
function batadv.setup_interface(ifname, args)
if not args["specific"] then
if ifname:match("^wlan%d+.ap") then return end
if ifname:match("^eth") then return end
end

local vlanId = args[2] or "%N1"
local vlanProto = args[3] or "8021ad"
local nameSuffix = args[4] or "_batadv"
local mtu = 1532
if ifname:match("^eth") then mtu = 1496 end

--! Unless a specific integer is passed, parse network_id (%N1) template
--! and use that number to get a vlanId between 29 and 284 for batadv
Expand All @@ -94,10 +80,38 @@ function batadv.setup_interface(ifname, args)

local owrtInterfaceName, _, owrtDeviceName = network.createVlanIface(ifname, vlanId, nameSuffix, vlanProto)

--! Avoid dmesg flooding caused by BLA with messages like "br-lan:
--! received packet on bat0 with own address as source address".
--! Randomize MAC address for each of the interfaces included in Batman-adv.
local id = utils.get_id(ifname)
local randomMac = network.primary_mac();
randomMac[1] = id[1]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some bits of first byte of the mac have special meanings, so it cannot be totally random. Also at first glance I think we can just change the firs two bytes with something fixed making sure multicast bit is 0 and locally administered bit is 1 https://en.wikipedia.org/wiki/MAC_address#/media/File:MAC-48_Address.svg

randomMac[2] = id[2]
randomMac[3] = id[3]

local uci = config.get_uci_cursor()
uci:set("network", owrtDeviceName, "mtu", mtu)
uci:set("network", owrtInterfaceName, "proto", batadv.ifc_proto)
uci:set("network", owrtInterfaceName, batadv.type_option, "bat0")

if ifname:match("^eth") then
--! TODO: Use DSA to check if ethernet device is capable of bigger MTU
--! reducing it
mtu = 1496

--! Avoid dmesg flooding caused by BLA with messages like "br-lan:
--! received packet on bat0 with own address as source address".
--! Tweak MAC address for each of the interfaces used by Batman-adv
--! 00 + Locally administered unicast .. 2 bytes from interface name
--! .. 3 bytes from main interface
local id = utils.get_id(ifname)
local vMacaddr = network.primary_mac();
vMacaddr[1] = "02"
vMacaddr[2] = id[2]
vMacaddr[3] = id[3]
uci:set("network", owrtDeviceName, "macaddr", table.concat(vMacaddr, ":"))
end

uci:set("network", owrtDeviceName, "mtu", mtu)
uci:save("network")
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ currUptime="$(get_uptime)"

candidateAddresses="$(
for iface in $(ls /sys/class/net/) ; do
echo ${iface} | grep -q '^dummy' && continue
ls /sys/class/net/${iface}/upper_bat? &> /dev/null || continue

ping6 -c 2 ff02::1%${iface} 2> /dev/null | \
Expand Down