modules/admin-full: Added support for interface aliases
authorSteven Barth <steven@midlink.org>
Thu, 7 Aug 2008 20:21:38 +0000 (20:21 +0000)
committerSteven Barth <steven@midlink.org>
Thu, 7 Aug 2008 20:21:38 +0000 (20:21 +0000)
applications/luci-splash/luasrc/model/cbi/splash/splash.lua
applications/luci-splash/root/etc/init.d/luci_splash
i18n/english/luasrc/i18n/default.en.lua
i18n/german/luasrc/i18n/default.de.lua
libs/cbi/luasrc/cbi.lua
modules/admin-full/luasrc/controller/admin/network.lua
modules/admin-full/luasrc/model/cbi/admin_network/dhcp.lua
modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua

index ed5cdc1..49257f1 100644 (file)
@@ -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"
index ad1a8b1..4761692 100755 (executable)
@@ -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() {
index 7b3a024..103a36d 100644 (file)
@@ -5,6 +5,7 @@ administration = "Administration"
 apply = "Apply"
 
 basicsettings = "Basic Settings"
+broadcast = "Broadcast"
 
 changes = "Changes"
 channel = "Channel"
index d69ee51..5516b7a 100644 (file)
@@ -5,6 +5,7 @@ administration = "Administration"
 apply = "Anwenden"
 
 basicsettings = "Grundeinstellungen"
+broadcast = "Broadcast"
 
 changes = "Ă„nderungen"
 channel = "Kanal"
index ff33604..4b4bf39 100644 (file)
@@ -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
 
index 3fb45f8..1d44bda 100644 (file)
@@ -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
        )
index f85eb52..b50b05c 100644 (file)
@@ -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
index bea425d..dc50fdc 100644 (file)
@@ -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