From ff4c167e93eac3ccce3e550b38eb7f67ddc1fd71 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Thu, 23 May 2013 10:14:04 +0000 Subject: [PATCH] Add DS-Lite support --- .../model/cbi/admin_network/proto_dslite.lua | 62 +++++++++++++++++++++ protocols/ipv6/luasrc/model/network/proto_4x6.lua | 65 ++++++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 protocols/ipv6/luasrc/model/cbi/admin_network/proto_dslite.lua create mode 100644 protocols/ipv6/luasrc/model/network/proto_4x6.lua diff --git a/protocols/ipv6/luasrc/model/cbi/admin_network/proto_dslite.lua b/protocols/ipv6/luasrc/model/cbi/admin_network/proto_dslite.lua new file mode 100644 index 000000000..2d9e258c3 --- /dev/null +++ b/protocols/ipv6/luasrc/model/cbi/admin_network/proto_dslite.lua @@ -0,0 +1,62 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2011 Jo-Philipp Wich +Copyright 2013 Steven Barth + +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/ipv6/luasrc/model/network/proto_4x6.lua b/protocols/ipv6/luasrc/model/network/proto_4x6.lua new file mode 100644 index 000000000..91adfa944 --- /dev/null +++ b/protocols/ipv6/luasrc/model/network/proto_4x6.lua @@ -0,0 +1,65 @@ +--[[ +LuCI - Network model - 6to4, 6in4 & 6rd protocol extensions + +Copyright 2011 Jo-Philipp Wich +Copyright 2013 Steven Barth + +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 -- 2.11.0