mirror of
https://github.com/Telecominfraproject/ols-ucentral-schema.git
synced 2025-11-01 02:27:47 +00:00
Compare commits
36 Commits
schema_fix
...
link_aggre
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bcde6a7155 | ||
|
|
82f5eb7740 | ||
|
|
ceccdef561 | ||
|
|
80a598fadf | ||
|
|
81e8cd5706 | ||
|
|
8a4815187f | ||
|
|
e8da89616e | ||
|
|
5da5b090be | ||
|
|
f9e15067ff | ||
|
|
4235960ab8 | ||
|
|
7e839b0681 | ||
|
|
b98f8a2b46 | ||
|
|
1de6cad7e8 | ||
|
|
0f9f4489d2 | ||
|
|
5dc634f78e | ||
|
|
4d03a432c1 | ||
|
|
ee945311e1 | ||
|
|
4336be981b | ||
|
|
747ccb4993 | ||
|
|
a0fac0b3d7 | ||
|
|
1e33d3fa0a | ||
|
|
dc754dc519 | ||
|
|
b3374bb60b | ||
|
|
0ef7362930 | ||
|
|
b9762df2cf | ||
|
|
0983abe2bf | ||
|
|
719fd97705 | ||
|
|
777e2b26a8 | ||
|
|
ab43179a83 | ||
|
|
3a41591f85 | ||
|
|
7fa4d15f5e | ||
|
|
d105fe165e | ||
|
|
d3f610d9ef | ||
|
|
711d7d9066 | ||
|
|
89a78c61be | ||
|
|
f5608bd42c |
28
LICENSE
Normal file
28
LICENSE
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
BSD 3-Clause License
|
||||||
|
|
||||||
|
Copyright (c) 2024, Telecom Infra Project
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
197
capabilities/connect.capabilities.yml
Normal file
197
capabilities/connect.capabilities.yml
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
description:
|
||||||
|
uCentral protocol (OpenLan) device and features capabilities schema
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
serial:
|
||||||
|
type: string
|
||||||
|
examples:
|
||||||
|
- aabbccddeeff
|
||||||
|
firmware:
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
|
Platform revision
|
||||||
|
examples:
|
||||||
|
- Rel 1.6 build 5
|
||||||
|
platform:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- Switch
|
||||||
|
- AP
|
||||||
|
model:
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
|
Device model
|
||||||
|
hw-sku:
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
|
Stock keeping unit
|
||||||
|
compatible:
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
|
Compatibility string, that defines the family of the device
|
||||||
|
base-mac:
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
|
Switch MAC address
|
||||||
|
format: uc-mac
|
||||||
|
examples:
|
||||||
|
- aa:bb:cc:dd:ee:ff
|
||||||
|
port-list:
|
||||||
|
type: array
|
||||||
|
description:
|
||||||
|
The list of physical network devices
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
|
The logical name of the port that is used by the OS
|
||||||
|
examples:
|
||||||
|
- Ethernet0
|
||||||
|
- Ethernet1
|
||||||
|
- Ethernet76
|
||||||
|
front-panel-number:
|
||||||
|
type: integer
|
||||||
|
description:
|
||||||
|
The identification number of the port as can be seen on the front-panel of the device
|
||||||
|
port-capabilities:
|
||||||
|
type: object
|
||||||
|
description:
|
||||||
|
Description of physical ports and their form-factors
|
||||||
|
properties:
|
||||||
|
form-factors:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- RJ45
|
||||||
|
- SFP
|
||||||
|
- SFP+
|
||||||
|
- SFP28
|
||||||
|
- SFP-DD
|
||||||
|
- QSFP
|
||||||
|
- QSFP+
|
||||||
|
- QSFP28
|
||||||
|
- QSFP-DD
|
||||||
|
ports-list:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
type:
|
||||||
|
type: string
|
||||||
|
examples:
|
||||||
|
- RJ45
|
||||||
|
ports:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
examples:
|
||||||
|
- Ethernet1
|
||||||
|
poe-capabilities:
|
||||||
|
type: object
|
||||||
|
description:
|
||||||
|
Description of physical ports and their PoE capabilities
|
||||||
|
properties:
|
||||||
|
supported-standards:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- .3AF-POE
|
||||||
|
- .3AT-POE+
|
||||||
|
- .3BT-PoE++
|
||||||
|
- PreStandard-Passive
|
||||||
|
power-budget:
|
||||||
|
type: integer
|
||||||
|
examples:
|
||||||
|
- 2000
|
||||||
|
poe-ports:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
type:
|
||||||
|
type: string
|
||||||
|
examples:
|
||||||
|
- .3AF-POE
|
||||||
|
budget-capacity:
|
||||||
|
type: integer
|
||||||
|
ports:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
examples:
|
||||||
|
- Ethernet1
|
||||||
|
supported-features:
|
||||||
|
type: array
|
||||||
|
description:
|
||||||
|
List of all features supported by the device
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
# L2
|
||||||
|
- VLAN
|
||||||
|
- Port-Isolation
|
||||||
|
- Spanning-Tree
|
||||||
|
- Spanning-Tree-Rapid
|
||||||
|
- Spanning-Tree-Per-VLAN
|
||||||
|
- Spanning-Tree-Per-VLAN-Rapid
|
||||||
|
- Spanning-Tree-MSTP
|
||||||
|
# L3
|
||||||
|
- SVI-StaticIPv4
|
||||||
|
- SVI-StaticIPv6
|
||||||
|
- Interface-StaticIPv4
|
||||||
|
- Interface-StaticIPv6
|
||||||
|
- Routing-VRF
|
||||||
|
- Routing-IPv4-Route-Blackhole
|
||||||
|
- Routing-IPv4-Route-Unreachable
|
||||||
|
- Routing-IPv4-Nexthop
|
||||||
|
- Routing-IPv4-Broadcast
|
||||||
|
- Routing-IPv4-Multicast-IGMP-Snooping
|
||||||
|
- Routing-IPv4-Multicast-IGMP-Querier
|
||||||
|
- Routing-IPv4-Multicast-IGMP-Static
|
||||||
|
- Routing-IPv4-DHCP-Server
|
||||||
|
- Routing-IPv4-DHCP-Relay
|
||||||
|
- Routing-IPv4-DHCP-Snooping
|
||||||
|
- Routing-IPv4-Port-Forward
|
||||||
|
- Routing-IPv6-DHCP-Relay
|
||||||
|
- Routing-IPv6-DHCP-Stateful
|
||||||
|
- Routing-IPv6-DHCP-Stateless
|
||||||
|
- Routing-IPv6-Port-Forward
|
||||||
|
# PoE
|
||||||
|
- PoE-Reset
|
||||||
|
# .1X
|
||||||
|
- Port-Access-Control
|
||||||
|
- PAC-Dynamic-Auth
|
||||||
|
# System
|
||||||
|
- System-PasswordChange
|
||||||
|
- System-SwUpdate
|
||||||
|
- System-SwUpdate-Partial
|
||||||
|
- Port-Mirroring
|
||||||
|
# Services
|
||||||
|
- Service-SSH
|
||||||
|
- Service-RSSH
|
||||||
|
- Service-Telnet
|
||||||
|
- Service-LLDP
|
||||||
|
- Service-HTTP
|
||||||
|
- Service-HTTPS
|
||||||
|
- Service-GPS
|
||||||
|
- Service-IGMP
|
||||||
|
- Service-NTP
|
||||||
|
- Service-MDNS
|
||||||
|
- Service-QoS
|
||||||
|
- Service-Syslog
|
||||||
|
- Service-PAC
|
||||||
|
- Service-Wireguard-Overlay
|
||||||
|
- Service-Radius-Proxy
|
||||||
|
- Service-Online-Check
|
||||||
|
- Service-CaptivePortal
|
||||||
|
- Service-PublicIpCheck
|
||||||
|
# Tunneling
|
||||||
|
- Tunneling-VxLAN
|
||||||
|
- Tunneling-GRE
|
||||||
|
- Tunneling-GRE6
|
||||||
|
- Tunneling-L2TP
|
||||||
|
- Tunneling-Mesh
|
||||||
@@ -7,7 +7,8 @@ set -x
|
|||||||
./merge-schema.py schema schema ucentral.yml ucentral.schema.pretty.json 0 1
|
./merge-schema.py schema schema ucentral.yml ucentral.schema.pretty.json 0 1
|
||||||
./merge-schema.py schema schema ucentral.yml ucentral.schema.full.json 0 0
|
./merge-schema.py schema schema ucentral.yml ucentral.schema.full.json 0 0
|
||||||
./merge-schema.py state state state.yml ucentral.state.pretty.json 0 1
|
./merge-schema.py state state state.yml ucentral.state.pretty.json 0 1
|
||||||
./generate-reader.uc > schemareader.uc
|
./merge-schema.py capabilities capabilities connect.capabilities.yml ucentral.capabilities.pretty.json 0 1
|
||||||
|
#./generate-reader.uc > schemareader.uc
|
||||||
#./generate-example.uc > input.json
|
#./generate-example.uc > input.json
|
||||||
mkdir -p docs
|
mkdir -p docs
|
||||||
which generate-schema-doc > /dev/null
|
which generate-schema-doc > /dev/null
|
||||||
|
|||||||
@@ -161,42 +161,69 @@ properties:
|
|||||||
type: integer
|
type: integer
|
||||||
minimum: 1
|
minimum: 1
|
||||||
maximum: 4094
|
maximum: 4094
|
||||||
port-isolation:
|
trunk-group:
|
||||||
|
description: Associates this port to a trunk or a port-channel.
|
||||||
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
maximum: 64
|
||||||
|
lacp-config:
|
||||||
description:
|
description:
|
||||||
This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration.
|
This section describes the 802.3ad Link Aggregation Control Protocol (LACP) configuration for the current interface.
|
||||||
Omitting this configuration completely fully disables any port-isolation configuration on this given port.
|
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
sessions:
|
lacp-enable:
|
||||||
description:
|
description:
|
||||||
Allow selected port to forward traffic in the provided session-based format.
|
Enables 802.3ad Link Aggregation Control Protocol (LACP) for the current interface.
|
||||||
type: array
|
type: boolean
|
||||||
items:
|
default: false
|
||||||
type: object
|
lacp-role:
|
||||||
properties:
|
description:
|
||||||
id:
|
Configures the port LACP role as actor or partner.
|
||||||
description:
|
type: string
|
||||||
Session id to configure.
|
enum:
|
||||||
type: integer
|
- actor
|
||||||
uplink:
|
- partner
|
||||||
description:
|
default: actor
|
||||||
Configuration object for uplink interface(s)
|
lacp-mode:
|
||||||
type: object
|
description:
|
||||||
properties:
|
Configures the LACP negotiation activity mode as active or passive.
|
||||||
interface-list:
|
type: string
|
||||||
description:
|
enum:
|
||||||
List of interfaces (either physical or trunk ports)
|
- active
|
||||||
type: array
|
- passive
|
||||||
items:
|
default: passive
|
||||||
type: string
|
lacp-port-admin-key:
|
||||||
downlink:
|
description:
|
||||||
description:
|
Configures the port's LACP administration key.
|
||||||
Configuration object for downlink interface(s)
|
type: integer
|
||||||
type: object
|
minimum: 1
|
||||||
properties:
|
maximum: 65535
|
||||||
interface-list:
|
default: 1
|
||||||
description:
|
lacp-port-priority:
|
||||||
List of interfaces (either physical or trunk ports)
|
description:
|
||||||
type: array
|
Configures the LACP port priority.
|
||||||
items:
|
type: integer
|
||||||
type: string
|
minimum: 1
|
||||||
|
maximum: 65535
|
||||||
|
default: 32768
|
||||||
|
lacp-system-priority:
|
||||||
|
description:
|
||||||
|
Configures the LACP System priority.
|
||||||
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
maximum: 65535
|
||||||
|
default: 32768
|
||||||
|
lacp-pchan-admin-key:
|
||||||
|
description:
|
||||||
|
Configures the port channel's LACP administration key (optional).
|
||||||
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
maximum: 65535
|
||||||
|
lacp-timeout:
|
||||||
|
description:
|
||||||
|
Configures the timeout to wait for the next LACP data unit.
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- short
|
||||||
|
- long
|
||||||
|
default: long
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ properties:
|
|||||||
vrf:
|
vrf:
|
||||||
description:
|
description:
|
||||||
VRF id.
|
VRF id.
|
||||||
type: number
|
type: integer
|
||||||
ipv4-unreachable:
|
ipv4-unreachable:
|
||||||
description:
|
description:
|
||||||
Define a list of non-interface specific UNREACHABLE routes.
|
Define a list of non-interface specific UNREACHABLE routes.
|
||||||
@@ -58,4 +58,4 @@ properties:
|
|||||||
vrf:
|
vrf:
|
||||||
description:
|
description:
|
||||||
VRF id.
|
VRF id.
|
||||||
type: number
|
type: integer
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ properties:
|
|||||||
vrf:
|
vrf:
|
||||||
description:
|
description:
|
||||||
VRF id.
|
VRF id.
|
||||||
type: number
|
type: integer
|
||||||
gateway:
|
gateway:
|
||||||
description:
|
description:
|
||||||
This option defines the static IPv4 gateway of the logical interface.
|
This option defines the static IPv4 gateway of the logical interface.
|
||||||
@@ -55,7 +55,7 @@ properties:
|
|||||||
vrf:
|
vrf:
|
||||||
description:
|
description:
|
||||||
VRF id.
|
VRF id.
|
||||||
type: number
|
type: integer
|
||||||
metric:
|
metric:
|
||||||
description:
|
description:
|
||||||
Optional metric value (define a NH route's weight / metric).
|
Optional metric value (define a NH route's weight / metric).
|
||||||
@@ -77,7 +77,7 @@ properties:
|
|||||||
vrf:
|
vrf:
|
||||||
description:
|
description:
|
||||||
VRF id.
|
VRF id.
|
||||||
type: number
|
type: integer
|
||||||
multicast:
|
multicast:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
|||||||
15
schema/service.https.yml
Normal file
15
schema/service.https.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
description:
|
||||||
|
Enable the webserver with the on-boarding webui
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
https-port:
|
||||||
|
description:
|
||||||
|
The port that the secure HTTP server should run on.
|
||||||
|
type: integer
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
default: 443
|
||||||
|
enable:
|
||||||
|
description:
|
||||||
|
This option whether secure http server should be enabled or disabled.
|
||||||
|
type: boolean
|
||||||
@@ -49,3 +49,5 @@ properties:
|
|||||||
$ref: 'https://ucentral.io/schema/v1/service/rrm/'
|
$ref: 'https://ucentral.io/schema/v1/service/rrm/'
|
||||||
telnet:
|
telnet:
|
||||||
$ref: "https://ucentral.io/schema/v1/service/telnet/"
|
$ref: "https://ucentral.io/schema/v1/service/telnet/"
|
||||||
|
https:
|
||||||
|
$ref: "https://ucentral.io/schema/v1/service/https/"
|
||||||
|
|||||||
@@ -43,50 +43,50 @@ properties:
|
|||||||
enum:
|
enum:
|
||||||
- upstream
|
- upstream
|
||||||
- downstream
|
- downstream
|
||||||
instances:
|
instances:
|
||||||
description:
|
description:
|
||||||
Define a list of configuration for each STP instance.
|
Define a list of configuration for each STP instance.
|
||||||
Meaning of this field depends on current
|
Meaning of this field depends on current
|
||||||
STP protocol (switch.loop-detection.protocol)
|
STP protocol (switch.loop-detection.protocol)
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
id:
|
id:
|
||||||
description:
|
description:
|
||||||
Indicates instance to configure.
|
Indicates instance to configure.
|
||||||
Depends on current STP protocol
|
Depends on current STP protocol
|
||||||
If RPVSTP/PVSTP - vlan id
|
If RPVSTP/PVSTP - vlan id
|
||||||
If MSTP - instance id
|
If MSTP - instance id
|
||||||
type: integer
|
type: integer
|
||||||
enabled:
|
enabled:
|
||||||
description:
|
description:
|
||||||
Enable STP on this instance.
|
Enable STP on this instance.
|
||||||
type: boolean
|
type: boolean
|
||||||
default: true
|
default: true
|
||||||
priority:
|
priority:
|
||||||
description:
|
description:
|
||||||
Bridge priority.
|
Bridge priority.
|
||||||
type: integer
|
type: integer
|
||||||
default: 32768
|
default: 32768
|
||||||
forward_delay:
|
forward_delay:
|
||||||
description:
|
description:
|
||||||
Defines the amount of time a switch port stays in the Listening
|
Defines the amount of time a switch port stays in the Listening
|
||||||
and Learning states before transitioning to the Forwarding state.
|
and Learning states before transitioning to the Forwarding state.
|
||||||
type: integer
|
type: integer
|
||||||
default: 15
|
default: 15
|
||||||
hello_time:
|
hello_time:
|
||||||
description:
|
description:
|
||||||
Determines how often switches send BPDU.
|
Determines how often switches send BPDU.
|
||||||
type: integer
|
type: integer
|
||||||
default: 2
|
default: 2
|
||||||
max_age:
|
max_age:
|
||||||
description:
|
description:
|
||||||
Specifies the maximum time that a switch port should wait to
|
Specifies the maximum time that a switch port should wait to
|
||||||
receive a BPDU from its neighbor before
|
receive a BPDU from its neighbor before
|
||||||
considering the link as failed or disconnected.
|
considering the link as failed or disconnected.
|
||||||
type: integer
|
type: integer
|
||||||
default: 20
|
default: 20
|
||||||
ieee8021x:
|
ieee8021x:
|
||||||
description:
|
description:
|
||||||
This section describes the global 802.1X (port access control) configuration.
|
This section describes the global 802.1X (port access control) configuration.
|
||||||
@@ -184,3 +184,59 @@ properties:
|
|||||||
description:
|
description:
|
||||||
Sets the shared secret to verify client COA requests for this server.
|
Sets the shared secret to verify client COA requests for this server.
|
||||||
type: string
|
type: string
|
||||||
|
port-isolation:
|
||||||
|
description:
|
||||||
|
This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration.
|
||||||
|
Omitting this configuration completely fully disables any port-isolation configuration on this given port.
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
sessions:
|
||||||
|
description:
|
||||||
|
Allow selected port to forward traffic in the provided session-based format.
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
description:
|
||||||
|
Session id to configure.
|
||||||
|
type: integer
|
||||||
|
uplink:
|
||||||
|
description:
|
||||||
|
Configuration object for uplink interface(s)
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
interface-list:
|
||||||
|
description:
|
||||||
|
List of interfaces (either physical or trunk ports)
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
downlink:
|
||||||
|
description:
|
||||||
|
Configuration object for downlink interface(s)
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
interface-list:
|
||||||
|
description:
|
||||||
|
List of interfaces (either physical or trunk ports)
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
trunk-balance-method:
|
||||||
|
description:
|
||||||
|
Sets the load-distribution method among ports in aggregated links for both static and LACP based trunks.
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- dst-ip
|
||||||
|
- dst-mac
|
||||||
|
- src-dst-ip
|
||||||
|
- src-dst-mac
|
||||||
|
- src-ip
|
||||||
|
- src-mac
|
||||||
|
default: src-dst-mac
|
||||||
|
jumbo-frames:
|
||||||
|
description:
|
||||||
|
Enables Jumbo frames
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|||||||
@@ -12,6 +12,11 @@ properties:
|
|||||||
description:
|
description:
|
||||||
The unique ID of the configuration. This is the unix timestamp of when the config was created.
|
The unique ID of the configuration. This is the unix timestamp of when the config was created.
|
||||||
type: integer
|
type: integer
|
||||||
|
public_ip_lookup:
|
||||||
|
description:
|
||||||
|
The fqdn to retrieve public ip of internet connection.
|
||||||
|
type: string
|
||||||
|
format: uc-fqdn
|
||||||
unit:
|
unit:
|
||||||
$ref: "https://ucentral.io/schema/v1/unit/"
|
$ref: "https://ucentral.io/schema/v1/unit/"
|
||||||
globals:
|
globals:
|
||||||
|
|||||||
@@ -100,3 +100,13 @@ properties:
|
|||||||
Global config for controlling whether MLD snooping is enabled. If this global setting is disabled, all VLANs are treated as disabled, whether they are enabled or not.
|
Global config for controlling whether MLD snooping is enabled. If this global setting is disabled, all VLANs are treated as disabled, whether they are enabled or not.
|
||||||
type: boolean
|
type: boolean
|
||||||
default: true
|
default: true
|
||||||
|
unknown-multicast-flood-control:
|
||||||
|
description:
|
||||||
|
Global config for the unknown multicast flood control feature. This enables the system to forward unknown multicast packets only to a multicast router (mrouter).
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
querier-enable:
|
||||||
|
description:
|
||||||
|
Global IGMP querier config. This enables all Vlan interfaces to act as a querier.
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|||||||
675
schemareader.uc
675
schemareader.uc
@@ -295,6 +295,34 @@ function instantiateUnit(location, value, errors) {
|
|||||||
obj.mld_snooping_enable = true;
|
obj.mld_snooping_enable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseUnknownMulticastFloodControl(location, value, errors) {
|
||||||
|
if (type(value) != "bool")
|
||||||
|
push(errors, [ location, "must be of type boolean" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "unknown-multicast-flood-control")) {
|
||||||
|
obj.unknown_multicast_flood_control = parseUnknownMulticastFloodControl(location + "/unknown-multicast-flood-control", value["unknown-multicast-flood-control"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.unknown_multicast_flood_control = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseQuerierEnable(location, value, errors) {
|
||||||
|
if (type(value) != "bool")
|
||||||
|
push(errors, [ location, "must be of type boolean" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "querier-enable")) {
|
||||||
|
obj.querier_enable = parseQuerierEnable(location + "/querier-enable", value["querier-enable"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.querier_enable = false;
|
||||||
|
}
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -532,8 +560,8 @@ function instantiateGlobals(location, value, errors) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function parseVrf(location, value, errors) {
|
function parseVrf(location, value, errors) {
|
||||||
if (!(type(value) in [ "int", "double" ]))
|
if (type(value) != "int")
|
||||||
push(errors, [ location, "must be of type number" ]);
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
@@ -588,8 +616,8 @@ function instantiateGlobals(location, value, errors) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function parseVrf(location, value, errors) {
|
function parseVrf(location, value, errors) {
|
||||||
if (!(type(value) in [ "int", "double" ]))
|
if (type(value) != "int")
|
||||||
push(errors, [ location, "must be of type number" ]);
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
@@ -1016,125 +1044,162 @@ function instantiateEthernet(location, value, errors) {
|
|||||||
obj.ieee8021x = parseIeee8021x(location + "/ieee8021x", value["ieee8021x"], errors);
|
obj.ieee8021x = parseIeee8021x(location + "/ieee8021x", value["ieee8021x"], errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
function parsePortIsolation(location, value, errors) {
|
function parseLacpConfig(location, value, errors) {
|
||||||
if (type(value) == "object") {
|
if (type(value) == "object") {
|
||||||
let obj = {};
|
let obj = {};
|
||||||
|
|
||||||
function parseSessions(location, value, errors) {
|
function parseLacpEnable(location, value, errors) {
|
||||||
if (type(value) == "array") {
|
if (type(value) != "bool")
|
||||||
function parseItem(location, value, errors) {
|
push(errors, [ location, "must be of type boolean" ]);
|
||||||
if (type(value) == "object") {
|
|
||||||
let obj = {};
|
|
||||||
|
|
||||||
function parseId(location, value, errors) {
|
|
||||||
if (type(value) != "int")
|
|
||||||
push(errors, [ location, "must be of type integer" ]);
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exists(value, "id")) {
|
|
||||||
obj.id = parseId(location + "/id", value["id"], errors);
|
|
||||||
}
|
|
||||||
|
|
||||||
function parseUplink(location, value, errors) {
|
|
||||||
if (type(value) == "object") {
|
|
||||||
let obj = {};
|
|
||||||
|
|
||||||
function parseInterfaceList(location, value, errors) {
|
|
||||||
if (type(value) == "array") {
|
|
||||||
function parseItem(location, value, errors) {
|
|
||||||
if (type(value) != "string")
|
|
||||||
push(errors, [ location, "must be of type string" ]);
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return map(value, (item, i) => parseItem(location + "/" + i, item, errors));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type(value) != "array")
|
|
||||||
push(errors, [ location, "must be of type array" ]);
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exists(value, "interface-list")) {
|
|
||||||
obj.interface_list = parseInterfaceList(location + "/interface-list", value["interface-list"], errors);
|
|
||||||
}
|
|
||||||
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type(value) != "object")
|
|
||||||
push(errors, [ location, "must be of type object" ]);
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exists(value, "uplink")) {
|
|
||||||
obj.uplink = parseUplink(location + "/uplink", value["uplink"], errors);
|
|
||||||
}
|
|
||||||
|
|
||||||
function parseDownlink(location, value, errors) {
|
|
||||||
if (type(value) == "object") {
|
|
||||||
let obj = {};
|
|
||||||
|
|
||||||
function parseInterfaceList(location, value, errors) {
|
|
||||||
if (type(value) == "array") {
|
|
||||||
function parseItem(location, value, errors) {
|
|
||||||
if (type(value) != "string")
|
|
||||||
push(errors, [ location, "must be of type string" ]);
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return map(value, (item, i) => parseItem(location + "/" + i, item, errors));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type(value) != "array")
|
|
||||||
push(errors, [ location, "must be of type array" ]);
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exists(value, "interface-list")) {
|
|
||||||
obj.interface_list = parseInterfaceList(location + "/interface-list", value["interface-list"], errors);
|
|
||||||
}
|
|
||||||
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type(value) != "object")
|
|
||||||
push(errors, [ location, "must be of type object" ]);
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exists(value, "downlink")) {
|
|
||||||
obj.downlink = parseDownlink(location + "/downlink", value["downlink"], errors);
|
|
||||||
}
|
|
||||||
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type(value) != "object")
|
|
||||||
push(errors, [ location, "must be of type object" ]);
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return map(value, (item, i) => parseItem(location + "/" + i, item, errors));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type(value) != "array")
|
|
||||||
push(errors, [ location, "must be of type array" ]);
|
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exists(value, "sessions")) {
|
if (exists(value, "lacp-enable")) {
|
||||||
obj.sessions = parseSessions(location + "/sessions", value["sessions"], errors);
|
obj.lacp_enable = parseLacpEnable(location + "/lacp-enable", value["lacp-enable"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.lacp_enable = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseLacpRole(location, value, errors) {
|
||||||
|
if (type(value) != "string")
|
||||||
|
push(errors, [ location, "must be of type string" ]);
|
||||||
|
|
||||||
|
if (!(value in [ "actor", "partner" ]))
|
||||||
|
push(errors, [ location, "must be one of \"actor\" or \"partner\"" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "lacp-role")) {
|
||||||
|
obj.lacp_role = parseLacpRole(location + "/lacp-role", value["lacp-role"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.lacp_role = "actor";
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseLacpMode(location, value, errors) {
|
||||||
|
if (type(value) != "string")
|
||||||
|
push(errors, [ location, "must be of type string" ]);
|
||||||
|
|
||||||
|
if (!(value in [ "active", "passive" ]))
|
||||||
|
push(errors, [ location, "must be one of \"active\" or \"passive\"" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "lacp-mode")) {
|
||||||
|
obj.lacp_mode = parseLacpMode(location + "/lacp-mode", value["lacp-mode"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.lacp_mode = "passive";
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseLacpPortAdminKey(location, value, errors) {
|
||||||
|
if (type(value) in [ "int", "double" ]) {
|
||||||
|
if (value > 65535)
|
||||||
|
push(errors, [ location, "must be lower than or equal to 65535" ]);
|
||||||
|
|
||||||
|
if (value < 1)
|
||||||
|
push(errors, [ location, "must be bigger than or equal to 1" ]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "lacp-port-admin-key")) {
|
||||||
|
obj.lacp_port_admin_key = parseLacpPortAdminKey(location + "/lacp-port-admin-key", value["lacp-port-admin-key"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.lacp_port_admin_key = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseLacpPortPriority(location, value, errors) {
|
||||||
|
if (type(value) in [ "int", "double" ]) {
|
||||||
|
if (value > 65535)
|
||||||
|
push(errors, [ location, "must be lower than or equal to 65535" ]);
|
||||||
|
|
||||||
|
if (value < 1)
|
||||||
|
push(errors, [ location, "must be bigger than or equal to 1" ]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "lacp-port-priority")) {
|
||||||
|
obj.lacp_port_priority = parseLacpPortPriority(location + "/lacp-port-priority", value["lacp-port-priority"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.lacp_port_priority = 32768;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseLacpSystemPriority(location, value, errors) {
|
||||||
|
if (type(value) in [ "int", "double" ]) {
|
||||||
|
if (value > 65535)
|
||||||
|
push(errors, [ location, "must be lower than or equal to 65535" ]);
|
||||||
|
|
||||||
|
if (value < 1)
|
||||||
|
push(errors, [ location, "must be bigger than or equal to 1" ]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "lacp-system-priority")) {
|
||||||
|
obj.lacp_system_priority = parseLacpSystemPriority(location + "/lacp-system-priority", value["lacp-system-priority"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.lacp_system_priority = 32768;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseLacpPchanAdminKey(location, value, errors) {
|
||||||
|
if (type(value) in [ "int", "double" ]) {
|
||||||
|
if (value > 65535)
|
||||||
|
push(errors, [ location, "must be lower than or equal to 65535" ]);
|
||||||
|
|
||||||
|
if (value < 1)
|
||||||
|
push(errors, [ location, "must be bigger than or equal to 1" ]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "lacp-pchan-admin-key")) {
|
||||||
|
obj.lacp_pchan_admin_key = parseLacpPchanAdminKey(location + "/lacp-pchan-admin-key", value["lacp-pchan-admin-key"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseLacpTimeout(location, value, errors) {
|
||||||
|
if (type(value) != "string")
|
||||||
|
push(errors, [ location, "must be of type string" ]);
|
||||||
|
|
||||||
|
if (!(value in [ "short", "long" ]))
|
||||||
|
push(errors, [ location, "must be one of \"short\" or \"long\"" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "lacp-timeout")) {
|
||||||
|
obj.lacp_timeout = parseLacpTimeout(location + "/lacp-timeout", value["lacp-timeout"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.lacp_timeout = "long";
|
||||||
}
|
}
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
@@ -1146,8 +1211,28 @@ function instantiateEthernet(location, value, errors) {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exists(value, "port-isolation")) {
|
if (exists(value, "lacp-config")) {
|
||||||
obj.port_isolation = parsePortIsolation(location + "/port-isolation", value["port-isolation"], errors);
|
obj.lacp_config = parseLacpConfig(location + "/lacp-config", value["lacp-config"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseTrunkGroup(location, value, errors) {
|
||||||
|
if (type(value) in [ "int", "double" ]) {
|
||||||
|
if (value > 64)
|
||||||
|
push(errors, [ location, "must be lower than or equal to 64" ]);
|
||||||
|
|
||||||
|
if (value < 1)
|
||||||
|
push(errors, [ location, "must be bigger than or equal to 1" ]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "trunk-group")) {
|
||||||
|
obj.trunk_group = parseTrunkGroup(location + "/trunk-group", value["trunk-group"], errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
@@ -1259,6 +1344,115 @@ function instantiateSwitch(location, value, errors) {
|
|||||||
obj.roles = parseRoles(location + "/roles", value["roles"], errors);
|
obj.roles = parseRoles(location + "/roles", value["roles"], errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseInstances(location, value, errors) {
|
||||||
|
if (type(value) == "array") {
|
||||||
|
function parseItem(location, value, errors) {
|
||||||
|
if (type(value) == "object") {
|
||||||
|
let obj = {};
|
||||||
|
|
||||||
|
function parseId(location, value, errors) {
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "id")) {
|
||||||
|
obj.id = parseId(location + "/id", value["id"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseEnabled(location, value, errors) {
|
||||||
|
if (type(value) != "bool")
|
||||||
|
push(errors, [ location, "must be of type boolean" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "enabled")) {
|
||||||
|
obj.enabled = parseEnabled(location + "/enabled", value["enabled"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parsePriority(location, value, errors) {
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "priority")) {
|
||||||
|
obj.priority = parsePriority(location + "/priority", value["priority"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.priority = 32768;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseForward_delay(location, value, errors) {
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "forward_delay")) {
|
||||||
|
obj.forward_delay = parseForward_delay(location + "/forward_delay", value["forward_delay"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.forward_delay = 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseHello_time(location, value, errors) {
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "hello_time")) {
|
||||||
|
obj.hello_time = parseHello_time(location + "/hello_time", value["hello_time"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.hello_time = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseMax_age(location, value, errors) {
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "max_age")) {
|
||||||
|
obj.max_age = parseMax_age(location + "/max_age", value["max_age"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.max_age = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "object")
|
||||||
|
push(errors, [ location, "must be of type object" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return map(value, (item, i) => parseItem(location + "/" + i, item, errors));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "array")
|
||||||
|
push(errors, [ location, "must be of type array" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "instances")) {
|
||||||
|
obj.instances = parseInstances(location + "/instances", value["instances"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1541,6 +1735,171 @@ function instantiateSwitch(location, value, errors) {
|
|||||||
obj.ieee8021x = parseIeee8021x(location + "/ieee8021x", value["ieee8021x"], errors);
|
obj.ieee8021x = parseIeee8021x(location + "/ieee8021x", value["ieee8021x"], errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parsePortIsolation(location, value, errors) {
|
||||||
|
if (type(value) == "object") {
|
||||||
|
let obj = {};
|
||||||
|
|
||||||
|
function parseSessions(location, value, errors) {
|
||||||
|
if (type(value) == "array") {
|
||||||
|
function parseItem(location, value, errors) {
|
||||||
|
if (type(value) == "object") {
|
||||||
|
let obj = {};
|
||||||
|
|
||||||
|
function parseId(location, value, errors) {
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "id")) {
|
||||||
|
obj.id = parseId(location + "/id", value["id"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseUplink(location, value, errors) {
|
||||||
|
if (type(value) == "object") {
|
||||||
|
let obj = {};
|
||||||
|
|
||||||
|
function parseInterfaceList(location, value, errors) {
|
||||||
|
if (type(value) == "array") {
|
||||||
|
function parseItem(location, value, errors) {
|
||||||
|
if (type(value) != "string")
|
||||||
|
push(errors, [ location, "must be of type string" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return map(value, (item, i) => parseItem(location + "/" + i, item, errors));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "array")
|
||||||
|
push(errors, [ location, "must be of type array" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "interface-list")) {
|
||||||
|
obj.interface_list = parseInterfaceList(location + "/interface-list", value["interface-list"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "object")
|
||||||
|
push(errors, [ location, "must be of type object" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "uplink")) {
|
||||||
|
obj.uplink = parseUplink(location + "/uplink", value["uplink"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseDownlink(location, value, errors) {
|
||||||
|
if (type(value) == "object") {
|
||||||
|
let obj = {};
|
||||||
|
|
||||||
|
function parseInterfaceList(location, value, errors) {
|
||||||
|
if (type(value) == "array") {
|
||||||
|
function parseItem(location, value, errors) {
|
||||||
|
if (type(value) != "string")
|
||||||
|
push(errors, [ location, "must be of type string" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return map(value, (item, i) => parseItem(location + "/" + i, item, errors));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "array")
|
||||||
|
push(errors, [ location, "must be of type array" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "interface-list")) {
|
||||||
|
obj.interface_list = parseInterfaceList(location + "/interface-list", value["interface-list"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "object")
|
||||||
|
push(errors, [ location, "must be of type object" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "downlink")) {
|
||||||
|
obj.downlink = parseDownlink(location + "/downlink", value["downlink"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "object")
|
||||||
|
push(errors, [ location, "must be of type object" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return map(value, (item, i) => parseItem(location + "/" + i, item, errors));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "array")
|
||||||
|
push(errors, [ location, "must be of type array" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "sessions")) {
|
||||||
|
obj.sessions = parseSessions(location + "/sessions", value["sessions"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "object")
|
||||||
|
push(errors, [ location, "must be of type object" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "port-isolation")) {
|
||||||
|
obj.port_isolation = parsePortIsolation(location + "/port-isolation", value["port-isolation"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseJumboFrames(location, value, errors) {
|
||||||
|
if (type(value) != "bool")
|
||||||
|
push(errors, [ location, "must be of type boolean" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "jumbo-frames")) {
|
||||||
|
obj.jumbo_frames = parseJumboFrames(location + "/jumbo-frames", value["jumbo-frames"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.jumbo_frames = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseTrunkBalanceMethod(location, value, errors) {
|
||||||
|
if (type(value) != "string")
|
||||||
|
push(errors, [ location, "must be of type string" ]);
|
||||||
|
|
||||||
|
if (!(value in [ "dst-ip", "dst-mac", "src-dst-ip", "src-dst-mac", "src-ip", "src-mac" ]))
|
||||||
|
push(errors, [ location, "must be one of \"dst-ip\", \"dst-mac\", \"src-dst-ip\", \"src-dst-mac\", \"src-ip\" or \"src-mac\"" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "trunk-balance-method")) {
|
||||||
|
obj.trunk_balance_method = parseTrunkBalanceMethod(location + "/trunk-balance-method", value["trunk-balance-method"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.trunk_balance_method = "src-dst-mac";
|
||||||
|
}
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2549,8 +2908,8 @@ function instantiateInterfaceIpv4(location, value, errors) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function parseVrf(location, value, errors) {
|
function parseVrf(location, value, errors) {
|
||||||
if (!(type(value) in [ "int", "double" ]))
|
if (type(value) != "int")
|
||||||
push(errors, [ location, "must be of type number" ]);
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
@@ -2622,8 +2981,8 @@ function instantiateInterfaceIpv4(location, value, errors) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function parseVrf(location, value, errors) {
|
function parseVrf(location, value, errors) {
|
||||||
if (!(type(value) in [ "int", "double" ]))
|
if (type(value) != "int")
|
||||||
push(errors, [ location, "must be of type number" ]);
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
@@ -2689,8 +3048,8 @@ function instantiateInterfaceIpv4(location, value, errors) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function parseVrf(location, value, errors) {
|
function parseVrf(location, value, errors) {
|
||||||
if (!(type(value) in [ "int", "double" ]))
|
if (type(value) != "int")
|
||||||
push(errors, [ location, "must be of type number" ]);
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
@@ -10132,6 +10491,53 @@ function instantiateServiceTelnet(location, value, errors) {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function instantiateServiceHttps(location, value, errors) {
|
||||||
|
if (type(value) == "object") {
|
||||||
|
let obj = {};
|
||||||
|
|
||||||
|
function parseHttpsPort(location, value, errors) {
|
||||||
|
if (type(value) in [ "int", "double" ]) {
|
||||||
|
if (value > 65535)
|
||||||
|
push(errors, [ location, "must be lower than or equal to 65535" ]);
|
||||||
|
|
||||||
|
if (value < 1)
|
||||||
|
push(errors, [ location, "must be bigger than or equal to 1" ]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "int")
|
||||||
|
push(errors, [ location, "must be of type integer" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "https-port")) {
|
||||||
|
obj.https_port = parseHttpsPort(location + "/https-port", value["https-port"], errors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj.https_port = 443;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseEnable(location, value, errors) {
|
||||||
|
if (type(value) != "bool")
|
||||||
|
push(errors, [ location, "must be of type boolean" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "enable")) {
|
||||||
|
obj.enable = parseEnable(location + "/enable", value["enable"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "object")
|
||||||
|
push(errors, [ location, "must be of type object" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
function instantiateService(location, value, errors) {
|
function instantiateService(location, value, errors) {
|
||||||
if (type(value) == "object") {
|
if (type(value) == "object") {
|
||||||
let obj = {};
|
let obj = {};
|
||||||
@@ -10228,6 +10634,10 @@ function instantiateService(location, value, errors) {
|
|||||||
obj.telnet = instantiateServiceTelnet(location + "/telnet", value["telnet"], errors);
|
obj.telnet = instantiateServiceTelnet(location + "/telnet", value["telnet"], errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (exists(value, "https")) {
|
||||||
|
obj.https = instantiateServiceHttps(location + "/https", value["https"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10700,6 +11110,23 @@ function newUCentralState(location, value, errors) {
|
|||||||
obj.uuid = parseUuid(location + "/uuid", value["uuid"], errors);
|
obj.uuid = parseUuid(location + "/uuid", value["uuid"], errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parsePublic_ip_lookup(location, value, errors) {
|
||||||
|
if (type(value) == "string") {
|
||||||
|
if (!matchUcFqdn(value))
|
||||||
|
push(errors, [ location, "must be a valid fully qualified domain name" ]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type(value) != "string")
|
||||||
|
push(errors, [ location, "must be of type string" ]);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists(value, "public_ip_lookup")) {
|
||||||
|
obj.public_ip_lookup = parsePublic_ip_lookup(location + "/public_ip_lookup", value["public_ip_lookup"], errors);
|
||||||
|
}
|
||||||
|
|
||||||
if (exists(value, "unit")) {
|
if (exists(value, "unit")) {
|
||||||
obj.unit = instantiateUnit(location + "/unit", value["unit"], errors);
|
obj.unit = instantiateUnit(location + "/unit", value["unit"], errors);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ properties:
|
|||||||
type: string
|
type: string
|
||||||
description:
|
description:
|
||||||
An IPv4 addreess.
|
An IPv4 addreess.
|
||||||
|
public_ip:
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
|
The public IP address of internet connection.
|
||||||
leasetime:
|
leasetime:
|
||||||
type: number
|
type: number
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ items:
|
|||||||
$ref: "https://ucentral.io/state/v1/interface/clients/"
|
$ref: "https://ucentral.io/state/v1/interface/clients/"
|
||||||
counters:
|
counters:
|
||||||
$ref: "https://ucentral.io/state/v1/interface/counter/"
|
$ref: "https://ucentral.io/state/v1/interface/counter/"
|
||||||
|
delta_counters:
|
||||||
|
$ref: "https://ucentral.io/state/v1/interface/counter/"
|
||||||
mesh-path:
|
mesh-path:
|
||||||
$ref: "https://ucentral.io/state/v1/interface/mesh-path/"
|
$ref: "https://ucentral.io/state/v1/interface/mesh-path/"
|
||||||
ssids:
|
ssids:
|
||||||
|
|||||||
67
state/lacp-trunks.yml
Normal file
67
state/lacp-trunks.yml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
description:
|
||||||
|
List of dynamically created trunks.
|
||||||
|
properties:
|
||||||
|
trunk-identifier:
|
||||||
|
type: integer
|
||||||
|
description:
|
||||||
|
Logical identifier for the trunk.
|
||||||
|
minimum: 1
|
||||||
|
maximum: 64
|
||||||
|
member-port:
|
||||||
|
type: string
|
||||||
|
description: List of member ports under this trunk.
|
||||||
|
system-priority:
|
||||||
|
type: number
|
||||||
|
description:
|
||||||
|
LACP System priority.
|
||||||
|
port-priority:
|
||||||
|
type: number
|
||||||
|
description:
|
||||||
|
LACP port priority.
|
||||||
|
port-state:
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
|
Port state.
|
||||||
|
lacpdu-sent:
|
||||||
|
type: number
|
||||||
|
description:
|
||||||
|
Number of LACP Data Units (PDUs) sent.
|
||||||
|
lacpdu-recv:
|
||||||
|
type: number
|
||||||
|
description:
|
||||||
|
Number of LACP Data Units (PDUs) received.
|
||||||
|
markerpdu-sent:
|
||||||
|
type: number
|
||||||
|
description:
|
||||||
|
Number of Marker PDUs sent.
|
||||||
|
markerpdu-recv:
|
||||||
|
type: number
|
||||||
|
description:
|
||||||
|
Number of Marker PDUs received.
|
||||||
|
unknownpkt-recv:
|
||||||
|
type: number
|
||||||
|
description:
|
||||||
|
Number of unknown packets received.
|
||||||
|
illegalpkt-recv:
|
||||||
|
type: number
|
||||||
|
description:
|
||||||
|
Number of illegal packets received.
|
||||||
|
port-oper-key:
|
||||||
|
type: number
|
||||||
|
description:
|
||||||
|
Operational key for the port.
|
||||||
|
partner-oper-key:
|
||||||
|
type: number
|
||||||
|
description:
|
||||||
|
Operational key for the partner.
|
||||||
|
oper-state:
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
|
Operational state.
|
||||||
|
partner-oper-state:
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
|
Operational state of the partner.
|
||||||
@@ -19,6 +19,8 @@ properties:
|
|||||||
- half
|
- half
|
||||||
counters:
|
counters:
|
||||||
$ref: "https://ucentral.io/state/v1/interface/counter/"
|
$ref: "https://ucentral.io/state/v1/interface/counter/"
|
||||||
|
delta_counters:
|
||||||
|
$ref: "https://ucentral.io/state/v1/interface/counter/"
|
||||||
poe:
|
poe:
|
||||||
description:
|
description:
|
||||||
This section describes the ethernet poe-port link-state object (statistics + PD info).
|
This section describes the ethernet poe-port link-state object (statistics + PD info).
|
||||||
|
|||||||
@@ -54,3 +54,7 @@ properties:
|
|||||||
$ref: "https://ucentral.io/state/v1/link-state/"
|
$ref: "https://ucentral.io/state/v1/link-state/"
|
||||||
mac-address-list:
|
mac-address-list:
|
||||||
$ref: "https://ucentral.io/state/v1/mac-address-list/"
|
$ref: "https://ucentral.io/state/v1/mac-address-list/"
|
||||||
|
static-trunks:
|
||||||
|
$ref: "https://ucentral.io/state/v1/static-trunks/"
|
||||||
|
lacp-trunks:
|
||||||
|
$ref: "https://ucentral.io/state/v1/lacp-trunks/"
|
||||||
|
|||||||
18
state/static-trunks.yml
Normal file
18
state/static-trunks.yml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
description:
|
||||||
|
List of statically created trunks.
|
||||||
|
properties:
|
||||||
|
trunk-identifier:
|
||||||
|
type: integer
|
||||||
|
description:
|
||||||
|
Logical identifier for the trunk.
|
||||||
|
minimum: 1
|
||||||
|
maximum: 64
|
||||||
|
member-ports:
|
||||||
|
type: array
|
||||||
|
description:
|
||||||
|
List of member ports under this static trunk.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
@@ -79,6 +79,16 @@ let delta = 1;
|
|||||||
if (telemetry)
|
if (telemetry)
|
||||||
delta = 0;
|
delta = 0;
|
||||||
|
|
||||||
|
let public_ip_file = "/tmp/public_ip";
|
||||||
|
let public_ip = "";
|
||||||
|
if (cfg.public_ip_lookup) {
|
||||||
|
if (!fs.access(public_ip_file))
|
||||||
|
system(sprintf("/usr/bin/curl -m 3 %s -o %s", cfg.public_ip_lookup, public_ip_file));
|
||||||
|
let online_file = fs.open(public_ip_file);
|
||||||
|
public_ip = online_file.read("all") || '';
|
||||||
|
online_file.close();
|
||||||
|
}
|
||||||
|
|
||||||
global.tid_stats = (index(stats.types, 'tid-stats') > 0);
|
global.tid_stats = (index(stats.types, 'tid-stats') > 0);
|
||||||
|
|
||||||
/* load state data */
|
/* load state data */
|
||||||
@@ -412,6 +422,8 @@ cursor.foreach("network", "interface", function(d) {
|
|||||||
push(ipv4, sprintf("%s/%d", a.address, a.mask));
|
push(ipv4, sprintf("%s/%d", a.address, a.mask));
|
||||||
|
|
||||||
iface.ipv4.addresses = ipv4;
|
iface.ipv4.addresses = ipv4;
|
||||||
|
if( cfg.public_ip_lookup && length(public_ip))
|
||||||
|
iface.ipv4.public_ip = public_ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (length(status["ipv6-address"])) {
|
if (length(status["ipv6-address"])) {
|
||||||
|
|||||||
231
ucentral.capabilities.pretty.json
Normal file
231
ucentral.capabilities.pretty.json
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
{
|
||||||
|
"description": "uCentral protocol (OpenLan) device and features capabilities schema",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"serial": {
|
||||||
|
"type": "string",
|
||||||
|
"examples": [
|
||||||
|
"aabbccddeeff"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"firmware": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Platform revision",
|
||||||
|
"examples": [
|
||||||
|
"Rel 1.6 build 5"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"platform": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"Switch",
|
||||||
|
"AP"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Device model"
|
||||||
|
},
|
||||||
|
"hw-sku": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Stock keeping unit"
|
||||||
|
},
|
||||||
|
"compatible": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Compatibility string, that defines the family of the device"
|
||||||
|
},
|
||||||
|
"base-mac": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Switch MAC address",
|
||||||
|
"format": "uc-mac",
|
||||||
|
"examples": [
|
||||||
|
"aa:bb:cc:dd:ee:ff"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"port-list": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "The list of physical network devices",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The logical name of the port that is used by the OS",
|
||||||
|
"examples": [
|
||||||
|
"Ethernet0",
|
||||||
|
"Ethernet1",
|
||||||
|
"Ethernet76"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"front-panel-number": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The identification number of the port as can be seen on the front-panel of the device"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port-capabilities": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Description of physical ports and their form-factors",
|
||||||
|
"properties": {
|
||||||
|
"form-factors": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"RJ45",
|
||||||
|
"SFP",
|
||||||
|
"SFP+",
|
||||||
|
"SFP28",
|
||||||
|
"SFP-DD",
|
||||||
|
"QSFP",
|
||||||
|
"QSFP+",
|
||||||
|
"QSFP28",
|
||||||
|
"QSFP-DD"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ports-list": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"examples": [
|
||||||
|
"RJ45"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ports": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"examples": [
|
||||||
|
"Ethernet1"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"poe-capabilities": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Description of physical ports and their PoE capabilities",
|
||||||
|
"properties": {
|
||||||
|
"supported-standards": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
".3AF-POE",
|
||||||
|
".3AT-POE+",
|
||||||
|
".3BT-PoE++",
|
||||||
|
"PreStandard-Passive"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"power-budget": {
|
||||||
|
"type": "integer",
|
||||||
|
"examples": [
|
||||||
|
2000
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"poe-ports": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"examples": [
|
||||||
|
".3AF-POE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"budget-capacity": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ports": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"examples": [
|
||||||
|
"Ethernet1"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"supported-features": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "List of all features supported by the device",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"VLAN",
|
||||||
|
"Port-Isolation",
|
||||||
|
"Spanning-Tree",
|
||||||
|
"Spanning-Tree-Rapid",
|
||||||
|
"Spanning-Tree-Per-VLAN",
|
||||||
|
"Spanning-Tree-Per-VLAN-Rapid",
|
||||||
|
"Spanning-Tree-MSTP",
|
||||||
|
"SVI-StaticIPv4",
|
||||||
|
"SVI-StaticIPv6",
|
||||||
|
"Interface-StaticIPv4",
|
||||||
|
"Interface-StaticIPv6",
|
||||||
|
"Routing-VRF",
|
||||||
|
"Routing-IPv4-Route-Blackhole",
|
||||||
|
"Routing-IPv4-Route-Unreachable",
|
||||||
|
"Routing-IPv4-Nexthop",
|
||||||
|
"Routing-IPv4-Broadcast",
|
||||||
|
"Routing-IPv4-Multicast-IGMP-Snooping",
|
||||||
|
"Routing-IPv4-Multicast-IGMP-Querier",
|
||||||
|
"Routing-IPv4-Multicast-IGMP-Static",
|
||||||
|
"Routing-IPv4-DHCP-Server",
|
||||||
|
"Routing-IPv4-DHCP-Relay",
|
||||||
|
"Routing-IPv4-DHCP-Snooping",
|
||||||
|
"Routing-IPv4-Port-Forward",
|
||||||
|
"Routing-IPv6-DHCP-Relay",
|
||||||
|
"Routing-IPv6-DHCP-Stateful",
|
||||||
|
"Routing-IPv6-DHCP-Stateless",
|
||||||
|
"Routing-IPv6-Port-Forward",
|
||||||
|
"PoE-Reset",
|
||||||
|
"Port-Access-Control",
|
||||||
|
"PAC-Dynamic-Auth",
|
||||||
|
"System-PasswordChange",
|
||||||
|
"System-SwUpdate",
|
||||||
|
"System-SwUpdate-Partial",
|
||||||
|
"Port-Mirroring",
|
||||||
|
"Service-SSH",
|
||||||
|
"Service-RSSH",
|
||||||
|
"Service-Telnet",
|
||||||
|
"Service-LLDP",
|
||||||
|
"Service-HTTP",
|
||||||
|
"Service-HTTPS",
|
||||||
|
"Service-GPS",
|
||||||
|
"Service-IGMP",
|
||||||
|
"Service-NTP",
|
||||||
|
"Service-MDNS",
|
||||||
|
"Service-QoS",
|
||||||
|
"Service-Syslog",
|
||||||
|
"Service-PAC",
|
||||||
|
"Service-Wireguard-Overlay",
|
||||||
|
"Service-Radius-Proxy",
|
||||||
|
"Service-Online-Check",
|
||||||
|
"Service-CaptivePortal",
|
||||||
|
"Service-PublicIpCheck",
|
||||||
|
"Tunneling-VxLAN",
|
||||||
|
"Tunneling-GRE",
|
||||||
|
"Tunneling-GRE6",
|
||||||
|
"Tunneling-L2TP",
|
||||||
|
"Tunneling-Mesh"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"$defs": {}
|
||||||
|
}
|
||||||
@@ -13,6 +13,11 @@
|
|||||||
"description": "The unique ID of the configuration. This is the unix timestamp of when the config was created.",
|
"description": "The unique ID of the configuration. This is the unix timestamp of when the config was created.",
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"public_ip_lookup": {
|
||||||
|
"description": "The fqdn to retrieve public ip of internet connection.",
|
||||||
|
"type": "string",
|
||||||
|
"format": "uc-fqdn"
|
||||||
|
},
|
||||||
"unit": {
|
"unit": {
|
||||||
"description": "A device has certain properties that describe its identity and location. These properties are described inside this object.",
|
"description": "A device has certain properties that describe its identity and location. These properties are described inside this object.",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -106,6 +111,16 @@
|
|||||||
"description": "Global config for controlling whether MLD snooping is enabled. If this global setting is disabled, all VLANs are treated as disabled, whether they are enabled or not.",
|
"description": "Global config for controlling whether MLD snooping is enabled. If this global setting is disabled, all VLANs are treated as disabled, whether they are enabled or not.",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": true
|
"default": true
|
||||||
|
},
|
||||||
|
"unknown-multicast-flood-control": {
|
||||||
|
"description": "Global config for the unknown multicast flood control feature. This enables the system to forward unknown multicast packets only to a multicast router (mrouter).",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"querier-enable": {
|
||||||
|
"description": "Global IGMP querier config. This enables all Vlan interfaces to act as a querier.",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -429,7 +444,7 @@
|
|||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"description": "VRF id.",
|
"description": "VRF id.",
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -450,7 +465,7 @@
|
|||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"description": "VRF id.",
|
"description": "VRF id.",
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -671,48 +686,74 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"port-isolation": {
|
"trunk-group": {
|
||||||
"description": "This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. Omitting this configuration completely fully disables any port-isolation configuration on this given port.",
|
"description": "Associates this port to a trunk or a port-channel.",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 64
|
||||||
|
},
|
||||||
|
"lacp-config": {
|
||||||
|
"description": "This section describes the 802.3ad Link Aggregation Control Protocol (LACP) configuration for the current interface.",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"sessions": {
|
"lacp-enable": {
|
||||||
"description": "Allow selected port to forward traffic in the provided session-based format.",
|
"description": "Enables 802.3ad Link Aggregation Control Protocol (LACP) for the current interface.",
|
||||||
"type": "array",
|
"type": "boolean",
|
||||||
"items": {
|
"default": false
|
||||||
"type": "object",
|
},
|
||||||
"properties": {
|
"lacp-role": {
|
||||||
"id": {
|
"description": "Configures the port LACP role as actor or partner.",
|
||||||
"description": "Session id to configure.",
|
"type": "string",
|
||||||
"type": "integer"
|
"enum": [
|
||||||
},
|
"actor",
|
||||||
"uplink": {
|
"partner"
|
||||||
"description": "Configuration object for uplink interface(s)",
|
],
|
||||||
"type": "object",
|
"default": "actor"
|
||||||
"properties": {
|
},
|
||||||
"interface-list": {
|
"lacp-mode": {
|
||||||
"description": "List of interfaces (either physical or trunk ports)",
|
"description": "Configures the LACP negotiation activity mode as active or passive.",
|
||||||
"type": "array",
|
"type": "string",
|
||||||
"items": {
|
"enum": [
|
||||||
"type": "string"
|
"active",
|
||||||
}
|
"passive"
|
||||||
}
|
],
|
||||||
}
|
"default": "passive"
|
||||||
},
|
},
|
||||||
"downlink": {
|
"lacp-port-admin-key": {
|
||||||
"description": "Configuration object for downlink interface(s)",
|
"description": "Configures the port's LACP administration key.",
|
||||||
"type": "object",
|
"type": "integer",
|
||||||
"properties": {
|
"minimum": 1,
|
||||||
"interface-list": {
|
"maximum": 65535,
|
||||||
"description": "List of interfaces (either physical or trunk ports)",
|
"default": 1
|
||||||
"type": "array",
|
},
|
||||||
"items": {
|
"lacp-port-priority": {
|
||||||
"type": "string"
|
"description": "Configures the LACP port priority.",
|
||||||
}
|
"type": "integer",
|
||||||
}
|
"minimum": 1,
|
||||||
}
|
"maximum": 65535,
|
||||||
}
|
"default": 32768
|
||||||
}
|
},
|
||||||
}
|
"lacp-system-priority": {
|
||||||
|
"description": "Configures the LACP System priority.",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 65535,
|
||||||
|
"default": 32768
|
||||||
|
},
|
||||||
|
"lacp-pchan-admin-key": {
|
||||||
|
"description": "Configures the port channel's LACP administration key (optional).",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 65535
|
||||||
|
},
|
||||||
|
"lacp-timeout": {
|
||||||
|
"description": "Configures the timeout to wait for the next LACP data unit.",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"short",
|
||||||
|
"long"
|
||||||
|
],
|
||||||
|
"default": "long"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -767,42 +808,42 @@
|
|||||||
"downstream"
|
"downstream"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
},
|
"instances": {
|
||||||
"instances": {
|
"description": "Define a list of configuration for each STP instance. Meaning of this field depends on current STP protocol (switch.loop-detection.protocol)",
|
||||||
"description": "Define a list of configuration for each STP instance. Meaning of this field depends on current STP protocol (switch.loop-detection.protocol)",
|
"type": "array",
|
||||||
"type": "array",
|
"items": {
|
||||||
"items": {
|
"type": "object",
|
||||||
"type": "object",
|
"properties": {
|
||||||
"properties": {
|
"id": {
|
||||||
"id": {
|
"description": "Indicates instance to configure. Depends on current STP protocol If RPVSTP/PVSTP - vlan id If MSTP - instance id",
|
||||||
"description": "Indicates instance to configure. Depends on current STP protocol If RPVSTP/PVSTP - vlan id If MSTP - instance id",
|
"type": "integer"
|
||||||
"type": "integer"
|
},
|
||||||
},
|
"enabled": {
|
||||||
"enabled": {
|
"description": "Enable STP on this instance.",
|
||||||
"description": "Enable STP on this instance.",
|
"type": "boolean",
|
||||||
"type": "boolean",
|
"default": true
|
||||||
"default": true
|
},
|
||||||
},
|
"priority": {
|
||||||
"priority": {
|
"description": "Bridge priority.",
|
||||||
"description": "Bridge priority.",
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 32768
|
||||||
"default": 32768
|
},
|
||||||
},
|
"forward_delay": {
|
||||||
"forward_delay": {
|
"description": "Defines the amount of time a switch port stays in the Listening and Learning states before transitioning to the Forwarding state.",
|
||||||
"description": "Defines the amount of time a switch port stays in the Listening and Learning states before transitioning to the Forwarding state.",
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 15
|
||||||
"default": 15
|
},
|
||||||
},
|
"hello_time": {
|
||||||
"hello_time": {
|
"description": "Determines how often switches send BPDU.",
|
||||||
"description": "Determines how often switches send BPDU.",
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 2
|
||||||
"default": 2
|
},
|
||||||
},
|
"max_age": {
|
||||||
"max_age": {
|
"description": "Specifies the maximum time that a switch port should wait to receive a BPDU from its neighbor before considering the link as failed or disconnected.",
|
||||||
"description": "Specifies the maximum time that a switch port should wait to receive a BPDU from its neighbor before considering the link as failed or disconnected.",
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 20
|
||||||
"default": 20
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -910,6 +951,68 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"port-isolation": {
|
||||||
|
"description": "This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. Omitting this configuration completely fully disables any port-isolation configuration on this given port.",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"sessions": {
|
||||||
|
"description": "Allow selected port to forward traffic in the provided session-based format.",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "Session id to configure.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"uplink": {
|
||||||
|
"description": "Configuration object for uplink interface(s)",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"interface-list": {
|
||||||
|
"description": "List of interfaces (either physical or trunk ports)",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"downlink": {
|
||||||
|
"description": "Configuration object for downlink interface(s)",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"interface-list": {
|
||||||
|
"description": "List of interfaces (either physical or trunk ports)",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"trunk-balance-method": {
|
||||||
|
"description": "Sets the load-distribution method among ports in aggregated links for both static and LACP based trunks.",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"dst-ip",
|
||||||
|
"dst-mac",
|
||||||
|
"src-dst-ip",
|
||||||
|
"src-dst-mac",
|
||||||
|
"src-ip",
|
||||||
|
"src-mac"
|
||||||
|
],
|
||||||
|
"default": "src-dst-mac"
|
||||||
|
"jumbo-frames": {
|
||||||
|
"description": "Enables Jumbo frames",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1340,7 +1443,7 @@
|
|||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"description": "VRF id.",
|
"description": "VRF id.",
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1369,7 +1472,7 @@
|
|||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"description": "VRF id.",
|
"description": "VRF id.",
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"description": "Optional metric value (define a NH route's weight / metric).",
|
"description": "Optional metric value (define a NH route's weight / metric).",
|
||||||
@@ -1394,7 +1497,7 @@
|
|||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"description": "VRF id.",
|
"description": "VRF id.",
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4728,6 +4831,23 @@
|
|||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"https": {
|
||||||
|
"description": "Enable the webserver with the on-boarding webui",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"https-port": {
|
||||||
|
"description": "The port that the secure HTTP server should run on.",
|
||||||
|
"type": "integer",
|
||||||
|
"maximum": 65535,
|
||||||
|
"minimum": 1,
|
||||||
|
"default": 443
|
||||||
|
},
|
||||||
|
"enable": {
|
||||||
|
"description": "This option whether secure http server should be enabled or disabled.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -10,6 +10,10 @@
|
|||||||
"uuid": {
|
"uuid": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"public_ip_lookup": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uc-fqdn"
|
||||||
|
},
|
||||||
"unit": {
|
"unit": {
|
||||||
"$ref": "#/$defs/unit"
|
"$ref": "#/$defs/unit"
|
||||||
},
|
},
|
||||||
@@ -130,6 +134,14 @@
|
|||||||
"mld-snooping-enable": {
|
"mld-snooping-enable": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": true
|
"default": true
|
||||||
|
},
|
||||||
|
"unknown-multicast-flood-control": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"querier-enable": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -251,7 +263,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -269,7 +281,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -466,41 +478,64 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"port-isolation": {
|
"trunk-group": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 64
|
||||||
|
},
|
||||||
|
"lacp-config": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"sessions": {
|
"lacp-enable": {
|
||||||
"type": "array",
|
"type": "boolean",
|
||||||
"items": {
|
"default": false
|
||||||
"type": "object",
|
},
|
||||||
"properties": {
|
"lacp-role": {
|
||||||
"id": {
|
"type": "string",
|
||||||
"type": "integer"
|
"enum": [
|
||||||
},
|
"actor",
|
||||||
"uplink": {
|
"partner"
|
||||||
"type": "object",
|
],
|
||||||
"properties": {
|
"default": "actor"
|
||||||
"interface-list": {
|
},
|
||||||
"type": "array",
|
"lacp-mode": {
|
||||||
"items": {
|
"type": "string",
|
||||||
"type": "string"
|
"enum": [
|
||||||
}
|
"active",
|
||||||
}
|
"passive"
|
||||||
}
|
],
|
||||||
},
|
"default": "passive"
|
||||||
"downlink": {
|
},
|
||||||
"type": "object",
|
"lacp-port-admin-key": {
|
||||||
"properties": {
|
"type": "integer",
|
||||||
"interface-list": {
|
"minimum": 1,
|
||||||
"type": "array",
|
"maximum": 65535,
|
||||||
"items": {
|
"default": 1
|
||||||
"type": "string"
|
},
|
||||||
}
|
"lacp-port-priority": {
|
||||||
}
|
"type": "integer",
|
||||||
}
|
"minimum": 1,
|
||||||
}
|
"maximum": 65535,
|
||||||
}
|
"default": 32768
|
||||||
}
|
},
|
||||||
|
"lacp-system-priority": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 65535,
|
||||||
|
"default": 32768
|
||||||
|
},
|
||||||
|
"lacp-pchan-admin-key": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 65535
|
||||||
|
},
|
||||||
|
"lacp-timeout": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"short",
|
||||||
|
"long"
|
||||||
|
],
|
||||||
|
"default": "long"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -547,35 +582,35 @@
|
|||||||
"downstream"
|
"downstream"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
},
|
"instances": {
|
||||||
"instances": {
|
"type": "array",
|
||||||
"type": "array",
|
"items": {
|
||||||
"items": {
|
"type": "object",
|
||||||
"type": "object",
|
"properties": {
|
||||||
"properties": {
|
"id": {
|
||||||
"id": {
|
"type": "integer"
|
||||||
"type": "integer"
|
},
|
||||||
},
|
"enabled": {
|
||||||
"enabled": {
|
"type": "boolean",
|
||||||
"type": "boolean",
|
"default": true
|
||||||
"default": true
|
},
|
||||||
},
|
"priority": {
|
||||||
"priority": {
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 32768
|
||||||
"default": 32768
|
},
|
||||||
},
|
"forward_delay": {
|
||||||
"forward_delay": {
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 15
|
||||||
"default": 15
|
},
|
||||||
},
|
"hello_time": {
|
||||||
"hello_time": {
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 2
|
||||||
"default": 2
|
},
|
||||||
},
|
"max_age": {
|
||||||
"max_age": {
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 20
|
||||||
"default": 20
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -666,6 +701,60 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"port-isolation": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"sessions": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"uplink": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"interface-list": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"downlink": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"interface-list": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"trunk-balance-method": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"dst-ip",
|
||||||
|
"dst-mac",
|
||||||
|
"src-dst-ip",
|
||||||
|
"src-dst-mac",
|
||||||
|
"src-ip",
|
||||||
|
"src-mac"
|
||||||
|
],
|
||||||
|
"default": "src-dst-mac"
|
||||||
|
},
|
||||||
|
"jumbo-frames": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1094,7 +1183,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1119,7 +1208,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
@@ -1140,7 +1229,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3622,6 +3711,20 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"service.https": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"https-port": {
|
||||||
|
"type": "integer",
|
||||||
|
"maximum": 65535,
|
||||||
|
"minimum": 1,
|
||||||
|
"default": 443
|
||||||
|
},
|
||||||
|
"enable": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"service": {
|
"service": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -3693,6 +3796,9 @@
|
|||||||
},
|
},
|
||||||
"telnet": {
|
"telnet": {
|
||||||
"$ref": "#/$defs/service.telnet"
|
"$ref": "#/$defs/service.telnet"
|
||||||
|
},
|
||||||
|
"https": {
|
||||||
|
"$ref": "#/$defs/service.https"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -13,6 +13,11 @@
|
|||||||
"description": "The unique ID of the configuration. This is the unix timestamp of when the config was created.",
|
"description": "The unique ID of the configuration. This is the unix timestamp of when the config was created.",
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"public_ip_lookup": {
|
||||||
|
"description": "The fqdn to retrieve public ip of internet connection.",
|
||||||
|
"type": "string",
|
||||||
|
"format": "uc-fqdn"
|
||||||
|
},
|
||||||
"unit": {
|
"unit": {
|
||||||
"$ref": "#/$defs/unit"
|
"$ref": "#/$defs/unit"
|
||||||
},
|
},
|
||||||
@@ -151,6 +156,16 @@
|
|||||||
"description": "Global config for controlling whether MLD snooping is enabled. If this global setting is disabled, all VLANs are treated as disabled, whether they are enabled or not.",
|
"description": "Global config for controlling whether MLD snooping is enabled. If this global setting is disabled, all VLANs are treated as disabled, whether they are enabled or not.",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": true
|
"default": true
|
||||||
|
},
|
||||||
|
"unknown-multicast-flood-control": {
|
||||||
|
"description": "Global config for the unknown multicast flood control feature. This enables the system to forward unknown multicast packets only to a multicast router (mrouter).",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"querier-enable": {
|
||||||
|
"description": "Global IGMP querier config. This enables all Vlan interfaces to act as a querier.",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -280,7 +295,7 @@
|
|||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"description": "VRF id.",
|
"description": "VRF id.",
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -301,7 +316,7 @@
|
|||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"description": "VRF id.",
|
"description": "VRF id.",
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -523,48 +538,74 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"port-isolation": {
|
"trunk-group": {
|
||||||
"description": "This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. Omitting this configuration completely fully disables any port-isolation configuration on this given port.",
|
"description": "Associates this port to a trunk or a port-channel.",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 64
|
||||||
|
},
|
||||||
|
"lacp-config": {
|
||||||
|
"description": "This section describes the 802.3ad Link Aggregation Control Protocol (LACP) configuration for the current interface.",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"sessions": {
|
"lacp-enable": {
|
||||||
"description": "Allow selected port to forward traffic in the provided session-based format.",
|
"description": "Enables 802.3ad Link Aggregation Control Protocol (LACP) for the current interface.",
|
||||||
"type": "array",
|
"type": "boolean",
|
||||||
"items": {
|
"default": false
|
||||||
"type": "object",
|
},
|
||||||
"properties": {
|
"lacp-role": {
|
||||||
"id": {
|
"description": "Configures the port LACP role as actor or partner.",
|
||||||
"description": "Session id to configure.",
|
"type": "string",
|
||||||
"type": "integer"
|
"enum": [
|
||||||
},
|
"actor",
|
||||||
"uplink": {
|
"partner"
|
||||||
"description": "Configuration object for uplink interface(s)",
|
],
|
||||||
"type": "object",
|
"default": "actor"
|
||||||
"properties": {
|
},
|
||||||
"interface-list": {
|
"lacp-mode": {
|
||||||
"description": "List of interfaces (either physical or trunk ports)",
|
"description": "Configures the LACP negotiation activity mode as active or passive.",
|
||||||
"type": "array",
|
"type": "string",
|
||||||
"items": {
|
"enum": [
|
||||||
"type": "string"
|
"active",
|
||||||
}
|
"passive"
|
||||||
}
|
],
|
||||||
}
|
"default": "passive"
|
||||||
},
|
},
|
||||||
"downlink": {
|
"lacp-port-admin-key": {
|
||||||
"description": "Configuration object for downlink interface(s)",
|
"description": "Configures the port's LACP administration key.",
|
||||||
"type": "object",
|
"type": "integer",
|
||||||
"properties": {
|
"minimum": 1,
|
||||||
"interface-list": {
|
"maximum": 65535,
|
||||||
"description": "List of interfaces (either physical or trunk ports)",
|
"default": 1
|
||||||
"type": "array",
|
},
|
||||||
"items": {
|
"lacp-port-priority": {
|
||||||
"type": "string"
|
"description": "Configures the LACP port priority.",
|
||||||
}
|
"type": "integer",
|
||||||
}
|
"minimum": 1,
|
||||||
}
|
"maximum": 65535,
|
||||||
}
|
"default": 32768
|
||||||
}
|
},
|
||||||
}
|
"lacp-system-priority": {
|
||||||
|
"description": "Configures the LACP System priority.",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 65535,
|
||||||
|
"default": 32768
|
||||||
|
},
|
||||||
|
"lacp-pchan-admin-key": {
|
||||||
|
"description": "Configures the port channel's LACP administration key (optional).",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 65535
|
||||||
|
},
|
||||||
|
"lacp-timeout": {
|
||||||
|
"description": "Configures the timeout to wait for the next LACP data unit.",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"short",
|
||||||
|
"long"
|
||||||
|
],
|
||||||
|
"default": "long"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -618,42 +659,42 @@
|
|||||||
"downstream"
|
"downstream"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
},
|
"instances": {
|
||||||
"instances": {
|
"description": "Define a list of configuration for each STP instance. Meaning of this field depends on current STP protocol (switch.loop-detection.protocol)",
|
||||||
"description": "Define a list of configuration for each STP instance. Meaning of this field depends on current STP protocol (switch.loop-detection.protocol)",
|
"type": "array",
|
||||||
"type": "array",
|
"items": {
|
||||||
"items": {
|
"type": "object",
|
||||||
"type": "object",
|
"properties": {
|
||||||
"properties": {
|
"id": {
|
||||||
"id": {
|
"description": "Indicates instance to configure. Depends on current STP protocol If RPVSTP/PVSTP - vlan id If MSTP - instance id",
|
||||||
"description": "Indicates instance to configure. Depends on current STP protocol If RPVSTP/PVSTP - vlan id If MSTP - instance id",
|
"type": "integer"
|
||||||
"type": "integer"
|
},
|
||||||
},
|
"enabled": {
|
||||||
"enabled": {
|
"description": "Enable STP on this instance.",
|
||||||
"description": "Enable STP on this instance.",
|
"type": "boolean",
|
||||||
"type": "boolean",
|
"default": true
|
||||||
"default": true
|
},
|
||||||
},
|
"priority": {
|
||||||
"priority": {
|
"description": "Bridge priority.",
|
||||||
"description": "Bridge priority.",
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 32768
|
||||||
"default": 32768
|
},
|
||||||
},
|
"forward_delay": {
|
||||||
"forward_delay": {
|
"description": "Defines the amount of time a switch port stays in the Listening and Learning states before transitioning to the Forwarding state.",
|
||||||
"description": "Defines the amount of time a switch port stays in the Listening and Learning states before transitioning to the Forwarding state.",
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 15
|
||||||
"default": 15
|
},
|
||||||
},
|
"hello_time": {
|
||||||
"hello_time": {
|
"description": "Determines how often switches send BPDU.",
|
||||||
"description": "Determines how often switches send BPDU.",
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 2
|
||||||
"default": 2
|
},
|
||||||
},
|
"max_age": {
|
||||||
"max_age": {
|
"description": "Specifies the maximum time that a switch port should wait to receive a BPDU from its neighbor before considering the link as failed or disconnected.",
|
||||||
"description": "Specifies the maximum time that a switch port should wait to receive a BPDU from its neighbor before considering the link as failed or disconnected.",
|
"type": "integer",
|
||||||
"type": "integer",
|
"default": 20
|
||||||
"default": 20
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -761,6 +802,69 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"port-isolation": {
|
||||||
|
"description": "This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. Omitting this configuration completely fully disables any port-isolation configuration on this given port.",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"sessions": {
|
||||||
|
"description": "Allow selected port to forward traffic in the provided session-based format.",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "Session id to configure.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"uplink": {
|
||||||
|
"description": "Configuration object for uplink interface(s)",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"interface-list": {
|
||||||
|
"description": "List of interfaces (either physical or trunk ports)",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"downlink": {
|
||||||
|
"description": "Configuration object for downlink interface(s)",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"interface-list": {
|
||||||
|
"description": "List of interfaces (either physical or trunk ports)",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"trunk-balance-method": {
|
||||||
|
"description": "Sets the load-distribution method among ports in aggregated links for both static and LACP based trunks.",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"dst-ip",
|
||||||
|
"dst-mac",
|
||||||
|
"src-dst-ip",
|
||||||
|
"src-dst-mac",
|
||||||
|
"src-ip",
|
||||||
|
"src-mac"
|
||||||
|
],
|
||||||
|
"default": "src-dst-mac"
|
||||||
|
},
|
||||||
|
"jumbo-frames": {
|
||||||
|
"description": "Enables Jumbo frames",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1248,7 +1352,7 @@
|
|||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"description": "VRF id.",
|
"description": "VRF id.",
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1277,7 +1381,7 @@
|
|||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"description": "VRF id.",
|
"description": "VRF id.",
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"description": "Optional metric value (define a NH route's weight / metric).",
|
"description": "Optional metric value (define a NH route's weight / metric).",
|
||||||
@@ -1302,7 +1406,7 @@
|
|||||||
},
|
},
|
||||||
"vrf": {
|
"vrf": {
|
||||||
"description": "VRF id.",
|
"description": "VRF id.",
|
||||||
"type": "number"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4172,6 +4276,23 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"service.https": {
|
||||||
|
"description": "Enable the webserver with the on-boarding webui",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"https-port": {
|
||||||
|
"description": "The port that the secure HTTP server should run on.",
|
||||||
|
"type": "integer",
|
||||||
|
"maximum": 65535,
|
||||||
|
"minimum": 1,
|
||||||
|
"default": 443
|
||||||
|
},
|
||||||
|
"enable": {
|
||||||
|
"description": "This option whether secure http server should be enabled or disabled.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"service": {
|
"service": {
|
||||||
"description": "This section describes all of the services that may be present on the AP. Each service is then referenced via its name inside an interface, ssid, ...",
|
"description": "This section describes all of the services that may be present on the AP. Each service is then referenced via its name inside an interface, ssid, ...",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -4244,6 +4365,9 @@
|
|||||||
},
|
},
|
||||||
"telnet": {
|
"telnet": {
|
||||||
"$ref": "#/$defs/service.telnet"
|
"$ref": "#/$defs/service.telnet"
|
||||||
|
},
|
||||||
|
"https": {
|
||||||
|
"$ref": "#/$defs/service.https"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -78,6 +78,12 @@
|
|||||||
},
|
},
|
||||||
"mac-address-list": {
|
"mac-address-list": {
|
||||||
"$ref": "#/$defs/mac-address-list"
|
"$ref": "#/$defs/mac-address-list"
|
||||||
|
},
|
||||||
|
"static-trunks": {
|
||||||
|
"$ref": "#/$defs/static-trunks"
|
||||||
|
},
|
||||||
|
"lacp-trunks": {
|
||||||
|
"$ref": "#/$defs/lacp-trunks"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"$defs": {
|
"$defs": {
|
||||||
@@ -325,6 +331,10 @@
|
|||||||
"description": "An IPv4 addreess."
|
"description": "An IPv4 addreess."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"public_ip": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The public IP address of internet connection."
|
||||||
|
},
|
||||||
"leasetime": {
|
"leasetime": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"description": "This is the leasetime if the IPv4 address of this logical interface was acquired via DHCPv4."
|
"description": "This is the leasetime if the IPv4 address of this logical interface was acquired via DHCPv4."
|
||||||
@@ -755,6 +765,9 @@
|
|||||||
"counters": {
|
"counters": {
|
||||||
"$ref": "#/$defs/interface.counter"
|
"$ref": "#/$defs/interface.counter"
|
||||||
},
|
},
|
||||||
|
"delta_counters": {
|
||||||
|
"$ref": "#/$defs/interface.counter"
|
||||||
|
},
|
||||||
"mesh-path": {
|
"mesh-path": {
|
||||||
"$ref": "#/$defs/interface.mesh-path"
|
"$ref": "#/$defs/interface.mesh-path"
|
||||||
},
|
},
|
||||||
@@ -883,6 +896,9 @@
|
|||||||
"counters": {
|
"counters": {
|
||||||
"$ref": "#/$defs/interface.counter"
|
"$ref": "#/$defs/interface.counter"
|
||||||
},
|
},
|
||||||
|
"delta_counters": {
|
||||||
|
"$ref": "#/$defs/interface.counter"
|
||||||
|
},
|
||||||
"poe": {
|
"poe": {
|
||||||
"description": "This section describes the ethernet poe-port link-state object (statistics + PD info). Present only in case if port has any Power sourcing capabilities.",
|
"description": "This section describes the ethernet poe-port link-state object (statistics + PD info). Present only in case if port has any Power sourcing capabilities.",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -1088,6 +1104,99 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"static-trunks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "List of statically created trunks.",
|
||||||
|
"properties": {
|
||||||
|
"trunk-identifier": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Logical identifier for the trunk.",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 64
|
||||||
|
},
|
||||||
|
"member-ports": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "List of member ports under this static trunk.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lacp-trunks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "List of dynamically created trunks.",
|
||||||
|
"properties": {
|
||||||
|
"trunk-identifier": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Logical identifier for the trunk.",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 64
|
||||||
|
},
|
||||||
|
"member-port": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "List of member ports under this trunk."
|
||||||
|
},
|
||||||
|
"system-priority": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "LACP System priority."
|
||||||
|
},
|
||||||
|
"port-priority": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "LACP port priority."
|
||||||
|
},
|
||||||
|
"port-state": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Port state."
|
||||||
|
},
|
||||||
|
"lacpdu-sent": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Number of LACP Data Units (PDUs) sent."
|
||||||
|
},
|
||||||
|
"lacpdu-recv": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Number of LACP Data Units (PDUs) received."
|
||||||
|
},
|
||||||
|
"markerpdu-sent": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Number of Marker PDUs sent."
|
||||||
|
},
|
||||||
|
"markerpdu-recv": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Number of Marker PDUs received."
|
||||||
|
},
|
||||||
|
"unknownpkt-recv": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Number of unknown packets received."
|
||||||
|
},
|
||||||
|
"illegalpkt-recv": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Number of illegal packets received."
|
||||||
|
},
|
||||||
|
"port-oper-key": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Operational key for the port."
|
||||||
|
},
|
||||||
|
"partner-oper-key": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Operational key for the partner."
|
||||||
|
},
|
||||||
|
"oper-state": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Operational state."
|
||||||
|
},
|
||||||
|
"partner-oper-state": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Operational state of the partner."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user