From 6be4bd886d238a6fec81ae72ed10758da2ee4e45 Mon Sep 17 00:00:00 2001 From: Jaymin Patel Date: Fri, 14 Oct 2022 19:12:34 +0530 Subject: [PATCH] luci-proto-vti: add vti protocol support Signed-off-by: Jaymin Patel --- protocols/luci-proto-vti/Makefile | 14 ++++ .../luci-static/resources/protocol/vti.js | 72 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 protocols/luci-proto-vti/Makefile create mode 100644 protocols/luci-proto-vti/htdocs/luci-static/resources/protocol/vti.js diff --git a/protocols/luci-proto-vti/Makefile b/protocols/luci-proto-vti/Makefile new file mode 100644 index 0000000000..6520eab48b --- /dev/null +++ b/protocols/luci-proto-vti/Makefile @@ -0,0 +1,14 @@ +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for VTI interfaces +LUCI_DEPENDS:=+vti + +PKG_MAINTAINER:=Jaymin Patel + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/protocols/luci-proto-vti/htdocs/luci-static/resources/protocol/vti.js b/protocols/luci-proto-vti/htdocs/luci-static/resources/protocol/vti.js new file mode 100644 index 0000000000..bbf037230a --- /dev/null +++ b/protocols/luci-proto-vti/htdocs/luci-static/resources/protocol/vti.js @@ -0,0 +1,72 @@ +'use strict'; +'require form'; +'require network'; +'require tools.widgets as widgets'; + +network.registerPatternVirtual(/^vti-.+$/); + +return network.registerProtocol('vti', { + getI18n: function() { + return _('VTI'); + }, + + getIfname: function() { + return this._ubus('l3_device') || 'vti-%s'.format(this.sid); + }, + + getOpkgPackage: function() { + return 'vti'; + }, + + isFloating: function() { + return true; + }, + + isVirtual: function() { + return true; + }, + + getDevices: function() { + return null; + }, + + containsDevice: function(ifname) { + return (network.getIfnameOf(ifname) == this.getIfname()); + }, + + renderFormOptions: function(s) { + var dev = this.getL3Device() || this.getDevice(), o; + + o = s.taboption('general', form.Value, 'peeraddr', _("Remote IPv4 address or FQDN"), _("The IPv4 address or the fully-qualified domain name of the remote tunnel end.")); + o.optional = false; + o.datatype = 'or(hostname,ip4addr("nomask"))'; + + o = s.taboption('general', form.Value, 'ipaddr', _("Local IPv4 address"), _("The local IPv4 address over which the tunnel is created (optional).")); + o.optional = true; + o.datatype = 'ip4addr("nomask")'; + o.load = function(section_id) { + return network.getWANNetworks().then(L.bind(function(nets) { + if (nets.length) + this.placeholder = nets[0].getIPAddr(); + return form.Value.prototype.load.apply(this, [section_id]); + }, this)); + }; + + o = s.taboption('general', form.Value, 'mtu', _('Override MTU')); + o.placeholder = dev ? (dev.getMTU() || '1280') : '1280'; + o.datatype = 'max(1500)'; + + o = s.taboption('general', widgets.NetworkSelect, 'tunlink', _("Bind interface"), _("Bind the tunnel to this interface (optional).")); + o.exclude = s.section; + o.nocreate = true; + o.optional = true; + + o = s.taboption('general', form.Value, 'ikey', _("Incoming key"), _("Key for incoming packets (optional).")); + o.optional = true; + o.datatype = 'uinteger'; + + o = s.taboption('general', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optional).")); + o.optional = true; + o.datatype = 'uinteger'; + } +}); -- 2.30.2