diff options
Diffstat (limited to 'protocols/luci-proto-ipv6')
11 files changed, 619 insertions, 0 deletions
diff --git a/protocols/luci-proto-ipv6/Makefile b/protocols/luci-proto-ipv6/Makefile new file mode 100644 index 000000000..f0ca605f8 --- /dev/null +++ b/protocols/luci-proto-ipv6/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org> +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for DHCPv6/6in4/6to4/6rd/DS-Lite +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6in4.lua b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6in4.lua new file mode 100644 index 000000000..9b668cdda --- /dev/null +++ b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6in4.lua @@ -0,0 +1,111 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2011 Jo-Philipp Wich <xm@subsignal.org> + +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 +]]-- + +local map, section, net = ... + +local ipaddr, peeraddr, ip6addr, tunnelid, username, password +local defaultroute, metric, ttl, mtu + + +ipaddr = s:taboption("general", Value, "ipaddr", + translate("Local IPv4 address"), + translate("Leave empty to use the current WAN address")) + +ipaddr.datatype = "ip4addr" + + +peeraddr = s:taboption("general", Value, "peeraddr", + translate("Remote IPv4 address"), + translate("This is usually the address of the nearest PoP operated by the tunnel broker")) + +peeraddr.rmempty = false +peeraddr.datatype = "ip4addr" + + +ip6addr = s:taboption("general", Value, "ip6addr", + translate("Local IPv6 address"), + translate("This is the local endpoint address assigned by the tunnel broker, it usually ends with <code>:2</code>")) + +ip6addr.datatype = "ip6addr" + + +local ip6prefix = s:taboption("general", Value, "ip6prefix", + translate("IPv6 routed prefix"), + translate("This is the prefix routed to you by the tunnel broker for use by clients")) + +ip6prefix.datatype = "ip6addr" + + +local update = section:taboption("general", Flag, "_update", + translate("Dynamic tunnel"), + translate("Enable HE.net dynamic endpoint update")) + +update.enabled = "1" +update.disabled = "0" + +function update.write() end +function update.remove() end +function update.cfgvalue(self, section) + return (tonumber(m:get(section, "tunnelid")) ~= nil) + and self.enabled or self.disabled +end + + +tunnelid = section:taboption("general", Value, "tunnelid", translate("Tunnel ID")) +tunnelid.datatype = "uinteger" +tunnelid:depends("_update", update.enabled) + + +username = section:taboption("general", Value, "username", + translate("HE.net username"), + translate("This is the plain username for logging into the account")) + +username:depends("_update", update.enabled) +username.validate = function(self, val, sid) + if type(val) == "string" and #val == 32 and val:match("^[a-fA-F0-9]+$") then + return nil, translate("The HE.net endpoint update configuration changed, you must now use the plain username instead of the user ID!") + end + return val +end + + +password = section:taboption("general", Value, "password", + translate("HE.net password"), + translate("This is either the \"Update Key\" configured for the tunnel or the account password if no update key has been configured")) + +password.password = true +password:depends("_update", update.enabled) + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +ttl = section:taboption("advanced", Value, "ttl", translate("Use TTL on tunnel interface")) +ttl.placeholder = "64" +ttl.datatype = "range(1,255)" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Use MTU on tunnel interface")) +mtu.placeholder = "1280" +mtu.datatype = "max(9200)" diff --git a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6rd.lua b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6rd.lua new file mode 100644 index 000000000..3835561dd --- /dev/null +++ b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6rd.lua @@ -0,0 +1,81 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2011-2012 Jo-Philipp Wich <xm@subsignal.org> + +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 +]]-- + +local map, section, net = ... + +local ipaddr, peeraddr, ip6addr, tunnelid, username, password +local defaultroute, metric, ttl, mtu + + +ipaddr = s:taboption("general", Value, "ipaddr", + translate("Local IPv4 address"), + translate("Leave empty to use the current WAN address")) + +ipaddr.datatype = "ip4addr" + + +peeraddr = s:taboption("general", Value, "peeraddr", + translate("Remote IPv4 address"), + translate("This IPv4 address of the relay")) + +peeraddr.rmempty = false +peeraddr.datatype = "ip4addr" + + +ip6addr = s:taboption("general", Value, "ip6prefix", + translate("IPv6 prefix"), + translate("The IPv6 prefix assigned to the provider, usually ends with <code>::</code>")) + +ip6addr.rmempty = false +ip6addr.datatype = "ip6addr" + + +ip6prefixlen = s:taboption("general", Value, "ip6prefixlen", + translate("IPv6 prefix length"), + translate("The length of the IPv6 prefix in bits")) + +ip6prefixlen.placeholder = "16" +ip6prefixlen.datatype = "range(0,128)" + + +ip6prefixlen = s:taboption("general", Value, "ip4prefixlen", + translate("IPv4 prefix length"), + translate("The length of the IPv4 prefix in bits, the remainder is used in the IPv6 addresses.")) + +ip6prefixlen.placeholder = "0" +ip6prefixlen.datatype = "range(0,32)" + + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +ttl = section:taboption("advanced", Value, "ttl", translate("Use TTL on tunnel interface")) +ttl.placeholder = "64" +ttl.datatype = "range(1,255)" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Use MTU on tunnel interface")) +mtu.placeholder = "1280" +mtu.datatype = "max(9200)" diff --git a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6to4.lua b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6to4.lua new file mode 100644 index 000000000..c0cb95b2b --- /dev/null +++ b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6to4.lua @@ -0,0 +1,46 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2011 Jo-Philipp Wich <xm@subsignal.org> + +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 +]]-- + +local map, section, net = ... + +local ipaddr, defaultroute, metric, ttl, mtu + + +ipaddr = section:taboption("general", Value, "ipaddr", + translate("Local IPv4 address"), + translate("Leave empty to use the current WAN address")) + +ipaddr.datatype = "ip4addr" + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +ttl = section:taboption("advanced", Value, "ttl", translate("Use TTL on tunnel interface")) +ttl.placeholder = "64" +ttl.datatype = "range(1,255)" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Use MTU on tunnel interface")) +mtu.placeholder = "1280" +mtu.datatype = "max(9200)" diff --git a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dhcpv6.lua b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dhcpv6.lua new file mode 100644 index 000000000..51f17878d --- /dev/null +++ b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dhcpv6.lua @@ -0,0 +1,67 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2013 Steven Barth <steven@midlink.org> + +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 +]]-- + +local map, section, net = ... + + +local o = section:taboption("general", ListValue, "reqaddress", + translate("Request IPv6-address")) +o:value("try") +o:value("force") +o:value("none", "disabled") +o.default = "try" + + +o = section:taboption("general", Value, "reqprefix", + translate("Request IPv6-prefix of length")) +o:value("auto", translate("automatic")) +o:value("no", translate("disabled")) +o:value("48") +o:value("52") +o:value("56") +o:value("60") +o:value("64") +o.default = "auto" + + +o = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) +o.default = o.enabled + + +o = section:taboption("advanced", Flag, "peerdns", + translate("Use DNS servers advertised by peer"), + translate("If unchecked, the advertised DNS server addresses are ignored")) +o.default = o.enabled + + +o = section:taboption("advanced", Value, "ip6prefix", + translate("Custom delegated IPv6-prefix")) +o.dataype = "ip6addr" + + +o = section:taboption("advanced", DynamicList, "dns", + translate("Use custom DNS servers")) +o:depends("peerdns", "") +o.datatype = "list(ip6addr)" +o.cast = "string" + + +o = section:taboption("advanced", Value, "clientid", + translate("Client ID to send when requesting DHCP")) + +luci.tools.proto.opt_macaddr(section, ifc, translate("Override MAC address")) + +o = section:taboption("advanced", Value, "mtu", translate("Override MTU")) +o.placeholder = "1500" +o.datatype = "max(9200)" diff --git a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dslite.lua b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dslite.lua new file mode 100644 index 000000000..2d9e258c3 --- /dev/null +++ b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dslite.lua @@ -0,0 +1,62 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2011 Jo-Philipp Wich <xm@subsignal.org> +Copyright 2013 Steven Barth <steven@midlink.org> + +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 +]]-- + +local map, section, net = ... + +local peeraddr, ip6addr +local tunlink, defaultroute, metric, ttl, mtu + + + + +peeraddr = section:taboption("general", Value, "peeraddr", + translate("DS-Lite AFTR address")) + +peeraddr.rmempty = false +peeraddr.datatype = "ip6addr" + +ip6addr = section:taboption("general", Value, "ip6addr", + translate("Local IPv6 address"), + translate("Leave empty to use the current WAN address")) + +ip6addr.datatype = "ip6addr" + + +tunlink = section:taboption("advanced", DynamicList, "tunlink", translate("Tunnel Link")) +tunlink.template = "cbi/network_netlist" +tunlink.nocreate = true + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +ttl = section:taboption("advanced", Value, "ttl", translate("Use TTL on tunnel interface")) +ttl.placeholder = "64" +ttl.datatype = "range(1,255)" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Use MTU on tunnel interface")) +mtu.placeholder = "1280" +mtu.datatype = "max(9200)" diff --git a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_hnet.lua b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_hnet.lua new file mode 100644 index 000000000..0cf8c0101 --- /dev/null +++ b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_hnet.lua @@ -0,0 +1,43 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2013 Steven Barth <steven@midlink.org> + +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 +]]-- + +local map, section, net = ... + +local mode = section:taboption("general", ListValue, "mode", translate("Category")) +mode:value("auto", translate("Automatic")) +mode:value("external", translate("External")) +mode:value("guest", translate("Guest")) +mode:value("adhoc", translate("Ad-Hoc")) +mode.default = "auto" + + + +local plen = section:taboption("advanced", Value, "ip6assign", translate("IPv6 assignment length"), + translate("Assign a part of given length of every public IPv6-prefix to this interface")) +plen.datatype = "max(128)" +plen.default = "64" + +section:taboption("advanced", Value, "link_id", translate("IPv6 assignment hint"), + translate("Assign prefix parts using this hexadecimal subprefix ID for this interface.")) + +plen = section:taboption("advanced", Value, "ip4assign", translate("IPv4 assignment length")) +plen.datatype = "max(32)" +plen.default = "24" + +local o = section:taboption("advanced", Value, "dnsname", translate("DNS-Label / FQDN")) +o.default = map.name + +luci.tools.proto.opt_macaddr(section, ifc, translate("Override MAC address")) + +o = section:taboption("advanced", Value, "mtu", translate("Override MTU")) +o.placeholder = "1500" +o.datatype = "max(9200)" diff --git a/protocols/luci-proto-ipv6/luasrc/model/network/proto_4x6.lua b/protocols/luci-proto-ipv6/luasrc/model/network/proto_4x6.lua new file mode 100644 index 000000000..91adfa944 --- /dev/null +++ b/protocols/luci-proto-ipv6/luasrc/model/network/proto_4x6.lua @@ -0,0 +1,65 @@ +--[[ +LuCI - Network model - 6to4, 6in4 & 6rd protocol extensions + +Copyright 2011 Jo-Philipp Wich <xm@subsignal.org> +Copyright 2013 Steven Barth <steven@midlink.org> + +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 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +]]-- + +local netmod = luci.model.network + +local _, p +for _, p in ipairs({"dslite"}) do + + local proto = netmod:register_protocol(p) + + function proto.get_i18n(self) + if p == "dslite" then + return luci.i18n.translate("Dual-Stack Lite (RFC6333)") + end + end + + function proto.ifname(self) + return p .. "-" .. self.sid + end + + function proto.opkg_package(self) + if p == "dslite" then + return "ds-lite" + end + end + + function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/" .. p .. ".sh") + end + + function proto.is_floating(self) + return true + end + + function proto.is_virtual(self) + return true + end + + function proto.get_interfaces(self) + return nil + end + + function proto.contains_interface(self, ifname) + return (netmod:ifnameof(ifc) == self:ifname()) + end + + netmod:register_pattern_virtual("^%s-%%w" % p) +end diff --git a/protocols/luci-proto-ipv6/luasrc/model/network/proto_6x4.lua b/protocols/luci-proto-ipv6/luasrc/model/network/proto_6x4.lua new file mode 100644 index 000000000..b800b0b54 --- /dev/null +++ b/protocols/luci-proto-ipv6/luasrc/model/network/proto_6x4.lua @@ -0,0 +1,66 @@ +--[[ +LuCI - Network model - 6to4, 6in4 & 6rd protocol extensions + +Copyright 2011 Jo-Philipp Wich <xm@subsignal.org> + +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 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +]]-- + +local netmod = luci.model.network + +local _, p +for _, p in ipairs({"6in4", "6to4", "6rd"}) do + + local proto = netmod:register_protocol(p) + + function proto.get_i18n(self) + if p == "6in4" then + return luci.i18n.translate("IPv6-in-IPv4 (RFC4213)") + elseif p == "6to4" then + return luci.i18n.translate("IPv6-over-IPv4 (6to4)") + elseif p == "6rd" then + return luci.i18n.translate("IPv6-over-IPv4 (6rd)") + end + end + + function proto.ifname(self) + return p .. "-" .. self.sid + end + + function proto.opkg_package(self) + return p + end + + function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/" .. p .. ".sh") + end + + function proto.is_floating(self) + return true + end + + function proto.is_virtual(self) + return true + end + + function proto.get_interfaces(self) + return nil + end + + function proto.contains_interface(self, ifname) + return (netmod:ifnameof(ifc) == self:ifname()) + end + + netmod:register_pattern_virtual("^%s-%%w" % p) +end diff --git a/protocols/luci-proto-ipv6/luasrc/model/network/proto_dhcpv6.lua b/protocols/luci-proto-ipv6/luasrc/model/network/proto_dhcpv6.lua new file mode 100644 index 000000000..59463d18a --- /dev/null +++ b/protocols/luci-proto-ipv6/luasrc/model/network/proto_dhcpv6.lua @@ -0,0 +1,32 @@ +--[[ +LuCI - Network model - dhcpv6 protocol extension + +Copyright 2013 Jo-Philipp Wich <xm@subsignal.org> + +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 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +]]-- + +local proto = luci.model.network:register_protocol("dhcpv6") + +function proto.get_i18n(self) + return luci.i18n.translate("DHCPv6 client") +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/dhcpv6.sh") +end + +function proto.opkg_package(self) + return "odhcp6c" +end diff --git a/protocols/luci-proto-ipv6/luasrc/model/network/proto_hnet.lua b/protocols/luci-proto-ipv6/luasrc/model/network/proto_hnet.lua new file mode 100644 index 000000000..d3e094f20 --- /dev/null +++ b/protocols/luci-proto-ipv6/luasrc/model/network/proto_hnet.lua @@ -0,0 +1,32 @@ +--[[ +LuCI - Network model - homenet protocol extension + +Copyright 2014 Steven Barth <steven@midlink.org> + +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 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +]]-- + +local proto = luci.model.network:register_protocol("hnet") + +function proto.get_i18n(self) + return luci.i18n.translate("Automatic Homenet (HNCP)") +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/hnet.sh") +end + +function proto.opkg_package(self) + return "hnetd" +end |