diff --git a/packages/lime-system/files/usr/lib/lua/lime/network.lua b/packages/lime-system/files/usr/lib/lua/lime/network.lua index ba5b89b76..d1b77755b 100644 --- a/packages/lime-system/files/usr/lib/lua/lime/network.lua +++ b/packages/lime-system/files/usr/lib/lua/lime/network.lua @@ -397,10 +397,18 @@ function network.configure() for _,protoParams in pairs(deviceProtos) do local args = utils.split(protoParams, network.protoParamsSeparator) - if args[1] == "manual" then break end -- If manual is specified do not configure interface - local protoModule = "lime.proto."..args[1] - for k,v in pairs(flags) do args[k] = v end - if utils.isModuleAvailable(protoModule) then + local protoName = args[1] + if protoName == "manual" then break end -- If manual is specified do not configure interface + local protoModule = "lime.proto."..protoName + local needsConfig = utils.isModuleAvailable(protoModule) + if protoName ~= 'lan' and not flags["specific"] then + --! Work around issue 1121. Do not configure any other + --! protocols than lime.proto.lan on dsa devices unless there + --! is a config net section for the device. + needsConfig = needsConfig and not utils.is_dsa(device) + end + if needsConfig then + for k,v in pairs(flags) do args[k] = v end local proto = require(protoModule) xpcall(function() proto.configure(args) ; proto.setup_interface(device, args) end, function(errmsg) print(errmsg) ; print(debug.traceback()) end) diff --git a/packages/lime-system/files/usr/lib/lua/lime/utils.lua b/packages/lime-system/files/usr/lib/lua/lime/utils.lua index b175a8ee6..717299b58 100644 --- a/packages/lime-system/files/usr/lib/lua/lime/utils.lua +++ b/packages/lime-system/files/usr/lib/lua/lime/utils.lua @@ -593,13 +593,10 @@ function utils.deepcompare(t1,t2) return true end -function utils.is_dsa() +function utils.is_dsa(port) --! Code adapted from Jow https://forum.openwrt.org/t/how-to-detect-dsa/111868/4 - local shell_output = utils.unsafe_shell("grep -s DEVTYPE=dsa /sys/class/net/*/uevent") - if shell_output ~= "" and shell_output ~= nil then - return true - end - return false + port = port or "*" + return 0 == os.execute("grep -sq DEVTYPE=dsa /sys/class/net/"..port.."/uevent") end return utils