mirror of
				https://github.com/Telecominfraproject/ols-ucentral-schema.git
				synced 2025-11-04 03:57:51 +00:00 
			
		
		
		
	Compare commits
	
		
			27 Commits
		
	
	
		
			schema_fix
			...
			jumbo_fram
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					8a4815187f | ||
| 
						 | 
					5da5b090be | ||
| 
						 | 
					4235960ab8 | ||
| 
						 | 
					7e839b0681 | ||
| 
						 | 
					b98f8a2b46 | ||
| 
						 | 
					1de6cad7e8 | ||
| 
						 | 
					0f9f4489d2 | ||
| 
						 | 
					4d03a432c1 | ||
| 
						 | 
					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,3 @@ properties:
 | 
				
			|||||||
        type: integer
 | 
					        type: integer
 | 
				
			||||||
        minimum: 1
 | 
					        minimum: 1
 | 
				
			||||||
        maximum: 4094
 | 
					        maximum: 4094
 | 
				
			||||||
  port-isolation:
 | 
					 | 
				
			||||||
    description:
 | 
					 | 
				
			||||||
      This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration.
 | 
					 | 
				
			||||||
      Omitting this configuration completely fully disables any port-isolation configuration on this given port.
 | 
					 | 
				
			||||||
    type: object
 | 
					 | 
				
			||||||
    properties:
 | 
					 | 
				
			||||||
      sessions:
 | 
					 | 
				
			||||||
        description:
 | 
					 | 
				
			||||||
          Allow selected port to forward traffic in the provided session-based format.
 | 
					 | 
				
			||||||
        type: array
 | 
					 | 
				
			||||||
        items:
 | 
					 | 
				
			||||||
          type: object
 | 
					 | 
				
			||||||
          properties:
 | 
					 | 
				
			||||||
            id:
 | 
					 | 
				
			||||||
              description:
 | 
					 | 
				
			||||||
                Session id to configure.
 | 
					 | 
				
			||||||
              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
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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/"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -184,3 +184,47 @@ 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
 | 
				
			||||||
 | 
					  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
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										507
									
								
								schemareader.uc
									
									
									
									
									
								
							
							
						
						
									
										507
									
								
								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,140 +1044,6 @@ 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) {
 | 
					 | 
				
			||||||
			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);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return obj;
 | 
							return obj;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1259,6 +1153,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 +1544,154 @@ 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;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return obj;
 | 
							return obj;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2549,8 +2700,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 +2773,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 +2840,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 +10283,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 +10426,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 +10902,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:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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).
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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"
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -670,51 +685,6 @@
 | 
				
			|||||||
                                "maximum": 4094
 | 
					                                "maximum": 4094
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "port-isolation": {
 | 
					 | 
				
			||||||
                        "description": "This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. Omitting this configuration completely fully disables any port-isolation configuration on this given port.",
 | 
					 | 
				
			||||||
                        "type": "object",
 | 
					 | 
				
			||||||
                        "properties": {
 | 
					 | 
				
			||||||
                            "sessions": {
 | 
					 | 
				
			||||||
                                "description": "Allow selected port to forward traffic in the provided session-based format.",
 | 
					 | 
				
			||||||
                                "type": "array",
 | 
					 | 
				
			||||||
                                "items": {
 | 
					 | 
				
			||||||
                                    "type": "object",
 | 
					 | 
				
			||||||
                                    "properties": {
 | 
					 | 
				
			||||||
                                        "id": {
 | 
					 | 
				
			||||||
                                            "description": "Session id to configure.",
 | 
					 | 
				
			||||||
                                            "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"
 | 
					 | 
				
			||||||
                                                    }
 | 
					 | 
				
			||||||
                                                }
 | 
					 | 
				
			||||||
                                            }
 | 
					 | 
				
			||||||
                                        }
 | 
					 | 
				
			||||||
                                    }
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -767,7 +737,6 @@
 | 
				
			|||||||
                                    "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)",
 | 
				
			||||||
@@ -807,6 +776,7 @@
 | 
				
			|||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "ieee8021x": {
 | 
					                "ieee8021x": {
 | 
				
			||||||
                    "description": "This section describes the global 802.1X (port access control) configuration.",
 | 
					                    "description": "This section describes the global 802.1X (port access control) configuration.",
 | 
				
			||||||
@@ -910,6 +880,56 @@
 | 
				
			|||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "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"
 | 
				
			||||||
 | 
					                                                }
 | 
				
			||||||
 | 
					                                            }
 | 
				
			||||||
 | 
					                                        }
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "jumbo-frames": {
 | 
				
			||||||
 | 
					                    "description": "Enables Jumbo frames",
 | 
				
			||||||
 | 
					                    "type": "boolean",
 | 
				
			||||||
 | 
					                    "default": false
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
@@ -1340,7 +1360,7 @@
 | 
				
			|||||||
                                        },
 | 
					                                        },
 | 
				
			||||||
                                        "vrf": {
 | 
					                                        "vrf": {
 | 
				
			||||||
                                            "description": "VRF id.",
 | 
					                                            "description": "VRF id.",
 | 
				
			||||||
                                            "type": "number"
 | 
					                                            "type": "integer"
 | 
				
			||||||
                                        }
 | 
					                                        }
 | 
				
			||||||
                                    }
 | 
					                                    }
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
@@ -1369,7 +1389,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 +1414,7 @@
 | 
				
			|||||||
                                        },
 | 
					                                        },
 | 
				
			||||||
                                        "vrf": {
 | 
					                                        "vrf": {
 | 
				
			||||||
                                            "description": "VRF id.",
 | 
					                                            "description": "VRF id.",
 | 
				
			||||||
                                            "type": "number"
 | 
					                                            "type": "integer"
 | 
				
			||||||
                                        }
 | 
					                                        }
 | 
				
			||||||
                                    }
 | 
					                                    }
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
@@ -4728,6 +4748,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"
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -465,44 +477,6 @@
 | 
				
			|||||||
                            "maximum": 4094
 | 
					                            "maximum": 4094
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "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"
 | 
					 | 
				
			||||||
                                                }
 | 
					 | 
				
			||||||
                                            }
 | 
					 | 
				
			||||||
                                        }
 | 
					 | 
				
			||||||
                                    }
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
@@ -547,7 +521,6 @@
 | 
				
			|||||||
                                    "downstream"
 | 
					                                    "downstream"
 | 
				
			||||||
                                ]
 | 
					                                ]
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        },
 | 
					                        },
 | 
				
			||||||
                        "instances": {
 | 
					                        "instances": {
 | 
				
			||||||
                            "type": "array",
 | 
					                            "type": "array",
 | 
				
			||||||
@@ -580,6 +553,7 @@
 | 
				
			|||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "ieee8021x": {
 | 
					                "ieee8021x": {
 | 
				
			||||||
                    "type": "object",
 | 
					                    "type": "object",
 | 
				
			||||||
@@ -666,6 +640,48 @@
 | 
				
			|||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "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"
 | 
				
			||||||
 | 
					                                                }
 | 
				
			||||||
 | 
					                                            }
 | 
				
			||||||
 | 
					                                        }
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "jumbo-frames": {
 | 
				
			||||||
 | 
					                    "type": "boolean",
 | 
				
			||||||
 | 
					                    "default": false
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
@@ -1094,7 +1110,7 @@
 | 
				
			|||||||
                                ]
 | 
					                                ]
 | 
				
			||||||
                            },
 | 
					                            },
 | 
				
			||||||
                            "vrf": {
 | 
					                            "vrf": {
 | 
				
			||||||
                                "type": "number"
 | 
					                                "type": "integer"
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -1119,7 +1135,7 @@
 | 
				
			|||||||
                                ]
 | 
					                                ]
 | 
				
			||||||
                            },
 | 
					                            },
 | 
				
			||||||
                            "vrf": {
 | 
					                            "vrf": {
 | 
				
			||||||
                                "type": "number"
 | 
					                                "type": "integer"
 | 
				
			||||||
                            },
 | 
					                            },
 | 
				
			||||||
                            "metric": {
 | 
					                            "metric": {
 | 
				
			||||||
                                "type": "number"
 | 
					                                "type": "number"
 | 
				
			||||||
@@ -1140,7 +1156,7 @@
 | 
				
			|||||||
                                ]
 | 
					                                ]
 | 
				
			||||||
                            },
 | 
					                            },
 | 
				
			||||||
                            "vrf": {
 | 
					                            "vrf": {
 | 
				
			||||||
                                "type": "number"
 | 
					                                "type": "integer"
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -3622,6 +3638,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 +3723,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"
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -522,51 +537,6 @@
 | 
				
			|||||||
                            "maximum": 4094
 | 
					                            "maximum": 4094
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "port-isolation": {
 | 
					 | 
				
			||||||
                    "description": "This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. Omitting this configuration completely fully disables any port-isolation configuration on this given port.",
 | 
					 | 
				
			||||||
                    "type": "object",
 | 
					 | 
				
			||||||
                    "properties": {
 | 
					 | 
				
			||||||
                        "sessions": {
 | 
					 | 
				
			||||||
                            "description": "Allow selected port to forward traffic in the provided session-based format.",
 | 
					 | 
				
			||||||
                            "type": "array",
 | 
					 | 
				
			||||||
                            "items": {
 | 
					 | 
				
			||||||
                                "type": "object",
 | 
					 | 
				
			||||||
                                "properties": {
 | 
					 | 
				
			||||||
                                    "id": {
 | 
					 | 
				
			||||||
                                        "description": "Session id to configure.",
 | 
					 | 
				
			||||||
                                        "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"
 | 
					 | 
				
			||||||
                                                }
 | 
					 | 
				
			||||||
                                            }
 | 
					 | 
				
			||||||
                                        }
 | 
					 | 
				
			||||||
                                    }
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
@@ -618,7 +588,6 @@
 | 
				
			|||||||
                                    "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)",
 | 
				
			||||||
@@ -658,6 +627,7 @@
 | 
				
			|||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "ieee8021x": {
 | 
					                "ieee8021x": {
 | 
				
			||||||
                    "description": "This section describes the global 802.1X (port access control) configuration.",
 | 
					                    "description": "This section describes the global 802.1X (port access control) configuration.",
 | 
				
			||||||
@@ -761,6 +731,56 @@
 | 
				
			|||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "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"
 | 
				
			||||||
 | 
					                                                }
 | 
				
			||||||
 | 
					                                            }
 | 
				
			||||||
 | 
					                                        }
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "jumbo-frames": {
 | 
				
			||||||
 | 
					                    "description": "Enables Jumbo frames",
 | 
				
			||||||
 | 
					                    "type": "boolean",
 | 
				
			||||||
 | 
					                    "default": false
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
@@ -1248,7 +1268,7 @@
 | 
				
			|||||||
                            },
 | 
					                            },
 | 
				
			||||||
                            "vrf": {
 | 
					                            "vrf": {
 | 
				
			||||||
                                "description": "VRF id.",
 | 
					                                "description": "VRF id.",
 | 
				
			||||||
                                "type": "number"
 | 
					                                "type": "integer"
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -1277,7 +1297,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 +1322,7 @@
 | 
				
			|||||||
                            },
 | 
					                            },
 | 
				
			||||||
                            "vrf": {
 | 
					                            "vrf": {
 | 
				
			||||||
                                "description": "VRF id.",
 | 
					                                "description": "VRF id.",
 | 
				
			||||||
                                "type": "number"
 | 
					                                "type": "integer"
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -4172,6 +4192,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 +4281,9 @@
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
                "telnet": {
 | 
					                "telnet": {
 | 
				
			||||||
                    "$ref": "#/$defs/service.telnet"
 | 
					                    "$ref": "#/$defs/service.telnet"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "https": {
 | 
				
			||||||
 | 
					                    "$ref": "#/$defs/service.https"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -325,6 +325,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 +759,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 +890,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",
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user