From b23b669ffbdb464723b26afd2144e5561e0d2919 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Fri, 10 Jun 2011 23:17:39 +0000 Subject: [PATCH] luci-0.10: merge r7113, r7114, r7115, r7116 and r7117 --- applications/luci-ahcp/Makefile | 4 + .../luci-ahcp/luasrc/controller/ahcp.lua | 63 +++++++++ .../luci-ahcp/luasrc/model/cbi/ahcp.lua | 121 ++++++++++++++++++ .../luasrc/view/admin_status/index/ahcp.htm | 1 + .../luci-ahcp/luasrc/view/ahcp_status.htm | 60 +++++++++ .../luci-ahcp/root/etc/uci-defaults/luci-ahcp | 11 ++ .../luasrc/model/cbi/openvpn-advanced.lua | 2 + .../luasrc/model/cbi/openvpn-basic.lua | 64 ++++----- contrib/package/luci/Makefile | 3 + .../luasrc/model/cbi/admin_network/ifaces.lua | 62 +++++++++ 10 files changed, 359 insertions(+), 32 deletions(-) create mode 100644 applications/luci-ahcp/Makefile create mode 100644 applications/luci-ahcp/luasrc/controller/ahcp.lua create mode 100644 applications/luci-ahcp/luasrc/model/cbi/ahcp.lua create mode 100644 applications/luci-ahcp/luasrc/view/admin_status/index/ahcp.htm create mode 100644 applications/luci-ahcp/luasrc/view/ahcp_status.htm create mode 100755 applications/luci-ahcp/root/etc/uci-defaults/luci-ahcp diff --git a/applications/luci-ahcp/Makefile b/applications/luci-ahcp/Makefile new file mode 100644 index 000000000..a70e950ad --- /dev/null +++ b/applications/luci-ahcp/Makefile @@ -0,0 +1,4 @@ +PO = ahcp + +include ../../build/config.mk +include ../../build/module.mk diff --git a/applications/luci-ahcp/luasrc/controller/ahcp.lua b/applications/luci-ahcp/luasrc/controller/ahcp.lua new file mode 100644 index 000000000..ea7390311 --- /dev/null +++ b/applications/luci-ahcp/luasrc/controller/ahcp.lua @@ -0,0 +1,63 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2011 Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id: init.lua 6731 2011-01-14 19:44:03Z soma $ +]]-- + +module("luci.controller.ahcp", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/ahcpd") then + return + end + + require("luci.i18n") + luci.i18n.loadc("ahcp") + + entry({"admin", "network", "ahcpd"}, cbi("ahcp"), luci.i18n.translate("AHCP Server"), 90).i18n = "ahcp" + entry({"admin", "network", "ahcpd", "status"}, call("ahcp_status")) +end + +function ahcp_status() + local nfs = require "nixio.fs" + local uci = require "luci.model.uci".cursor() + local lsd = uci:get_first("ahcpd", "ahcpd", "lease_dir") or "/var/lib/leases" + local idf = uci:get_first("ahcpd", "ahcpd", "id_file") or "/var/lib/ahcpd-unique-id" + + local rv = { + uid = "00:00:00:00:00:00:00:00", + leases = { } + } + + idf = nfs.readfile(idf) + if idf and #idf == 8 then + rv.uid = "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X" %{ idf:byte(1, 8) } + end + + local itr = nfs.dir(lsd) + if itr then + local addr + for addr in itr do + if addr:match("^%d+%.%d+%.%d+%.%d+$") then + local s = nfs.stat(lsd .. "/" .. addr) + rv.leases[#rv.leases+1] = { + addr = addr, + age = s and (os.time() - s.mtime) or 0 + } + end + end + end + + table.sort(rv.leases, function(a, b) return a.age < b.age end) + + luci.http.prepare_content("application/json") + luci.http.write_json(rv) +end diff --git a/applications/luci-ahcp/luasrc/model/cbi/ahcp.lua b/applications/luci-ahcp/luasrc/model/cbi/ahcp.lua new file mode 100644 index 000000000..18764a1f3 --- /dev/null +++ b/applications/luci-ahcp/luasrc/model/cbi/ahcp.lua @@ -0,0 +1,121 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2011 Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id: init.lua 5764 2010-03-08 19:05:34Z jow $ +]]-- + +m = Map("ahcpd", translate("AHCP Server"), translate("AHCP is an autoconfiguration protocol " .. + "for IPv6 and dual-stack IPv6/IPv4 networks designed to be used in place of router " .. + "discovery and DHCP on networks where it is difficult or impossible to configure a " .. + "server within every link-layer broadcast domain, for example mobile ad-hoc networks.")) + + +m:section(SimpleSection).template = "ahcp_status" + +s = m:section(TypedSection, "ahcpd") +s:tab("general", translate("General Setup")) +s:tab("advanced", translate("Advanced Settings")) +s.addremove = false +s.anonymous = true + + +mode = s:taboption("general", ListValue, "mode", translate("Operation mode")) +mode:value("server", translate("Server")) +mode:value("forwarder", translate("Forwarder")) + +net = s:taboption("general", Value, "interface", translate("Served interfaces")) +net.template = "cbi/network_netlist" +net.widget = "checkbox" +net.nocreate = true + +function net.cfgvalue(self, section) + return m.uci:get("ahcpd", section, "interface") +end + +pfx = s:taboption("general", DynamicList, "prefix", translate("Announced prefixes"), + translate("Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation")) +pfx.optional = true +pfx.datatype = "ipaddr" +pfx:depends("mode", "server") + +nss = s:taboption("general", DynamicList, "name_server", translate("Announced DNS servers"), + translate("Specifies the announced IPv4 and IPv6 name servers")) +nss.optional = true +nss.datatype = "ipaddr" +nss:depends("mode", "server") + +ntp = s:taboption("general", DynamicList, "ntp_server", translate("Announced NTP servers"), + translate("Specifies the announced IPv4 and IPv6 NTP servers")) +ntp.optional = true +ntp.datatype = "ipaddr" +ntp:depends("mode", "server") + +mca = s:taboption("general", Value, "multicast_address", translate("Multicast address")) +mca.optional = true +mca.placeholder = "ff02::cca6:c0f9:e182:5359" +mca.datatype = "ip6addr" + +port = s:taboption("general", Value, "port", translate("Port")) +port.optional = true +port.placeholder = 5359 +port.datatype = "port" + +fam = s:taboption("general", ListValue, "_family", translate("Protocol family")) +fam:value("", translate("IPv4 and IPv6")) +fam:value("ipv4", translate("IPv4 only")) +fam:value("ipv6", translate("IPv6 only")) + +function fam.cfgvalue(self, section) + local v4 = m.uci:get_bool("ahcpd", section, "ipv4_only") + local v6 = m.uci:get_bool("ahcpd", section, "ipv6_only") + if v4 then + return "ipv4" + elseif v6 then + return "ipv6" + end + return "" +end + +function fam.write(self, section, value) + if value == "ipv4" then + m.uci:set("ahcpd", section, "ipv4_only", "true") + m.uci:delete("ahcpd", section, "ipv6_only") + elseif value == "ipv6" then + m.uci:set("ahcpd", section, "ipv6_only", "true") + m.uci:delete("ahcpd", section, "ipv4_only") + end +end + +function fam.remove(self, section) + m.uci:delete("ahcpd", section, "ipv4_only") + m.uci:delete("ahcpd", section, "ipv6_only") +end + +ltime = s:taboption("general", Value, "lease_time", translate("Lease validity time")) +ltime.optional = true +ltime.placeholder = 3666 +ltime.datatype = "uinteger" + + +ld = s:taboption("advanced", Value, "lease_dir", translate("Lease directory")) +ld.datatype = "directory" +ld.placeholder = "/var/lib/leases" + +id = s:taboption("advanced", Value, "id_file", translate("Unique ID file")) +--id.datatype = "file" +id.placeholder = "/var/lib/ahcpd-unique-id" + +log = s:taboption("advanced", Value, "log_file", translate("Log file")) +--log.datatype = "file" +log.placeholder = "/var/log/ahcpd.log" + + +return m diff --git a/applications/luci-ahcp/luasrc/view/admin_status/index/ahcp.htm b/applications/luci-ahcp/luasrc/view/admin_status/index/ahcp.htm new file mode 100644 index 000000000..ef4cfca56 --- /dev/null +++ b/applications/luci-ahcp/luasrc/view/admin_status/index/ahcp.htm @@ -0,0 +1 @@ +<%+ahcp_status%> diff --git a/applications/luci-ahcp/luasrc/view/ahcp_status.htm b/applications/luci-ahcp/luasrc/view/ahcp_status.htm new file mode 100644 index 000000000..bc595ce6c --- /dev/null +++ b/applications/luci-ahcp/luasrc/view/ahcp_status.htm @@ -0,0 +1,60 @@ + + +
+ <%:Active AHCP Leases%> +

+ + + + + + + + +
<%:Address%><%:Age%>

<%:Collecting data...%>
+
diff --git a/applications/luci-ahcp/root/etc/uci-defaults/luci-ahcp b/applications/luci-ahcp/root/etc/uci-defaults/luci-ahcp new file mode 100755 index 000000000..f2b2487ca --- /dev/null +++ b/applications/luci-ahcp/root/etc/uci-defaults/luci-ahcp @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@ahcpd[-1] + add ucitrack ahcpd + set ucitrack.@ahcpd[-1].init=ahcpd + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/applications/luci-openvpn/luasrc/model/cbi/openvpn-advanced.lua b/applications/luci-openvpn/luasrc/model/cbi/openvpn-advanced.lua index 13dfd1297..da97ee986 100644 --- a/applications/luci-openvpn/luasrc/model/cbi/openvpn-advanced.lua +++ b/applications/luci-openvpn/luasrc/model/cbi/openvpn-advanced.lua @@ -58,6 +58,7 @@ local knownParams = { { Flag, "client_disconnect", 0 }, { Value, "learn_address", "/usr/bin/ovpn-learnaddress" }, { Value, "auth_user_pass_verify", "/usr/bin/ovpn-userpass via-env" }, + { ListValue, "script_security", { 0, 1, 2, 3 }, {mode="server" } }, } }, { "networking", { @@ -115,6 +116,7 @@ local knownParams = { { Flag, "management_query_passwords", 0 }, -- management { Flag, "management_hold", 0 }, -- management { Flag, "management_log_cache", 100 }, -- management + { ListValue, "topology", { "net30", "p2p", "subnet" }, {dev_type="tun" } }, } }, { "vpn", { diff --git a/applications/luci-openvpn/luasrc/model/cbi/openvpn-basic.lua b/applications/luci-openvpn/luasrc/model/cbi/openvpn-basic.lua index b3e22d480..4f2f8d9f7 100644 --- a/applications/luci-openvpn/luasrc/model/cbi/openvpn-basic.lua +++ b/applications/luci-openvpn/luasrc/model/cbi/openvpn-basic.lua @@ -7,7 +7,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 $Id$ ]]-- @@ -17,36 +17,36 @@ require("luci.model.uci") local basicParams = { + -- + -- Widget, Name, Default(s), Description -- - -- Widget Name Optn. Default(s) - -- - - { ListValue, "verb", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 } }, - { Value, "nice", 0 }, - { Value, "port", 1194 }, - { ListValue, "dev_type", { "tun", "tap" } }, - { Flag, "tun_ipv6", 0 }, - - { Value, "ifconfig", "10.200.200.3 10.200.200.1" }, - { Value, "server", "10.200.200.0 255.255.255.0" }, - { Value, "server_bridge", "192.168.1.1 255.255.255.0 192.168.1.128 192.168.1.254" }, - { Flag, "nobind", 0 }, - - { Flag, "comp_lzo", 0 }, - { Value, "keepalive", "10 60" }, - - { ListValue, "proto", { "udp", "tcp" } }, - - { Flag, "client", 0 }, - { Flag, "client_to_client", 0 }, - { DynamicList, "remote", "vpnserver.example.org" }, - - { FileUpload, "secret", "/etc/openvpn/secret.key 1" }, - { FileUpload, "pkcs12", "/etc/easy-rsa/keys/some-client.pk12" }, - { FileUpload, "ca", "/etc/easy-rsa/keys/ca.crt" }, - { FileUpload, "dh", "/etc/easy-rsa/keys/dh1024.pem" }, - { FileUpload, "cert", "/etc/easy-rsa/keys/some-client.crt" }, - { FileUpload, "key", "/etc/easy-rsa/keys/some-client.key" }, + + { ListValue, "verb", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, translate("Set output verbosity") }, + { Value, "nice",0, translate("Change process priority") }, + { Value,"port",1194, translate("TCP/UDP port # for both local and remote") }, + { ListValue,"dev_type",{ "tun", "tap" }, translate("Type of used device") }, + { Flag,"tun_ipv6",0, translate("Make tun device IPv6 capable") }, + + { Value,"ifconfig","10.200.200.3 10.200.200.1", translate("") }, + { Value,"server","10.200.200.0 255.255.255.0", translate("Configure server mode") }, + { Value,"server_bridge","192.168.1.1 255.255.255.0 192.168.1.128 192.168.1.254", translate("Configure server bridge") }, + { Flag,"nobind",0, translate("Do not bind to local address and port") }, + + { Flag,"comp_lzo",0, translate("Use fast LZO compression") }, + { Value,"keepalive","10 60", translate("") }, + + { ListValue,"proto",{ "udp", "tcp" }, translate("Use protocol") }, + + { Flag,"client",0, translate("Configure client mode") }, + { Flag,"client_to_client",0, translate("Allow client-to-client traffic") }, + { DynamicList,"remote","vpnserver.example.org", translate("Remote host name or ip address") }, + + { FileUpload,"secret","/etc/openvpn/secret.key 1", translate("Enable Static Key encryption mode (non-TLS)") }, + { FileUpload,"pkcs12","/etc/easy-rsa/keys/some-client.pk12", translate("PKCS#12 file containing keys") }, + { FileUpload,"ca","/etc/easy-rsa/keys/ca.crt", translate("Certificate authority") }, + { FileUpload,"dh","/etc/easy-rsa/keys/dh1024.pem", translate("Diffie Hellman parameters") }, + { FileUpload,"cert","/etc/easy-rsa/keys/some-client.crt", translate("Local certificate") }, + { FileUpload,"key","/etc/easy-rsa/keys/some-client.key", translate("Local private key") }, } @@ -63,8 +63,7 @@ local s = m:section( NamedSection, arg[1], "openvpn" ) for _, option in ipairs(basicParams) do local o = s:option( option[1], option[2], - translate("openvpn_param_%s" % option[2]), - translate("openvpn_param_%s_desc" % option[2]) + option[2], option[4] ) o.optional = true @@ -100,3 +99,4 @@ for _, option in ipairs(basicParams) do end return m + diff --git a/contrib/package/luci/Makefile b/contrib/package/luci/Makefile index 8c1a94747..f5d08902d 100644 --- a/contrib/package/luci/Makefile +++ b/contrib/package/luci/Makefile @@ -400,6 +400,9 @@ $(eval $(call application,vnstat,LuCI Support for VnStat,\ $(eval $(call application,radvd,LuCI Support for Radvd,\ +luci-mod-admin-full +PACKAGE_luci-app-radvd:radvd)) +$(eval $(call application,ahcp,LuCI Support for AHCPd,\ + +luci-mod-admin-full +PACKAGE_luci-app-ahcp:ahcpd)) + $(eval $(call application,lqtapifoss,Lantiq voip)) ### Server Gateway Interfaces ### 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 cf76c8617..798b388fa 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -33,6 +33,7 @@ local has_ipv6 = fs.access("/proc/net/ipv6_route") local has_6in4 = fs.access("/lib/network/6in4.sh") local has_6to4 = fs.access("/lib/network/6to4.sh") local has_relay = fs.access("/lib/network/relay.sh") +local has_ahcp = fs.access("/lib/network/ahcp.sh") m = Map("network", translate("Interfaces") .. " - " .. arg[1]:upper(), translate("On this page you can configure the network interfaces. You can bridge several interfaces by ticking the \"bridge interfaces\" field and enter the names of several network interfaces separated by spaces. You can also use VLAN notation INTERFACE.VLANNR (e.g.: eth0.1).")) m:chain("wireless") @@ -68,6 +69,7 @@ if has_pppd then s:tab("ppp", translate("PPP Settings")) end if has_pppoa then s:tab("atm", translate("ATM Settings")) end if has_6in4 or has_6to4 then s:tab("tunnel", translate("Tunnel Settings")) end if has_relay then s:tab("relay", translate("Relay Settings")) end +if has_ahcp then s:tab("ahcp", translate("AHCP Settings")) end s:tab("physical", translate("Physical Settings")) if has_firewall then s:tab("firewall", translate("Firewall Settings")) end @@ -94,6 +96,7 @@ if has_pptp then p:value("pptp", "PPTP") end if has_6in4 then p:value("6in4", "6in4") end if has_6to4 then p:value("6to4", "6to4") end if has_relay then p:value("relay", "Relay") end +if has_ahcp then p:value("ahcp", "AHCP") end p:value("none", translate("none")) if not ( has_pppd and has_pppoe and has_pppoa and has_3g and has_pptp ) then @@ -122,6 +125,7 @@ ifname_single:depends({ type = "", proto = "static" }) ifname_single:depends({ type = "", proto = "dhcp" }) ifname_single:depends({ type = "", proto = "pppoe" }) ifname_single:depends({ type = "", proto = "pppoa" }) +ifname_single:depends({ type = "", proto = "ahcp" }) ifname_single:depends({ type = "", proto = "none" }) function ifname_single.cfgvalue(self, s) @@ -541,6 +545,64 @@ if has_relay then table:depends("proto", "relay") end +if has_ahcp then + mca = s:taboption("ahcp", Value, "multicast_address", translate("Multicast address")) + mca.optional = true + mca.placeholder = "ff02::cca6:c0f9:e182:5359" + mca.datatype = "ip6addr" + mca:depends("proto", "ahcp") + + port = s:taboption("ahcp", Value, "port", translate("Port")) + port.optional = true + port.placeholder = 5359 + port.datatype = "port" + port:depends("proto", "ahcp") + + fam = s:taboption("ahcp", ListValue, "_family", translate("Protocol family")) + fam:value("", translate("IPv4 and IPv6")) + fam:value("ipv4", translate("IPv4 only")) + fam:value("ipv6", translate("IPv6 only")) + fam:depends("proto", "ahcp") + + function fam.cfgvalue(self, section) + local v4 = m.uci:get_bool("network", section, "ipv4_only") + local v6 = m.uci:get_bool("network", section, "ipv6_only") + if v4 then + return "ipv4" + elseif v6 then + return "ipv6" + end + return "" + end + + function fam.write(self, section, value) + if value == "ipv4" then + m.uci:set("network", section, "ipv4_only", "true") + m.uci:delete("network", section, "ipv6_only") + elseif value == "ipv6" then + m.uci:set("network", section, "ipv6_only", "true") + m.uci:delete("network", section, "ipv4_only") + end + end + + function fam.remove(self, section) + m.uci:delete("network", section, "ipv4_only") + m.uci:delete("network", section, "ipv6_only") + end + + nodns = s:taboption("ahcp", Flag, "no_dns", translate("Disable DNS setup")) + nodns.optional = true + nodns.enabled = "true" + nodns.disabled = "false" + nodns.default = nodns.disabled + nodns:depends("proto", "ahcp") + + ltime = s:taboption("ahcp", Value, "lease_time", translate("Lease validity time")) + ltime.optional = true + ltime.placeholder = 3666 + ltime.datatype = "uinteger" + ltime:depends("proto", "ahcp") +end if net:proto() ~= "relay" then s2 = m:section(TypedSection, "alias", translate("IP-Aliases")) -- 2.25.1