luci-app-lldpd: Fixes and additions
authorPaul Donald <newtwen+github@gmail.com>
Sun, 21 Apr 2024 23:31:16 +0000 (01:31 +0200)
committerPaul Donald <newtwen+github@gmail.com>
Mon, 22 Apr 2024 21:55:47 +0000 (23:55 +0200)
Signed-off-by: Paul Donald <newtwen+github@gmail.com>
13 files changed:
applications/luci-app-lldpd/Makefile
applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js
applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd/details_hide.svg
applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd/details_show.svg
applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd/lldpd.css
applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js
applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js
applications/luci-app-lldpd/po/ru/lldpd.po
applications/luci-app-lldpd/po/templates/lldpd.pot
applications/luci-app-lldpd/root/etc/uci-defaults/40_luci-lldpd [deleted file]
applications/luci-app-lldpd/root/usr/share/rpcd/acl.d/luci-app-lldpd.json
applications/luci-app-lldpd/root/usr/share/rpcd/ucode/lldpd [deleted file]
applications/luci-app-lldpd/root/usr/share/rpcd/ucode/luci.lldpd [new file with mode: 0644]

index e5ab43ec4db4dd61ae1b8b27ee3f54d009faeab6..7007659d119e44f635e12ce438578526a01ed2c2 100644 (file)
@@ -1,6 +1,8 @@
 #
 # Copyright (c) 2018, Tano Systems. All Rights Reserved.
 # Anton Kikin <a.kikin@tano-systems.com>
+# Copyright (c) 2023-2024. All Rights Reserved.
+# Paul Donald <newtwen+github@gmail.com>
 #
 
 include $(TOPDIR)/rules.mk
index bc39ed50182a9ea918ec4c945baa573a9a93dd97..7b0121e548af574a88f7bb6079cfdbd6c6978a79 100644 (file)
@@ -1,6 +1,8 @@
 /*
  * Copyright (c) 2018-2020, Tano Systems LLC. All Rights Reserved.
  * Anton Kikin <a.kikin@tano-systems.com>
+ * Copyright (c) 2023-2024. All Rights Reserved.
+ * Paul Donald <newtwen+github@gmail.com>
  */
 
 'use strict';
  *     18   x                       x               x
  *     19   x                       x       x
  */
+
+const etitle = _('enable filter');
+const ptitle = _('keep only one protocol');
+const ntitle = _('keep only one neighbor');
+
 var cbiFilterSelect = form.Value.extend({
        __name__: 'CBI.LLDPD.FilterSelect',
 
@@ -98,9 +105,9 @@ var cbiFilterSelect = form.Value.extend({
 
                // Prepend description with table legend
                this.description = 
-                       '<ul><li>' + _('E &mdash; enable filter') + '</li>' +
-                           '<li>' + _('P &mdash; keep only one protocol') + '</li>' +
-                           '<li>' + _('N &mdash; keep only one neighbor') + '</li>' +
+                       '<ul><li>' + 'E &mdash; ' + etitle + '</li>' +
+                           '<li>' + 'P &mdash; ' + ptitle + '</li>' +
+                           '<li>' + 'N &mdash; ' + ntitle + '</li>' +
                        '</ul>' + this.description;
 
                var rendered = this.super('renderFrame', arguments);
@@ -112,7 +119,8 @@ var cbiFilterSelect = form.Value.extend({
        },
 
        renderWidget: function(section_id, option_index, cfgvalue) {
-               var selected = parseInt(cfgvalue) - 1;
+               //default value is "15" - rows are zero based
+               var selected = parseInt(cfgvalue) || 15;
 
                var tbody = [];
 
@@ -138,12 +146,12 @@ var cbiFilterSelect = form.Value.extend({
                                        })
                                ]),
                                E('td', {}, i),
-                               E('td', {}, renderFilterVal(i, 0)),
-                               E('td', {}, renderFilterVal(i, 1)),
-                               E('td', {}, renderFilterVal(i, 2)),
-                               E('td', {}, renderFilterVal(i, 3)),
-                               E('td', {}, renderFilterVal(i, 4)),
-                               E('td', {}, renderFilterVal(i, 5))
+                               E('td', {'title': etitle}, renderFilterVal(i, 0)),
+                               E('td', {'title': ptitle}, renderFilterVal(i, 1)),
+                               E('td', {'title': ntitle}, renderFilterVal(i, 2)),
+                               E('td', {'title': etitle}, renderFilterVal(i, 3)),
+                               E('td', {'title': ptitle}, renderFilterVal(i, 4)),
+                               E('td', {'title': ntitle}, renderFilterVal(i, 5))
                        ]));
                };
 
@@ -171,6 +179,29 @@ var cbiFilterSelect = form.Value.extend({
        },
 });
 
+var CBIMultiIOSelect = form.MultiValue.extend({
+       __name__: 'CBI.MultiIOSelect',
+
+       renderWidget: function(section_id, option_index, cfgvalue) {
+               var value = (cfgvalue != null) ? cfgvalue : this.default ? this.default : '',
+                   choices = this.transformChoices() ? this.transformChoices() : '';
+
+               var widget = new ui.Dropdown(L.toArray(value), choices, {
+                       id: this.cbid(section_id),
+                       sort: this.keylist,
+                       multiple: true,
+                       optional: true,
+                       display_items: 5,
+                       dropdown_items: -1,
+                       create: true,
+                       disabled: (this.readonly != null) ? this.readonly : this.map.readonly,
+                       validate: L.bind(this.validate, this, section_id),
+               });
+
+               return widget.render();
+       }
+});
+
 function init() {
        return new Promise(function(resolveFn, rejectFn) {
                var data = session.getLocalData('luci-app-lldpd');
@@ -189,5 +220,6 @@ function init() {
 
 return L.Class.extend({
        cbiFilterSelect: cbiFilterSelect,
+       CBIMultiIOSelect: CBIMultiIOSelect,
        init: init,
 });
index 7607870d5869a317b88a76bd0d999e6cca12cb6b..0b64b95c789393c1ca61a2aeb5308b6ba0c10512 100644 (file)
@@ -1,13 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg version="1.1" viewBox="0 0 18 11.12" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-<metadata>
-<rdf:RDF>
-<cc:Work rdf:about="">
-<dc:format>image/svg+xml</dc:format>
-<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-</cc:Work>
-</rdf:RDF>
-</metadata>
-<path d="m 9,11.12 9,-9 L 15.88,0 9,6.88 2.12,0 0,2.12 Z"/>
-<path d="m-9-12h36v36h-36z" fill="none"/>
-</svg>
+<?xml version="1.0"?>
+<svg width="18" height="11.12" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" version="1.1">
+ <metadata>image/svg+xml</metadata>
+
+ <g class="layer">
+  <title>Layer 1</title>
+  <path d="m9,11.12l9,-9l-2.12,-2.12l-6.88,6.88l-6.88,-6.88l-2.12,2.12l9,9z" fill="#ff7f00" id="svg_1"/>
+ </g>
+</svg>
\ No newline at end of file
index 867ef4b9989a6f5e6bdd73f72961ab280d1a2bf4..e51e19ddeeb2f656925f063178f2d44b20b5f231 100644 (file)
@@ -1,14 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-<metadata>
-<rdf:RDF>
-<cc:Work rdf:about="">
-<dc:format>image/svg+xml</dc:format>
-<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-<dc:title/>
-</cc:Work>
-</rdf:RDF>
-</metadata>
-<path d="m4.585 2.83 9.17 9.17-9.17 9.17 2.83 2.83 12-12-12-12z"/>
-<path d="m0-24h48v48h-48z" fill="none"/>
-</svg>
+<?xml version="1.0"?>
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" version="1.1">
+ <metadata>image/svg+xml</metadata>
+
+ <g class="layer">
+  <title>Layer 1</title>
+  <path d="m4.58,2.83l9.17,9.17l-9.17,9.17l2.83,2.83l12,-12l-12,-12l-2.83,2.83z" fill="#ff7f00" id="svg_1"/>
+ </g>
+</svg>
\ No newline at end of file
index 0f3c0e1b9899276e3c37a6c763a0fb05b1a4011e..5932e41536c1432a78f8b5c33eed83d90b8aa11e 100644 (file)
@@ -1,6 +1,8 @@
 /*
  * Copyright (c) 2020, Tano Systems LLC. All Rights Reserved.
  * Author: Anton Kikin <a.kikin@tano-systems.com>
+ * Copyright (c) 2023-2024. All Rights Reserved.
+ * Paul Donald <newtwen+github@gmail.com>
  */
 
 /*
@@ -9,7 +11,7 @@
 table.lldpd-filter td,
 table.lldpd-filter th {
        border: 1px solid #ccc !important;
-       padding: 2px 10px 2px 10px;
+       padding: 2px 10px;
        text-align: center;
 }
 
@@ -25,7 +27,7 @@ table.lldpd-filter tbody tr {
 }
 
 table.lldpd-filter tr.lldpd-filter-selected td {
-       background-color: #eeeeee;
+       background-color: #EEE;
 }
 
 /*
@@ -33,18 +35,12 @@ table.lldpd-filter tr.lldpd-filter-selected td {
  */
 .lldpd-params {
        column-count: 2;
-       -moz-column-count: 2;
-       -webkit-column-count: 2;
        column-gap: 24px;
-       -moz-column-gap: 24px;
-       -webkit-column-gap: 24px;
 }
 
 @media only screen and (max-width: 850px) {
        .lldpd-params {
                column-count: 1;
-               -moz-column-count: 1;
-               -webkit-column-count: 1;
        }
 }
 
@@ -53,9 +49,7 @@ table.lldpd-filter tr.lldpd-filter-selected td {
        grid-template-columns: 1fr auto;
        border-bottom: 1px solid #e6e6e6;
        padding: 0 8px;
-       -webkit-column-break-inside: avoid;
-       -moz-column-break-inside: avoid;
-       column-break-inside: avoid;
+/*     column-break-inside: avoid;*/
 }
 
 .td .lldpd-params > div:last-of-type {
@@ -79,8 +73,6 @@ table.lldpd-filter tr.lldpd-filter-selected td {
 
 .td .lldpd-params {
        column-count: 1;
-       -moz-column-count: 1;
-       -webkit-column-count: 1;
 }
 
 .td .lldpd-params > div {
@@ -101,8 +93,6 @@ table.lldpd-filter tr.lldpd-filter-selected td {
        display: inline-block;
        width: auto !important;
        width: fit-content !important;
-       width: -moz-fit-content !important;
-       width: -webkit-fit-content !important;
        box-shadow: 0 1px 3px 0 grey;
        padding: 0px 8px;
        border-radius: 5px;
index a4761f969e3775760436c865e5923e2ca33ca2cd..a8e32b42758c3c3ce5612ce47ab3adefed36b120 100644 (file)
@@ -1,12 +1,15 @@
 /*
  * Copyright (c) 2020 Tano Systems LLC. All Rights Reserved.
  * Author: Anton Kikin <a.kikin@tano-systems.com>
+ * Copyright (c) 2023-2024. All Rights Reserved.
+ * Paul Donald <newtwen+github@gmail.com>
  */
 
 'use strict';
 'require rpc';
 'require form';
 'require lldpd';
+'require network';
 'require uci';
 'require tools.widgets as widgets';
 
@@ -29,6 +32,25 @@ var callInitAction = rpc.declare({
        expect: { result: false }
 });
 
+var usage = _('See syntax <a %s>here</a>.').format('href=https://lldpd.github.io/usage.html target="_blank"');
+
+const validateioentries = function(section_id, value) {
+       if (value) {
+               const emsg = _('Cannot have both interface %s and its exclusion %s');
+               const a = value.split(' ');
+               const noex = a.filter(el=> !el.startsWith('!'));
+               const ex = a.filter(el=> el.startsWith('!') && !el.startsWith('!!'));
+               for (var i of noex) {
+                       for (var e of ex) {
+                               if ('!'+i == e){
+                                       return emsg.format(i, e);
+                               }
+                       }
+               }
+       }
+       return true;
+};
+
 return L.view.extend({
        __init__: function() {
                this.super('__init__', arguments);
@@ -46,7 +68,8 @@ return L.view.extend({
                return Promise.all([
                        callInitList('lldpd'),
                        lldpd.init(),
-                       uci.load('lldpd')
+                       uci.load('lldpd'),
+                       network.getDevices()
                ]);
        },
 
@@ -60,6 +83,7 @@ return L.view.extend({
        populateBasicOptions: function(s, tab, data) {
                var o;
                var serviceEnabled = data[0];
+               var net_devices = data[3];
 
                // Service enable/disable
                o = s.taboption(tab, form.Flag, 'enabled', _('Enable service'));
@@ -71,17 +95,17 @@ return L.view.extend({
                };
 
                o.write = function(section_id, value) {
-                       uci.set('mstpd', section_id, 'enabled', value);
+                       uci.set('lldpd', section_id, 'enabled', value);
 
                        if (value == '1') {
                                // Enable and start
-                               return callInitAction('lldpd', 'enable').then(function() {
+                               callInitAction('lldpd', 'enable').then(function() {
                                        return callInitAction('lldpd', 'start');
                                });
                        }
                        else {
                                // Stop and disable
-                               return callInitAction('lldpd', 'stop').then(function() {
+                               callInitAction('lldpd', 'stop').then(function() {
                                        return callInitAction('lldpd', 'disable');
                                });
                        }
@@ -90,71 +114,120 @@ return L.view.extend({
                // System description
                o = s.taboption(tab, form.Value, 'lldp_description',
                        _('System description'),
-                       _('Override system description with the provided description.'));
+                       _('Override %s.').format('<code>system description</code>'));
 
                o.placeholder = 'System description';
 
                // System hostname
                o = s.taboption(tab, form.Value, 'lldp_hostname',
                        _('System hostname'),
-                       _('Override system hostname with the provided value.'));
+                       _('Override %s.').format('<code>system hostname</code>'));
 
                o.placeholder = 'System hostname';
 
                // Host location
                o = s.taboption(tab, form.Value, 'lldp_location',
                        _('Host location'),
-                       _('Override the location of the host announced by lldp.'));
-
+                       _('Override the announced location of the host.') + '<br />' +
+                       usage);
+               // multiple syntaxes alert for location parameter
                o.placeholder = 'address country EU';
+               o.rmempty = true;
+               o.validate = function(section_id, value) {
+                       if (value) {
+                               if (!value.match(/^coordinate |^address |^elin /))
+                                       return _("Must start: 'coordinate ...', 'address ...' or 'elin ...'");
+                       }
+                       return true;
+               };
+
 
                // Platform
                o = s.taboption(tab, form.Value, 'lldp_platform',
                        _('System platform description'),
-                       _('Override the platform description with the provided value. ' +
-                         'The default description is the kernel name (Linux).'));
+                       _('Override %s.').format('<code>system platform</code>') + '<br />' + 
+                       _('The default description is the kernel name (Linux).'));
 
                o.placeholder = 'System platform description';
 
+               o = s.taboption(tab, form.Flag, 'lldp_capability_advertisements', _('System capability advertisements'));
+               o.default = '1'; //lldpd internal default
+
+               // Capabilities override
+               o = s.taboption(tab, form.MultiValue, 'lldp_syscapabilities',
+                       _('System capabilities'),
+                       _('Override %s.').format('<code>system capabilities</code>') + '<br />' + 
+                       _('The default is derived from kernel information.'));
+               o.depends({lldp_capability_advertisements: '1'});
+               o.value('bridge');
+               o.value('docsis');
+               o.value('other');
+               o.value('repeater');
+               o.value('router');
+               o.value('station');
+               o.value('telephone');
+               o.value('wlan');
+               o.cfgvalue = function(section_id) {
+                       return String(this.super('load', [section_id]) || this.default).split(',');
+               };
+               o.write = function(section_id, value) {
+                       return this.super('write', [ section_id, L.toArray(value).join(',') ]);
+               };
+
+               o = s.taboption(tab, form.Flag, 'lldp_mgmt_addr_advertisements', _('System management IO advertisements'));
+               o.default = '1'; //lldpd internal default
+
                // Management addresses of this system
-               o = s.taboption(tab, form.Value, 'lldp_mgmt_ip',
-                       _('Management addresses of this system'),
-                       _('Specify the management addresses of this system. ' +
-                         'If not specified, the first IPv4 and the first ' +
-                         'IPv6 are used. If an exact IP address is provided, it is used ' +
-                         'as a management address without any check. If you want to ' +
-                         'blacklist IPv6 addresses, you can use <code>!*:*</code>. ' +
-                         'See more details about available patterns ' +
-                         '<a href=\"https://vincentbernat.github.io/lldpd/usage.html\">here</a>.'));
-
-               o.placeholder = 'Management addresses';
+               // This value: lldpd.init handles as a single value, and needs a CSV for lldpd.conf: 'configure system ip management pattern'
+               o = s.taboption(tab, lldpd.CBIMultiIOSelect, 'lldp_mgmt_ip',
+                       _('System management IO'),
+                       _('Defaults to the first IPv4 and IPv6. ' +
+                         'If an exact IP address is provided, it is used ' +
+                         'as a management address without any check. To ' +
+                         'blacklist IPv6 addresses, use <code>!*:*</code>.') + '<br />' +
+                         usage);
+               o.placeholder = 'Addresses and interfaces';
+               o.depends({lldp_mgmt_addr_advertisements: '1'});
+               o.cfgvalue = function(section_id) {
+                       const opt = uci.get(this.config, section_id, this.option);
+                       return opt ? opt.split(',') : '';
+               };
+               net_devices.forEach(nd => {
+                       o.value(nd.getName());
+                       o.value('!'+nd.getName());
+                       nd.getIPAddrs().forEach(addr => o.value(addr.split('/')[0], E([], [addr.split('/')[0], ' (', E('strong', {}, nd.getName()), ')'])));
+                       nd.getIP6Addrs().forEach(addr => o.value(addr.split('/')[0], E([], [addr.split('/')[0], ' (', E('strong', {}, nd.getName()), ')'])));
+               });
+               o.value('!*:*');
+               o.validate = validateioentries;
+               o.write = function(section_id, value, sep) {
+                       return this.super('write', [ section_id, value.join(',') ]);
+               }
 
                // LLDP tx interval
                o = s.taboption(tab, form.Value, 'lldp_tx_interval',
                        _('Transmit delay'),
-                       _('The transmit delay is the delay between two ' +
+                       _('The delay between ' +
                          'transmissions of LLDP PDU. The default value ' +
-                         'is 30 seconds.'));
-
-               o.datatype = 'uinteger';
+                         'is 30 seconds.') + '<br />' +
+                       _('Suffix %s for millisecond values.').format('<code>ms</code>'));
                o.default = 30;
                o.placeholder = 30;
                o.rmempty = false;
 
                o.validate = function(section_id, value) {
-                       if (value != parseInt(value))
-                               return _('Must be a number');
-                       else if (value <= 0)
-                               return _('Transmit delay must be greater than 0');
+                       const pattern = /^(\d+)(?:ms)?$/;
+                       if (!value.match(pattern) || parseInt(value) <= 0)
+                               return _('Must be a greater than zero number optionally suffixed with "ms"');
                        return true;
                };
 
                // LLDP tx hold
                o = s.taboption(tab, form.Value, 'lldp_tx_hold',
                        _('Transmit hold value'),
-                       _('This value is used to compute the TTL of transmitted ' +
-                         'packets which is the product of this value and of the ' +
-                         'transmit delay. The default value is 4 and therefore ' +
+                       _('Determines the transmitted ' +
+                         'packet TTL (== this value * transmit delay). ' +
+                         'The default value is 4 &therefore; ' +
                          'the default TTL is 120 seconds.'));
 
                o.datatype = 'uinteger';
@@ -172,9 +245,9 @@ return L.view.extend({
 
                // Received-only mode (-r)
                o = s.taboption(tab, form.Flag, 'readonly_mode',
-                       _('Enable receive-only mode'),
-                       _('With this option, LLDPd will not send any frames. ' +
-                         'It will only listen to neighbors.'));
+                       _('Receive-only mode'),
+                       _("LLDPd won't send any frames; " +
+                         'only listen to neighbors.'));
 
                o.rmempty = false;
                o.optional = false;
@@ -190,34 +263,43 @@ return L.view.extend({
        /** @private */
        populateIfacesOptions: function(s, tab, data) {
                var o;
+               var net_devices = data[3];
 
                // Interfaces to listen on
-               o = s.taboption(tab, widgets.DeviceSelect, 'interface',
-                       _('Network interfaces'),
-                       _('Specify which interface to listen and send LLDPDU to. ' +
-                         'If no interfaces is specified, LLDPd will use all available physical interfaces.'));
-
-               o.nobridges = true;
-               o.rmempty   = true;
-               o.multiple  = true;
-               o.nocreate  = true;
-               o.noaliases = true;
-               o.networks  = null;
+               // This value: lldpd.init handles as a list value, and produces a CSV for lldpd.conf: 'configure system interface pattern'
+               o = s.taboption(tab, lldpd.CBIMultiIOSelect, 'interface',
+                       _('Network IO'),
+                       _('Specify which interface (not) to listen upon and send LLDPDU from. ' +
+                         'Absent any value, LLDPd uses all available physical interfaces.'));
+
+               o.value('*');
+               net_devices.forEach(nd => {
+                       o.value(nd.getName());
+                       o.value('!'+nd.getName());
+                       o.value('!!'+nd.getName());
+               });
+               o.value('!*:*');
+               o.validate = validateioentries;
 
                // ChassisID interfaces
-               o = s.taboption(tab, widgets.DeviceSelect, 'cid_interface',
-                       _('Network interfaces for chassis ID computing'),
-                       _('Specify which interfaces to use for computing chassis ID. ' +
-                         'If no interfaces is specified, all interfaces are considered. ' +
-                         'LLDPd will take the first MAC address from all the considered ' +
+               // This value: lldpd.init handles as a list value, and produces a CSV for the -C param
+               o = s.taboption(tab, lldpd.CBIMultiIOSelect, 'cid_interface',
+                       _('Network IO for chassis ID'),
+                       _('Specify which interfaces (not) to use for computing chassis ID. ' +
+                         'Absent any value, all interfaces are considered. ' +
+                         'LLDPd takes the first MAC address from all the considered ' +
                          'interfaces to compute the chassis ID.'));
 
-               o.nobridges = false;
-               o.rmempty   = true;
-               o.multiple  = true;
-               o.nocreate  = true;
-               o.noaliases = true;
-               o.networks  = null;
+               o.value('*');
+               o.value('!*');
+               net_devices.forEach(nd => {
+                       o.value(nd.getName());
+                       o.value('!'+nd.getName());
+                       o.value('!!'+nd.getName());
+               });
+               o.value('!*:*');
+               o.validate = validateioentries;
+
        },
 
        // -----------------------------------------------------------------------------------------
@@ -242,7 +324,7 @@ return L.view.extend({
                // o.placeholder = '/var/run/agentx.sock';
                // o.default = '';
 
-               // LLDP class
+               // LLDP-MED class
                o = s.taboption(tab, form.ListValue, 'lldp_class',
                        _('LLDP-MED device class'));
 
@@ -253,12 +335,55 @@ return L.view.extend({
 
                o.default = '4';
 
+               // LLDP-MED policy
+               o = s.taboption(tab, form.Value, 'lldp_policy',
+                       _('LLDP-MED policy'));
+               o.depends({lldp_class: '2'});
+               o.depends({lldp_class: '3'});
+
+               o.rmempty = true;
+               o.placeholder = 'application streaming-video';
+               o.value('application voice');
+               o.value('application voice unknown');
+               o.value('application voice-signaling');
+               o.value('application voice-signaling unknown');
+               o.value('application guest-voice');
+               o.value('application guest-voice unknown');
+               o.value('application guest-voice-signaling');
+               o.value('application guest-voice-signaling unknown');
+               o.value('application softphone-voice');
+               o.value('application softphone-voice unknown');
+               o.value('application video-conferencing');
+               o.value('application video-conferencing unknown');
+               o.value('application streaming-video');
+               o.value('application streaming-video unknown');
+               o.value('application video-signaling');
+               o.value('application video-signaling unknown');
+
+               o.validate = function(section_id, value) {
+                       if (value && !value.startsWith('application '))
+                               return _('Must start: application ...');
+                       return true;
+               };
+
+               // LLDP-MED fast-start
+               o = s.taboption(tab, form.Flag, 'lldpmed_fast_start',
+                       _('LLDP-MED fast-start'));
+
+               // LLDP-MED fast-start
+               o = s.taboption(tab, form.Value, 'lldpmed_fast_start_tx_interval',
+                       _('LLDP-MED fast-start tx-interval'));
+               o.depends({lldpmed_fast_start: '1'});
+               o.datatype = 'uinteger';
+               o.placeholder = '10';
+               o.rmempty = true;
+
                // LLDP-MED inventory TLV transmission (-i)
                o = s.taboption(tab, form.Flag, 'lldpmed_no_inventory',
                        _('Disable LLDP-MED inventory TLV transmission'),
                        _('LLDPd will still receive (and publish using SNMP if enabled) ' +
                          'those LLDP-MED TLV but will not send them. Use this option ' +
-                         'if you don\'t want to transmit sensible information like serial numbers.'));
+                         'if you do not want to transmit sensitive information like serial numbers.'));
 
                o.default = '0';
 
@@ -266,15 +391,15 @@ return L.view.extend({
                o = s.taboption(tab, form.Flag, 'lldp_no_version',
                        _('Disable advertising of kernel release, version and machine'),
                        _('Kernel name (ie: Linux) will still be shared, and Inventory ' +
-                         'software version will be set to \'Unknown\'.'));
+                         'software version will be set to %s.').format('<code>Unknown</code>'));
 
                o.default = '0';
 
                // Filter neighbors (-H)
                o = s.taboption(tab, lldpd.cbiFilterSelect, 'filter',
                        _('Specify the behaviour when detecting multiple neighbors'),
-                       _('The default filter is 15. For more details see \"FILTERING NEIGHBORS\" section ' +
-                         '<a href=\"https://vincentbernat.github.io/lldpd/usage.html\">here</a>.'));
+                       _('The default filter is 15. Refer to &quot;FILTERING NEIGHBORS&quot;.') + '<br />' +
+                       usage);
 
                o.default = 15;
 
@@ -291,11 +416,11 @@ return L.view.extend({
 
                // The destination MAC address used to send LLDPDU
                o = s.taboption(tab, form.ListValue, 'lldp_agenttype',
-                       _('The destination MAC address used to send LLDPDU'),
-                       _('The destination MAC address used to send LLDPDU allows an agent ' +
+                       _('LLDPDU destination MAC'),
+                       _('Allows an agent ' +
                          'to control the propagation of LLDPDUs. By default, the ' +
-                         '<code>01:80:c2:00:00:0e</code> MAC address is used and limit the propagation ' +
-                         'of the LLDPDU to the nearest bridge.'));
+                         'MAC address %s is used and limits the propagation ' +
+                         'of the LLDPDU to the nearest bridge.').format('<code>01:80:c2:00:00:0e</code>'));
 
                o.value('nearest-bridge',          '01:80:c2:00:00:0e (nearest-bridge)');
                o.value('nearest-nontpmr-bridge',  '01:80:c2:00:00:03 (nearest-nontpmr-bridge)');
@@ -331,10 +456,10 @@ return L.view.extend({
                o.rmempty = true;
 
                o = ss.taboption('lldp', form.Flag, 'force_lldp',
-                       _('Force to send LLDP packets'),
-                       _('Force to send LLDP packets even when there is no LLDP peer ' +
-                         'detected but there is a peer speaking another protocol detected. ' +
-                         'By default, LLDP packets are sent when there is a peer speaking ' +
+                       _('Force sending LLDP packets'),
+                       _('Even when there is no LLDP peer ' +
+                         'detected but there is a peer speaking another protocol detected.') + '<br />' +
+                       _('By default, LLDP packets are sent when there is a peer speaking ' +
                          'LLDP detected or when there is no peer at all.'));
 
                o.default = '0';
@@ -469,8 +594,8 @@ return L.view.extend({
                var m, s;
 
                m = new form.Map('lldpd', _('LLDPd Settings'),
-                       _('LLDPd is a implementation of IEEE 802.1ab ' +
-                         '(<abbr title=\"Link Layer Discovery Protocol\">LLDP</abbr>).') +
+                       _('LLDPd is an implementation of IEEE 802.1ab') + ' ' +
+                         '(<abbr title="Link Layer Discovery Protocol">LLDP</abbr>).' + ' ' +
                        _('On this page you may configure LLDPd parameters.'));
 
                s = m.section(form.TypedSection, 'lldpd');
index 96847e11c3ffd08ee177aba18c2a66bbcf1c6b3c..b3fa30b3cbe3e897464565d9ae796f4943769d38 100644 (file)
@@ -1,6 +1,8 @@
 /*
  * Copyright (c) 2020 Tano Systems. All Rights Reserved.
  * Author: Anton Kikin <a.kikin@tano-systems.com>
+ * Copyright (c) 2023-2024. All Rights Reserved.
+ * Paul Donald <newtwen+github@gmail.com>
  */
 
 'use strict';
@@ -11,7 +13,7 @@
 'require poll';
 
 var callLLDPStatus = rpc.declare({
-       object: 'lldpd',
+       object: 'luci.lldpd',
        method: 'getStatus',
        expect: {}
 });
@@ -21,7 +23,7 @@ var dataMap = {
                localChassis: null,
        },
        remote: {
-               neightbors: null,
+               neighbors: null,
                statistics: null,
        },
 };
index be605661cb6648e4bcfd6215b42267f6ea832ab2..32998ff31ab1972baa55aee69fe8a8f0db6d0682 100644 (file)
@@ -13,118 +13,157 @@ msgstr ""
 "POT-Creation-Date: 2018-05-23 18:25+0300\n"
 "X-Generator: Poedit 2.3\n"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:52
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:52
 msgid "Administrative Status"
 msgstr "Административное состояние"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:445
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:584
 msgid "Advanced Settings"
 msgstr "Дополнительные настройки"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:196
-#: htdocs/luci-static/resources/view/lldpd/status.js:207
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:196
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:207
 msgid "Age"
 msgstr "Возраст"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:57
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:57
 msgid "Ageout count"
 msgstr "Устарело"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:439
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:418
+msgid ""
+"Allows an agent to control the propagation of LLDPDUs. By default, the MAC "
+"address %s is used and limits the propagation of the LLDPDU to the nearest "
+"bridge."
+msgstr ""
+"Данный параметр позволяет агенту контролировать распространение LLDPDU. По "
+"умолчанию используется MAC-адрес %s и ограничивает распространение LLDPDU до "
+"ближайшего моста."
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:578
 msgid "Basic Settings"
 msgstr "Основные настройки"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:332
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:460
+msgid ""
+"By default, LLDP packets are sent when there is a peer speaking LLDP "
+"detected or when there is no peer at all."
+msgstr ""
+"По умолчанию пакеты LLDP отправляются, когда обнаружен сосед с поддержкой "
+"LLDP или когда вообще нет обнаруженных соседей."
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:471
 msgid "CDP"
 msgstr "CDP"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:342
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:481
 msgid "CDP version"
 msgstr "Версия протокола CDP"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:344
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:483
 msgid "CDPv1 and CDPv2"
 msgstr "CDPv1 и CDPv2"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:317
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:37
+msgid "Cannot have both interface %s and its exclusion %s"
+msgstr "Оба и интерфейс %s и его исключение %s нельзя"
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:317
 msgid "Capabilities"
 msgstr "Возможности"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:44
-#: htdocs/luci-static/resources/view/lldpd/status.js:63
-#: htdocs/luci-static/resources/view/lldpd/status.js:682
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:44
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:63
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:679
 msgid "Collecting data..."
 msgstr "Сбор данных..."
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:243
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:331
 msgid "Communication Device Endpoints (Class III)"
 msgstr "Communication Device Endpoints (класс III)"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:59
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:182
+msgid ""
+"Defaults to the first IPv4 and IPv6. If an exact IP address is provided, it "
+"is used as a management address without any check. To blacklist IPv6 "
+"addresses, use <code>!*:*</code>."
+msgstr ""
+"Если не указано, используется первый IPv4 и первый IPv6 адреса. Если указан "
+"конкретный IP-адрес, он будет использован как адрес управления без какой-"
+"либо проверки. Если вы хотите занести в черный список IPv6-адреса, вы можете "
+"использовать шаблон <code>!*:*</code>."
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:59
 msgid "Delete count"
 msgstr "Удалено"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:271
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:271
 msgid "Description"
 msgstr "Описание"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:250
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:226
+msgid ""
+"Determines the transmitted packet TTL (== this value * transmit delay). The "
+"default value is 4 &therefore; the default TTL is 120 seconds."
+msgstr ""
+"Это значение используется для вычисления TTL переданных пакетов, которое "
+"является произведением этого значения и задержки передачи. Значение по "
+"умолчанию равно 4. Соответственно, значение TTL по умолчанию составляет 120 "
+"секунд."
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:381
 msgid "Disable LLDP-MED inventory TLV transmission"
 msgstr "Отключить отправку инвентарной информации LLDP-MED TLV"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:150
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:390
+msgid "Disable advertising of kernel release, version and machine"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:150
 msgid "Disabled"
 msgstr "Отключено"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:688
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:685
 msgid "Discovered Neighbors"
 msgstr "Обнаруженные соседи"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:39
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:39
 msgid "Discovered chassis"
 msgstr "Обнаруженное шасси"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:40
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:40
 msgid "Discovered port"
 msgstr "Обнаруженный порт"
 
-#: htdocs/luci-static/resources/lldpd.js:117
-msgid "E &mdash; enable filter"
-msgstr "E &mdash; включить фильтр"
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:392
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:531
 msgid "EDP"
 msgstr "EDP"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:334
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:473
 msgid "Enable CDP"
 msgstr "Включить CDP"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:394
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:533
 msgid "Enable EDP"
 msgstr "Включить EDP"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:374
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:513
 msgid "Enable FDP"
 msgstr "Включить FDP"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:312
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:451
 msgid "Enable LLDP"
 msgstr "Включить LLDP"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:420
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:559
 msgid "Enable SONMP"
 msgstr "Включить SONMP"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:168
-msgid "Enable receive-only mode"
-msgstr "Включить режим «только приём»"
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:65
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:87
 msgid "Enable service"
 msgstr "Включить службу"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:335
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:474
 msgid ""
 "Enable the support of CDP protocol to deal with Cisco routers that do not "
 "speak LLDP"
@@ -132,7 +171,7 @@ msgstr ""
 "Включить поддержку протокола CDP для работы с маршрутизаторами Cisco, "
 "которые не имеют поддержки LLDP"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:395
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:534
 msgid ""
 "Enable the support of EDP protocol to deal with Extreme routers and switches "
 "that do not speak LLDP."
@@ -140,7 +179,7 @@ msgstr ""
 "Включить поддержку протокола EDP для работы с маршрутизаторами и "
 "коммутаторам Extreme, которые не имеют поддержки LLDP."
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:375
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:514
 msgid ""
 "Enable the support of FDP protocol to deal with Foundry routers that do not "
 "speak LLDP"
@@ -148,7 +187,7 @@ msgstr ""
 "Включить поддержку протокола FDP для работы с маршрутизаторами Foundry, "
 "которые не имеют поддержки LLDP"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:421
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:560
 msgid ""
 "Enable the support of SONMP protocol to deal with Nortel routers and "
 "switches that do not speak LLDP."
@@ -156,397 +195,396 @@ msgstr ""
 "Включить поддержку протокола SONMP для работы с маршрутизаторами и "
 "коммутаторами Nortel, которые не имеют поддержки LLDP."
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:372
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:458
+msgid ""
+"Even when there is no LLDP peer detected but there is a peer speaking "
+"another protocol detected."
+msgstr ""
+"Даже если соседей с поддержкой LLDP не обнаружено, но есть соседи, с "
+"поддержкой другого протокола."
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:511
 msgid "FDP"
 msgstr "FDP"
 
-#: htdocs/luci-static/resources/lldpd.js:170
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:160
 msgid "Filter"
 msgstr "Фильтр"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:267
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:406
 msgid "Force port ID subtype"
 msgstr "Использовать в качестве ID порта"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:358
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:497
 msgid "Force sending CDPv2 packets"
 msgstr "Форсировать отправку CDPv2 пакетов"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:318
-msgid "Force to send LLDP packets"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:457
+msgid "Force sending LLDP packets"
 msgstr "Форсировать отправку LLDP пакетов"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:319
-msgid ""
-"Force to send LLDP packets even when there is no LLDP peer detected but "
-"there is a peer speaking another protocol detected. By default, LLDP packets "
-"are sent when there is a peer speaking LLDP detected or when there is no "
-"peer at all."
-msgstr ""
-"Принудительно отправлять пакеты LLDP, даже если соседей с поддержкой LLDP не "
-"обнаружено, но есть соседи, с поддержкой другого протокола. По умолчанию "
-"пакеты LLDP отправляются, когда обнаружен сосед с поддержкой LLDP или когда "
-"вообще нет обнаруженных соседей."
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:241
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:329
 msgid "Generic Endpoint (Class I)"
 msgstr "Generic Endpoint (класс I)"
 
-#: root/usr/share/rpcd/acl.d/luci-app-lldpd.json:18
+#: applications/luci-app-lldpd/root/usr/share/rpcd/acl.d/luci-app-lldpd.json:18
 msgid "Grant access for LLDP configuration"
 msgstr "Предоставить доступ к конфигурации LLDP"
 
-#: root/usr/share/rpcd/acl.d/luci-app-lldpd.json:3
+#: applications/luci-app-lldpd/root/usr/share/rpcd/acl.d/luci-app-lldpd.json:3
 msgid "Grant access for LLDP status information"
 msgstr "Предоставить доступ к информации о состоянии LLDP"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:274
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:128
+msgid "Host location"
+msgstr "Местоположение хоста"
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:274
 msgid "ID"
 msgstr "ID"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:275
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:275
 msgid "ID type"
 msgstr "Тип ID"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:114
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:114
 msgid "IP address"
 msgstr "IP-адрес"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:229
-msgid ""
-"If the path to the socket is set, then LLDPd will enable an SNMP subagent "
-"using AgentX protocol. This allows you to get information about local system "
-"and remote systems through SNMP."
-msgstr ""
-"Если указан путь к сокету, то LLDPd включит SNMP агент, используя протокол "
-"AgentX. Это позволяет получать информацию о локальной системе и удаленных "
-"системах через SNMP."
-
-#: htdocs/luci-static/resources/lldpd.js:171
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:161
 msgid "Incoming"
 msgstr "Входящие"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:58
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:58
 msgid "Insert count"
 msgstr "Обнаружено"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:271
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:410
 msgid "Interface MAC address"
 msgstr "MAC-адрес интерфейса"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:689
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:686
 msgid "Interface Statistics"
 msgstr "Статистика интерфейсов"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:272
-#: htdocs/luci-static/resources/view/lldpd/status.js:110
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:411
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:110
 msgid "Interface name"
 msgstr "Имя интерфейса"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:310
-#: root/usr/share/luci/menu.d/luci-app-lldpd.json:3
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:391
+msgid ""
+"Kernel name (ie: Linux) will still be shared, and Inventory software version "
+"will be set to %s."
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:449
+#: applications/luci-app-lldpd/root/usr/share/luci/menu.d/luci-app-lldpd.json:3
 msgid "LLDP"
 msgstr "LLDP"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:672
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:669
 msgid "LLDP Status"
 msgstr "Состояние LLDP"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:239
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:327
 msgid "LLDP-MED device class"
 msgstr "Класс устройства LLDP-MED"
 
-#: htdocs/luci-static/resources/lldpd.js:19
-msgid "LLDPd LuCI application (version %s)"
-msgstr "LuCI приложение управления LLDPd (версия %s)"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:369
+msgid "LLDP-MED fast-start"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:373
+msgid "LLDP-MED fast-start tx-interval"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:338
+msgid "LLDP-MED policy"
+msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:455
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:417
+msgid "LLDPDU destination MAC"
+msgstr "MAC-адрес назначения, используемый для отправки LLDPDU."
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:594
 msgid "LLDPd Settings"
 msgstr "Настройки LLDPd"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:456
-msgid ""
-"LLDPd is a implementation of IEEE 802.1ab (<abbr title=\"Link Layer "
-"Discovery Protocol\">LLDP</abbr>)."
-msgstr ""
-"LLDPd это программная реализация стандарта IEEE 802.1ab (<abbr title=\"Link "
-"Layer Discovery Protocol\">LLDP</abbr>)."
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:595
+msgid "LLDPd is an implementation of IEEE 802.1ab"
+msgstr "LLDPd это программная реализация стандарта IEEE 802.1ab"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:251
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:382
 msgid ""
 "LLDPd will still receive (and publish using SNMP if enabled) those LLDP-MED "
-"TLV but will not send them. Use this option if you don't want to transmit "
-"sensible information like serial numbers."
+"TLV but will not send them. Use this option if you do not want to transmit "
+"sensitive information like serial numbers."
 msgstr ""
 "LLDPd будет по прежнему получать (и публиковать, используя SNMP, если он "
 "включен) информацию LLDP-MED TLV, но не будет отправлять. Используйте эту "
 "опцию, если вы не хотите передавать важную информацию, такую как серийные "
 "номера."
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:677
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:247
+msgid "LLDPd won't send any frames; only listen to neighbors."
+msgstr ""
+"С этой опцией LLDPd не будет отправлять какие-либо пакеты. LLDPd будет "
+"только прослушивать сеть для обнаружения соседей."
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:674
 msgid "Local Chassis"
 msgstr "Локальное шасси"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:112
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:112
 msgid "Local ID"
 msgstr "Локально заданный ID"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:37
-#: htdocs/luci-static/resources/view/lldpd/status.js:50
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:37
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:50
 msgid "Local interface"
 msgstr "Локальный интерфейс"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:108
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:108
 msgid "MAC address"
 msgstr "MAC-адрес"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:231
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:231
 msgid "MFS"
 msgstr "MFS"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:293
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:293
 msgid "Management IP(s)"
 msgstr "IP-адреса"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:114
-msgid "Management addresses of this system"
-msgstr "Адреса управления данной системы"
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:242
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:330
 msgid "Media Endpoint (Class II)"
 msgstr "Media Endpoint (класс II)"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:139
-#: htdocs/luci-static/resources/view/lldpd/config.js:160
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:219
+msgid "Must be a greater than zero number optionally suffixed with \"ms\""
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:238
 msgid "Must be a number"
 msgstr "Должно быть числом"
 
-#: htdocs/luci-static/resources/lldpd.js:119
-msgid "N &mdash; keep only one neighbor"
-msgstr "N &mdash; хранить только одного соседа"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:137
+msgid "Must start: 'coordinate ...', 'address ...' or 'elin ...'"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:363
+msgid "Must start: application ..."
+msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:195
-#: htdocs/luci-static/resources/view/lldpd/status.js:206
-#: htdocs/luci-static/resources/view/lldpd/status.js:268
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:195
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:206
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:268
 msgid "Name"
 msgstr "Имя"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:244
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:332
 msgid "Network Connectivity Device (Class IV)"
 msgstr "Network Connectivity Device (класс IV)"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:442
-msgid "Network Interfaces"
-msgstr "Сетевые интерфейсы"
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:189
-msgid "Network interfaces"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:269
+msgid "Network IO"
 msgstr "Сетевые интерфейсы"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:202
-msgid "Network interfaces for chassis ID computing"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:285
+msgid "Network IO for chassis ID"
 msgstr "Сетевые интерфейсы, используемые для вычисления ID шасси (chassis ID)"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:604
-#: htdocs/luci-static/resources/view/lldpd/status.js:661
-#: htdocs/luci-static/resources/view/lldpd/status.js:665
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:581
+msgid "Network Interfaces"
+msgstr "Сетевые интерфейсы"
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:601
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:658
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:662
 msgid "No data to display"
 msgstr "Нет данных для отображения"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:458
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:597
 msgid "On this page you may configure LLDPd parameters."
 msgstr "На данной странице можно настроить параметры LLDPd."
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:345
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:484
 msgid "Only CDPv2"
 msgstr "Только CDPv2"
 
-#: htdocs/luci-static/resources/lldpd.js:172
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:162
 msgid "Outgoing"
 msgstr "Исходящие"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:93
-msgid "Override system description with the provided description."
-msgstr "Переопределить описание системы заданным значением."
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:100
-msgid "Override system hostname with the provided value."
-msgstr "Переопределить имя системы заданным значением."
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:115
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:122
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:146
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:157
+msgid "Override %s."
+msgstr "Переопределить %s."
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:107
-msgid ""
-"Override the platform description with the provided value. The default "
-"description is the kernel name (Linux)."
-msgstr ""
-"Переопределить описание платформы заданным значением. По умолчанию "
-"используется имя используемого ядра (Linux)."
-
-#: htdocs/luci-static/resources/lldpd.js:118
-msgid "P &mdash; keep only one protocol"
-msgstr "P &mdash; хранить только один протокол"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:129
+msgid "Override the announced location of the host."
+msgstr "Переопределите объявленное местоположение хоста."
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:214
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:214
 msgid "Port ID"
 msgstr "ID порта"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:217
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:217
 msgid "Port ID type"
 msgstr "Тип ID порта"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:222
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:222
 msgid "Port description"
 msgstr "Описание порта"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:38
-#: htdocs/luci-static/resources/view/lldpd/status.js:51
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:38
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:51
 msgid "Protocol"
 msgstr "Протокол"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:448
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:587
 msgid "Protocols Support"
 msgstr "Поддержка протоколов"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:54
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:246
+msgid "Receive-only mode"
+msgstr "Режим «только приём»"
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:54
 msgid "Rx"
 msgstr "Rx"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:144
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:144
 msgid "Rx and Tx"
 msgstr "Rx и Tx"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:146
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:146
 msgid "Rx only"
 msgstr "Только Rx"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:56
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:56
 msgid "Rx unrecognized"
 msgstr "Rx (не распознано)"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:228
-msgid "SNMP agentX socket path"
-msgstr "Путь к сокету SNMP agentX"
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:418
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:557
 msgid "SONMP (NTDP, NDP, BNMP, BDP)"
 msgstr "SONMP (NTDP, NDP, BNMP, BDP)"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:351
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:33
+msgid "See syntax <a %s>here</a>."
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:490
 msgid "Send CDP packets even if no CDP peer detected"
 msgstr "Отправлять CDP пакеты даже если не обнаружено соседей с CDP протоколом"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:402
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:541
 msgid "Send EDP packets even if no EDP peer detected"
 msgstr "Отправлять EDP пакеты даже если не обнаружено соседей с EDP протоколом"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:382
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:521
 msgid "Send FDP packets even if no FDP peer detected"
 msgstr "Отправлять FDP пакеты даже если не обнаружено соседей с FDP протоколом"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:428
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:567
 msgid "Send SONMP packets even if no SONMP peer detected"
 msgstr ""
 "Отправлять SONMP пакеты даже если не обнаружено соседей с SONMP протоколом"
 
-#: root/usr/share/luci/menu.d/luci-app-lldpd.json:28
+#: applications/luci-app-lldpd/root/usr/share/luci/menu.d/luci-app-lldpd.json:28
 msgid "Settings"
 msgstr "Настройки"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:259
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:398
 msgid "Specify the behaviour when detecting multiple neighbors"
 msgstr "Поведение при обнаружении нескольких соседей"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:115
-msgid ""
-"Specify the management addresses of this system. If not specified, the first "
-"IPv4 and the first IPv6 are used. If an exact IP address is provided, it is "
-"used as a management address without any check. If you want to blacklist "
-"IPv6 addresses, you can use <code>!*:*</code>. See more details about "
-"available patterns <a href=\"https://vincentbernat.github.io/lldpd/usage.html"
-"\">here</a>."
-msgstr ""
-"Адреса управления данной системой. Если не указано, используется первый IPv4 "
-"и первый IPv6 адреса. Если указан конкретный IP-адрес, он будет использован "
-"как адрес управления без какой-либо проверки. Если вы хотите занести в "
-"черный список IPv6-адреса, вы можете использовать шаблон <code>! *: *</"
-"code>. Подробнее о доступных шаблонах читайте <a href=\"https://"
-"vincentbernat.github.io/lldpd/usage.html\">здесь</a>."
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:190
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:270
 msgid ""
-"Specify which interface to listen and send LLDPDU to. If no interfaces is "
-"specified, LLDPd will use all available physical interfaces."
+"Specify which interface (not) to listen upon and send LLDPDU from. Absent "
+"any value, LLDPd uses all available physical interfaces."
 msgstr ""
 "Укажите какие интерфейсы должны прослушивать и отправлять LLDPDU. Если "
 "интерфейсы не указаны, LLDPd будет использовать все доступные физические "
 "интерфейсы."
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:203
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:286
 msgid ""
-"Specify which interfaces to use for computing chassis ID. If no interfaces "
-"is specified, all interfaces are considered. LLDPd will take the first MAC "
-"address from all the considered interfaces to compute the chassis ID."
+"Specify which interfaces (not) to use for computing chassis ID. Absent any "
+"value, all interfaces are considered. LLDPd takes the first MAC address from "
+"all the considered interfaces to compute the chassis ID."
 msgstr ""
 "Укажите какие интерфейсы необходимо использовать для вычисления "
 "идентификатора шасси (chassis ID). Если интерфейсы не указаны, будут "
 "иcпользованы все интерфейсы. LLDPd получит первый MAC-адрес из всех "
 "доступных интерфейсов для вычисления ID шасси."
 
-#: root/usr/share/luci/menu.d/luci-app-lldpd.json:16
+#: applications/luci-app-lldpd/root/usr/share/luci/menu.d/luci-app-lldpd.json:16
 msgid "Status"
 msgstr "Состояние"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:92
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:211
+msgid "Suffix %s for millisecond values."
+msgstr "Прибавляй суффикс %s для значений миллисекунд."
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:156
+msgid "System capabilities"
+msgstr "Системные возможности"
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:151
+msgid "System capability advertisements"
+msgstr "Объявления системных возможност"
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:114
 msgid "System description"
 msgstr "Описание системы"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:99
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:121
 msgid "System hostname"
 msgstr "Имя системы"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:106
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:181
+msgid "System management IO"
+msgstr "Адреса управления данной системы"
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:175
+msgid "System management IO advertisements"
+msgstr "Объявления адресов управления данной системы"
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:145
 msgid "System platform description"
 msgstr "Описание платформы"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:226
-#: htdocs/luci-static/resources/view/lldpd/status.js:228
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:226
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:228
 msgid "TTL"
 msgstr "TTL"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:260
-msgid ""
-"The default filter is 15. For more details see \"FILTERING NEIGHBORS\" "
-"section <a href=\"https://vincentbernat.github.io/lldpd/usage.html\">here</"
-"a>."
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:147
+msgid "The default description is the kernel name (Linux)."
+msgstr "По умолчанию используется имя используемого ядра (Linux)."
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:399
+msgid "The default filter is 15. Refer to &quot;FILTERING NEIGHBORS&quot;."
 msgstr ""
 "По умолчанию используется фильтр 15. Более подробную информацию о данной "
-"опции можно посмотреть в разделе «FILTERING NEIGHBORS» <a href=\"https://"
-"vincentbernat.github.io/lldpd/usage.html\">здесь</a>."
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:278
-msgid "The destination MAC address used to send LLDPDU"
-msgstr "MAC-адрес назначения, используемый для отправки LLDPDU"
+"опции можно посмотреть в разделе «FILTERING NEIGHBORS»."
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:279
-msgid ""
-"The destination MAC address used to send LLDPDU allows an agent to control "
-"the propagation of LLDPDUs. By default, the <code>01:80:c2:00:00:0e</code> "
-"MAC address is used and limit the propagation of the LLDPDU to the nearest "
-"bridge."
-msgstr ""
-"MAC-адрес назначения, используемый для отправки LLDPDU. Данный параметр "
-"позволяет агенту контролировать распространение LLDPDU. По умолчанию "
-"используется MAC-адрес <code>01:80:c2:00:00:0e</code> и ограничивает "
-"распространение LLDPDU до ближайшего моста."
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:158
+msgid "The default is derived from kernel information."
+msgstr "Значение по умолчанию получено из информации о ядре."
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:128
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:208
 msgid ""
-"The transmit delay is the delay between two transmissions of LLDP PDU. The "
-"default value is 30 seconds."
+"The delay between transmissions of LLDP PDU. The default value is 30 seconds."
 msgstr ""
 "Задержка между двумя передачами LLDP PDU. Значение по умолчанию составляет "
 "30 секунд."
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:673
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:670
 msgid ""
 "This page allows you to see discovered LLDP neighbors, local interfaces "
 "statistics and local chassis information."
@@ -554,59 +592,36 @@ msgstr ""
 "На данной странице вы можете посмотреть таблицу обнаруженных соседей LLDP, "
 "статистику локальных интерфейсов и информацию о локальном шасси."
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:148
-msgid ""
-"This value is used to compute the TTL of transmitted packets which is the "
-"product of this value and of the transmit delay. The default value is 4 and "
-"therefore the default TTL is 120 seconds."
-msgstr ""
-"Это значение используется для вычисления TTL переданных пакетов, которое "
-"является произведением этого значения и задержки передачи. Значение по "
-"умолчанию равно 4. Соответственно, значение TTL по умолчанию составляет 120 "
-"секунд."
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:127
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:207
 msgid "Transmit delay"
 msgstr "Задержка отправки"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:141
-msgid "Transmit delay must be greater than 0"
-msgstr "Значение задержки отправки должно быть больше 0"
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:147
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:225
 msgid "Transmit hold value"
 msgstr "Значение «transmit hold»"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:162
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:240
 msgid "Transmit hold value must be greater than 0"
 msgstr "Значение «transmit hold» должно быть больше 0"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:53
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:53
 msgid "Tx"
 msgstr "Tx"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:55
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:55
 msgid "Tx discarded"
 msgstr "Tx (отброшено)"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:148
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:148
 msgid "Tx only"
 msgstr "Только Tx"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:152
-#: htdocs/luci-static/resources/view/lldpd/status.js:260
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:152
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:260
 msgid "Unknown"
 msgstr "Неизвестно"
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:169
-msgid ""
-"With this option, LLDPd will not send any frames. It will only listen to "
-"neighbors."
-msgstr ""
-"С этой опцией LLDPd не будет отправлять какие-либо пакеты. LLDPd будет "
-"только прослушивать сеть для обнаружения соседей."
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:268
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:407
 msgid ""
 "With this option, you can force the port identifier to be the interface name "
 "or the MAC address."
@@ -614,16 +629,24 @@ msgstr ""
 "Данная настройка позволяет принудительно использовать в качестве "
 "идентификатор порта имя интерфейса или MAC-адрес."
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:305
-#: htdocs/luci-static/resources/view/lldpd/status.js:314
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:305
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:314
 msgid "disabled"
 msgstr "выключено"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:305
-#: htdocs/luci-static/resources/view/lldpd/status.js:314
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:44
+msgid "enable filter"
+msgstr "включить фильтр"
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:305
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:314
 msgid "enabled"
 msgstr "включено"
 
-#: htdocs/luci-static/resources/lldpd.js:21
-msgid "© 2018–2021, Tano Systems LLC, Anton Kikin"
-msgstr "© 2018–2021, ООО «Тано Системс», Антон Кикин"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:46
+msgid "keep only one neighbor"
+msgstr "хранить только одного соседа"
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:45
+msgid "keep only one protocol"
+msgstr "хранить только один протокол"
index de98481c61ad53c10ffd9235c7530a0a6a73b120..e75159675adb05bc373d68f5cee13dc32f083a7b 100644 (file)
 msgid ""
 msgstr "Content-Type: text/plain; charset=UTF-8"
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:52
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:52
 msgid "Administrative Status"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:445
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:584
 msgid "Advanced Settings"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:196
-#: htdocs/luci-static/resources/view/lldpd/status.js:207
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:196
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:207
 msgid "Age"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:57
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:57
 msgid "Ageout count"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:439
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:418
+msgid ""
+"Allows an agent to control the propagation of LLDPDUs. By default, the MAC "
+"address %s is used and limits the propagation of the LLDPDU to the nearest "
+"bridge."
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:578
 msgid "Basic Settings"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:332
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:460
+msgid ""
+"By default, LLDP packets are sent when there is a peer speaking LLDP "
+"detected or when there is no peer at all."
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:471
 msgid "CDP"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:342
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:481
 msgid "CDP version"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:344
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:483
 msgid "CDPv1 and CDPv2"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:317
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:37
+msgid "Cannot have both interface %s and its exclusion %s"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:317
 msgid "Capabilities"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:44
-#: htdocs/luci-static/resources/view/lldpd/status.js:63
-#: htdocs/luci-static/resources/view/lldpd/status.js:682
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:44
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:63
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:679
 msgid "Collecting data..."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:243
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:331
 msgid "Communication Device Endpoints (Class III)"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:59
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:182
+msgid ""
+"Defaults to the first IPv4 and IPv6. If an exact IP address is provided, it "
+"is used as a management address without any check. To blacklist IPv6 "
+"addresses, use <code>!*:*</code>."
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:59
 msgid "Delete count"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:271
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:271
 msgid "Description"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:250
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:226
+msgid ""
+"Determines the transmitted packet TTL (== this value * transmit delay). The "
+"default value is 4 &therefore; the default TTL is 120 seconds."
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:381
 msgid "Disable LLDP-MED inventory TLV transmission"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:150
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:390
+msgid "Disable advertising of kernel release, version and machine"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:150
 msgid "Disabled"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:688
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:685
 msgid "Discovered Neighbors"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:39
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:39
 msgid "Discovered chassis"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:40
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:40
 msgid "Discovered port"
 msgstr ""
 
-#: htdocs/luci-static/resources/lldpd.js:117
-msgid "E &mdash; enable filter"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:392
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:531
 msgid "EDP"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:334
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:473
 msgid "Enable CDP"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:394
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:533
 msgid "Enable EDP"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:374
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:513
 msgid "Enable FDP"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:312
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:451
 msgid "Enable LLDP"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:420
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:559
 msgid "Enable SONMP"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:168
-msgid "Enable receive-only mode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:65
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:87
 msgid "Enable service"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:335
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:474
 msgid ""
 "Enable the support of CDP protocol to deal with Cisco routers that do not "
 "speak LLDP"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:395
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:534
 msgid ""
 "Enable the support of EDP protocol to deal with Extreme routers and switches "
 "that do not speak LLDP."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:375
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:514
 msgid ""
 "Enable the support of FDP protocol to deal with Foundry routers that do not "
 "speak LLDP"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:421
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:560
 msgid ""
 "Enable the support of SONMP protocol to deal with Nortel routers and "
 "switches that do not speak LLDP."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:372
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:458
+msgid ""
+"Even when there is no LLDP peer detected but there is a peer speaking "
+"another protocol detected."
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:511
 msgid "FDP"
 msgstr ""
 
-#: htdocs/luci-static/resources/lldpd.js:170
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:160
 msgid "Filter"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:267
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:406
 msgid "Force port ID subtype"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:358
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:497
 msgid "Force sending CDPv2 packets"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:318
-msgid "Force to send LLDP packets"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:319
-msgid ""
-"Force to send LLDP packets even when there is no LLDP peer detected but "
-"there is a peer speaking another protocol detected. By default, LLDP packets "
-"are sent when there is a peer speaking LLDP detected or when there is no "
-"peer at all."
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:457
+msgid "Force sending LLDP packets"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:241
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:329
 msgid "Generic Endpoint (Class I)"
 msgstr ""
 
-#: root/usr/share/rpcd/acl.d/luci-app-lldpd.json:18
+#: applications/luci-app-lldpd/root/usr/share/rpcd/acl.d/luci-app-lldpd.json:18
 msgid "Grant access for LLDP configuration"
 msgstr ""
 
-#: root/usr/share/rpcd/acl.d/luci-app-lldpd.json:3
+#: applications/luci-app-lldpd/root/usr/share/rpcd/acl.d/luci-app-lldpd.json:3
 msgid "Grant access for LLDP status information"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:274
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:128
+msgid "Host location"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:274
 msgid "ID"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:275
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:275
 msgid "ID type"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:114
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:114
 msgid "IP address"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:229
-msgid ""
-"If the path to the socket is set, then LLDPd will enable an SNMP subagent "
-"using AgentX protocol. This allows you to get information about local system "
-"and remote systems through SNMP."
-msgstr ""
-
-#: htdocs/luci-static/resources/lldpd.js:171
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:161
 msgid "Incoming"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:58
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:58
 msgid "Insert count"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:271
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:410
 msgid "Interface MAC address"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:689
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:686
 msgid "Interface Statistics"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:272
-#: htdocs/luci-static/resources/view/lldpd/status.js:110
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:411
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:110
 msgid "Interface name"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:310
-#: root/usr/share/luci/menu.d/luci-app-lldpd.json:3
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:391
+msgid ""
+"Kernel name (ie: Linux) will still be shared, and Inventory software version "
+"will be set to %s."
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:449
+#: applications/luci-app-lldpd/root/usr/share/luci/menu.d/luci-app-lldpd.json:3
 msgid "LLDP"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:672
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:669
 msgid "LLDP Status"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:239
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:327
 msgid "LLDP-MED device class"
 msgstr ""
 
-#: htdocs/luci-static/resources/lldpd.js:19
-msgid "LLDPd LuCI application (version %s)"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:369
+msgid "LLDP-MED fast-start"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:373
+msgid "LLDP-MED fast-start tx-interval"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:338
+msgid "LLDP-MED policy"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:417
+msgid "LLDPDU destination MAC"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:455
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:594
 msgid "LLDPd Settings"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:456
-msgid ""
-"LLDPd is a implementation of IEEE 802.1ab (<abbr title=\"Link Layer "
-"Discovery Protocol\">LLDP</abbr>)."
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:595
+msgid "LLDPd is an implementation of IEEE 802.1ab"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:251
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:382
 msgid ""
 "LLDPd will still receive (and publish using SNMP if enabled) those LLDP-MED "
-"TLV but will not send them. Use this option if you don't want to transmit "
-"sensible information like serial numbers."
+"TLV but will not send them. Use this option if you do not want to transmit "
+"sensitive information like serial numbers."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:677
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:247
+msgid "LLDPd won't send any frames; only listen to neighbors."
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:674
 msgid "Local Chassis"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:112
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:112
 msgid "Local ID"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:37
-#: htdocs/luci-static/resources/view/lldpd/status.js:50
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:37
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:50
 msgid "Local interface"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:108
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:108
 msgid "MAC address"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:231
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:231
 msgid "MFS"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:293
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:293
 msgid "Management IP(s)"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:114
-msgid "Management addresses of this system"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:330
+msgid "Media Endpoint (Class II)"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:242
-msgid "Media Endpoint (Class II)"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:219
+msgid "Must be a greater than zero number optionally suffixed with \"ms\""
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:139
-#: htdocs/luci-static/resources/view/lldpd/config.js:160
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:238
 msgid "Must be a number"
 msgstr ""
 
-#: htdocs/luci-static/resources/lldpd.js:119
-msgid "N &mdash; keep only one neighbor"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:137
+msgid "Must start: 'coordinate ...', 'address ...' or 'elin ...'"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:195
-#: htdocs/luci-static/resources/view/lldpd/status.js:206
-#: htdocs/luci-static/resources/view/lldpd/status.js:268
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:363
+msgid "Must start: application ..."
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:195
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:206
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:268
 msgid "Name"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:244
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:332
 msgid "Network Connectivity Device (Class IV)"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:442
-msgid "Network Interfaces"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:269
+msgid "Network IO"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:189
-msgid "Network interfaces"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:285
+msgid "Network IO for chassis ID"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:202
-msgid "Network interfaces for chassis ID computing"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:581
+msgid "Network Interfaces"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:604
-#: htdocs/luci-static/resources/view/lldpd/status.js:661
-#: htdocs/luci-static/resources/view/lldpd/status.js:665
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:601
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:658
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:662
 msgid "No data to display"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:458
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:597
 msgid "On this page you may configure LLDPd parameters."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:345
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:484
 msgid "Only CDPv2"
 msgstr ""
 
-#: htdocs/luci-static/resources/lldpd.js:172
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:162
 msgid "Outgoing"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:93
-msgid "Override system description with the provided description."
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:115
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:122
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:146
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:157
+msgid "Override %s."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:100
-msgid "Override system hostname with the provided value."
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:129
+msgid "Override the announced location of the host."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:107
-msgid ""
-"Override the platform description with the provided value. The default "
-"description is the kernel name (Linux)."
-msgstr ""
-
-#: htdocs/luci-static/resources/lldpd.js:118
-msgid "P &mdash; keep only one protocol"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/lldpd/status.js:214
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:214
 msgid "Port ID"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:217
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:217
 msgid "Port ID type"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:222
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:222
 msgid "Port description"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:38
-#: htdocs/luci-static/resources/view/lldpd/status.js:51
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:38
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:51
 msgid "Protocol"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:448
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:587
 msgid "Protocols Support"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:54
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:246
+msgid "Receive-only mode"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:54
 msgid "Rx"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:144
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:144
 msgid "Rx and Tx"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:146
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:146
 msgid "Rx only"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:56
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:56
 msgid "Rx unrecognized"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:228
-msgid "SNMP agentX socket path"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:557
+msgid "SONMP (NTDP, NDP, BNMP, BDP)"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:418
-msgid "SONMP (NTDP, NDP, BNMP, BDP)"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:33
+msgid "See syntax <a %s>here</a>."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:351
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:490
 msgid "Send CDP packets even if no CDP peer detected"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:402
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:541
 msgid "Send EDP packets even if no EDP peer detected"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:382
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:521
 msgid "Send FDP packets even if no FDP peer detected"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:428
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:567
 msgid "Send SONMP packets even if no SONMP peer detected"
 msgstr ""
 
-#: root/usr/share/luci/menu.d/luci-app-lldpd.json:28
+#: applications/luci-app-lldpd/root/usr/share/luci/menu.d/luci-app-lldpd.json:28
 msgid "Settings"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:259
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:398
 msgid "Specify the behaviour when detecting multiple neighbors"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:115
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:270
 msgid ""
-"Specify the management addresses of this system. If not specified, the first "
-"IPv4 and the first IPv6 are used. If an exact IP address is provided, it is "
-"used as a management address without any check. If you want to blacklist "
-"IPv6 addresses, you can use <code>!*:*</code>. See more details about "
-"available patterns <a href=\"https://vincentbernat.github.io/lldpd/usage.html"
-"\">here</a>."
+"Specify which interface (not) to listen upon and send LLDPDU from. Absent "
+"any value, LLDPd uses all available physical interfaces."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:190
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:286
 msgid ""
-"Specify which interface to listen and send LLDPDU to. If no interfaces is "
-"specified, LLDPd will use all available physical interfaces."
+"Specify which interfaces (not) to use for computing chassis ID. Absent any "
+"value, all interfaces are considered. LLDPd takes the first MAC address from "
+"all the considered interfaces to compute the chassis ID."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:203
-msgid ""
-"Specify which interfaces to use for computing chassis ID. If no interfaces "
-"is specified, all interfaces are considered. LLDPd will take the first MAC "
-"address from all the considered interfaces to compute the chassis ID."
+#: applications/luci-app-lldpd/root/usr/share/luci/menu.d/luci-app-lldpd.json:16
+msgid "Status"
 msgstr ""
 
-#: root/usr/share/luci/menu.d/luci-app-lldpd.json:16
-msgid "Status"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:211
+msgid "Suffix %s for millisecond values."
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:156
+msgid "System capabilities"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:92
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:151
+msgid "System capability advertisements"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:114
 msgid "System description"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:99
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:121
 msgid "System hostname"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:106
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:181
+msgid "System management IO"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:175
+msgid "System management IO advertisements"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:145
 msgid "System platform description"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:226
-#: htdocs/luci-static/resources/view/lldpd/status.js:228
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:226
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:228
 msgid "TTL"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:260
-msgid ""
-"The default filter is 15. For more details see \"FILTERING NEIGHBORS\" "
-"section <a href=\"https://vincentbernat.github.io/lldpd/usage.html\">here</"
-"a>."
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:147
+msgid "The default description is the kernel name (Linux)."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:278
-msgid "The destination MAC address used to send LLDPDU"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:399
+msgid "The default filter is 15. Refer to &quot;FILTERING NEIGHBORS&quot;."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:279
-msgid ""
-"The destination MAC address used to send LLDPDU allows an agent to control "
-"the propagation of LLDPDUs. By default, the <code>01:80:c2:00:00:0e</code> "
-"MAC address is used and limit the propagation of the LLDPDU to the nearest "
-"bridge."
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:158
+msgid "The default is derived from kernel information."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:128
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:208
 msgid ""
-"The transmit delay is the delay between two transmissions of LLDP PDU. The "
-"default value is 30 seconds."
+"The delay between transmissions of LLDP PDU. The default value is 30 seconds."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:673
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:670
 msgid ""
 "This page allows you to see discovered LLDP neighbors, local interfaces "
 "statistics and local chassis information."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:148
-msgid ""
-"This value is used to compute the TTL of transmitted packets which is the "
-"product of this value and of the transmit delay. The default value is 4 and "
-"therefore the default TTL is 120 seconds."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:127
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:207
 msgid "Transmit delay"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:141
-msgid "Transmit delay must be greater than 0"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:147
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:225
 msgid "Transmit hold value"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:162
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:240
 msgid "Transmit hold value must be greater than 0"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:53
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:53
 msgid "Tx"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:55
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:55
 msgid "Tx discarded"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:148
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:148
 msgid "Tx only"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:152
-#: htdocs/luci-static/resources/view/lldpd/status.js:260
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:152
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:260
 msgid "Unknown"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/config.js:169
-msgid ""
-"With this option, LLDPd will not send any frames. It will only listen to "
-"neighbors."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/lldpd/config.js:268
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/config.js:407
 msgid ""
 "With this option, you can force the port identifier to be the interface name "
 "or the MAC address."
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:305
-#: htdocs/luci-static/resources/view/lldpd/status.js:314
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:305
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:314
 msgid "disabled"
 msgstr ""
 
-#: htdocs/luci-static/resources/view/lldpd/status.js:305
-#: htdocs/luci-static/resources/view/lldpd/status.js:314
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:44
+msgid "enable filter"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:305
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/view/lldpd/status.js:314
 msgid "enabled"
 msgstr ""
 
-#: htdocs/luci-static/resources/lldpd.js:21
-msgid "© 2018–2021, Tano Systems LLC, Anton Kikin"
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:46
+msgid "keep only one neighbor"
+msgstr ""
+
+#: applications/luci-app-lldpd/htdocs/luci-static/resources/lldpd.js:45
+msgid "keep only one protocol"
 msgstr ""
diff --git a/applications/luci-app-lldpd/root/etc/uci-defaults/40_luci-lldpd b/applications/luci-app-lldpd/root/etc/uci-defaults/40_luci-lldpd
deleted file mode 100644 (file)
index d7bfee2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-rm -f /tmp/luci-indexcache
-exit 0
index d79d7bd3c6da4566ed31cc26e331b9fea58957bd..240cd24779a051ab224812d72f588f665c3d74eb 100644 (file)
@@ -3,7 +3,7 @@
                "description": "Grant access for LLDP status information",
                "read": {
                        "ubus": {
-                               "lldpd": [
+                               "luci.lldpd": [
                                        "getStatus"
                                ]
                        },
                "description": "Grant access for LLDP configuration",
                "read": {
                        "uci": [
-                               "lldpd",
-                               "luci",
-                               "network",
-                               "wireless",
-                               "firewall"
+                               "lldpd"
                        ],
                        "ubus": {
+                               "luci.lldpd": [
+                                       "getStatus"
+                               ],
                                "luci": [
                                        "getInitList"
-                               ],
-                               "luci-rpc": [
-                                       "getBoardJSON",
-                                       "getHostHints",
-                                       "getNetworkDevices",
-                                       "getWirelessDevices"
-                               ],
-                               "network": [
-                                       "get_proto_handlers"
-                               ],
-                               "network.interface": [
-                                       "dump"
                                ]
                        }
                },
diff --git a/applications/luci-app-lldpd/root/usr/share/rpcd/ucode/lldpd b/applications/luci-app-lldpd/root/usr/share/rpcd/ucode/lldpd
deleted file mode 100644 (file)
index a35376f..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-'use strict';
-
-import { popen } from 'fs';
-
-function lldpcli_json(section) {
-       return json(popen(`lldpcli -f json0 show ${section}`, 'r'));
-}
-
-return {
-       lldpd: {
-               getStatus: {
-                       call: function() {
-                               return {
-                                       statistics: lldpcli_json("statistics"),
-                                       neighbors:  lldpcli_json("neighbors details"),
-                                       interfaces: lldpcli_json("interfaces"),
-                                       chassis:    lldpcli_json("chassis")
-                               };
-                       }
-               }
-       }
-};
diff --git a/applications/luci-app-lldpd/root/usr/share/rpcd/ucode/luci.lldpd b/applications/luci-app-lldpd/root/usr/share/rpcd/ucode/luci.lldpd
new file mode 100644 (file)
index 0000000..fff7ac5
--- /dev/null
@@ -0,0 +1,22 @@
+'use strict';
+
+import { popen } from 'fs';
+
+function lldpcli_json(section) {
+       return json(popen(`lldpcli -f json0 show ${section}`, 'r'));
+}
+
+return {
+       'luci.lldpd': {
+               getStatus: {
+                       call: function() {
+                               return {
+                                       statistics: lldpcli_json("statistics"),
+                                       neighbors:  lldpcli_json("neighbors details"),
+                                       interfaces: lldpcli_json("interfaces"),
+                                       chassis:    lldpcli_json("chassis")
+                               };
+                       }
+               }
+       }
+};