summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--module/admin-core/src/model/cbi/admin_index/contact.lua15
-rw-r--r--module/admin-core/src/model/cbi/admin_index/luci.lua17
-rw-r--r--module/admin-core/src/model/cbi/admin_network/dhcp.lua37
-rw-r--r--module/admin-core/src/model/cbi/admin_network/firewall.lua61
-rw-r--r--module/admin-core/src/model/cbi/admin_network/ifaces.lua40
-rw-r--r--module/admin-core/src/model/cbi/admin_network/portfw.lua24
-rw-r--r--module/admin-core/src/model/cbi/admin_network/ptp.lua31
-rw-r--r--module/admin-core/src/model/cbi/admin_network/routes.lua16
-rw-r--r--module/admin-core/src/model/cbi/admin_network/vlan.lua10
-rw-r--r--module/admin-core/src/model/cbi/admin_services/dnsmasq.lua29
-rw-r--r--module/admin-core/src/model/cbi/admin_services/dropbear.lua14
-rw-r--r--module/admin-core/src/model/cbi/admin_services/httpd.lua18
-rw-r--r--module/admin-core/src/model/cbi/admin_services/olsrd.lua82
-rw-r--r--module/admin-core/src/model/cbi/admin_system/fstab.lua21
-rw-r--r--module/admin-core/src/model/cbi/admin_wifi/devices.lua52
-rw-r--r--module/admin-core/src/model/cbi/admin_wifi/networks.lua70
-rw-r--r--module/admin-core/src/model/menu/00admin.lua33
17 files changed, 570 insertions, 0 deletions
diff --git a/module/admin-core/src/model/cbi/admin_index/contact.lua b/module/admin-core/src/model/cbi/admin_index/contact.lua
new file mode 100644
index 0000000000..55f5098a55
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_index/contact.lua
@@ -0,0 +1,15 @@
+m = Map("luci", "Kontakt", [[Diese Daten sind auf der öffentlichen Kontaktseite
+sichtbar. Alle Felder sind natürlich freiwillig. Du kannst soviel oder so wenig
+über dich angeben, wie du möchtest.]])
+
+c = m:section(NamedSection, "contact")
+
+c:option(Value, "nickname", "Pseudonym")
+c:option(Value, "name", "Name")
+c:option(Value, "mail", "E-Mail")
+c:option(Value, "phone", "Telefon")
+c:option(Value, "location", "Standort")
+c:option(Value, "geo", "Koordinaten", "Bitte als Breite;Länge angeben")
+c:option(Value, "note", "Notiz")
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_index/luci.lua b/module/admin-core/src/model/cbi/admin_index/luci.lua
new file mode 100644
index 0000000000..eed626c5b7
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_index/luci.lua
@@ -0,0 +1,17 @@
+-- ToDo: Translate, Add descriptions and help texts
+m = Map("luci", "FFLuCI")
+
+c = m:section(NamedSection, "main", "core", "Allgemein")
+c:option(Value, "lang", "Sprache")
+c:option(Value, "mediaurlbase", "Mediaverzeichnis")
+
+f = m:section(NamedSection, "flash", "extern", "Firmwareupgrade")
+f:option(Value, "keep", "Übernehme Dateien").size = 64
+
+p = m:section(NamedSection, "category_privileges", "core", "Kategorieprivilegien")
+p.dynamic = true
+
+u = m:section(NamedSection, "uci_oncommit", "event", "UCI-Befehle beim Anwenden")
+u.dynamic = true
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_network/dhcp.lua b/module/admin-core/src/model/cbi/admin_network/dhcp.lua
new file mode 100644
index 0000000000..83ba196418
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_network/dhcp.lua
@@ -0,0 +1,37 @@
+-- ToDo: Translate, Add descriptions and help texts
+require("ffluci.model.uci")
+require("ffluci.sys")
+
+m = Map("dhcp", "DHCP")
+
+s = m:section(TypedSection, "dhcp")
+s.addremove = true
+s.anonymous = true
+
+iface = s:option(ListValue, "interface", "Schnittstelle")
+for k, v in pairs(ffluci.model.uci.show("network").network) do
+ if v[".type"] == "interface" and k ~= "loopback" then
+ iface:value(k)
+ end
+end
+
+s:option(Value, "start", "Start").rmempty = true
+
+s:option(Value, "limit", "Limit").rmempty = true
+
+s:option(Flag, "dynamicdhcp", "Dynamisches DHCP").rmempty = true
+
+s:option(Value, "name", "Name").optional = true
+
+s:option(Flag, "ignore", "Schnittstelle ignorieren").optional = true
+
+s:option(Value, "netmask", "Netzmaske").optional = true
+
+s:option(Flag, "force", "Start erzwingen").optional = true
+
+for i, line in pairs(ffluci.sys.execl("dnsmasq --help dhcp")) do
+ k, v = line:match("([^ ]+) +([^ ]+)")
+ s:option(Value, "dhcp"..k, v).optional = true
+end
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_network/firewall.lua b/module/admin-core/src/model/cbi/admin_network/firewall.lua
new file mode 100644
index 0000000000..cf7018e996
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_network/firewall.lua
@@ -0,0 +1,61 @@
+-- ToDo: Translate, Add descriptions and help texts
+m = Map("luci_fw", "Firewall")
+
+s = m:section(TypedSection, "rule")
+s.addremove = true
+s.anonymous = true
+
+chain = s:option(ListValue, "chain", "Kette")
+chain:value("forward", "Forward")
+chain:value("input", "Input")
+chain:value("output", "Output")
+chain:value("prerouting", "Prerouting")
+chain:value("postrouting", "Postrouting")
+
+s:option(Value, "iface", "Eingangsschnittstelle").optional = true
+s:option(Value, "oface", "Ausgangsschnittstelle").optional = true
+
+proto = s:option(ListValue, "proto", "Protokoll")
+proto.optional = true
+proto:value("")
+proto:value("tcp", "TCP")
+proto:value("udp", "UDP")
+
+s:option(Value, "source", "Quelladresse").optional = true
+s:option(Value, "destination", "Zieladresse").optional = true
+
+sport = s:option(Value, "sport", "Quellport")
+sport.optional = true
+sport:depends("proto", "tcp")
+sport:depends("proto", "udp")
+
+dport = s:option(Value, "dport", "Zielport")
+dport.optional = true
+dport:depends("proto", "tcp")
+dport:depends("proto", "udp")
+
+tosrc = s:option(Value, "tosrc", "Neue Quelladresse [SNAT]")
+tosrc.optional = true
+tosrc:depends("jump", "SNAT")
+
+tosrc = s:option(Value, "todest", "Neue Zieladresse [DNAT]")
+tosrc.optional = true
+tosrc:depends("jump", "DNAT")
+
+jump = s:option(ListValue, "jump", "Aktion")
+jump.rmempty = true
+jump:value("", "")
+jump:value("ACCEPT", "annehmen (ACCEPT)")
+jump:value("REJECT", "zurückweisen (REJECT)")
+jump:value("DROP", "verwerfen (DROP)")
+jump:value("LOG", "protokollieren (LOG)")
+jump:value("DNAT", "Ziel umschreiben (DNAT) [nur Prerouting]")
+jump:value("MASQUERADE", "maskieren (MASQUERADE) [nur Postrouting]")
+jump:value("SNAT", "Quelle umschreiben (SNAT) [nur Postrouting]")
+
+
+add = s:option(Value, "command", "Eigener Befehl")
+add.size = 50
+add.rmempty = true
+
+return m
diff --git a/module/admin-core/src/model/cbi/admin_network/ifaces.lua b/module/admin-core/src/model/cbi/admin_network/ifaces.lua
new file mode 100644
index 0000000000..193f83f514
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_network/ifaces.lua
@@ -0,0 +1,40 @@
+-- ToDo: Translate, Add descriptions and help texts
+m = Map("network", "Schnittstellen")
+
+s = m:section(TypedSection, "interface")
+s.addremove = true
+s:exclude("loopback")
+s:depends("proto", "static")
+s:depends("proto", "dhcp")
+
+p = s:option(ListValue, "proto", "Protokoll")
+p:value("static", "statisch")
+p:value("dhcp", "DHCP")
+p.default = "static"
+
+br = s:option(Flag, "type", "Netzwerkbrücke", "überbrückt angegebene Schnittstelle(n)")
+br.enabled = "bridge"
+br.rmempty = true
+
+s:option(Value, "ifname", "Schnittstelle")
+
+s:option(Value, "ipaddr", "IP-Adresse")
+
+s:option(Value, "netmask", "Netzmaske"):depends("proto", "static")
+
+gw = s:option(Value, "gateway", "Gateway")
+gw:depends("proto", "static")
+gw.rmempty = true
+
+dns = s:option(Value, "dns", "DNS-Server")
+dns:depends("proto", "static")
+dns.optional = true
+
+mtu = s:option(Value, "mtu", "MTU")
+mtu.optional = true
+mtu.isinteger = true
+
+mac = s:option(Value, "macaddr", "MAC-Adresse")
+mac.optional = true
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_network/portfw.lua b/module/admin-core/src/model/cbi/admin_network/portfw.lua
new file mode 100644
index 0000000000..70a174907f
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_network/portfw.lua
@@ -0,0 +1,24 @@
+-- ToDo: Translate, Add descriptions and help texts
+require("ffluci.sys")
+m = Map("luci_fw", "Portweiterleitung")
+
+s = m:section(TypedSection, "portfw")
+s.addremove = true
+s.anonymous = true
+
+iface = s:option(ListValue, "iface", "Externes Interface")
+iface:value("")
+for k,v in pairs(ffluci.sys.net.devices()) do
+ iface:value(v)
+end
+
+proto = s:option(ListValue, "proto", "Protokoll")
+proto:value("tcp", "TCP")
+proto:value("udp", "UDP")
+proto:value("tcpudp", "TCP+UDP")
+
+dport = s:option(Value, "dport", "Externer Port", "Port[:Endport]")
+
+to = s:option(Value, "to", "Interne Adresse", "IP-Adresse[:Zielport[-Zielendport]]")
+
+return m
diff --git a/module/admin-core/src/model/cbi/admin_network/ptp.lua b/module/admin-core/src/model/cbi/admin_network/ptp.lua
new file mode 100644
index 0000000000..78fcf94b9e
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_network/ptp.lua
@@ -0,0 +1,31 @@
+-- ToDo: Translate, Add descriptions and help texts
+m = Map("network", "Punkt-zu-Punkt Verbindungen")
+
+s = m:section(TypedSection, "interface")
+s.addremove = true
+s:depends("proto", "pppoe")
+s:depends("proto", "pptp")
+
+p = s:option(ListValue, "proto", "Protokoll")
+p:value("pppoe", "PPPoE")
+p:value("pptp", "PPTP")
+p.default = "pppoe"
+
+s:option(Value, "ifname", "Schnittstelle")
+
+s:option(Value, "username", "Benutzername")
+s:option(Value, "password", "Passwort")
+
+s:option(Value, "keepalive", "Keep-Alive").optional = true
+
+s:option(Value, "demand", "Dial on Demand (idle time)").optional = true
+
+srv = s:option(Value, "server", "PPTP-Server")
+srv:depends("proto", "pptp")
+srv.optional = true
+
+mtu = s:option(Value, "mtu", "MTU")
+mtu.optional = true
+mtu.isinteger = true
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_network/routes.lua b/module/admin-core/src/model/cbi/admin_network/routes.lua
new file mode 100644
index 0000000000..5a5f780070
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_network/routes.lua
@@ -0,0 +1,16 @@
+-- ToDo: Translate, Add descriptions and help texts
+m = Map("network", "Statische Routen")
+
+s = m:section(TypedSection, "route")
+s.addremove = true
+s.anonymous = true
+
+s:option(Value, "interface", "Schnittstelle")
+
+s:option(Value, "target", "Ziel", "Host-IP oder Netzwerk")
+
+s:option(Value, "netmask", "Netzmaske", "falls Ziel ein Netzwerk ist").rmemepty = true
+
+s:option(Value, "gateway", "Gateway")
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_network/vlan.lua b/module/admin-core/src/model/cbi/admin_network/vlan.lua
new file mode 100644
index 0000000000..3186f2d9bb
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_network/vlan.lua
@@ -0,0 +1,10 @@
+-- ToDo: Autodetect things, maybe use MultiValue instead, Translate, Add descriptions
+m = Map("network", "VLAN", "Konfguriert den Switch des Routers.")
+
+s = m:section(TypedSection, "switch")
+
+for i = 0, 15 do
+ s:option(Value, "vlan"..i, "vlan"..i).optional = true
+end
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_services/dnsmasq.lua b/module/admin-core/src/model/cbi/admin_services/dnsmasq.lua
new file mode 100644
index 0000000000..d6934c891c
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_services/dnsmasq.lua
@@ -0,0 +1,29 @@
+m = Map("dhcp", "Dnsmasq")
+
+s = m:section(TypedSection, "dnsmasq", "Einstellungen")
+s.anonymous = true
+
+s:option(Flag, "domainneeded", "Anfragen nur mit Domain", "Anfragen ohne Domainnamen nicht weiterleiten")
+s:option(Flag, "authoritative", "Authoritativ", "Dies ist der einzige DHCP im lokalen Netz")
+s:option(Flag, "boguspriv", "Private Anfragen filtern", "Reverse DNS-Anfragen für lokalen Netze nicht weiterleiten")
+s:option(Flag, "filterwin2k", "Windowsanfragen filtern", "nutzlose DNS-Anfragen aktueller Windowssysteme filtern")
+s:option(Flag, "localise_queries", "Lokalisiere Anfragen", "Gibt die Adresse eines Hostnamen entsprechend seines Subnetzes zurück")
+s:option(Value, "local", "Lokale Server")
+s:option(Value, "domain", "Lokale Domain")
+s:option(Flag, "expandhosts", "Erweitere Hosts", "Fügt Domainnamen zu einfachen Hosteinträgen in der Resolvdatei hinzu")
+s:option(Flag, "nonegcache", "Unbekannte nicht cachen", "Negative DNS-Antworten nicht zwischenspeichern")
+s:option(Flag, "readethers", "Verwende /etc/ethers", "Lese Informationen aus /etc/ethers um den DHCP-Server zu konfigurieren")
+s:option(Value, "leasefile", "Leasedatei", "Speicherort für vergebenen DHCP-Adressen")
+s:option(Value, "resolvfile", "Resolvdatei", "Lokale DNS-Datei")
+s:option(Flag, "nohosts", "Ignoriere /etc/hosts").optional = true
+s:option(Flag, "strictorder", "Strikte Reihenfolge", "DNS-Server werden strikt der Reihenfolge in der Resolvdatei nach abgefragt").optional = true
+s:option(Flag, "logqueries", "Schreibe Abfragelog").optional = true
+s:option(Flag, "noresolv", "Ignoriere Resolvdatei").optional = true
+s:option(Value, "dnsforwardmax", "gleichzeitige Abfragen").optional = true
+s:option(Value, "port", "DNS-Port").optional = true
+s:option(Value, "ednspacket_max", "max. EDNS.0 Paketgröße").optional = true
+s:option(Value, "dhcpleasemax", "max. DHCP-Leases").optional = true
+s:option(Value, "addnhosts", "Zusätzliche Hostdatei").optional = true
+s:option(Value, "queryport", "Abfrageport").optional = true
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_services/dropbear.lua b/module/admin-core/src/model/cbi/admin_services/dropbear.lua
new file mode 100644
index 0000000000..b8fcb9e6b2
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_services/dropbear.lua
@@ -0,0 +1,14 @@
+-- ToDo: Translate, Add descriptions
+m = Map("dropbear", "SSH-Server")
+
+s = m:section(TypedSection, "dropbear")
+s.anonymous = true
+
+port = s:option(Value, "Port", "Port")
+port.isinteger = true
+
+pwauth = s:option(Flag, "PasswordAuth", "Passwortanmeldung")
+pwauth.enabled = 'on'
+pwauth.disabled = 'off'
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_services/httpd.lua b/module/admin-core/src/model/cbi/admin_services/httpd.lua
new file mode 100644
index 0000000000..f89dbb7aeb
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_services/httpd.lua
@@ -0,0 +1,18 @@
+-- ToDo: Translate, Add descriptions
+m = Map("httpd", "HTTP-Server")
+
+s = m:section(TypedSection, "httpd")
+s.anonymous = true
+
+port = s:option(Value, "port", "Port")
+port.isinteger = true
+
+s:option(Value, "home", "Wurzelverzeichnis")
+
+config = s:option(Value, "c_file", "Konfigurationsdatei", "/etc/httpd.conf wenn leer")
+config.rmempty = true
+
+realm = s:option(Value, "realm", "Anmeldeaufforderung")
+realm.rmempty = true
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_services/olsrd.lua b/module/admin-core/src/model/cbi/admin_services/olsrd.lua
new file mode 100644
index 0000000000..430b786874
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_services/olsrd.lua
@@ -0,0 +1,82 @@
+-- ToDo: Autodetect things, Translate, Add descriptions
+require("ffluci.fs")
+
+m = Map("olsr", "OLSR")
+
+s = m:section(NamedSection, "general", "olsr", "Allgemeine Einstellungen")
+
+debug = s:option(ListValue, "DebugLevel", "Debugmodus")
+for i=0, 9 do
+ debug:value(i)
+end
+
+ipv = s:option(ListValue, "IpVersion", "Internet Protokoll")
+ipv:value("4", "IPv4")
+ipv:value("6", "IPv6")
+
+noint = s:option(Flag, "AllowNoInt", "Start ohne Netzwerk")
+noint.enabled = "yes"
+noint.disabled = "no"
+
+s:option(Value, "Pollrate", "Abfragerate (Pollrate)", "s").isnumber = true
+
+tcr = s:option(ListValue, "TcRedundancy", "TC-Redundanz")
+tcr:value("0", "MPR-Selektoren")
+tcr:value("1", "MPR-Selektoren und MPR")
+tcr:value("2", "Alle Nachbarn")
+
+s:option(Value, "MprCoverage", "MPR-Erfassung").isinteger = true
+
+lql = s:option(ListValue, "LinkQualityLevel", "VQ-Level")
+lql:value("0", "deaktiviert")
+lql:value("1", "MPR-Auswahl")
+lql:value("2", "MPR-Auswahl und Routing")
+
+lqfish = s:option(Flag, "LinkQualityFishEye", "VQ-Fisheye")
+
+s:option(Value, "LinkQualityWinSize", "VQ-Fenstergröße").isinteger = true
+
+s:option(Value, "LinkQualityDijkstraLimit", "VQ-Dijkstralimit")
+
+hyst = s:option(Flag, "UseHysteresis", "Hysterese aktivieren")
+hyst.enabled = "yes"
+hyst.disabled = "no"
+
+
+i = m:section(TypedSection, "Interface", "Schnittstellen")
+i.anonymous = true
+i.addremove = true
+i.dynamic = true
+
+i:option(Value, "Interface", "Netzwerkschnittstellen")
+
+i:option(Value, "HelloInterval", "Hello-Intervall").isnumber = true
+
+i:option(Value, "HelloValidityTime", "Hello-Gültigkeit").isnumber = true
+
+i:option(Value, "TcInterval", "TC-Intervall").isnumber = true
+
+i:option(Value, "TcValidityTime", "TC-Gültigkeit").isnumber = true
+
+i:option(Value, "MidInterval", "MID-Intervall").isnumber = true
+
+i:option(Value, "MidValidityTime", "MID-Gültigkeit").isnumber = true
+
+i:option(Value, "HnaInterval", "HNA-Intervall").isnumber = true
+
+i:option(Value, "HnaValidityTime", "HNA-Gültigkeit").isnumber = true
+
+
+p = m:section(TypedSection, "LoadPlugin", "Plugins")
+p.addremove = true
+p.dynamic = true
+
+lib = p:option(ListValue, "Library", "Bibliothek")
+lib:value("")
+for k, v in pairs(ffluci.fs.dir("/usr/lib")) do
+ if v:sub(1, 6) == "olsrd_" then
+ lib:value(v)
+ end
+end
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_system/fstab.lua b/module/admin-core/src/model/cbi/admin_system/fstab.lua
new file mode 100644
index 0000000000..cf9a483d78
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_system/fstab.lua
@@ -0,0 +1,21 @@
+m = Map("fstab", "Einhängepunkte")
+
+mount = m:section(TypedSection, "mount", "Einhängepunkte")
+mount.anonymous = true
+mount.addremove = true
+
+mount:option(Flag, "enabled", "aktivieren")
+mount:option(Value, "device", "Gerät")
+mount:option(Value, "target", "Einhängepunkt")
+mount:option(Value, "fstype", "Dateisystem")
+mount:option(Value, "options", "Optionen")
+
+
+swap = m:section(TypedSection, "swap", "SWAP")
+swap.anonymous = true
+swap.addremove = true
+
+swap:option(Flag, "enabled", "aktivieren")
+swap:option(Value, "device", "Gerät")
+
+return m
diff --git a/module/admin-core/src/model/cbi/admin_wifi/devices.lua b/module/admin-core/src/model/cbi/admin_wifi/devices.lua
new file mode 100644
index 0000000000..0b1b9a2ffe
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_wifi/devices.lua
@@ -0,0 +1,52 @@
+-- ToDo: Translate, Add descriptions and help texts
+
+m = Map("wireless", "Geräte")
+
+s = m:section(TypedSection, "wifi-device")
+--s.addremove = true
+
+en = s:option(Flag, "disabled", "Aktivieren")
+en.enabled = "0"
+en.disabled = "1"
+
+t = s:option(ListValue, "type", "Typ")
+t:value("broadcom")
+t:value("atheros")
+t:value("mac80211")
+t:value("prism2")
+--[[
+require("ffluci.sys")
+local c = ". /etc/functions.sh;for i in /lib/wifi/*;do . $i;done;echo $DRIVERS"
+for driver in ffluci.sys.execl(c)[1]:gmatch("[^ ]+") do
+ t:value(driver)
+end
+]]--
+
+mode = s:option(ListValue, "mode", "Modus")
+mode:value("", "standard")
+mode:value("11b", "802.11b")
+mode:value("11g", "802.11g")
+mode:value("11a", "802.11a")
+mode:value("11bg", "802.11b+g")
+mode.rmempty = true
+
+s:option(Value, "channel", "Funkkanal")
+
+s:option(Value, "txantenna", "Sendeantenne").rmempty = true
+
+s:option(Value, "rxantenna", "Empfangsantenne").rmempty = true
+
+s:option(Value, "distance", "Distanz",
+ "Distanz zum am weitesten entfernten Funkpartner (m)").rmempty = true
+
+s:option(Value, "diversity", "Diversität"):depends("type", "atheros")
+
+country = s:option(Value, "country", "Ländercode")
+country.optional = true
+country:depends("type", "broadcom")
+
+maxassoc = s:option(Value, "maxassoc", "Verbindungslimit")
+maxassoc:depends("type", "broadcom")
+maxassoc.optional = true
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/cbi/admin_wifi/networks.lua b/module/admin-core/src/model/cbi/admin_wifi/networks.lua
new file mode 100644
index 0000000000..20342ffb03
--- /dev/null
+++ b/module/admin-core/src/model/cbi/admin_wifi/networks.lua
@@ -0,0 +1,70 @@
+-- ToDo: Translate, Add descriptions and help texts
+m = Map("wireless", "Netze")
+
+s = m:section(TypedSection, "wifi-iface")
+s.addremove = true
+s.anonymous = true
+
+s:option(Value, "ssid", "Netzkennung (ESSID)").maxlength = 32
+
+device = s:option(ListValue, "device", "Gerät")
+local d = ffluci.model.uci.show("wireless").wireless
+if d then
+ for k, v in pairs(d) do
+ if v[".type"] == "wifi-device" then
+ device:value(k)
+ end
+ end
+end
+
+network = s:option(ListValue, "network", "Netzwerk")
+network:value("")
+for k, v in pairs(ffluci.model.uci.show("network").network) do
+ if v[".type"] == "interface" and k ~= "loopback" then
+ network:value(k)
+ end
+end
+
+mode = s:option(ListValue, "mode", "Modus")
+mode:value("ap", "Access Point")
+mode:value("adhoc", "Ad-Hoc")
+mode:value("sta", "Client")
+mode:value("wds", "WDS")
+
+s:option(Value, "bssid", "BSSID").optional = true
+
+s:option(Value, "txpower", "Sendeleistung", "dbm").rmempty = true
+
+encr = s:option(ListValue, "encryption", "Verschlüsselung")
+encr:value("none", "keine")
+encr:value("wep", "WEP")
+encr:value("psk", "WPA-PSK")
+encr:value("wpa", "WPA-Radius")
+encr:value("psk2", "WPA2-PSK")
+encr:value("wpa2", "WPA2-Radius")
+
+key = s:option(Value, "key", "Schlüssel")
+key:depends("encryption", "wep")
+key:depends("encryption", "psk")
+key:depends("encryption", "wpa")
+key:depends("encryption", "psk2")
+key:depends("encryption", "wpa2")
+key.rmempty = true
+
+server = s:option(Value, "server", "Radius-Server")
+server:depends("encryption", "wpa")
+server:depends("encryption", "wpa2")
+server.rmempty = true
+
+port = s:option(Value, "port", "Radius-Port")
+port:depends("encryption", "wpa")
+port:depends("encryption", "wpa2")
+port.rmempty = true
+
+s:option(Flag, "isolate", "AP-Isolation", "Unterbindet Client-Client-Verkehr").optional = true
+
+s:option(Flag, "hidden", "ESSID verstecken").optional = true
+
+
+
+return m \ No newline at end of file
diff --git a/module/admin-core/src/model/menu/00admin.lua b/module/admin-core/src/model/menu/00admin.lua
new file mode 100644
index 0000000000..2488508bb4
--- /dev/null
+++ b/module/admin-core/src/model/menu/00admin.lua
@@ -0,0 +1,33 @@
+add("admin", "index", "Übersicht", 10)
+act("contact", "Kontakt")
+act("luci", "FFLuCI")
+
+add("admin", "status", "Status", 20)
+act("system", "System")
+
+add("admin", "system", "System", 30)
+act("packages", "Paketverwaltung")
+act("passwd", "Passwort ändern")
+act("sshkeys", "SSH-Schlüssel")
+act("fstab", "Einhängepunkte")
+act("upgrade", "Firmwareupgrade")
+act("reboot", "Neu starten")
+
+add("admin", "services", "Dienste", 40)
+act("olsrd", "OLSR")
+act("httpd", "HTTP-Server")
+act("dropbear", "SSH-Server")
+act("dnsmasq", "Dnsmasq")
+
+add("admin", "network", "Netzwerk", 50)
+act("vlan", "Switch")
+act("ifaces", "Schnittstellen")
+act("dhcp", "DHCP-Server")
+act("ptp", "PPPoE / PPTP")
+act("routes", "Statische Routen")
+act("portfw", "Portweiterleitung")
+act("firewall", "Firewall")
+
+add("admin", "wifi", "Drahtlos", 60)
+act("devices", "Geräte")
+act("networks", "Netze") \ No newline at end of file