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