luci-proto-nebula: add nebula protocol support 6023/head
authorStan Grishin <stangri@melmac.ca>
Fri, 14 Oct 2022 12:02:56 +0000 (12:02 +0000)
committerStan Grishin <stangri@melmac.ca>
Fri, 14 Oct 2022 12:02:56 +0000 (12:02 +0000)
Signed-off-by: Stan Grishin <stangri@melmac.ca>
protocols/luci-proto-nebula/Makefile [new file with mode: 0644]
protocols/luci-proto-nebula/htdocs/luci-static/resources/protocol/nebula.js [new file with mode: 0644]

diff --git a/protocols/luci-proto-nebula/Makefile b/protocols/luci-proto-nebula/Makefile
new file mode 100644 (file)
index 0000000..7b29b54
--- /dev/null
@@ -0,0 +1,17 @@
+# Copyright 2021 Stan Grishin (stangri@melmac.ca)
+# This is free software, licensed under the GNU General Public License v3.
+
+include $(TOPDIR)/rules.mk
+
+PKG_LICENSE:=GPL-3.0-or-later
+PKG_MAINTAINER:=Stan Grishin <stangri@melmac.ca>
+PKG_VERSION:=1.6.1-1
+
+LUCI_TITLE:=Support for Nebula
+LUCI_DESCRIPTION:=Provides Web UI for Nebula protocol/interface.
+LUCI_DEPENDS:=+nebula +nebula-proto
+LUCI_PKGARCH:=all
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/protocols/luci-proto-nebula/htdocs/luci-static/resources/protocol/nebula.js b/protocols/luci-proto-nebula/htdocs/luci-static/resources/protocol/nebula.js
new file mode 100644 (file)
index 0000000..409416d
--- /dev/null
@@ -0,0 +1,50 @@
+'use strict';
+'require ui';
+'require uci';
+'require rpc';
+'require form';
+'require network';
+
+return network.registerProtocol('nebula', {
+       getI18n: function () {
+               return _('Nebula Network');
+       },
+
+       getIfname: function () {
+               return this._ubus('l3_device') || this.sid;
+       },
+
+       getOpkgPackage: function () {
+               return 'nebula';
+       },
+
+       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 o;
+
+               o = s.taboption('general', form.Value, 'config_file', _('Config File'), _('Required. Path to the .yml config file for this interface.'));
+               o.rmempty = false;
+
+       },
+
+       deleteConfiguration: function () {
+               uci.sections('network', 'nebula_%s'.format(this.sid), function (s) {
+                       uci.remove('network', s['.name']);
+               });
+       }
+});