mirror of
				https://github.com/Telecominfraproject/ols-ucentral-schema.git
				synced 2025-11-03 19:47:49 +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.full.json 0 0
 | 
			
		||||
./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
 | 
			
		||||
mkdir -p docs
 | 
			
		||||
which generate-schema-doc > /dev/null
 | 
			
		||||
 
 | 
			
		||||
@@ -161,42 +161,69 @@ properties:
 | 
			
		||||
        type: integer
 | 
			
		||||
        minimum: 1
 | 
			
		||||
        maximum: 4094
 | 
			
		||||
  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.
 | 
			
		||||
  trunk-group:
 | 
			
		||||
    description: Associates this port to a trunk or a port-channel.
 | 
			
		||||
    type: integer
 | 
			
		||||
            uplink:
 | 
			
		||||
    minimum: 1
 | 
			
		||||
    maximum: 64
 | 
			
		||||
  lacp-config:
 | 
			
		||||
    description:
 | 
			
		||||
                Configuration object for uplink interface(s)
 | 
			
		||||
      This section describes the 802.3ad Link Aggregation Control Protocol (LACP) configuration for the current interface.
 | 
			
		||||
    type: object
 | 
			
		||||
    properties:
 | 
			
		||||
                interface-list:
 | 
			
		||||
      lacp-enable:
 | 
			
		||||
        description:
 | 
			
		||||
                    List of interfaces (either physical or trunk ports)
 | 
			
		||||
                  type: array
 | 
			
		||||
                  items:
 | 
			
		||||
          Enables 802.3ad Link Aggregation Control Protocol (LACP) for the current interface.
 | 
			
		||||
        type: boolean
 | 
			
		||||
        default: false
 | 
			
		||||
      lacp-role:
 | 
			
		||||
        description:
 | 
			
		||||
          Configures the port LACP role as actor or partner.
 | 
			
		||||
        type: string
 | 
			
		||||
            downlink:
 | 
			
		||||
        enum:
 | 
			
		||||
        - actor
 | 
			
		||||
        - partner
 | 
			
		||||
        default: actor
 | 
			
		||||
      lacp-mode:
 | 
			
		||||
        description:
 | 
			
		||||
                Configuration object for downlink interface(s)
 | 
			
		||||
              type: object
 | 
			
		||||
              properties:
 | 
			
		||||
                interface-list:
 | 
			
		||||
                  description:
 | 
			
		||||
                    List of interfaces (either physical or trunk ports)
 | 
			
		||||
                  type: array
 | 
			
		||||
                  items:
 | 
			
		||||
          Configures the LACP negotiation activity mode as active or passive.
 | 
			
		||||
        type: string
 | 
			
		||||
        enum:
 | 
			
		||||
        - active
 | 
			
		||||
        - passive
 | 
			
		||||
        default: passive
 | 
			
		||||
      lacp-port-admin-key:
 | 
			
		||||
        description:
 | 
			
		||||
          Configures the port's LACP administration key.
 | 
			
		||||
        type: integer
 | 
			
		||||
        minimum: 1
 | 
			
		||||
        maximum: 65535
 | 
			
		||||
        default: 1
 | 
			
		||||
      lacp-port-priority:
 | 
			
		||||
        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
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ properties:
 | 
			
		||||
        vrf:
 | 
			
		||||
          description:
 | 
			
		||||
            VRF id.
 | 
			
		||||
          type: number
 | 
			
		||||
          type: integer
 | 
			
		||||
  ipv4-unreachable:
 | 
			
		||||
    description:
 | 
			
		||||
      Define a list of non-interface specific UNREACHABLE routes.
 | 
			
		||||
@@ -58,4 +58,4 @@ properties:
 | 
			
		||||
        vrf:
 | 
			
		||||
          description:
 | 
			
		||||
            VRF id.
 | 
			
		||||
          type: number
 | 
			
		||||
          type: integer
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ properties:
 | 
			
		||||
        vrf:
 | 
			
		||||
          description:
 | 
			
		||||
            VRF id.
 | 
			
		||||
          type: number
 | 
			
		||||
          type: integer
 | 
			
		||||
  gateway:
 | 
			
		||||
    description:
 | 
			
		||||
      This option defines the static IPv4 gateway of the logical interface.
 | 
			
		||||
@@ -55,7 +55,7 @@ properties:
 | 
			
		||||
        vrf:
 | 
			
		||||
          description:
 | 
			
		||||
            VRF id.
 | 
			
		||||
          type: number
 | 
			
		||||
          type: integer
 | 
			
		||||
        metric:
 | 
			
		||||
          description:
 | 
			
		||||
            Optional metric value (define a NH route's weight / metric).
 | 
			
		||||
@@ -77,7 +77,7 @@ properties:
 | 
			
		||||
        vrf:
 | 
			
		||||
          description:
 | 
			
		||||
            VRF id.
 | 
			
		||||
          type: number
 | 
			
		||||
          type: integer
 | 
			
		||||
  multicast:
 | 
			
		||||
    type: object
 | 
			
		||||
    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/'
 | 
			
		||||
  telnet:
 | 
			
		||||
    $ref: "https://ucentral.io/schema/v1/service/telnet/"
 | 
			
		||||
  https:
 | 
			
		||||
    $ref: "https://ucentral.io/schema/v1/service/https/"
 | 
			
		||||
 
 | 
			
		||||
@@ -184,3 +184,59 @@ properties:
 | 
			
		||||
                  description:
 | 
			
		||||
                    Sets the shared secret to verify client COA requests for this server.
 | 
			
		||||
                  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:
 | 
			
		||||
      The unique ID of the configuration. This is the unix timestamp of when the config was created.
 | 
			
		||||
    type: integer
 | 
			
		||||
  public_ip_lookup: 
 | 
			
		||||
    description:
 | 
			
		||||
      The fqdn to retrieve public ip of internet connection. 
 | 
			
		||||
    type: string
 | 
			
		||||
    format: uc-fqdn
 | 
			
		||||
  unit:
 | 
			
		||||
    $ref: "https://ucentral.io/schema/v1/unit/"
 | 
			
		||||
  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.
 | 
			
		||||
        type: boolean
 | 
			
		||||
        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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										635
									
								
								schemareader.uc
									
									
									
									
									
								
							
							
						
						
									
										635
									
								
								schemareader.uc
									
									
									
									
									
								
							@@ -295,6 +295,34 @@ function instantiateUnit(location, value, errors) {
 | 
			
		||||
					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;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
@@ -532,8 +560,8 @@ function instantiateGlobals(location, value, errors) {
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						function parseVrf(location, value, errors) {
 | 
			
		||||
							if (!(type(value) in [ "int", "double" ]))
 | 
			
		||||
								push(errors, [ location, "must be of type number" ]);
 | 
			
		||||
							if (type(value) != "int")
 | 
			
		||||
								push(errors, [ location, "must be of type integer" ]);
 | 
			
		||||
 | 
			
		||||
							return value;
 | 
			
		||||
						}
 | 
			
		||||
@@ -588,8 +616,8 @@ function instantiateGlobals(location, value, errors) {
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						function parseVrf(location, value, errors) {
 | 
			
		||||
							if (!(type(value) in [ "int", "double" ]))
 | 
			
		||||
								push(errors, [ location, "must be of type number" ]);
 | 
			
		||||
							if (type(value) != "int")
 | 
			
		||||
								push(errors, [ location, "must be of type integer" ]);
 | 
			
		||||
 | 
			
		||||
							return value;
 | 
			
		||||
						}
 | 
			
		||||
@@ -1016,51 +1044,162 @@ function instantiateEthernet(location, value, errors) {
 | 
			
		||||
			obj.ieee8021x = parseIeee8021x(location + "/ieee8021x", value["ieee8021x"], errors);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		function parsePortIsolation(location, value, errors) {
 | 
			
		||||
		function parseLacpConfig(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 parseLacpEnable(location, value, errors) {
 | 
			
		||||
					if (type(value) != "bool")
 | 
			
		||||
						push(errors, [ location, "must be of type boolean" ]);
 | 
			
		||||
 | 
			
		||||
					return value;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (exists(value, "lacp-enable")) {
 | 
			
		||||
					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" ]);
 | 
			
		||||
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
								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);
 | 
			
		||||
				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 parseUplink(location, value, errors) {
 | 
			
		||||
									if (type(value) == "object") {
 | 
			
		||||
										let obj = {};
 | 
			
		||||
				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" ]);
 | 
			
		||||
 | 
			
		||||
										function parseInterfaceList(location, value, errors) {
 | 
			
		||||
											if (type(value) == "array") {
 | 
			
		||||
												function parseItem(location, value, errors) {
 | 
			
		||||
						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" ]);
 | 
			
		||||
 | 
			
		||||
													return value;
 | 
			
		||||
												}
 | 
			
		||||
 | 
			
		||||
												return map(value, (item, i) => parseItem(location + "/" + i, item, errors));
 | 
			
		||||
											}
 | 
			
		||||
 | 
			
		||||
											if (type(value) != "array")
 | 
			
		||||
												push(errors, [ location, "must be of type array" ]);
 | 
			
		||||
					if (!(value in [ "short", "long" ]))
 | 
			
		||||
						push(errors, [ location, "must be one of \"short\" or \"long\"" ]);
 | 
			
		||||
 | 
			
		||||
					return value;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
										if (exists(value, "interface-list")) {
 | 
			
		||||
											obj.interface_list = parseInterfaceList(location + "/interface-list", value["interface-list"], errors);
 | 
			
		||||
				if (exists(value, "lacp-timeout")) {
 | 
			
		||||
					obj.lacp_timeout = parseLacpTimeout(location + "/lacp-timeout", value["lacp-timeout"], errors);
 | 
			
		||||
				}
 | 
			
		||||
				else {
 | 
			
		||||
					obj.lacp_timeout = "long";
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				return obj;
 | 
			
		||||
@@ -1072,82 +1211,28 @@ function instantiateEthernet(location, value, errors) {
 | 
			
		||||
			return value;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
								if (exists(value, "uplink")) {
 | 
			
		||||
									obj.uplink = parseUplink(location + "/uplink", value["uplink"], errors);
 | 
			
		||||
		if (exists(value, "lacp-config")) {
 | 
			
		||||
			obj.lacp_config = parseLacpConfig(location + "/lacp-config", value["lacp-config"], errors);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
								function parseDownlink(location, value, errors) {
 | 
			
		||||
									if (type(value) == "object") {
 | 
			
		||||
										let obj = {};
 | 
			
		||||
		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" ]);
 | 
			
		||||
 | 
			
		||||
										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" ]);
 | 
			
		||||
				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;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
												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);
 | 
			
		||||
		if (exists(value, "trunk-group")) {
 | 
			
		||||
			obj.trunk_group = parseTrunkGroup(location + "/trunk-group", value["trunk-group"], errors);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return obj;
 | 
			
		||||
@@ -1259,6 +1344,115 @@ function instantiateSwitch(location, value, 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;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
@@ -1541,6 +1735,171 @@ function instantiateSwitch(location, value, 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;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -2549,8 +2908,8 @@ function instantiateInterfaceIpv4(location, value, errors) {
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						function parseVrf(location, value, errors) {
 | 
			
		||||
							if (!(type(value) in [ "int", "double" ]))
 | 
			
		||||
								push(errors, [ location, "must be of type number" ]);
 | 
			
		||||
							if (type(value) != "int")
 | 
			
		||||
								push(errors, [ location, "must be of type integer" ]);
 | 
			
		||||
 | 
			
		||||
							return value;
 | 
			
		||||
						}
 | 
			
		||||
@@ -2622,8 +2981,8 @@ function instantiateInterfaceIpv4(location, value, errors) {
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						function parseVrf(location, value, errors) {
 | 
			
		||||
							if (!(type(value) in [ "int", "double" ]))
 | 
			
		||||
								push(errors, [ location, "must be of type number" ]);
 | 
			
		||||
							if (type(value) != "int")
 | 
			
		||||
								push(errors, [ location, "must be of type integer" ]);
 | 
			
		||||
 | 
			
		||||
							return value;
 | 
			
		||||
						}
 | 
			
		||||
@@ -2689,8 +3048,8 @@ function instantiateInterfaceIpv4(location, value, errors) {
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						function parseVrf(location, value, errors) {
 | 
			
		||||
							if (!(type(value) in [ "int", "double" ]))
 | 
			
		||||
								push(errors, [ location, "must be of type number" ]);
 | 
			
		||||
							if (type(value) != "int")
 | 
			
		||||
								push(errors, [ location, "must be of type integer" ]);
 | 
			
		||||
 | 
			
		||||
							return value;
 | 
			
		||||
						}
 | 
			
		||||
@@ -10132,6 +10491,53 @@ function instantiateServiceTelnet(location, value, errors) {
 | 
			
		||||
	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) {
 | 
			
		||||
	if (type(value) == "object") {
 | 
			
		||||
		let obj = {};
 | 
			
		||||
@@ -10228,6 +10634,10 @@ function instantiateService(location, value, errors) {
 | 
			
		||||
			obj.telnet = instantiateServiceTelnet(location + "/telnet", value["telnet"], errors);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (exists(value, "https")) {
 | 
			
		||||
			obj.https = instantiateServiceHttps(location + "/https", value["https"], errors);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return obj;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -10700,6 +11110,23 @@ function newUCentralState(location, value, 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")) {
 | 
			
		||||
			obj.unit = instantiateUnit(location + "/unit", value["unit"], errors);
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,10 @@ properties:
 | 
			
		||||
      type: string
 | 
			
		||||
      description:
 | 
			
		||||
        An IPv4 addreess.
 | 
			
		||||
  public_ip:
 | 
			
		||||
    type: string
 | 
			
		||||
    description:
 | 
			
		||||
      The public IP address of internet connection.
 | 
			
		||||
  leasetime:
 | 
			
		||||
    type: number
 | 
			
		||||
    description:
 | 
			
		||||
 
 | 
			
		||||
@@ -38,6 +38,8 @@ items:
 | 
			
		||||
      $ref: "https://ucentral.io/state/v1/interface/clients/"
 | 
			
		||||
    counters:
 | 
			
		||||
      $ref: "https://ucentral.io/state/v1/interface/counter/"
 | 
			
		||||
    delta_counters:
 | 
			
		||||
      $ref: "https://ucentral.io/state/v1/interface/counter/"
 | 
			
		||||
    mesh-path:
 | 
			
		||||
      $ref: "https://ucentral.io/state/v1/interface/mesh-path/"
 | 
			
		||||
    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
 | 
			
		||||
  counters:
 | 
			
		||||
    $ref: "https://ucentral.io/state/v1/interface/counter/"
 | 
			
		||||
  delta_counters:
 | 
			
		||||
    $ref: "https://ucentral.io/state/v1/interface/counter/"
 | 
			
		||||
  poe:
 | 
			
		||||
    description:
 | 
			
		||||
      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/"
 | 
			
		||||
  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)
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
/* load state data */
 | 
			
		||||
@@ -412,6 +422,8 @@ cursor.foreach("network", "interface", function(d) {
 | 
			
		||||
			push(ipv4, sprintf("%s/%d", a.address, a.mask));
 | 
			
		||||
 | 
			
		||||
		iface.ipv4.addresses = ipv4;
 | 
			
		||||
		if( cfg.public_ip_lookup && length(public_ip))
 | 
			
		||||
                        iface.ipv4.public_ip = public_ip;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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.",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
        },
 | 
			
		||||
        "public_ip_lookup": {
 | 
			
		||||
            "description": "The fqdn to retrieve public ip of internet connection.",
 | 
			
		||||
            "type": "string",
 | 
			
		||||
            "format": "uc-fqdn"
 | 
			
		||||
        },
 | 
			
		||||
        "unit": {
 | 
			
		||||
            "description": "A device has certain properties that describe its identity and location. These properties are described inside this 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.",
 | 
			
		||||
                            "type": "boolean",
 | 
			
		||||
                            "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": {
 | 
			
		||||
                                "description": "VRF id.",
 | 
			
		||||
                                "type": "number"
 | 
			
		||||
                                "type": "integer"
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
@@ -450,7 +465,7 @@
 | 
			
		||||
                            },
 | 
			
		||||
                            "vrf": {
 | 
			
		||||
                                "description": "VRF id.",
 | 
			
		||||
                                "type": "number"
 | 
			
		||||
                                "type": "integer"
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
@@ -671,48 +686,74 @@
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    },
 | 
			
		||||
                    "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"
 | 
			
		||||
                    "trunk-group": {
 | 
			
		||||
                        "description": "Associates this port to a trunk or a port-channel.",
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "minimum": 1,
 | 
			
		||||
                        "maximum": 64
 | 
			
		||||
                    },
 | 
			
		||||
                                        "uplink": {
 | 
			
		||||
                                            "description": "Configuration object for uplink interface(s)",
 | 
			
		||||
                    "lacp-config": {
 | 
			
		||||
                        "description": "This section describes the 802.3ad Link Aggregation Control Protocol (LACP) configuration for the current interface.",
 | 
			
		||||
                        "type": "object",
 | 
			
		||||
                        "properties": {
 | 
			
		||||
                                                "interface-list": {
 | 
			
		||||
                                                    "description": "List of interfaces (either physical or trunk ports)",
 | 
			
		||||
                                                    "type": "array",
 | 
			
		||||
                                                    "items": {
 | 
			
		||||
                                                        "type": "string"
 | 
			
		||||
                                                    }
 | 
			
		||||
                                                }
 | 
			
		||||
                                            }
 | 
			
		||||
                            "lacp-enable": {
 | 
			
		||||
                                "description": "Enables 802.3ad Link Aggregation Control Protocol (LACP) for the current interface.",
 | 
			
		||||
                                "type": "boolean",
 | 
			
		||||
                                "default": false
 | 
			
		||||
                            },
 | 
			
		||||
                                        "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"
 | 
			
		||||
                                                    }
 | 
			
		||||
                                                }
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            "lacp-role": {
 | 
			
		||||
                                "description": "Configures the port LACP role as actor or partner.",
 | 
			
		||||
                                "type": "string",
 | 
			
		||||
                                "enum": [
 | 
			
		||||
                                    "actor",
 | 
			
		||||
                                    "partner"
 | 
			
		||||
                                ],
 | 
			
		||||
                                "default": "actor"
 | 
			
		||||
                            },
 | 
			
		||||
                            "lacp-mode": {
 | 
			
		||||
                                "description": "Configures the LACP negotiation activity mode as active or passive.",
 | 
			
		||||
                                "type": "string",
 | 
			
		||||
                                "enum": [
 | 
			
		||||
                                    "active",
 | 
			
		||||
                                    "passive"
 | 
			
		||||
                                ],
 | 
			
		||||
                                "default": "passive"
 | 
			
		||||
                            },
 | 
			
		||||
                            "lacp-port-admin-key": {
 | 
			
		||||
                                "description": "Configures the port's LACP administration key.",
 | 
			
		||||
                                "type": "integer",
 | 
			
		||||
                                "minimum": 1,
 | 
			
		||||
                                "maximum": 65535,
 | 
			
		||||
                                "default": 1
 | 
			
		||||
                            },
 | 
			
		||||
                            "lacp-port-priority": {
 | 
			
		||||
                                "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,7 +808,6 @@
 | 
			
		||||
                                    "downstream"
 | 
			
		||||
                                ]
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        },
 | 
			
		||||
                        "instances": {
 | 
			
		||||
                            "description": "Define a list of configuration for each STP instance. Meaning of this field depends on current STP protocol (switch.loop-detection.protocol)",
 | 
			
		||||
@@ -807,6 +847,7 @@
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "ieee8021x": {
 | 
			
		||||
                    "description": "This section describes the global 802.1X (port access control) configuration.",
 | 
			
		||||
@@ -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": {
 | 
			
		||||
                                            "description": "VRF id.",
 | 
			
		||||
                                            "type": "number"
 | 
			
		||||
                                            "type": "integer"
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
@@ -1369,7 +1472,7 @@
 | 
			
		||||
                                        },
 | 
			
		||||
                                        "vrf": {
 | 
			
		||||
                                            "description": "VRF id.",
 | 
			
		||||
                                            "type": "number"
 | 
			
		||||
                                            "type": "integer"
 | 
			
		||||
                                        },
 | 
			
		||||
                                        "metric": {
 | 
			
		||||
                                            "description": "Optional metric value (define a NH route's weight / metric).",
 | 
			
		||||
@@ -1394,7 +1497,7 @@
 | 
			
		||||
                                        },
 | 
			
		||||
                                        "vrf": {
 | 
			
		||||
                                            "description": "VRF id.",
 | 
			
		||||
                                            "type": "number"
 | 
			
		||||
                                            "type": "integer"
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
@@ -4728,6 +4831,23 @@
 | 
			
		||||
                            "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": {
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
        },
 | 
			
		||||
        "public_ip_lookup": {
 | 
			
		||||
            "type": "string",
 | 
			
		||||
            "format": "uc-fqdn"
 | 
			
		||||
        },
 | 
			
		||||
        "unit": {
 | 
			
		||||
            "$ref": "#/$defs/unit"
 | 
			
		||||
        },
 | 
			
		||||
@@ -130,6 +134,14 @@
 | 
			
		||||
                        "mld-snooping-enable": {
 | 
			
		||||
                            "type": "boolean",
 | 
			
		||||
                            "default": true
 | 
			
		||||
                        },
 | 
			
		||||
                        "unknown-multicast-flood-control": {
 | 
			
		||||
                            "type": "boolean",
 | 
			
		||||
                            "default": false
 | 
			
		||||
                        },
 | 
			
		||||
                        "querier-enable": {
 | 
			
		||||
                            "type": "boolean",
 | 
			
		||||
                            "default": false
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
@@ -251,7 +263,7 @@
 | 
			
		||||
                                ]
 | 
			
		||||
                            },
 | 
			
		||||
                            "vrf": {
 | 
			
		||||
                                "type": "number"
 | 
			
		||||
                                "type": "integer"
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
@@ -269,7 +281,7 @@
 | 
			
		||||
                                ]
 | 
			
		||||
                            },
 | 
			
		||||
                            "vrf": {
 | 
			
		||||
                                "type": "number"
 | 
			
		||||
                                "type": "integer"
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
@@ -466,41 +478,64 @@
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "port-isolation": {
 | 
			
		||||
                    "type": "object",
 | 
			
		||||
                    "properties": {
 | 
			
		||||
                        "sessions": {
 | 
			
		||||
                            "type": "array",
 | 
			
		||||
                            "items": {
 | 
			
		||||
                                "type": "object",
 | 
			
		||||
                                "properties": {
 | 
			
		||||
                                    "id": {
 | 
			
		||||
                                        "type": "integer"
 | 
			
		||||
                "trunk-group": {
 | 
			
		||||
                    "type": "integer",
 | 
			
		||||
                    "minimum": 1,
 | 
			
		||||
                    "maximum": 64
 | 
			
		||||
                },
 | 
			
		||||
                                    "uplink": {
 | 
			
		||||
                "lacp-config": {
 | 
			
		||||
                    "type": "object",
 | 
			
		||||
                    "properties": {
 | 
			
		||||
                                            "interface-list": {
 | 
			
		||||
                                                "type": "array",
 | 
			
		||||
                                                "items": {
 | 
			
		||||
                                                    "type": "string"
 | 
			
		||||
                                                }
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                        "lacp-enable": {
 | 
			
		||||
                            "type": "boolean",
 | 
			
		||||
                            "default": false
 | 
			
		||||
                        },
 | 
			
		||||
                                    "downlink": {
 | 
			
		||||
                                        "type": "object",
 | 
			
		||||
                                        "properties": {
 | 
			
		||||
                                            "interface-list": {
 | 
			
		||||
                                                "type": "array",
 | 
			
		||||
                                                "items": {
 | 
			
		||||
                                                    "type": "string"
 | 
			
		||||
                                                }
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        "lacp-role": {
 | 
			
		||||
                            "type": "string",
 | 
			
		||||
                            "enum": [
 | 
			
		||||
                                "actor",
 | 
			
		||||
                                "partner"
 | 
			
		||||
                            ],
 | 
			
		||||
                            "default": "actor"
 | 
			
		||||
                        },
 | 
			
		||||
                        "lacp-mode": {
 | 
			
		||||
                            "type": "string",
 | 
			
		||||
                            "enum": [
 | 
			
		||||
                                "active",
 | 
			
		||||
                                "passive"
 | 
			
		||||
                            ],
 | 
			
		||||
                            "default": "passive"
 | 
			
		||||
                        },
 | 
			
		||||
                        "lacp-port-admin-key": {
 | 
			
		||||
                            "type": "integer",
 | 
			
		||||
                            "minimum": 1,
 | 
			
		||||
                            "maximum": 65535,
 | 
			
		||||
                            "default": 1
 | 
			
		||||
                        },
 | 
			
		||||
                        "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,7 +582,6 @@
 | 
			
		||||
                                    "downstream"
 | 
			
		||||
                                ]
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        },
 | 
			
		||||
                        "instances": {
 | 
			
		||||
                            "type": "array",
 | 
			
		||||
@@ -580,6 +614,7 @@
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "ieee8021x": {
 | 
			
		||||
                    "type": "object",
 | 
			
		||||
@@ -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": {
 | 
			
		||||
                                "type": "number"
 | 
			
		||||
                                "type": "integer"
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
@@ -1119,7 +1208,7 @@
 | 
			
		||||
                                ]
 | 
			
		||||
                            },
 | 
			
		||||
                            "vrf": {
 | 
			
		||||
                                "type": "number"
 | 
			
		||||
                                "type": "integer"
 | 
			
		||||
                            },
 | 
			
		||||
                            "metric": {
 | 
			
		||||
                                "type": "number"
 | 
			
		||||
@@ -1140,7 +1229,7 @@
 | 
			
		||||
                                ]
 | 
			
		||||
                            },
 | 
			
		||||
                            "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": {
 | 
			
		||||
            "type": "object",
 | 
			
		||||
            "properties": {
 | 
			
		||||
@@ -3693,6 +3796,9 @@
 | 
			
		||||
                },
 | 
			
		||||
                "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.",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
        },
 | 
			
		||||
        "public_ip_lookup": {
 | 
			
		||||
            "description": "The fqdn to retrieve public ip of internet connection.",
 | 
			
		||||
            "type": "string",
 | 
			
		||||
            "format": "uc-fqdn"
 | 
			
		||||
        },
 | 
			
		||||
        "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.",
 | 
			
		||||
                            "type": "boolean",
 | 
			
		||||
                            "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": {
 | 
			
		||||
                                "description": "VRF id.",
 | 
			
		||||
                                "type": "number"
 | 
			
		||||
                                "type": "integer"
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
@@ -301,7 +316,7 @@
 | 
			
		||||
                            },
 | 
			
		||||
                            "vrf": {
 | 
			
		||||
                                "description": "VRF id.",
 | 
			
		||||
                                "type": "number"
 | 
			
		||||
                                "type": "integer"
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
@@ -523,48 +538,74 @@
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "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"
 | 
			
		||||
                "trunk-group": {
 | 
			
		||||
                    "description": "Associates this port to a trunk or a port-channel.",
 | 
			
		||||
                    "type": "integer",
 | 
			
		||||
                    "minimum": 1,
 | 
			
		||||
                    "maximum": 64
 | 
			
		||||
                },
 | 
			
		||||
                                    "uplink": {
 | 
			
		||||
                                        "description": "Configuration object for uplink interface(s)",
 | 
			
		||||
                "lacp-config": {
 | 
			
		||||
                    "description": "This section describes the 802.3ad Link Aggregation Control Protocol (LACP) configuration for the current interface.",
 | 
			
		||||
                    "type": "object",
 | 
			
		||||
                    "properties": {
 | 
			
		||||
                                            "interface-list": {
 | 
			
		||||
                                                "description": "List of interfaces (either physical or trunk ports)",
 | 
			
		||||
                                                "type": "array",
 | 
			
		||||
                                                "items": {
 | 
			
		||||
                                                    "type": "string"
 | 
			
		||||
                                                }
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                        "lacp-enable": {
 | 
			
		||||
                            "description": "Enables 802.3ad Link Aggregation Control Protocol (LACP) for the current interface.",
 | 
			
		||||
                            "type": "boolean",
 | 
			
		||||
                            "default": false
 | 
			
		||||
                        },
 | 
			
		||||
                                    "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"
 | 
			
		||||
                                                }
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        "lacp-role": {
 | 
			
		||||
                            "description": "Configures the port LACP role as actor or partner.",
 | 
			
		||||
                            "type": "string",
 | 
			
		||||
                            "enum": [
 | 
			
		||||
                                "actor",
 | 
			
		||||
                                "partner"
 | 
			
		||||
                            ],
 | 
			
		||||
                            "default": "actor"
 | 
			
		||||
                        },
 | 
			
		||||
                        "lacp-mode": {
 | 
			
		||||
                            "description": "Configures the LACP negotiation activity mode as active or passive.",
 | 
			
		||||
                            "type": "string",
 | 
			
		||||
                            "enum": [
 | 
			
		||||
                                "active",
 | 
			
		||||
                                "passive"
 | 
			
		||||
                            ],
 | 
			
		||||
                            "default": "passive"
 | 
			
		||||
                        },
 | 
			
		||||
                        "lacp-port-admin-key": {
 | 
			
		||||
                            "description": "Configures the port's LACP administration key.",
 | 
			
		||||
                            "type": "integer",
 | 
			
		||||
                            "minimum": 1,
 | 
			
		||||
                            "maximum": 65535,
 | 
			
		||||
                            "default": 1
 | 
			
		||||
                        },
 | 
			
		||||
                        "lacp-port-priority": {
 | 
			
		||||
                            "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,7 +659,6 @@
 | 
			
		||||
                                    "downstream"
 | 
			
		||||
                                ]
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        },
 | 
			
		||||
                        "instances": {
 | 
			
		||||
                            "description": "Define a list of configuration for each STP instance. Meaning of this field depends on current STP protocol (switch.loop-detection.protocol)",
 | 
			
		||||
@@ -658,6 +698,7 @@
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "ieee8021x": {
 | 
			
		||||
                    "description": "This section describes the global 802.1X (port access control) configuration.",
 | 
			
		||||
@@ -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": {
 | 
			
		||||
                                "description": "VRF id.",
 | 
			
		||||
                                "type": "number"
 | 
			
		||||
                                "type": "integer"
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
@@ -1277,7 +1381,7 @@
 | 
			
		||||
                            },
 | 
			
		||||
                            "vrf": {
 | 
			
		||||
                                "description": "VRF id.",
 | 
			
		||||
                                "type": "number"
 | 
			
		||||
                                "type": "integer"
 | 
			
		||||
                            },
 | 
			
		||||
                            "metric": {
 | 
			
		||||
                                "description": "Optional metric value (define a NH route's weight / metric).",
 | 
			
		||||
@@ -1302,7 +1406,7 @@
 | 
			
		||||
                            },
 | 
			
		||||
                            "vrf": {
 | 
			
		||||
                                "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": {
 | 
			
		||||
            "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",
 | 
			
		||||
@@ -4244,6 +4365,9 @@
 | 
			
		||||
                },
 | 
			
		||||
                "telnet": {
 | 
			
		||||
                    "$ref": "#/$defs/service.telnet"
 | 
			
		||||
                },
 | 
			
		||||
                "https": {
 | 
			
		||||
                    "$ref": "#/$defs/service.https"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 
 | 
			
		||||
@@ -78,6 +78,12 @@
 | 
			
		||||
        },
 | 
			
		||||
        "mac-address-list": {
 | 
			
		||||
            "$ref": "#/$defs/mac-address-list"
 | 
			
		||||
        },
 | 
			
		||||
        "static-trunks": {
 | 
			
		||||
            "$ref": "#/$defs/static-trunks"
 | 
			
		||||
        },
 | 
			
		||||
        "lacp-trunks": {
 | 
			
		||||
            "$ref": "#/$defs/lacp-trunks"
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "$defs": {
 | 
			
		||||
@@ -325,6 +331,10 @@
 | 
			
		||||
                        "description": "An IPv4 addreess."
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "public_ip": {
 | 
			
		||||
                    "type": "string",
 | 
			
		||||
                    "description": "The public IP address of internet connection."
 | 
			
		||||
                },
 | 
			
		||||
                "leasetime": {
 | 
			
		||||
                    "type": "number",
 | 
			
		||||
                    "description": "This is the leasetime if the IPv4 address of this logical interface was acquired via DHCPv4."
 | 
			
		||||
@@ -755,6 +765,9 @@
 | 
			
		||||
                    "counters": {
 | 
			
		||||
                        "$ref": "#/$defs/interface.counter"
 | 
			
		||||
                    },
 | 
			
		||||
                    "delta_counters": {
 | 
			
		||||
                        "$ref": "#/$defs/interface.counter"
 | 
			
		||||
                    },
 | 
			
		||||
                    "mesh-path": {
 | 
			
		||||
                        "$ref": "#/$defs/interface.mesh-path"
 | 
			
		||||
                    },
 | 
			
		||||
@@ -883,6 +896,9 @@
 | 
			
		||||
                "counters": {
 | 
			
		||||
                    "$ref": "#/$defs/interface.counter"
 | 
			
		||||
                },
 | 
			
		||||
                "delta_counters": {
 | 
			
		||||
                    "$ref": "#/$defs/interface.counter"
 | 
			
		||||
                },
 | 
			
		||||
                "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.",
 | 
			
		||||
                    "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