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