From fbae92e522692d9bb34501ad9a805da794a47123 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Thu, 7 Aug 2008 20:21:38 +0000 Subject: [PATCH] modules/admin-full: Added support for interface aliases --- .../luasrc/model/cbi/splash/splash.lua | 17 ++++- .../luci-splash/root/etc/init.d/luci_splash | 19 ++++-- i18n/english/luasrc/i18n/default.en.lua | 1 + i18n/german/luasrc/i18n/default.de.lua | 1 + libs/cbi/luasrc/cbi.lua | 2 +- .../luasrc/controller/admin/network.lua | 3 +- .../luasrc/model/cbi/admin_network/dhcp.lua | 6 ++ .../luasrc/model/cbi/admin_network/ifaces.lua | 68 ++++++++++++++++--- 8 files changed, 97 insertions(+), 20 deletions(-) diff --git a/applications/luci-splash/luasrc/model/cbi/splash/splash.lua b/applications/luci-splash/luasrc/model/cbi/splash/splash.lua index ed5cdc181..49257f1ba 100644 --- a/applications/luci-splash/luasrc/model/cbi/splash/splash.lua +++ b/applications/luci-splash/luasrc/model/cbi/splash/splash.lua @@ -11,13 +11,24 @@ s.template = "cbi/tblsection" s.addremove = true s.anonymous = true -iface = s:option(ListValue, "zone", "Firewallzone") +zone = s:option(ListValue, "zone", "Firewallzone") luci.model.uci.foreach("firewall", "zone", function (section) - iface:value(section.name) + zone:value(section.name) end) -gateway = s:option(Value, "gateway", "Gateway") +iface = s:option(ListValue, "network", "Netzwerk") +luci.model.uci.foreach("network", "interface", + function (section) + if section[".name"] ~= "loopback" then + iface:value(section[".name"]) + end + end) + +luci.model.uci.foreach("network", "alias", + function (section) + iface:value(section[".name"]) + end) s = m:section(TypedSection, "whitelist", "Automatische Freigabe") s.template = "cbi/tblsection" diff --git a/applications/luci-splash/root/etc/init.d/luci_splash b/applications/luci-splash/root/etc/init.d/luci_splash index ad1a8b107..4761692b3 100755 --- a/applications/luci-splash/root/etc/init.d/luci_splash +++ b/applications/luci-splash/root/etc/init.d/luci_splash @@ -7,15 +7,20 @@ iface_add() { config_get zone "$cfg" zone [ -n "$zone" ] || return 0 - config_get gw "$cfg" gateway - [ -n "$gw" ] || return 0 + config_get net "$cfg" network + [ -n "$net" ] || return 0 - iptables -t nat -A zone_${zone}_prerouting -j luci_splash_portal + config_get ipaddr "$net" ipaddr + [ -n "$ipaddr" ] || return 0 - for i in $gw - do - iptables -t nat -A luci_splash_portal -d "$i" -p tcp -m multiport --dports 22,80,443 -j RETURN - done + config_get netmask "$net" netmask + [ -n "$netmask" ] || return 0 + + eval "$(ipcalc.sh $ipaddr $netmask)" + + iptables -t nat -A zone_${zone}_prerouting -s "$NETWORK/$PREFIX" -p ! tcp -j luci_splash_portal + iptables -t nat -A zone_${zone}_prerouting -s "$NETWORK/$PREFIX" -d ! "$ipaddr" -j luci_splash_portal + iptables -t nat -A zone_${zone}_prerouting -s "$NETWORK/$PREFIX" -d "$ipaddr" -p tcp -m multiport ! --dport 22,80,443 -j luci_splash_portal } blacklist_add() { diff --git a/i18n/english/luasrc/i18n/default.en.lua b/i18n/english/luasrc/i18n/default.en.lua index 7b3a02440..103a36ddb 100644 --- a/i18n/english/luasrc/i18n/default.en.lua +++ b/i18n/english/luasrc/i18n/default.en.lua @@ -5,6 +5,7 @@ administration = "Administration" apply = "Apply" basicsettings = "Basic Settings" +broadcast = "Broadcast" changes = "Changes" channel = "Channel" diff --git a/i18n/german/luasrc/i18n/default.de.lua b/i18n/german/luasrc/i18n/default.de.lua index d69ee51ba..5516b7aa7 100644 --- a/i18n/german/luasrc/i18n/default.de.lua +++ b/i18n/german/luasrc/i18n/default.de.lua @@ -5,6 +5,7 @@ administration = "Administration" apply = "Anwenden" basicsettings = "Grundeinstellungen" +broadcast = "Broadcast" changes = "Änderungen" channel = "Kanal" diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua index ff3360425..4b4bf3905 100644 --- a/libs/cbi/luasrc/cbi.lua +++ b/libs/cbi/luasrc/cbi.lua @@ -487,7 +487,7 @@ end -- Verifies scope of sections function TypedSection.checkscope(self, section) -- Check if we are not excluded - if self.filter and not self.filter(section) then + if self.filter and not self:filter(section) then return nil end diff --git a/modules/admin-full/luasrc/controller/admin/network.lua b/modules/admin-full/luasrc/controller/admin/network.lua index 3fb45f804..1d44bda77 100644 --- a/modules/admin-full/luasrc/controller/admin/network.lua +++ b/modules/admin-full/luasrc/controller/admin/network.lua @@ -38,7 +38,8 @@ function index() function (section) local ifc = section[".name"] if ifc ~= "loopback" then - entry({"admin", "network", "ifaces", ifc}, page.target, ifc) + entry({"admin", "network", "ifaces", ifc}, + page.target, ifc:upper()) end end ) diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua b/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua index f85eb5219..b50b05cb3 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua @@ -31,6 +31,12 @@ luci.model.uci.foreach("network", "interface", end end) +luci.model.uci.foreach("network", "alias", + function (section) + iface:value(section[".name"]) + s:depends("interface", section[".name"]) + end) + s:option(Value, "start", translate("start")).rmempty = true s:option(Value, "limit", translate("limit")).rmempty = true diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua index bea425d72..dc50fdc94 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -13,13 +13,13 @@ $Id$ ]]-- m = Map("network", translate("interfaces"), translate("a_n_ifaces1")) -s = m:section(TypedSection, "interface", "") -function s.filter(section) - return section ~= "loopback" and (not arg or #arg == 0 or - luci.util.contains(arg, section)) +s = m:section(TypedSection, "interface", translate("interfaces")) +function s.filter(self, section) + return section ~= "loopback" and + (not arg or not arg[1] or arg[1] == section) end -if not arg or #arg == 0 then +if not arg or not arg[1] then s.addremove = true end s:depends("proto", "static") @@ -42,6 +42,7 @@ for i,d in ipairs(luci.sys.net.devices()) do end end + ipaddr = s:option(Value, "ipaddr", translate("ipaddress")) ipaddr.rmempty = true ipaddr:depends("proto", "static") @@ -57,13 +58,17 @@ gw = s:option(Value, "gateway", translate("gateway")) gw:depends("proto", "static") gw.rmempty = true +bcast = s:option(Value, "bcast", translate("broadcast")) +bcast:depends("proto", "static") +bcast.optional = true + ip6addr = s:option(Value, "ip6addr", translate("ip6address"), translate("cidr6")) -ip6addr.rmempty = true +ip6addr.optional = true ip6addr:depends("proto", "static") ip6gw = s:option(Value, "ip6gw", translate("gateway6")) ip6gw:depends("proto", "static") -ip6gw.rmempty = true +ip6gw.optional = true dns = s:option(Value, "dns", translate("dnsserver")) dns:depends("proto", "static") @@ -76,4 +81,51 @@ mtu.isinteger = true mac = s:option(Value, "macaddr", translate("macaddress")) mac.optional = true -return m \ No newline at end of file + + + +s2 = m:section(TypedSection, "alias", translate("aliases")) +s2.addremove = true + +if arg and arg[1] and luci.model.uci.get("network", arg[1]) then + s2:depends("interface", arg[1]) + s2.defaults.interface = arg[1] +else + parent = s2:option(ListValue, "interface", translate("interface")) + luci.model.uci.foreach("network", "interface", + function (section) + if section[".name"] ~= "loopback" then + parent:value(section[".name"]) + end + end + ) +end + + +s2.defaults.proto = "static" + +ipaddr = s2:option(Value, "ipaddr", translate("ipaddress")) +ipaddr.rmempty = true + +nm = s2:option(Value, "netmask", translate("netmask")) +nm.rmempty = true +nm:value("255.255.255.0") +nm:value("255.255.0.0") +nm:value("255.0.0.0") + +gw = s2:option(Value, "gateway", translate("gateway")) +gw.rmempty = true + +bcast = s2:option(Value, "bcast", translate("broadcast")) +bcast.optional = true + +ip6addr = s2:option(Value, "ip6addr", translate("ip6address"), translate("cidr6")) +ip6addr.optional = true + +ip6gw = s2:option(Value, "ip6gw", translate("gateway6")) +ip6gw.optional = true + +dns = s2:option(Value, "dns", translate("dnsserver")) +dns.optional = true + +return m -- 2.25.1