From 2e1ab6abaecbd2bde54a4161578dcbe219213921 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C4=9Bt=C3=ADk?= Date: Fri, 3 Apr 2020 19:11:53 +0200 Subject: [PATCH 1/4] luci-proto-gre: Protocol extension for GRE tunnels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I'm running several GRE tunnels to different locations and the option to see and to configure GRE tunnels in LuCI was not crucial but nice to have. Signed-off-by: Jan Bětík --- protocols/luci-proto-gre/Makefile | 21 ++++ .../luci-static/resources/protocol/gre.js | 96 ++++++++++++++++ .../luci-static/resources/protocol/gretap.js | 101 +++++++++++++++++ .../luci-static/resources/protocol/grev6.js | 98 +++++++++++++++++ .../resources/protocol/grev6tap.js | 103 ++++++++++++++++++ 5 files changed, 419 insertions(+) create mode 100644 protocols/luci-proto-gre/Makefile create mode 100644 protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js create mode 100644 protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js create mode 100644 protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js create mode 100644 protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js diff --git a/protocols/luci-proto-gre/Makefile b/protocols/luci-proto-gre/Makefile new file mode 100644 index 0000000000..0b0fa541cb --- /dev/null +++ b/protocols/luci-proto-gre/Makefile @@ -0,0 +1,21 @@ +# +# Based on luci-proto-ipip. +# Credited author of luci-proto-ipip is Roger Pueyo Centelles +# Copyright 2016 Roger Pueyo Centelles +# +# Modified by Jan Betik +# Copyright 2020 Jan Betik +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for GRE tunnels (RFC2784) +LUCI_DEPENDS:=+gre + +PKG_MAINTAINER:=Jan Betik + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js new file mode 100644 index 0000000000..e431bccd76 --- /dev/null +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js @@ -0,0 +1,96 @@ +'use strict'; +'require form'; +'require network'; +'require tools.widgets as widgets'; + +network.registerPatternVirtual(/^gre4-.+$/); + +return network.registerProtocol('gre', { + getI18n: function() { + return _('GRE tunnel over IPv4'); + }, + + getIfname: function() { + return this._ubus('l3_device') || 'gre4-%s'.format(this.sid); + }, + + getOpkgPackage: function() { + return 'gre'; + }, + + 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; + + // -- general --------------------------------------------------------------------- + + 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")'; + + // -- advanced --------------------------------------------------------------------- + + o = s.taboption('advanced', 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('advanced', form.Value, 'mtu', _("Override MTU"), _("Specify an MTU (Maximum Transmission Unit) other than the default (1280 bytes) (optional).")); + o.optional = true; + o.placeholder = 1280; + o.datatype = 'range(68, 9200)'; + + o = s.taboption('advanced', form.Value, 'ttl', _("Override TTL"), _("Specify a TTL (Time to Live) for the encapsulating packet other than the default (64) (optional).")); + o.optional = true; + o.placeholder = 64; + o.datatype = 'min(1)'; + + o = s.taboption('advanced', form.Value, 'tos', _('Override TOS'), _("Specify a TOS (Type of Service). Can be either inherit (the outer header inherits the value of the inner header) or an hexadecimal value starting with 0x (optional).")); + o.optional = true; + o.validate = function(section_id, value) { + if (value.length > 0 && !value.match(/^0x[a-fA-F0-9]{1,2}$/) && !value.match(/^inherit$/i)) + return _('Invalid value'); + + return true; + }; + + o = s.taboption('advanced', form.Flag, 'df', _("Don't Fragment"), _("Enable the DF (Don't Fragment) flag of the encapsulating packets.")); + o.default = o.enabled; + + o = s.taboption('advanced', form.Flag, 'nohostroute', _("No host route"), _("Do not create host route to peer (optional).")); + o.optional = true; + + o = s.taboption('advanced', form.Value, 'ikey', _("Incoming key"), _("Key for incoming packets (optional).")); + o.optional = true; + o.datatype = 'integer'; + + o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optinal).")); + o.optional = true; + o.datatype = 'integer'; + + s.taboption('advanced', form.Flag, 'icsum', _("Incoming checksum"), _("Require incoming checksum (optional).")); + s.taboption('advanced', form.Flag, 'ocsum', _("Outgoing checksum"), _("Compute outgoing checksum (optional).")); + s.taboption('advanced', form.Flag, 'iseqno', _("Incoming serialization"), _("Require incoming packets serialization (optional).")); + s.taboption('advanced', form.Flag, 'oseqno', _("Outgoing serialization"), _("Perform outgoing packets serialization (optional).")); + + } +}); diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js new file mode 100644 index 0000000000..426b5d98df --- /dev/null +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js @@ -0,0 +1,101 @@ +'use strict'; +'require form'; +'require network'; +'require tools.widgets as widgets'; + +network.registerPatternVirtual(/^gre4t-.+$/); + +return network.registerProtocol('gretap', { + getI18n: function() { + return _('GRETAP tunnel over IPv4'); + }, + + getIfname: function() { + return this._ubus('l3_device') || 'gre4t-%s'.format(this.sid); + }, + + getOpkgPackage: function() { + return 'gre'; + }, + + 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; + + // -- general --------------------------------------------------------------------- + + 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 = s.taboption('general', widgets.NetworkSelect, 'network', _("Network interface"), _("Logical network to which the tunnel will be added (bridged) (optional).")); + o.exclude = s.section; + o.nocreate = true; + o.optional = true; + + // -- advanced --------------------------------------------------------------------- + + o = s.taboption('advanced', 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('advanced', form.Value, 'mtu', _("Override MTU"), _("Specify an MTU (Maximum Transmission Unit) other than the default (1280 bytes) (optional).")); + o.optional = true; + o.placeholder = 1280; + o.datatype = 'range(68, 9200)'; + + o = s.taboption('advanced', form.Value, 'ttl', _("Override TTL"), _("Specify a TTL (Time to Live) for the encapsulating packet other than the default (64) (optional).")); + o.optional = true; + o.placeholder = 64; + o.datatype = 'min(1)'; + + o = s.taboption('advanced', form.Value, 'tos', _('Override TOS'), _("Specify a TOS (Type of Service). Can be either inherit (the outer header inherits the value of the inner header) or an hexadecimal value starting with 0x (optional).")); + o.optional = true; + o.validate = function(section_id, value) { + if (value.length > 0 && !value.match(/^0x[a-fA-F0-9]{1,2}$/) && !value.match(/^inherit$/i)) + return _('Invalid value'); + + return true; + }; + + o = s.taboption('advanced', form.Flag, 'df', _("Don't Fragment"), _("Enable the DF (Don't Fragment) flag of the encapsulating packets.")); + o.default = o.enabled; + + o = s.taboption('advanced', form.Flag, 'nohostroute', _("No host route"), _("Do not create host route to peer (optional).")); + o.optional = true; + + o = s.taboption('advanced', form.Value, 'ikey', _("Incoming key"), _("Key for incoming packets (optional).")); + o.optional = true; + o.datatype = 'integer'; + + o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optinal).")); + o.optional = true; + o.datatype = 'integer'; + + s.taboption('advanced', form.Flag, 'icsum', _("Incoming checksum"), _("Require incoming checksum (optional).")); + s.taboption('advanced', form.Flag, 'ocsum', _("Outgoing checksum"), _("Compute outgoing checksum (optional).")); + s.taboption('advanced', form.Flag, 'iseqno', _("Incoming serialization"), _("Require incoming packets serialization (optional).")); + s.taboption('advanced', form.Flag, 'oseqno', _("Outgoing serialization"), _("Perform outgoing packets serialization (optional).")); + + } +}); diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js new file mode 100644 index 0000000000..bd9a43e27b --- /dev/null +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js @@ -0,0 +1,98 @@ +'use strict'; +'require form'; +'require network'; +'require tools.widgets as widgets'; + +network.registerPatternVirtual(/^gre6-.+$/); + +return network.registerProtocol('grev6', { + getI18n: function() { + return _('GRE tunnel over IPv6'); + }, + + getIfname: function() { + return this._ubus('l3_device') || 'gre6-%s'.format(this.sid); + }, + + getOpkgPackage: function() { + return 'gre'; + }, + + 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; + + // -- general --------------------------------------------------------------------- + + o = s.taboption('general', form.Value, 'peer6addr', _("Remote IPv6 address or FQDN"), _("The IPv6 address or the fully-qualified domain name of the remote tunnel end.")); + o.optional = false; + o.datatype = 'or(hostname,ip6addr("nomask"))'; + + o = s.taboption('general', form.Value, 'ip6addr', _("Local IPv6 address"), _("The local IPv6 address over which the tunnel is created (optional).")); + o.optional = true; + o.datatype = 'ip6addr("nomask")'; + + o = s.taboption('general', widgets.NetworkSelect, 'weakif', _("Source interface"), _("Logical network from which to select the local endpoint if local IPv6 address is empty and no WAN IPv6 is available (optional).")); + o.exclude = s.section; + o.nocreate = true; + o.optional = true; + + // -- advanced --------------------------------------------------------------------- + + o = s.taboption('advanced', 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('advanced', form.Value, 'mtu', _("Override MTU"), _("Specify an MTU (Maximum Transmission Unit) other than the default (1280 bytes) (optional).")); + o.optional = true; + o.placeholder = 1280; + o.datatype = 'range(68, 9200)'; + + o = s.taboption('advanced', form.Value, 'ttl', _("Override TTL"), _("Specify a TTL (Time to Live) for the encapsulating packet other than the default (64) (optional).")); + o.optional = true; + o.placeholder = 64; + o.datatype = 'min(1)'; + + o = s.taboption('advanced', form.Value, 'tos', _('Traffic Class'), _("Specify a Traffic Class. Can be either inherit (the outer header inherits the value of the inner header) or an hexadecimal value starting with 0x (optional).")); + o.optional = true; + o.validate = function(section_id, value) { + if (value.length > 0 && !value.match(/^0x[a-fA-F0-9]{1,2}$/) && !value.match(/^inherit$/i)) + return _('Invalid value'); + + return true; + }; + + o = s.taboption('advanced', form.Flag, 'nohostroute', _("No host route"), _("Do not create host route to peer (optional).")); + o.optional = true; + + o = s.taboption('advanced', form.Value, 'ikey', _("Incoming key"), _("Key for incoming packets (optional).")); + o.optional = true; + o.datatype = 'integer'; + + o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optinal).")); + o.optional = true; + o.datatype = 'integer'; + + s.taboption('advanced', form.Flag, 'icsum', _("Incoming checksum"), _("Require incoming checksum (optional).")); + s.taboption('advanced', form.Flag, 'ocsum', _("Outgoing checksum"), _("Compute outgoing checksum (optional).")); + s.taboption('advanced', form.Flag, 'iseqno', _("Incoming serialization"), _("Require incoming packets serialization (optional).")); + s.taboption('advanced', form.Flag, 'oseqno', _("Outgoing serialization"), _("Perform outgoing packets serialization (optional).")); + + } +}); diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js new file mode 100644 index 0000000000..3b1a503719 --- /dev/null +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js @@ -0,0 +1,103 @@ +'use strict'; +'require form'; +'require network'; +'require tools.widgets as widgets'; + +network.registerPatternVirtual(/^gre6t-.+$/); + +return network.registerProtocol('grev6tap', { + getI18n: function() { + return _('GRETAP tunnel over IPv6'); + }, + + getIfname: function() { + return this._ubus('l3_device') || 'gre6t-%s'.format(this.sid); + }, + + getOpkgPackage: function() { + return 'gre'; + }, + + 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; + + // -- general --------------------------------------------------------------------- + + o = s.taboption('general', form.Value, 'peer6addr', _("Remote IPv6 address or FQDN"), _("The IPv6 address or the fully-qualified domain name of the remote tunnel end.")); + o.optional = false; + o.datatype = 'or(hostname,ip6addr("nomask"))'; + + o = s.taboption('general', form.Value, 'ip6addr', _("Local IPv6 address"), _("The local IPv6 address over which the tunnel is created (optional).")); + o.optional = true; + o.datatype = 'ip6addr("nomask")'; + + o = s.taboption('general', widgets.NetworkSelect, 'weakif', _("Source interface"), _("Logical network from which to select the local endpoint if local IPv6 address is empty and no WAN IPv6 is available (optional).")); + o.exclude = s.section; + o.nocreate = true; + o.optional = true; + + o = s.taboption('general', widgets.NetworkSelect, 'network', _("Network interface"), _("Logical network to which the tunnel will be added (bridged) (optional).")); + o.exclude = s.section; + o.nocreate = true; + o.optional = true; + + // -- advanced --------------------------------------------------------------------- + + o = s.taboption('advanced', 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('advanced', form.Value, 'mtu', _("Override MTU"), _("Specify an MTU (Maximum Transmission Unit) other than the default (1280 bytes) (optional).")); + o.optional = true; + o.placeholder = 1280; + o.datatype = 'range(68, 9200)'; + + o = s.taboption('advanced', form.Value, 'ttl', _("Override TTL"), _("Specify a TTL (Time to Live) for the encapsulating packet other than the default (64) (optional).")); + o.optional = true; + o.placeholder = 64; + o.datatype = 'min(1)'; + + o = s.taboption('advanced', form.Value, 'tos', _('Traffic Class'), _("Specify a Traffic Class. Can be either inherit (the outer header inherits the value of the inner header) or an hexadecimal value starting with 0x (optional).")); + o.optional = true; + o.validate = function(section_id, value) { + if (value.length > 0 && !value.match(/^0x[a-fA-F0-9]{1,2}$/) && !value.match(/^inherit$/i)) + return _('Invalid value'); + + return true; + }; + + o = s.taboption('advanced', form.Flag, 'nohostroute', _("No host route"), _("Do not create host route to peer (optional).")); + o.optional = true; + + o = s.taboption('advanced', form.Value, 'ikey', _("Incoming key"), _("Key for incoming packets (optional).")); + o.optional = true; + o.datatype = 'integer'; + + o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optinal).")); + o.optional = true; + o.datatype = 'integer'; + + s.taboption('advanced', form.Flag, 'icsum', _("Incoming checksum"), _("Require incoming checksum (optional).")); + s.taboption('advanced', form.Flag, 'ocsum', _("Outgoing checksum"), _("Compute outgoing checksum (optional).")); + s.taboption('advanced', form.Flag, 'iseqno', _("Incoming serialization"), _("Require incoming packets serialization (optional).")); + s.taboption('advanced', form.Flag, 'oseqno', _("Outgoing serialization"), _("Perform outgoing packets serialization (optional).")); + + } +}); From 0f3987d5add173c3135ea538e089d57747f422f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C4=9Bt=C3=ADk?= Date: Sat, 10 Oct 2020 23:48:17 +0200 Subject: [PATCH 2/4] luci-proto-gre: improvement of LuCI interface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Better handling of Type of Service (IPv4), Traffic Class (IPv6) values Optional value Local endpoint address is detected and pre-filled in the interface Signed-off-by: Jan Bětík --- .../htdocs/luci-static/resources/protocol/gre.js | 16 +++++++++++++--- .../luci-static/resources/protocol/gretap.js | 16 +++++++++++++--- .../luci-static/resources/protocol/grev6.js | 16 +++++++++++++--- .../luci-static/resources/protocol/grev6tap.js | 16 +++++++++++++--- 4 files changed, 52 insertions(+), 12 deletions(-) diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js index e431bccd76..f43e92019d 100644 --- a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js @@ -46,6 +46,13 @@ return network.registerProtocol('gre', { 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)); + }; // -- advanced --------------------------------------------------------------------- @@ -64,11 +71,11 @@ return network.registerProtocol('gre', { o.placeholder = 64; o.datatype = 'min(1)'; - o = s.taboption('advanced', form.Value, 'tos', _('Override TOS'), _("Specify a TOS (Type of Service). Can be either inherit (the outer header inherits the value of the inner header) or an hexadecimal value starting with 0x (optional).")); + o = s.taboption('advanced', form.Value, 'tos', _("Override TOS"), _("Specify a TOS (Type of Service). Can be inherit (the outer header inherits the value of the inner header), or an hexadecimal value 00..FF (optional).")); o.optional = true; o.validate = function(section_id, value) { - if (value.length > 0 && !value.match(/^0x[a-fA-F0-9]{1,2}$/) && !value.match(/^inherit$/i)) - return _('Invalid value'); + if (value.length > 0 && !value.match(/^[a-f0-9]{1,2}$/i) && !value.match(/^inherit$/i)) + return _("Invalid TOS value, expected 00..FF or inherit"); return true; }; @@ -79,6 +86,9 @@ return network.registerProtocol('gre', { o = s.taboption('advanced', form.Flag, 'nohostroute', _("No host route"), _("Do not create host route to peer (optional).")); o.optional = true; + o = s.taboption('advanced', form.Flag, 'multicast', _("Multicast"), _("Enable support for multicast traffic (optional).")); + o.optional = true; + o = s.taboption('advanced', form.Value, 'ikey', _("Incoming key"), _("Key for incoming packets (optional).")); o.optional = true; o.datatype = 'integer'; diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js index 426b5d98df..bb61805bda 100644 --- a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js @@ -46,6 +46,13 @@ return network.registerProtocol('gretap', { 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', widgets.NetworkSelect, 'network', _("Network interface"), _("Logical network to which the tunnel will be added (bridged) (optional).")); o.exclude = s.section; @@ -69,11 +76,11 @@ return network.registerProtocol('gretap', { o.placeholder = 64; o.datatype = 'min(1)'; - o = s.taboption('advanced', form.Value, 'tos', _('Override TOS'), _("Specify a TOS (Type of Service). Can be either inherit (the outer header inherits the value of the inner header) or an hexadecimal value starting with 0x (optional).")); + o = s.taboption('advanced', form.Value, 'tos', _("Override TOS"), _("Specify a TOS (Type of Service). Can be inherit (the outer header inherits the value of the inner header) or an hexadecimal value 00..FF (optional).")); o.optional = true; o.validate = function(section_id, value) { - if (value.length > 0 && !value.match(/^0x[a-fA-F0-9]{1,2}$/) && !value.match(/^inherit$/i)) - return _('Invalid value'); + if (value.length > 0 && !value.match(/^[a-f0-9]{1,2}$/i) && !value.match(/^inherit$/i)) + return _("Invalid TOS value, expected 00..FF or inherit"); return true; }; @@ -84,6 +91,9 @@ return network.registerProtocol('gretap', { o = s.taboption('advanced', form.Flag, 'nohostroute', _("No host route"), _("Do not create host route to peer (optional).")); o.optional = true; + o = s.taboption('advanced', form.Flag, 'multicast', _("Multicast"), _("Enable support for multicast traffic (optional).")); + o.optional = true; + o = s.taboption('advanced', form.Value, 'ikey', _("Incoming key"), _("Key for incoming packets (optional).")); o.optional = true; o.datatype = 'integer'; diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js index bd9a43e27b..d8fb3d3377 100644 --- a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js @@ -46,6 +46,13 @@ return network.registerProtocol('grev6', { o = s.taboption('general', form.Value, 'ip6addr', _("Local IPv6 address"), _("The local IPv6 address over which the tunnel is created (optional).")); o.optional = true; o.datatype = 'ip6addr("nomask")'; + o.load = function(section_id) { + return network.getWAN6Networks().then(L.bind(function(nets) { + if (Array.isArray(nets) && nets.length) + this.placeholder = nets[0].getIP6Addr(); + return form.Value.prototype.load.apply(this, [section_id]); + }, this)); + }; o = s.taboption('general', widgets.NetworkSelect, 'weakif', _("Source interface"), _("Logical network from which to select the local endpoint if local IPv6 address is empty and no WAN IPv6 is available (optional).")); o.exclude = s.section; @@ -69,11 +76,11 @@ return network.registerProtocol('grev6', { o.placeholder = 64; o.datatype = 'min(1)'; - o = s.taboption('advanced', form.Value, 'tos', _('Traffic Class'), _("Specify a Traffic Class. Can be either inherit (the outer header inherits the value of the inner header) or an hexadecimal value starting with 0x (optional).")); + o = s.taboption('advanced', form.Value, 'tos', _("Traffic Class"), _("Specify a Traffic Class. Can be inherit (the outer header inherits the value of the inner header) or an hexadecimal value 00..FF (optional).")); o.optional = true; o.validate = function(section_id, value) { - if (value.length > 0 && !value.match(/^0x[a-fA-F0-9]{1,2}$/) && !value.match(/^inherit$/i)) - return _('Invalid value'); + if (value.length > 0 && !value.match(/^[a-f0-9]{1,2}$/i) && !value.match(/^inherit$/i))) + return _("Invalid Traffic Class value, expected 00..FF or inherit"); return true; }; @@ -81,6 +88,9 @@ return network.registerProtocol('grev6', { o = s.taboption('advanced', form.Flag, 'nohostroute', _("No host route"), _("Do not create host route to peer (optional).")); o.optional = true; + o = s.taboption('advanced', form.Flag, 'multicast', _("Multicast"), _("Enable support for multicast traffic (optional).")); + o.optional = true; + o = s.taboption('advanced', form.Value, 'ikey', _("Incoming key"), _("Key for incoming packets (optional).")); o.optional = true; o.datatype = 'integer'; diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js index 3b1a503719..bf3eead669 100644 --- a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js @@ -42,6 +42,13 @@ return network.registerProtocol('grev6tap', { o = s.taboption('general', form.Value, 'peer6addr', _("Remote IPv6 address or FQDN"), _("The IPv6 address or the fully-qualified domain name of the remote tunnel end.")); o.optional = false; o.datatype = 'or(hostname,ip6addr("nomask"))'; + o.load = function(section_id) { + return network.getWAN6Networks().then(L.bind(function(nets) { + if (Array.isArray(nets) && nets.length) + this.placeholder = nets[0].getIP6Addr(); + return form.Value.prototype.load.apply(this, [section_id]); + }, this)); + }; o = s.taboption('general', form.Value, 'ip6addr', _("Local IPv6 address"), _("The local IPv6 address over which the tunnel is created (optional).")); o.optional = true; @@ -74,11 +81,11 @@ return network.registerProtocol('grev6tap', { o.placeholder = 64; o.datatype = 'min(1)'; - o = s.taboption('advanced', form.Value, 'tos', _('Traffic Class'), _("Specify a Traffic Class. Can be either inherit (the outer header inherits the value of the inner header) or an hexadecimal value starting with 0x (optional).")); + o = s.taboption('advanced', form.Value, 'tos', _("Traffic Class"), _("Specify a Traffic Class. Can be inherit (the outer header inherits the value of the inner header) or an hexadecimal value 00..FF (optional).")); o.optional = true; o.validate = function(section_id, value) { - if (value.length > 0 && !value.match(/^0x[a-fA-F0-9]{1,2}$/) && !value.match(/^inherit$/i)) - return _('Invalid value'); + if (value.length > 0 && !value.match(/^[a-f0-9]{1,2}$/i) && !value.match(/^inherit$/i)) + return _("Invalid Traffic Class value, expected 00..FF or inherit"); return true; }; @@ -86,6 +93,9 @@ return network.registerProtocol('grev6tap', { o = s.taboption('advanced', form.Flag, 'nohostroute', _("No host route"), _("Do not create host route to peer (optional).")); o.optional = true; + o = s.taboption('advanced', form.Flag, 'multicast', _("Multicast"), _("Enable support for multicast traffic (optional).")); + o.optional = true; + o = s.taboption('advanced', form.Value, 'ikey', _("Incoming key"), _("Key for incoming packets (optional).")); o.optional = true; o.datatype = 'integer'; From 2201f77c270633fd7510823c1b2ecd1bb3b3b3f2 Mon Sep 17 00:00:00 2001 From: Chuanhong Guo Date: Thu, 5 Nov 2020 21:22:18 +0800 Subject: [PATCH 3/4] luci-proto-gre: remove extra parenthesis fix the following error: SyntaxError Unexpected token ')' in http://192.168.122.131/luci-static/resources/protocol/grev6.js:? at http://192.168.122.131/luci-static/resources/luci.js:22 at async Promise.all (index 4) at async Promise.all (index 5) Fixes: 2b7fd1292 ("luci-proto-gre: improvement of LuCI interface") Signed-off-by: Chuanhong Guo --- .../htdocs/luci-static/resources/protocol/grev6.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js index d8fb3d3377..f9a8f079a9 100644 --- a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js @@ -79,7 +79,7 @@ return network.registerProtocol('grev6', { o = s.taboption('advanced', form.Value, 'tos', _("Traffic Class"), _("Specify a Traffic Class. Can be inherit (the outer header inherits the value of the inner header) or an hexadecimal value 00..FF (optional).")); o.optional = true; o.validate = function(section_id, value) { - if (value.length > 0 && !value.match(/^[a-f0-9]{1,2}$/i) && !value.match(/^inherit$/i))) + if (value.length > 0 && !value.match(/^[a-f0-9]{1,2}$/i) && !value.match(/^inherit$/i)) return _("Invalid Traffic Class value, expected 00..FF or inherit"); return true; From 89c7b8ab0b04e99e1a28d930baca54fdfdb62d0f Mon Sep 17 00:00:00 2001 From: "Sergio E. Nemirowski" Date: Sun, 22 Nov 2020 18:29:24 +0300 Subject: [PATCH 4/4] luci-proto-gre: update i18n and fix typo Signed-off-by: Sergio E. Nemirowski Signed-off-by: Jordan Sokolic --- modules/luci-base/po/bg/base.po | 14 ++++++++++++++ modules/luci-base/po/ca/base.po | 14 ++++++++++++++ modules/luci-base/po/cs/base.po | 14 ++++++++++++++ modules/luci-base/po/de/base.po | 14 ++++++++++++++ modules/luci-base/po/el/base.po | 14 ++++++++++++++ modules/luci-base/po/en/base.po | 14 ++++++++++++++ modules/luci-base/po/es/base.po | 14 ++++++++++++++ modules/luci-base/po/fr/base.po | 14 ++++++++++++++ modules/luci-base/po/he/base.po | 14 ++++++++++++++ modules/luci-base/po/hi/base.po | 14 ++++++++++++++ modules/luci-base/po/hu/base.po | 14 ++++++++++++++ modules/luci-base/po/it/base.po | 14 ++++++++++++++ modules/luci-base/po/ja/base.po | 16 +++++++++++++++- modules/luci-base/po/ko/base.po | 14 ++++++++++++++ modules/luci-base/po/mr/base.po | 14 ++++++++++++++ modules/luci-base/po/ms/base.po | 14 ++++++++++++++ modules/luci-base/po/nb_NO/base.po | 14 ++++++++++++++ modules/luci-base/po/pl/base.po | 14 ++++++++++++++ modules/luci-base/po/pt/base.po | 14 ++++++++++++++ modules/luci-base/po/pt_BR/base.po | 14 ++++++++++++++ modules/luci-base/po/ro/base.po | 14 ++++++++++++++ modules/luci-base/po/ru/base.po | 14 ++++++++++++++ modules/luci-base/po/sk/base.po | 14 ++++++++++++++ modules/luci-base/po/sv/base.po | 14 ++++++++++++++ modules/luci-base/po/templates/base.pot | 14 ++++++++++++++ modules/luci-base/po/tr/base.po | 14 ++++++++++++++ modules/luci-base/po/uk/base.po | 14 ++++++++++++++ modules/luci-base/po/vi/base.po | 14 ++++++++++++++ modules/luci-base/po/zh_Hans/base.po | 14 ++++++++++++++ modules/luci-base/po/zh_Hant/base.po | 16 +++++++++++++++- .../htdocs/luci-static/resources/protocol/gre.js | 2 +- .../luci-static/resources/protocol/gretap.js | 2 +- .../luci-static/resources/protocol/grev6.js | 2 +- .../luci-static/resources/protocol/grev6tap.js | 2 +- 34 files changed, 426 insertions(+), 6 deletions(-) diff --git a/modules/luci-base/po/bg/base.po b/modules/luci-base/po/bg/base.po index 333f25dd7b..0377088c75 100644 --- a/modules/luci-base/po/bg/base.po +++ b/modules/luci-base/po/bg/base.po @@ -2759,6 +2759,20 @@ msgstr "" msgid "Key #%d" msgstr "" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "" diff --git a/modules/luci-base/po/ca/base.po b/modules/luci-base/po/ca/base.po index 33c782510d..bdb9db0994 100644 --- a/modules/luci-base/po/ca/base.po +++ b/modules/luci-base/po/ca/base.po @@ -2822,6 +2822,20 @@ msgstr "Clau" msgid "Key #%d" msgstr "Clau #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Mata" diff --git a/modules/luci-base/po/cs/base.po b/modules/luci-base/po/cs/base.po index 88966e2beb..5a294543c5 100644 --- a/modules/luci-base/po/cs/base.po +++ b/modules/luci-base/po/cs/base.po @@ -2874,6 +2874,20 @@ msgstr "Klíč" msgid "Key #%d" msgstr "Klíč #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Zabít" diff --git a/modules/luci-base/po/de/base.po b/modules/luci-base/po/de/base.po index fe3117f918..ae3607a7db 100644 --- a/modules/luci-base/po/de/base.po +++ b/modules/luci-base/po/de/base.po @@ -2907,6 +2907,20 @@ msgstr "Schlüssel" msgid "Key #%d" msgstr "Schlüssel Nr. %d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "Schlüssel für eingehende Pakete (optional)." + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "Schlüssel für ausgehende Pakete (optional)." + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Töten" diff --git a/modules/luci-base/po/el/base.po b/modules/luci-base/po/el/base.po index 007b3a7dde..012ec6ada2 100644 --- a/modules/luci-base/po/el/base.po +++ b/modules/luci-base/po/el/base.po @@ -2839,6 +2839,20 @@ msgstr "Κλειδί" msgid "Key #%d" msgstr "Κλειδί #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Σκότωμα" diff --git a/modules/luci-base/po/en/base.po b/modules/luci-base/po/en/base.po index 05db039b2d..ae4e345c40 100644 --- a/modules/luci-base/po/en/base.po +++ b/modules/luci-base/po/en/base.po @@ -2810,6 +2810,20 @@ msgstr "Key" msgid "Key #%d" msgstr "" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Kill" diff --git a/modules/luci-base/po/es/base.po b/modules/luci-base/po/es/base.po index 609be2f30a..462aab5570 100644 --- a/modules/luci-base/po/es/base.po +++ b/modules/luci-base/po/es/base.po @@ -2902,6 +2902,20 @@ msgstr "Clave" msgid "Key #%d" msgstr "Clave #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "Clave para paquetes entrantes (opcional)." + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "Clave para paquetes salientes (opcional)." + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Matar" diff --git a/modules/luci-base/po/fr/base.po b/modules/luci-base/po/fr/base.po index 598fd9b9f8..5e9381db35 100644 --- a/modules/luci-base/po/fr/base.po +++ b/modules/luci-base/po/fr/base.po @@ -2919,6 +2919,20 @@ msgstr "Clé" msgid "Key #%d" msgstr "Clé n° %d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "Clé pour les paquets entrants (optionnel)." + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "Clé pour les paquets sortants (optionnel)." + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Forcer l'arrêt" diff --git a/modules/luci-base/po/he/base.po b/modules/luci-base/po/he/base.po index d380999651..e0633e572c 100644 --- a/modules/luci-base/po/he/base.po +++ b/modules/luci-base/po/he/base.po @@ -2784,6 +2784,20 @@ msgstr "" msgid "Key #%d" msgstr "" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "" diff --git a/modules/luci-base/po/hi/base.po b/modules/luci-base/po/hi/base.po index 258694cd4f..bd3af305af 100644 --- a/modules/luci-base/po/hi/base.po +++ b/modules/luci-base/po/hi/base.po @@ -2761,6 +2761,20 @@ msgstr "" msgid "Key #%d" msgstr "" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "" diff --git a/modules/luci-base/po/hu/base.po b/modules/luci-base/po/hu/base.po index 77f94941b4..df9adab724 100644 --- a/modules/luci-base/po/hu/base.po +++ b/modules/luci-base/po/hu/base.po @@ -2905,6 +2905,20 @@ msgstr "Kulcs" msgid "Key #%d" msgstr "%d. kulcs" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Kilövés" diff --git a/modules/luci-base/po/it/base.po b/modules/luci-base/po/it/base.po index ba5ddfbf3b..923e972771 100644 --- a/modules/luci-base/po/it/base.po +++ b/modules/luci-base/po/it/base.po @@ -2842,6 +2842,20 @@ msgstr "Chiave" msgid "Key #%d" msgstr "Chiave #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Uccidi" diff --git a/modules/luci-base/po/ja/base.po b/modules/luci-base/po/ja/base.po index df8a155901..14202fe3b3 100644 --- a/modules/luci-base/po/ja/base.po +++ b/modules/luci-base/po/ja/base.po @@ -2871,7 +2871,21 @@ msgstr "キー" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1385 #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1397 msgid "Key #%d" -msgstr "キー#%d" +msgstr "キー #%d" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" diff --git a/modules/luci-base/po/ko/base.po b/modules/luci-base/po/ko/base.po index f588f0966c..c0d15cc0f0 100644 --- a/modules/luci-base/po/ko/base.po +++ b/modules/luci-base/po/ko/base.po @@ -2815,6 +2815,20 @@ msgstr "" msgid "Key #%d" msgstr "" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "강제 종료" diff --git a/modules/luci-base/po/mr/base.po b/modules/luci-base/po/mr/base.po index a9e8de59d2..ed66c41227 100644 --- a/modules/luci-base/po/mr/base.po +++ b/modules/luci-base/po/mr/base.po @@ -2759,6 +2759,20 @@ msgstr "" msgid "Key #%d" msgstr "" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "" diff --git a/modules/luci-base/po/ms/base.po b/modules/luci-base/po/ms/base.po index 6115272cf0..a913250062 100644 --- a/modules/luci-base/po/ms/base.po +++ b/modules/luci-base/po/ms/base.po @@ -2780,6 +2780,20 @@ msgstr "Kunci" msgid "Key #%d" msgstr "" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Tamatkan" diff --git a/modules/luci-base/po/nb_NO/base.po b/modules/luci-base/po/nb_NO/base.po index f289c27cbf..8d4cb60e20 100644 --- a/modules/luci-base/po/nb_NO/base.po +++ b/modules/luci-base/po/nb_NO/base.po @@ -2818,6 +2818,20 @@ msgstr "Nøkkel" msgid "Key #%d" msgstr "Nøkkel #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Drep" diff --git a/modules/luci-base/po/pl/base.po b/modules/luci-base/po/pl/base.po index 303e25c130..a696e18d3a 100644 --- a/modules/luci-base/po/pl/base.po +++ b/modules/luci-base/po/pl/base.po @@ -2890,6 +2890,20 @@ msgstr "Klucz" msgid "Key #%d" msgstr "Klucz #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "Klucz do pakietów przychodzących (opcjonalnie)." + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "Klucz do pakietów wychodzących (opcjonalnie)." + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Zabij" diff --git a/modules/luci-base/po/pt/base.po b/modules/luci-base/po/pt/base.po index 9a4a153dc9..ba44057725 100644 --- a/modules/luci-base/po/pt/base.po +++ b/modules/luci-base/po/pt/base.po @@ -2908,6 +2908,20 @@ msgstr "Chave" msgid "Key #%d" msgstr "Chave #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "Chave para os pacotes da entrada (opcional)." + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "Chave para os pacotes da saída (optional)." + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Matar" diff --git a/modules/luci-base/po/pt_BR/base.po b/modules/luci-base/po/pt_BR/base.po index dd0cbcaa8e..96236e2dd5 100644 --- a/modules/luci-base/po/pt_BR/base.po +++ b/modules/luci-base/po/pt_BR/base.po @@ -2945,6 +2945,20 @@ msgstr "Chave" msgid "Key #%d" msgstr "Chave #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "Chave para os pacotes da entrada (opcional)." + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "Chave para os pacotes da saída (optional)." + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Matar" diff --git a/modules/luci-base/po/ro/base.po b/modules/luci-base/po/ro/base.po index 3b6a65fd24..ee1c3b2ec1 100644 --- a/modules/luci-base/po/ro/base.po +++ b/modules/luci-base/po/ro/base.po @@ -2793,6 +2793,20 @@ msgstr "" msgid "Key #%d" msgstr "" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Opreste" diff --git a/modules/luci-base/po/ru/base.po b/modules/luci-base/po/ru/base.po index 76bd2f08ee..3f204e15ac 100644 --- a/modules/luci-base/po/ru/base.po +++ b/modules/luci-base/po/ru/base.po @@ -2901,6 +2901,20 @@ msgstr "Пароль (ключ)" msgid "Key #%d" msgstr "Ключ №%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "Ключ для входящих пакетов (опционально)." + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "Ключ для исходящих пакетов (опционально)." + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Принудительно завершить" diff --git a/modules/luci-base/po/sk/base.po b/modules/luci-base/po/sk/base.po index d421080a48..870914c452 100644 --- a/modules/luci-base/po/sk/base.po +++ b/modules/luci-base/po/sk/base.po @@ -2803,6 +2803,20 @@ msgstr "Kľúč" msgid "Key #%d" msgstr "Kľúč #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Ukončiť" diff --git a/modules/luci-base/po/sv/base.po b/modules/luci-base/po/sv/base.po index b9ebe3655f..4c8eb16355 100644 --- a/modules/luci-base/po/sv/base.po +++ b/modules/luci-base/po/sv/base.po @@ -2781,6 +2781,20 @@ msgstr "Nyckel" msgid "Key #%d" msgstr "Nyckel #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Döda" diff --git a/modules/luci-base/po/templates/base.pot b/modules/luci-base/po/templates/base.pot index e0d90c1e7c..79b22dd5b9 100644 --- a/modules/luci-base/po/templates/base.pot +++ b/modules/luci-base/po/templates/base.pot @@ -2750,6 +2750,20 @@ msgstr "" msgid "Key #%d" msgstr "" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "" diff --git a/modules/luci-base/po/tr/base.po b/modules/luci-base/po/tr/base.po index 5be8d0d421..d1355ab724 100644 --- a/modules/luci-base/po/tr/base.po +++ b/modules/luci-base/po/tr/base.po @@ -2802,6 +2802,20 @@ msgstr "" msgid "Key #%d" msgstr "" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "" diff --git a/modules/luci-base/po/uk/base.po b/modules/luci-base/po/uk/base.po index 2710c60722..02585b6065 100644 --- a/modules/luci-base/po/uk/base.po +++ b/modules/luci-base/po/uk/base.po @@ -2920,6 +2920,20 @@ msgstr "Ключ" msgid "Key #%d" msgstr "Ключ #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Знищити" diff --git a/modules/luci-base/po/vi/base.po b/modules/luci-base/po/vi/base.po index 1bc8369574..18e5ecc315 100644 --- a/modules/luci-base/po/vi/base.po +++ b/modules/luci-base/po/vi/base.po @@ -2859,6 +2859,20 @@ msgstr "Phím " msgid "Key #%d" msgstr "Phím %d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "Hủy" diff --git a/modules/luci-base/po/zh_Hans/base.po b/modules/luci-base/po/zh_Hans/base.po index 2c72b2fcd3..5f245b373e 100644 --- a/modules/luci-base/po/zh_Hans/base.po +++ b/modules/luci-base/po/zh_Hans/base.po @@ -2811,6 +2811,20 @@ msgstr "密钥" msgid "Key #%d" msgstr "密码 #%d" +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" + #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" msgstr "强制关闭" diff --git a/modules/luci-base/po/zh_Hant/base.po b/modules/luci-base/po/zh_Hant/base.po index e8b477bffc..f2f3550cab 100644 --- a/modules/luci-base/po/zh_Hant/base.po +++ b/modules/luci-base/po/zh_Hant/base.po @@ -2814,7 +2814,21 @@ msgstr "金鑰" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1385 #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1397 msgid "Key #%d" -msgstr "金鑰 #%d" +msgstr "鑰匙 #%d" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:92 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:97 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:94 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:99 +msgid "Key for incoming packets (optional)." +msgstr "" + +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js:96 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js:101 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js:98 +#: protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js:103 +msgid "Key for outgoing packets (optional)." +msgstr "" #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:54 msgid "Kill" diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js index f43e92019d..2b24e59460 100644 --- a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gre.js @@ -93,7 +93,7 @@ return network.registerProtocol('gre', { o.optional = true; o.datatype = 'integer'; - o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optinal).")); + o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optional).")); o.optional = true; o.datatype = 'integer'; diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js index bb61805bda..e1e9c8c39c 100644 --- a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/gretap.js @@ -98,7 +98,7 @@ return network.registerProtocol('gretap', { o.optional = true; o.datatype = 'integer'; - o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optinal).")); + o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optional).")); o.optional = true; o.datatype = 'integer'; diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js index f9a8f079a9..6b029591b3 100644 --- a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6.js @@ -95,7 +95,7 @@ return network.registerProtocol('grev6', { o.optional = true; o.datatype = 'integer'; - o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optinal).")); + o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optional).")); o.optional = true; o.datatype = 'integer'; diff --git a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js index bf3eead669..6203f83557 100644 --- a/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js +++ b/protocols/luci-proto-gre/htdocs/luci-static/resources/protocol/grev6tap.js @@ -100,7 +100,7 @@ return network.registerProtocol('grev6tap', { o.optional = true; o.datatype = 'integer'; - o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optinal).")); + o = s.taboption('advanced', form.Value, 'okey', _("Outgoing key"), _("Key for outgoing packets (optional).")); o.optional = true; o.datatype = 'integer';