mirror of
				https://github.com/Telecominfraproject/ols-ucentral-schema.git
				synced 2025-10-31 18:17:45 +00:00 
			
		
		
		
	Compare commits
	
		
			27 Commits
		
	
	
		
			schema_fix
			...
			jumbo_fram
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 8a4815187f | ||
|   | 5da5b090be | ||
|   | 4235960ab8 | ||
|   | 7e839b0681 | ||
|   | b98f8a2b46 | ||
|   | 1de6cad7e8 | ||
|   | 0f9f4489d2 | ||
|   | 4d03a432c1 | ||
|   | 4336be981b | ||
|   | 747ccb4993 | ||
|   | a0fac0b3d7 | ||
|   | 1e33d3fa0a | ||
|   | dc754dc519 | ||
|   | b3374bb60b | ||
|   | 0ef7362930 | ||
|   | b9762df2cf | ||
|   | 0983abe2bf | ||
|   | 719fd97705 | ||
|   | 777e2b26a8 | ||
|   | ab43179a83 | ||
|   | 3a41591f85 | ||
|   | 7fa4d15f5e | ||
|   | d105fe165e | ||
|   | d3f610d9ef | ||
|   | 711d7d9066 | ||
|   | 89a78c61be | ||
|   | f5608bd42c | 
							
								
								
									
										28
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| BSD 3-Clause License | ||||
|  | ||||
| Copyright (c) 2024, Telecom Infra Project | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
| 1. Redistributions of source code must retain the above copyright notice, this | ||||
|    list of conditions and the following disclaimer. | ||||
|  | ||||
| 2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|    this list of conditions and the following disclaimer in the documentation | ||||
|    and/or other materials provided with the distribution. | ||||
|  | ||||
| 3. Neither the name of the copyright holder nor the names of its | ||||
|    contributors may be used to endorse or promote products derived from | ||||
|    this software without specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||||
| FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||||
| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||||
| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||||
| OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
							
								
								
									
										197
									
								
								capabilities/connect.capabilities.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										197
									
								
								capabilities/connect.capabilities.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,197 @@ | ||||
| description: | ||||
|   uCentral protocol (OpenLan) device and features capabilities schema | ||||
| type: object | ||||
| properties: | ||||
|   serial: | ||||
|     type: string | ||||
|     examples: | ||||
|     - aabbccddeeff | ||||
|   firmware: | ||||
|     type: string | ||||
|     description: | ||||
|       Platform revision | ||||
|     examples: | ||||
|     - Rel 1.6 build 5 | ||||
|   platform: | ||||
|     type: string | ||||
|     enum: | ||||
|     - Switch | ||||
|     - AP | ||||
|   model: | ||||
|     type: string | ||||
|     description: | ||||
|       Device model | ||||
|   hw-sku: | ||||
|     type: string | ||||
|     description: | ||||
|       Stock keeping unit | ||||
|   compatible: | ||||
|     type: string | ||||
|     description: | ||||
|       Compatibility string, that defines the family of the device | ||||
|   base-mac: | ||||
|     type: string | ||||
|     description: | ||||
|       Switch MAC address | ||||
|     format: uc-mac | ||||
|     examples: | ||||
|     - aa:bb:cc:dd:ee:ff | ||||
|   port-list: | ||||
|     type: array | ||||
|     description: | ||||
|       The list of physical network devices | ||||
|     items: | ||||
|       type: object | ||||
|       properties: | ||||
|         name: | ||||
|           type: string | ||||
|           description: | ||||
|             The logical name of the port that is used by the OS | ||||
|           examples: | ||||
|           - Ethernet0 | ||||
|           - Ethernet1 | ||||
|           - Ethernet76 | ||||
|         front-panel-number: | ||||
|           type: integer | ||||
|           description: | ||||
|             The identification number of the port as can be seen on the front-panel of the device | ||||
|   port-capabilities: | ||||
|     type: object | ||||
|     description: | ||||
|       Description of physical ports and their form-factors | ||||
|     properties: | ||||
|       form-factors: | ||||
|         type: array | ||||
|         items: | ||||
|           type: string | ||||
|           enum: | ||||
|           - RJ45 | ||||
|           - SFP | ||||
|           - SFP+ | ||||
|           - SFP28 | ||||
|           - SFP-DD | ||||
|           - QSFP | ||||
|           - QSFP+ | ||||
|           - QSFP28 | ||||
|           - QSFP-DD | ||||
|       ports-list: | ||||
|         type: array | ||||
|         items: | ||||
|           type: object | ||||
|           properties: | ||||
|             type: | ||||
|               type: string | ||||
|               examples: | ||||
|               - RJ45 | ||||
|             ports: | ||||
|               type: array | ||||
|               items: | ||||
|                 type: string | ||||
|                 examples: | ||||
|                 - Ethernet1 | ||||
|   poe-capabilities: | ||||
|     type: object | ||||
|     description: | ||||
|       Description of physical ports and their PoE capabilities | ||||
|     properties: | ||||
|       supported-standards: | ||||
|         type: array | ||||
|         items: | ||||
|           type: string | ||||
|           enum: | ||||
|           - .3AF-POE | ||||
|           - .3AT-POE+ | ||||
|           - .3BT-PoE++ | ||||
|           - PreStandard-Passive | ||||
|       power-budget: | ||||
|         type: integer | ||||
|         examples: | ||||
|         - 2000 | ||||
|       poe-ports: | ||||
|         type: array | ||||
|         items: | ||||
|           type: object | ||||
|           properties: | ||||
|             type: | ||||
|               type: string | ||||
|               examples: | ||||
|               - .3AF-POE | ||||
|             budget-capacity: | ||||
|               type: integer | ||||
|             ports: | ||||
|               type: array | ||||
|               items: | ||||
|                 type: string | ||||
|                 examples: | ||||
|                 - Ethernet1 | ||||
|   supported-features: | ||||
|     type: array | ||||
|     description: | ||||
|       List of all features supported by the device | ||||
|     items: | ||||
|       type: string | ||||
|       enum: | ||||
|       # L2 | ||||
|       - VLAN | ||||
|       - Port-Isolation | ||||
|       - Spanning-Tree | ||||
|       - Spanning-Tree-Rapid | ||||
|       - Spanning-Tree-Per-VLAN | ||||
|       - Spanning-Tree-Per-VLAN-Rapid | ||||
|       - Spanning-Tree-MSTP | ||||
|       # L3 | ||||
|       - SVI-StaticIPv4 | ||||
|       - SVI-StaticIPv6 | ||||
|       - Interface-StaticIPv4 | ||||
|       - Interface-StaticIPv6 | ||||
|       - Routing-VRF | ||||
|       - Routing-IPv4-Route-Blackhole | ||||
|       - Routing-IPv4-Route-Unreachable | ||||
|       - Routing-IPv4-Nexthop | ||||
|       - Routing-IPv4-Broadcast | ||||
|       - Routing-IPv4-Multicast-IGMP-Snooping | ||||
|       - Routing-IPv4-Multicast-IGMP-Querier | ||||
|       - Routing-IPv4-Multicast-IGMP-Static | ||||
|       - Routing-IPv4-DHCP-Server | ||||
|       - Routing-IPv4-DHCP-Relay | ||||
|       - Routing-IPv4-DHCP-Snooping | ||||
|       - Routing-IPv4-Port-Forward | ||||
|       - Routing-IPv6-DHCP-Relay | ||||
|       - Routing-IPv6-DHCP-Stateful | ||||
|       - Routing-IPv6-DHCP-Stateless | ||||
|       - Routing-IPv6-Port-Forward | ||||
|       # PoE | ||||
|       - PoE-Reset | ||||
|       # .1X | ||||
|       - Port-Access-Control | ||||
|       - PAC-Dynamic-Auth | ||||
|       # System | ||||
|       - System-PasswordChange | ||||
|       - System-SwUpdate | ||||
|       - System-SwUpdate-Partial | ||||
|       - Port-Mirroring | ||||
|       # Services | ||||
|       - Service-SSH | ||||
|       - Service-RSSH | ||||
|       - Service-Telnet | ||||
|       - Service-LLDP | ||||
|       - Service-HTTP | ||||
|       - Service-HTTPS | ||||
|       - Service-GPS | ||||
|       - Service-IGMP | ||||
|       - Service-NTP | ||||
|       - Service-MDNS | ||||
|       - Service-QoS | ||||
|       - Service-Syslog | ||||
|       - Service-PAC | ||||
|       - Service-Wireguard-Overlay | ||||
|       - Service-Radius-Proxy | ||||
|       - Service-Online-Check | ||||
|       - Service-CaptivePortal | ||||
|       - Service-PublicIpCheck | ||||
|       # Tunneling | ||||
|       - Tunneling-VxLAN | ||||
|       - Tunneling-GRE | ||||
|       - Tunneling-GRE6 | ||||
|       - Tunneling-L2TP | ||||
|       - Tunneling-Mesh | ||||
| @@ -7,7 +7,8 @@ set -x | ||||
| ./merge-schema.py schema schema ucentral.yml ucentral.schema.pretty.json 0 1 | ||||
| ./merge-schema.py schema schema ucentral.yml ucentral.schema.full.json 0 0 | ||||
| ./merge-schema.py state state state.yml ucentral.state.pretty.json 0 1 | ||||
| ./generate-reader.uc  > schemareader.uc | ||||
| ./merge-schema.py capabilities capabilities connect.capabilities.yml ucentral.capabilities.pretty.json 0 1  | ||||
| #./generate-reader.uc  > schemareader.uc | ||||
| #./generate-example.uc > input.json | ||||
| mkdir -p docs | ||||
| which generate-schema-doc > /dev/null | ||||
|   | ||||
| @@ -161,42 +161,3 @@ properties: | ||||
|         type: integer | ||||
|         minimum: 1 | ||||
|         maximum: 4094 | ||||
|   port-isolation: | ||||
|     description: | ||||
|       This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. | ||||
|       Omitting this configuration completely fully disables any port-isolation configuration on this given port. | ||||
|     type: object | ||||
|     properties: | ||||
|       sessions: | ||||
|         description: | ||||
|           Allow selected port to forward traffic in the provided session-based format. | ||||
|         type: array | ||||
|         items: | ||||
|           type: object | ||||
|           properties: | ||||
|             id: | ||||
|               description: | ||||
|                 Session id to configure. | ||||
|               type: integer | ||||
|             uplink: | ||||
|               description: | ||||
|                 Configuration object for uplink interface(s) | ||||
|               type: object | ||||
|               properties: | ||||
|                 interface-list: | ||||
|                   description: | ||||
|                     List of interfaces (either physical or trunk ports) | ||||
|                   type: array | ||||
|                   items: | ||||
|                     type: string | ||||
|             downlink: | ||||
|               description: | ||||
|                 Configuration object for downlink interface(s) | ||||
|               type: object | ||||
|               properties: | ||||
|                 interface-list: | ||||
|                   description: | ||||
|                     List of interfaces (either physical or trunk ports) | ||||
|                   type: array | ||||
|                   items: | ||||
|                     type: string | ||||
|   | ||||
| @@ -40,7 +40,7 @@ properties: | ||||
|         vrf: | ||||
|           description: | ||||
|             VRF id. | ||||
|           type: number | ||||
|           type: integer | ||||
|   ipv4-unreachable: | ||||
|     description: | ||||
|       Define a list of non-interface specific UNREACHABLE routes. | ||||
| @@ -58,4 +58,4 @@ properties: | ||||
|         vrf: | ||||
|           description: | ||||
|             VRF id. | ||||
|           type: number | ||||
|           type: integer | ||||
|   | ||||
| @@ -30,7 +30,7 @@ properties: | ||||
|         vrf: | ||||
|           description: | ||||
|             VRF id. | ||||
|           type: number | ||||
|           type: integer | ||||
|   gateway: | ||||
|     description: | ||||
|       This option defines the static IPv4 gateway of the logical interface. | ||||
| @@ -55,7 +55,7 @@ properties: | ||||
|         vrf: | ||||
|           description: | ||||
|             VRF id. | ||||
|           type: number | ||||
|           type: integer | ||||
|         metric: | ||||
|           description: | ||||
|             Optional metric value (define a NH route's weight / metric). | ||||
| @@ -77,7 +77,7 @@ properties: | ||||
|         vrf: | ||||
|           description: | ||||
|             VRF id. | ||||
|           type: number | ||||
|           type: integer | ||||
|   multicast: | ||||
|     type: object | ||||
|     properties: | ||||
|   | ||||
							
								
								
									
										15
									
								
								schema/service.https.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								schema/service.https.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| description: | ||||
|   Enable the webserver with the on-boarding webui | ||||
| type: object | ||||
| properties: | ||||
|   https-port: | ||||
|     description: | ||||
|       The port that the secure HTTP server should run on. | ||||
|     type: integer | ||||
|     maximum: 65535 | ||||
|     minimum: 1 | ||||
|     default: 443 | ||||
|   enable: | ||||
|     description: | ||||
|       This option whether secure http server should be enabled or disabled. | ||||
|     type: boolean | ||||
| @@ -49,3 +49,5 @@ properties: | ||||
|     $ref: 'https://ucentral.io/schema/v1/service/rrm/' | ||||
|   telnet: | ||||
|     $ref: "https://ucentral.io/schema/v1/service/telnet/" | ||||
|   https: | ||||
|     $ref: "https://ucentral.io/schema/v1/service/https/" | ||||
|   | ||||
| @@ -184,3 +184,47 @@ properties: | ||||
|                   description: | ||||
|                     Sets the shared secret to verify client COA requests for this server. | ||||
|                   type: string | ||||
|   port-isolation: | ||||
|     description: | ||||
|       This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. | ||||
|       Omitting this configuration completely fully disables any port-isolation configuration on this given port. | ||||
|     type: object | ||||
|     properties: | ||||
|       sessions: | ||||
|         description: | ||||
|           Allow selected port to forward traffic in the provided session-based format. | ||||
|         type: array | ||||
|         items: | ||||
|           type: object | ||||
|           properties: | ||||
|             id: | ||||
|               description: | ||||
|                 Session id to configure. | ||||
|               type: integer | ||||
|             uplink: | ||||
|               description: | ||||
|                 Configuration object for uplink interface(s) | ||||
|               type: object | ||||
|               properties: | ||||
|                 interface-list: | ||||
|                   description: | ||||
|                     List of interfaces (either physical or trunk ports) | ||||
|                   type: array | ||||
|                   items: | ||||
|                     type: string | ||||
|             downlink: | ||||
|               description: | ||||
|                 Configuration object for downlink interface(s) | ||||
|               type: object | ||||
|               properties: | ||||
|                 interface-list: | ||||
|                   description: | ||||
|                     List of interfaces (either physical or trunk ports) | ||||
|                   type: array | ||||
|                   items: | ||||
|                     type: string | ||||
|   jumbo-frames: | ||||
|     description: | ||||
|       Enables Jumbo frames | ||||
|     type: boolean | ||||
|     default: false | ||||
|   | ||||
| @@ -12,6 +12,11 @@ properties: | ||||
|     description: | ||||
|       The unique ID of the configuration. This is the unix timestamp of when the config was created. | ||||
|     type: integer | ||||
|   public_ip_lookup:  | ||||
|     description: | ||||
|       The fqdn to retrieve public ip of internet connection.  | ||||
|     type: string | ||||
|     format: uc-fqdn | ||||
|   unit: | ||||
|     $ref: "https://ucentral.io/schema/v1/unit/" | ||||
|   globals: | ||||
|   | ||||
| @@ -100,3 +100,13 @@ properties: | ||||
|           Global config for controlling whether MLD snooping is enabled. If this global setting is disabled, all VLANs are treated as disabled, whether they are enabled or not. | ||||
|         type: boolean | ||||
|         default: true | ||||
|       unknown-multicast-flood-control: | ||||
|         description: | ||||
|           Global config for the unknown multicast flood control feature. This enables the system to forward unknown multicast packets only to a multicast router (mrouter). | ||||
|         type: boolean | ||||
|         default: false | ||||
|       querier-enable: | ||||
|         description: | ||||
|           Global IGMP querier config. This enables all Vlan interfaces to act as a querier. | ||||
|         type: boolean | ||||
|         default: false | ||||
|   | ||||
							
								
								
									
										507
									
								
								schemareader.uc
									
									
									
									
									
								
							
							
						
						
									
										507
									
								
								schemareader.uc
									
									
									
									
									
								
							| @@ -295,6 +295,34 @@ function instantiateUnit(location, value, errors) { | ||||
| 					obj.mld_snooping_enable = true; | ||||
| 				} | ||||
|  | ||||
| 				function parseUnknownMulticastFloodControl(location, value, errors) { | ||||
| 					if (type(value) != "bool") | ||||
| 						push(errors, [ location, "must be of type boolean" ]); | ||||
|  | ||||
| 					return value; | ||||
| 				} | ||||
|  | ||||
| 				if (exists(value, "unknown-multicast-flood-control")) { | ||||
| 					obj.unknown_multicast_flood_control = parseUnknownMulticastFloodControl(location + "/unknown-multicast-flood-control", value["unknown-multicast-flood-control"], errors); | ||||
| 				} | ||||
| 				else { | ||||
| 					obj.unknown_multicast_flood_control = false; | ||||
| 				} | ||||
|  | ||||
| 				function parseQuerierEnable(location, value, errors) { | ||||
| 					if (type(value) != "bool") | ||||
| 						push(errors, [ location, "must be of type boolean" ]); | ||||
|  | ||||
| 					return value; | ||||
| 				} | ||||
|  | ||||
| 				if (exists(value, "querier-enable")) { | ||||
| 					obj.querier_enable = parseQuerierEnable(location + "/querier-enable", value["querier-enable"], errors); | ||||
| 				} | ||||
| 				else { | ||||
| 					obj.querier_enable = false; | ||||
| 				} | ||||
|  | ||||
| 				return obj; | ||||
| 			} | ||||
|  | ||||
| @@ -532,8 +560,8 @@ function instantiateGlobals(location, value, errors) { | ||||
| 						} | ||||
|  | ||||
| 						function parseVrf(location, value, errors) { | ||||
| 							if (!(type(value) in [ "int", "double" ])) | ||||
| 								push(errors, [ location, "must be of type number" ]); | ||||
| 							if (type(value) != "int") | ||||
| 								push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 							return value; | ||||
| 						} | ||||
| @@ -588,8 +616,8 @@ function instantiateGlobals(location, value, errors) { | ||||
| 						} | ||||
|  | ||||
| 						function parseVrf(location, value, errors) { | ||||
| 							if (!(type(value) in [ "int", "double" ])) | ||||
| 								push(errors, [ location, "must be of type number" ]); | ||||
| 							if (type(value) != "int") | ||||
| 								push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 							return value; | ||||
| 						} | ||||
| @@ -1016,140 +1044,6 @@ function instantiateEthernet(location, value, errors) { | ||||
| 			obj.ieee8021x = parseIeee8021x(location + "/ieee8021x", value["ieee8021x"], errors); | ||||
| 		} | ||||
|  | ||||
| 		function parsePortIsolation(location, value, errors) { | ||||
| 			if (type(value) == "object") { | ||||
| 				let obj = {}; | ||||
|  | ||||
| 				function parseSessions(location, value, errors) { | ||||
| 					if (type(value) == "array") { | ||||
| 						function parseItem(location, value, errors) { | ||||
| 							if (type(value) == "object") { | ||||
| 								let obj = {}; | ||||
|  | ||||
| 								function parseId(location, value, errors) { | ||||
| 									if (type(value) != "int") | ||||
| 										push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "id")) { | ||||
| 									obj.id = parseId(location + "/id", value["id"], errors); | ||||
| 								} | ||||
|  | ||||
| 								function parseUplink(location, value, errors) { | ||||
| 									if (type(value) == "object") { | ||||
| 										let obj = {}; | ||||
|  | ||||
| 										function parseInterfaceList(location, value, errors) { | ||||
| 											if (type(value) == "array") { | ||||
| 												function parseItem(location, value, errors) { | ||||
| 													if (type(value) != "string") | ||||
| 														push(errors, [ location, "must be of type string" ]); | ||||
|  | ||||
| 													return value; | ||||
| 												} | ||||
|  | ||||
| 												return map(value, (item, i) => parseItem(location + "/" + i, item, errors)); | ||||
| 											} | ||||
|  | ||||
| 											if (type(value) != "array") | ||||
| 												push(errors, [ location, "must be of type array" ]); | ||||
|  | ||||
| 											return value; | ||||
| 										} | ||||
|  | ||||
| 										if (exists(value, "interface-list")) { | ||||
| 											obj.interface_list = parseInterfaceList(location + "/interface-list", value["interface-list"], errors); | ||||
| 										} | ||||
|  | ||||
| 										return obj; | ||||
| 									} | ||||
|  | ||||
| 									if (type(value) != "object") | ||||
| 										push(errors, [ location, "must be of type object" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "uplink")) { | ||||
| 									obj.uplink = parseUplink(location + "/uplink", value["uplink"], errors); | ||||
| 								} | ||||
|  | ||||
| 								function parseDownlink(location, value, errors) { | ||||
| 									if (type(value) == "object") { | ||||
| 										let obj = {}; | ||||
|  | ||||
| 										function parseInterfaceList(location, value, errors) { | ||||
| 											if (type(value) == "array") { | ||||
| 												function parseItem(location, value, errors) { | ||||
| 													if (type(value) != "string") | ||||
| 														push(errors, [ location, "must be of type string" ]); | ||||
|  | ||||
| 													return value; | ||||
| 												} | ||||
|  | ||||
| 												return map(value, (item, i) => parseItem(location + "/" + i, item, errors)); | ||||
| 											} | ||||
|  | ||||
| 											if (type(value) != "array") | ||||
| 												push(errors, [ location, "must be of type array" ]); | ||||
|  | ||||
| 											return value; | ||||
| 										} | ||||
|  | ||||
| 										if (exists(value, "interface-list")) { | ||||
| 											obj.interface_list = parseInterfaceList(location + "/interface-list", value["interface-list"], errors); | ||||
| 										} | ||||
|  | ||||
| 										return obj; | ||||
| 									} | ||||
|  | ||||
| 									if (type(value) != "object") | ||||
| 										push(errors, [ location, "must be of type object" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "downlink")) { | ||||
| 									obj.downlink = parseDownlink(location + "/downlink", value["downlink"], errors); | ||||
| 								} | ||||
|  | ||||
| 								return obj; | ||||
| 							} | ||||
|  | ||||
| 							if (type(value) != "object") | ||||
| 								push(errors, [ location, "must be of type object" ]); | ||||
|  | ||||
| 							return value; | ||||
| 						} | ||||
|  | ||||
| 						return map(value, (item, i) => parseItem(location + "/" + i, item, errors)); | ||||
| 					} | ||||
|  | ||||
| 					if (type(value) != "array") | ||||
| 						push(errors, [ location, "must be of type array" ]); | ||||
|  | ||||
| 					return value; | ||||
| 				} | ||||
|  | ||||
| 				if (exists(value, "sessions")) { | ||||
| 					obj.sessions = parseSessions(location + "/sessions", value["sessions"], errors); | ||||
| 				} | ||||
|  | ||||
| 				return obj; | ||||
| 			} | ||||
|  | ||||
| 			if (type(value) != "object") | ||||
| 				push(errors, [ location, "must be of type object" ]); | ||||
|  | ||||
| 			return value; | ||||
| 		} | ||||
|  | ||||
| 		if (exists(value, "port-isolation")) { | ||||
| 			obj.port_isolation = parsePortIsolation(location + "/port-isolation", value["port-isolation"], errors); | ||||
| 		} | ||||
|  | ||||
| 		return obj; | ||||
| 	} | ||||
|  | ||||
| @@ -1259,6 +1153,115 @@ function instantiateSwitch(location, value, errors) { | ||||
| 					obj.roles = parseRoles(location + "/roles", value["roles"], errors); | ||||
| 				} | ||||
|  | ||||
| 				function parseInstances(location, value, errors) { | ||||
| 					if (type(value) == "array") { | ||||
| 						function parseItem(location, value, errors) { | ||||
| 							if (type(value) == "object") { | ||||
| 								let obj = {}; | ||||
|  | ||||
| 								function parseId(location, value, errors) { | ||||
| 									if (type(value) != "int") | ||||
| 										push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "id")) { | ||||
| 									obj.id = parseId(location + "/id", value["id"], errors); | ||||
| 								} | ||||
|  | ||||
| 								function parseEnabled(location, value, errors) { | ||||
| 									if (type(value) != "bool") | ||||
| 										push(errors, [ location, "must be of type boolean" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "enabled")) { | ||||
| 									obj.enabled = parseEnabled(location + "/enabled", value["enabled"], errors); | ||||
| 								} | ||||
| 								else { | ||||
| 									obj.enabled = true; | ||||
| 								} | ||||
|  | ||||
| 								function parsePriority(location, value, errors) { | ||||
| 									if (type(value) != "int") | ||||
| 										push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "priority")) { | ||||
| 									obj.priority = parsePriority(location + "/priority", value["priority"], errors); | ||||
| 								} | ||||
| 								else { | ||||
| 									obj.priority = 32768; | ||||
| 								} | ||||
|  | ||||
| 								function parseForward_delay(location, value, errors) { | ||||
| 									if (type(value) != "int") | ||||
| 										push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "forward_delay")) { | ||||
| 									obj.forward_delay = parseForward_delay(location + "/forward_delay", value["forward_delay"], errors); | ||||
| 								} | ||||
| 								else { | ||||
| 									obj.forward_delay = 15; | ||||
| 								} | ||||
|  | ||||
| 								function parseHello_time(location, value, errors) { | ||||
| 									if (type(value) != "int") | ||||
| 										push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "hello_time")) { | ||||
| 									obj.hello_time = parseHello_time(location + "/hello_time", value["hello_time"], errors); | ||||
| 								} | ||||
| 								else { | ||||
| 									obj.hello_time = 2; | ||||
| 								} | ||||
|  | ||||
| 								function parseMax_age(location, value, errors) { | ||||
| 									if (type(value) != "int") | ||||
| 										push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "max_age")) { | ||||
| 									obj.max_age = parseMax_age(location + "/max_age", value["max_age"], errors); | ||||
| 								} | ||||
| 								else { | ||||
| 									obj.max_age = 20; | ||||
| 								} | ||||
|  | ||||
| 								return obj; | ||||
| 							} | ||||
|  | ||||
| 							if (type(value) != "object") | ||||
| 								push(errors, [ location, "must be of type object" ]); | ||||
|  | ||||
| 							return value; | ||||
| 						} | ||||
|  | ||||
| 						return map(value, (item, i) => parseItem(location + "/" + i, item, errors)); | ||||
| 					} | ||||
|  | ||||
| 					if (type(value) != "array") | ||||
| 						push(errors, [ location, "must be of type array" ]); | ||||
|  | ||||
| 					return value; | ||||
| 				} | ||||
|  | ||||
| 				if (exists(value, "instances")) { | ||||
| 					obj.instances = parseInstances(location + "/instances", value["instances"], errors); | ||||
| 				} | ||||
|  | ||||
| 				return obj; | ||||
| 			} | ||||
|  | ||||
| @@ -1541,6 +1544,154 @@ function instantiateSwitch(location, value, errors) { | ||||
| 			obj.ieee8021x = parseIeee8021x(location + "/ieee8021x", value["ieee8021x"], errors); | ||||
| 		} | ||||
|  | ||||
| 		function parsePortIsolation(location, value, errors) { | ||||
| 			if (type(value) == "object") { | ||||
| 				let obj = {}; | ||||
|  | ||||
| 				function parseSessions(location, value, errors) { | ||||
| 					if (type(value) == "array") { | ||||
| 						function parseItem(location, value, errors) { | ||||
| 							if (type(value) == "object") { | ||||
| 								let obj = {}; | ||||
|  | ||||
| 								function parseId(location, value, errors) { | ||||
| 									if (type(value) != "int") | ||||
| 										push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "id")) { | ||||
| 									obj.id = parseId(location + "/id", value["id"], errors); | ||||
| 								} | ||||
|  | ||||
| 								function parseUplink(location, value, errors) { | ||||
| 									if (type(value) == "object") { | ||||
| 										let obj = {}; | ||||
|  | ||||
| 										function parseInterfaceList(location, value, errors) { | ||||
| 											if (type(value) == "array") { | ||||
| 												function parseItem(location, value, errors) { | ||||
| 													if (type(value) != "string") | ||||
| 														push(errors, [ location, "must be of type string" ]); | ||||
|  | ||||
| 													return value; | ||||
| 												} | ||||
|  | ||||
| 												return map(value, (item, i) => parseItem(location + "/" + i, item, errors)); | ||||
| 											} | ||||
|  | ||||
| 											if (type(value) != "array") | ||||
| 												push(errors, [ location, "must be of type array" ]); | ||||
|  | ||||
| 											return value; | ||||
| 										} | ||||
|  | ||||
| 										if (exists(value, "interface-list")) { | ||||
| 											obj.interface_list = parseInterfaceList(location + "/interface-list", value["interface-list"], errors); | ||||
| 										} | ||||
|  | ||||
| 										return obj; | ||||
| 									} | ||||
|  | ||||
| 									if (type(value) != "object") | ||||
| 										push(errors, [ location, "must be of type object" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "uplink")) { | ||||
| 									obj.uplink = parseUplink(location + "/uplink", value["uplink"], errors); | ||||
| 								} | ||||
|  | ||||
| 								function parseDownlink(location, value, errors) { | ||||
| 									if (type(value) == "object") { | ||||
| 										let obj = {}; | ||||
|  | ||||
| 										function parseInterfaceList(location, value, errors) { | ||||
| 											if (type(value) == "array") { | ||||
| 												function parseItem(location, value, errors) { | ||||
| 													if (type(value) != "string") | ||||
| 														push(errors, [ location, "must be of type string" ]); | ||||
|  | ||||
| 													return value; | ||||
| 												} | ||||
|  | ||||
| 												return map(value, (item, i) => parseItem(location + "/" + i, item, errors)); | ||||
| 											} | ||||
|  | ||||
| 											if (type(value) != "array") | ||||
| 												push(errors, [ location, "must be of type array" ]); | ||||
|  | ||||
| 											return value; | ||||
| 										} | ||||
|  | ||||
| 										if (exists(value, "interface-list")) { | ||||
| 											obj.interface_list = parseInterfaceList(location + "/interface-list", value["interface-list"], errors); | ||||
| 										} | ||||
|  | ||||
| 										return obj; | ||||
| 									} | ||||
|  | ||||
| 									if (type(value) != "object") | ||||
| 										push(errors, [ location, "must be of type object" ]); | ||||
|  | ||||
| 									return value; | ||||
| 								} | ||||
|  | ||||
| 								if (exists(value, "downlink")) { | ||||
| 									obj.downlink = parseDownlink(location + "/downlink", value["downlink"], errors); | ||||
| 								} | ||||
|  | ||||
| 								return obj; | ||||
| 							} | ||||
|  | ||||
| 							if (type(value) != "object") | ||||
| 								push(errors, [ location, "must be of type object" ]); | ||||
|  | ||||
| 							return value; | ||||
| 						} | ||||
|  | ||||
| 						return map(value, (item, i) => parseItem(location + "/" + i, item, errors)); | ||||
| 					} | ||||
|  | ||||
| 					if (type(value) != "array") | ||||
| 						push(errors, [ location, "must be of type array" ]); | ||||
|  | ||||
| 					return value; | ||||
| 				} | ||||
|  | ||||
| 				if (exists(value, "sessions")) { | ||||
| 					obj.sessions = parseSessions(location + "/sessions", value["sessions"], errors); | ||||
| 				} | ||||
|  | ||||
| 				return obj; | ||||
| 			} | ||||
|  | ||||
| 			if (type(value) != "object") | ||||
| 				push(errors, [ location, "must be of type object" ]); | ||||
|  | ||||
| 			return value; | ||||
| 		} | ||||
|  | ||||
| 		if (exists(value, "port-isolation")) { | ||||
| 			obj.port_isolation = parsePortIsolation(location + "/port-isolation", value["port-isolation"], errors); | ||||
| 		} | ||||
|  | ||||
| 		function parseJumboFrames(location, value, errors) { | ||||
| 			if (type(value) != "bool") | ||||
| 				push(errors, [ location, "must be of type boolean" ]); | ||||
|  | ||||
| 			return value; | ||||
| 		} | ||||
|  | ||||
| 		if (exists(value, "jumbo-frames")) { | ||||
| 			obj.jumbo_frames = parseJumboFrames(location + "/jumbo-frames", value["jumbo-frames"], errors); | ||||
| 		} | ||||
| 		else { | ||||
| 			obj.jumbo_frames = false; | ||||
| 		} | ||||
|  | ||||
| 		return obj; | ||||
| 	} | ||||
|  | ||||
| @@ -2549,8 +2700,8 @@ function instantiateInterfaceIpv4(location, value, errors) { | ||||
| 						} | ||||
|  | ||||
| 						function parseVrf(location, value, errors) { | ||||
| 							if (!(type(value) in [ "int", "double" ])) | ||||
| 								push(errors, [ location, "must be of type number" ]); | ||||
| 							if (type(value) != "int") | ||||
| 								push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 							return value; | ||||
| 						} | ||||
| @@ -2622,8 +2773,8 @@ function instantiateInterfaceIpv4(location, value, errors) { | ||||
| 						} | ||||
|  | ||||
| 						function parseVrf(location, value, errors) { | ||||
| 							if (!(type(value) in [ "int", "double" ])) | ||||
| 								push(errors, [ location, "must be of type number" ]); | ||||
| 							if (type(value) != "int") | ||||
| 								push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 							return value; | ||||
| 						} | ||||
| @@ -2689,8 +2840,8 @@ function instantiateInterfaceIpv4(location, value, errors) { | ||||
| 						} | ||||
|  | ||||
| 						function parseVrf(location, value, errors) { | ||||
| 							if (!(type(value) in [ "int", "double" ])) | ||||
| 								push(errors, [ location, "must be of type number" ]); | ||||
| 							if (type(value) != "int") | ||||
| 								push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 							return value; | ||||
| 						} | ||||
| @@ -10132,6 +10283,53 @@ function instantiateServiceTelnet(location, value, errors) { | ||||
| 	return value; | ||||
| } | ||||
|  | ||||
| function instantiateServiceHttps(location, value, errors) { | ||||
| 	if (type(value) == "object") { | ||||
| 		let obj = {}; | ||||
|  | ||||
| 		function parseHttpsPort(location, value, errors) { | ||||
| 			if (type(value) in [ "int", "double" ]) { | ||||
| 				if (value > 65535) | ||||
| 					push(errors, [ location, "must be lower than or equal to 65535" ]); | ||||
|  | ||||
| 				if (value < 1) | ||||
| 					push(errors, [ location, "must be bigger than or equal to 1" ]); | ||||
|  | ||||
| 			} | ||||
|  | ||||
| 			if (type(value) != "int") | ||||
| 				push(errors, [ location, "must be of type integer" ]); | ||||
|  | ||||
| 			return value; | ||||
| 		} | ||||
|  | ||||
| 		if (exists(value, "https-port")) { | ||||
| 			obj.https_port = parseHttpsPort(location + "/https-port", value["https-port"], errors); | ||||
| 		} | ||||
| 		else { | ||||
| 			obj.https_port = 443; | ||||
| 		} | ||||
|  | ||||
| 		function parseEnable(location, value, errors) { | ||||
| 			if (type(value) != "bool") | ||||
| 				push(errors, [ location, "must be of type boolean" ]); | ||||
|  | ||||
| 			return value; | ||||
| 		} | ||||
|  | ||||
| 		if (exists(value, "enable")) { | ||||
| 			obj.enable = parseEnable(location + "/enable", value["enable"], errors); | ||||
| 		} | ||||
|  | ||||
| 		return obj; | ||||
| 	} | ||||
|  | ||||
| 	if (type(value) != "object") | ||||
| 		push(errors, [ location, "must be of type object" ]); | ||||
|  | ||||
| 	return value; | ||||
| } | ||||
|  | ||||
| function instantiateService(location, value, errors) { | ||||
| 	if (type(value) == "object") { | ||||
| 		let obj = {}; | ||||
| @@ -10228,6 +10426,10 @@ function instantiateService(location, value, errors) { | ||||
| 			obj.telnet = instantiateServiceTelnet(location + "/telnet", value["telnet"], errors); | ||||
| 		} | ||||
|  | ||||
| 		if (exists(value, "https")) { | ||||
| 			obj.https = instantiateServiceHttps(location + "/https", value["https"], errors); | ||||
| 		} | ||||
|  | ||||
| 		return obj; | ||||
| 	} | ||||
|  | ||||
| @@ -10700,6 +10902,23 @@ function newUCentralState(location, value, errors) { | ||||
| 			obj.uuid = parseUuid(location + "/uuid", value["uuid"], errors); | ||||
| 		} | ||||
|  | ||||
| 		function parsePublic_ip_lookup(location, value, errors) { | ||||
| 			if (type(value) == "string") { | ||||
| 				if (!matchUcFqdn(value)) | ||||
| 					push(errors, [ location, "must be a valid fully qualified domain name" ]); | ||||
|  | ||||
| 			} | ||||
|  | ||||
| 			if (type(value) != "string") | ||||
| 				push(errors, [ location, "must be of type string" ]); | ||||
|  | ||||
| 			return value; | ||||
| 		} | ||||
|  | ||||
| 		if (exists(value, "public_ip_lookup")) { | ||||
| 			obj.public_ip_lookup = parsePublic_ip_lookup(location + "/public_ip_lookup", value["public_ip_lookup"], errors); | ||||
| 		} | ||||
|  | ||||
| 		if (exists(value, "unit")) { | ||||
| 			obj.unit = instantiateUnit(location + "/unit", value["unit"], errors); | ||||
| 		} | ||||
|   | ||||
| @@ -8,6 +8,10 @@ properties: | ||||
|       type: string | ||||
|       description: | ||||
|         An IPv4 addreess. | ||||
|   public_ip: | ||||
|     type: string | ||||
|     description: | ||||
|       The public IP address of internet connection. | ||||
|   leasetime: | ||||
|     type: number | ||||
|     description: | ||||
|   | ||||
| @@ -38,6 +38,8 @@ items: | ||||
|       $ref: "https://ucentral.io/state/v1/interface/clients/" | ||||
|     counters: | ||||
|       $ref: "https://ucentral.io/state/v1/interface/counter/" | ||||
|     delta_counters: | ||||
|       $ref: "https://ucentral.io/state/v1/interface/counter/" | ||||
|     mesh-path: | ||||
|       $ref: "https://ucentral.io/state/v1/interface/mesh-path/" | ||||
|     ssids: | ||||
|   | ||||
| @@ -19,6 +19,8 @@ properties: | ||||
|     - half | ||||
|   counters: | ||||
|     $ref: "https://ucentral.io/state/v1/interface/counter/" | ||||
|   delta_counters: | ||||
|     $ref: "https://ucentral.io/state/v1/interface/counter/" | ||||
|   poe: | ||||
|     description: | ||||
|       This section describes the ethernet poe-port link-state object (statistics + PD info). | ||||
|   | ||||
| @@ -79,6 +79,16 @@ let delta = 1; | ||||
| if (telemetry) | ||||
| 	delta = 0; | ||||
|  | ||||
| let public_ip_file  = "/tmp/public_ip"; | ||||
| let public_ip = ""; | ||||
| if (cfg.public_ip_lookup) { | ||||
| 	if (!fs.access(public_ip_file)) | ||||
| 		system(sprintf("/usr/bin/curl -m 3 %s -o %s", cfg.public_ip_lookup, public_ip_file)); | ||||
| 	let online_file = fs.open(public_ip_file); | ||||
| 	public_ip = online_file.read("all") || ''; | ||||
| 	online_file.close(); | ||||
| } | ||||
|  | ||||
| global.tid_stats = (index(stats.types, 'tid-stats') > 0); | ||||
|  | ||||
| /* load state data */ | ||||
| @@ -412,6 +422,8 @@ cursor.foreach("network", "interface", function(d) { | ||||
| 			push(ipv4, sprintf("%s/%d", a.address, a.mask)); | ||||
|  | ||||
| 		iface.ipv4.addresses = ipv4; | ||||
| 		if( cfg.public_ip_lookup && length(public_ip)) | ||||
|                         iface.ipv4.public_ip = public_ip; | ||||
| 	} | ||||
|  | ||||
| 	if (length(status["ipv6-address"])) { | ||||
|   | ||||
							
								
								
									
										231
									
								
								ucentral.capabilities.pretty.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								ucentral.capabilities.pretty.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,231 @@ | ||||
| { | ||||
|     "description": "uCentral protocol (OpenLan) device and features capabilities schema", | ||||
|     "type": "object", | ||||
|     "properties": { | ||||
|         "serial": { | ||||
|             "type": "string", | ||||
|             "examples": [ | ||||
|                 "aabbccddeeff" | ||||
|             ] | ||||
|         }, | ||||
|         "firmware": { | ||||
|             "type": "string", | ||||
|             "description": "Platform revision", | ||||
|             "examples": [ | ||||
|                 "Rel 1.6 build 5" | ||||
|             ] | ||||
|         }, | ||||
|         "platform": { | ||||
|             "type": "string", | ||||
|             "enum": [ | ||||
|                 "Switch", | ||||
|                 "AP" | ||||
|             ] | ||||
|         }, | ||||
|         "model": { | ||||
|             "type": "string", | ||||
|             "description": "Device model" | ||||
|         }, | ||||
|         "hw-sku": { | ||||
|             "type": "string", | ||||
|             "description": "Stock keeping unit" | ||||
|         }, | ||||
|         "compatible": { | ||||
|             "type": "string", | ||||
|             "description": "Compatibility string, that defines the family of the device" | ||||
|         }, | ||||
|         "base-mac": { | ||||
|             "type": "string", | ||||
|             "description": "Switch MAC address", | ||||
|             "format": "uc-mac", | ||||
|             "examples": [ | ||||
|                 "aa:bb:cc:dd:ee:ff" | ||||
|             ] | ||||
|         }, | ||||
|         "port-list": { | ||||
|             "type": "array", | ||||
|             "description": "The list of physical network devices", | ||||
|             "items": { | ||||
|                 "type": "object", | ||||
|                 "properties": { | ||||
|                     "name": { | ||||
|                         "type": "string", | ||||
|                         "description": "The logical name of the port that is used by the OS", | ||||
|                         "examples": [ | ||||
|                             "Ethernet0", | ||||
|                             "Ethernet1", | ||||
|                             "Ethernet76" | ||||
|                         ] | ||||
|                     }, | ||||
|                     "front-panel-number": { | ||||
|                         "type": "integer", | ||||
|                         "description": "The identification number of the port as can be seen on the front-panel of the device" | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "port-capabilities": { | ||||
|             "type": "object", | ||||
|             "description": "Description of physical ports and their form-factors", | ||||
|             "properties": { | ||||
|                 "form-factors": { | ||||
|                     "type": "array", | ||||
|                     "items": { | ||||
|                         "type": "string", | ||||
|                         "enum": [ | ||||
|                             "RJ45", | ||||
|                             "SFP", | ||||
|                             "SFP+", | ||||
|                             "SFP28", | ||||
|                             "SFP-DD", | ||||
|                             "QSFP", | ||||
|                             "QSFP+", | ||||
|                             "QSFP28", | ||||
|                             "QSFP-DD" | ||||
|                         ] | ||||
|                     } | ||||
|                 }, | ||||
|                 "ports-list": { | ||||
|                     "type": "array", | ||||
|                     "items": { | ||||
|                         "type": "object", | ||||
|                         "properties": { | ||||
|                             "type": { | ||||
|                                 "type": "string", | ||||
|                                 "examples": [ | ||||
|                                     "RJ45" | ||||
|                                 ] | ||||
|                             }, | ||||
|                             "ports": { | ||||
|                                 "type": "array", | ||||
|                                 "items": { | ||||
|                                     "type": "string", | ||||
|                                     "examples": [ | ||||
|                                         "Ethernet1" | ||||
|                                     ] | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "poe-capabilities": { | ||||
|             "type": "object", | ||||
|             "description": "Description of physical ports and their PoE capabilities", | ||||
|             "properties": { | ||||
|                 "supported-standards": { | ||||
|                     "type": "array", | ||||
|                     "items": { | ||||
|                         "type": "string", | ||||
|                         "enum": [ | ||||
|                             ".3AF-POE", | ||||
|                             ".3AT-POE+", | ||||
|                             ".3BT-PoE++", | ||||
|                             "PreStandard-Passive" | ||||
|                         ] | ||||
|                     } | ||||
|                 }, | ||||
|                 "power-budget": { | ||||
|                     "type": "integer", | ||||
|                     "examples": [ | ||||
|                         2000 | ||||
|                     ] | ||||
|                 }, | ||||
|                 "poe-ports": { | ||||
|                     "type": "array", | ||||
|                     "items": { | ||||
|                         "type": "object", | ||||
|                         "properties": { | ||||
|                             "type": { | ||||
|                                 "type": "string", | ||||
|                                 "examples": [ | ||||
|                                     ".3AF-POE" | ||||
|                                 ] | ||||
|                             }, | ||||
|                             "budget-capacity": { | ||||
|                                 "type": "integer" | ||||
|                             }, | ||||
|                             "ports": { | ||||
|                                 "type": "array", | ||||
|                                 "items": { | ||||
|                                     "type": "string", | ||||
|                                     "examples": [ | ||||
|                                         "Ethernet1" | ||||
|                                     ] | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "supported-features": { | ||||
|             "type": "array", | ||||
|             "description": "List of all features supported by the device", | ||||
|             "items": { | ||||
|                 "type": "string", | ||||
|                 "enum": [ | ||||
|                     "VLAN", | ||||
|                     "Port-Isolation", | ||||
|                     "Spanning-Tree", | ||||
|                     "Spanning-Tree-Rapid", | ||||
|                     "Spanning-Tree-Per-VLAN", | ||||
|                     "Spanning-Tree-Per-VLAN-Rapid", | ||||
|                     "Spanning-Tree-MSTP", | ||||
|                     "SVI-StaticIPv4", | ||||
|                     "SVI-StaticIPv6", | ||||
|                     "Interface-StaticIPv4", | ||||
|                     "Interface-StaticIPv6", | ||||
|                     "Routing-VRF", | ||||
|                     "Routing-IPv4-Route-Blackhole", | ||||
|                     "Routing-IPv4-Route-Unreachable", | ||||
|                     "Routing-IPv4-Nexthop", | ||||
|                     "Routing-IPv4-Broadcast", | ||||
|                     "Routing-IPv4-Multicast-IGMP-Snooping", | ||||
|                     "Routing-IPv4-Multicast-IGMP-Querier", | ||||
|                     "Routing-IPv4-Multicast-IGMP-Static", | ||||
|                     "Routing-IPv4-DHCP-Server", | ||||
|                     "Routing-IPv4-DHCP-Relay", | ||||
|                     "Routing-IPv4-DHCP-Snooping", | ||||
|                     "Routing-IPv4-Port-Forward", | ||||
|                     "Routing-IPv6-DHCP-Relay", | ||||
|                     "Routing-IPv6-DHCP-Stateful", | ||||
|                     "Routing-IPv6-DHCP-Stateless", | ||||
|                     "Routing-IPv6-Port-Forward", | ||||
|                     "PoE-Reset", | ||||
|                     "Port-Access-Control", | ||||
|                     "PAC-Dynamic-Auth", | ||||
|                     "System-PasswordChange", | ||||
|                     "System-SwUpdate", | ||||
|                     "System-SwUpdate-Partial", | ||||
|                     "Port-Mirroring", | ||||
|                     "Service-SSH", | ||||
|                     "Service-RSSH", | ||||
|                     "Service-Telnet", | ||||
|                     "Service-LLDP", | ||||
|                     "Service-HTTP", | ||||
|                     "Service-HTTPS", | ||||
|                     "Service-GPS", | ||||
|                     "Service-IGMP", | ||||
|                     "Service-NTP", | ||||
|                     "Service-MDNS", | ||||
|                     "Service-QoS", | ||||
|                     "Service-Syslog", | ||||
|                     "Service-PAC", | ||||
|                     "Service-Wireguard-Overlay", | ||||
|                     "Service-Radius-Proxy", | ||||
|                     "Service-Online-Check", | ||||
|                     "Service-CaptivePortal", | ||||
|                     "Service-PublicIpCheck", | ||||
|                     "Tunneling-VxLAN", | ||||
|                     "Tunneling-GRE", | ||||
|                     "Tunneling-GRE6", | ||||
|                     "Tunneling-L2TP", | ||||
|                     "Tunneling-Mesh" | ||||
|                 ] | ||||
|             } | ||||
|         } | ||||
|     }, | ||||
|     "$defs": {} | ||||
| } | ||||
| @@ -13,6 +13,11 @@ | ||||
|             "description": "The unique ID of the configuration. This is the unix timestamp of when the config was created.", | ||||
|             "type": "integer" | ||||
|         }, | ||||
|         "public_ip_lookup": { | ||||
|             "description": "The fqdn to retrieve public ip of internet connection.", | ||||
|             "type": "string", | ||||
|             "format": "uc-fqdn" | ||||
|         }, | ||||
|         "unit": { | ||||
|             "description": "A device has certain properties that describe its identity and location. These properties are described inside this object.", | ||||
|             "type": "object", | ||||
| @@ -106,6 +111,16 @@ | ||||
|                             "description": "Global config for controlling whether MLD snooping is enabled. If this global setting is disabled, all VLANs are treated as disabled, whether they are enabled or not.", | ||||
|                             "type": "boolean", | ||||
|                             "default": true | ||||
|                         }, | ||||
|                         "unknown-multicast-flood-control": { | ||||
|                             "description": "Global config for the unknown multicast flood control feature. This enables the system to forward unknown multicast packets only to a multicast router (mrouter).", | ||||
|                             "type": "boolean", | ||||
|                             "default": false | ||||
|                         }, | ||||
|                         "querier-enable": { | ||||
|                             "description": "Global IGMP querier config. This enables all Vlan interfaces to act as a querier.", | ||||
|                             "type": "boolean", | ||||
|                             "default": false | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
| @@ -429,7 +444,7 @@ | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "description": "VRF id.", | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
| @@ -450,7 +465,7 @@ | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "description": "VRF id.", | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
| @@ -670,51 +685,6 @@ | ||||
|                                 "maximum": 4094 | ||||
|                             } | ||||
|                         } | ||||
|                     }, | ||||
|                     "port-isolation": { | ||||
|                         "description": "This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. Omitting this configuration completely fully disables any port-isolation configuration on this given port.", | ||||
|                         "type": "object", | ||||
|                         "properties": { | ||||
|                             "sessions": { | ||||
|                                 "description": "Allow selected port to forward traffic in the provided session-based format.", | ||||
|                                 "type": "array", | ||||
|                                 "items": { | ||||
|                                     "type": "object", | ||||
|                                     "properties": { | ||||
|                                         "id": { | ||||
|                                             "description": "Session id to configure.", | ||||
|                                             "type": "integer" | ||||
|                                         }, | ||||
|                                         "uplink": { | ||||
|                                             "description": "Configuration object for uplink interface(s)", | ||||
|                                             "type": "object", | ||||
|                                             "properties": { | ||||
|                                                 "interface-list": { | ||||
|                                                     "description": "List of interfaces (either physical or trunk ports)", | ||||
|                                                     "type": "array", | ||||
|                                                     "items": { | ||||
|                                                         "type": "string" | ||||
|                                                     } | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         }, | ||||
|                                         "downlink": { | ||||
|                                             "description": "Configuration object for downlink interface(s)", | ||||
|                                             "type": "object", | ||||
|                                             "properties": { | ||||
|                                                 "interface-list": { | ||||
|                                                     "description": "List of interfaces (either physical or trunk ports)", | ||||
|                                                     "type": "array", | ||||
|                                                     "items": { | ||||
|                                                         "type": "string" | ||||
|                                                     } | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| @@ -767,7 +737,6 @@ | ||||
|                                     "downstream" | ||||
|                                 ] | ||||
|                             } | ||||
|                         } | ||||
|                         }, | ||||
|                         "instances": { | ||||
|                             "description": "Define a list of configuration for each STP instance. Meaning of this field depends on current STP protocol (switch.loop-detection.protocol)", | ||||
| @@ -807,6 +776,7 @@ | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "ieee8021x": { | ||||
|                     "description": "This section describes the global 802.1X (port access control) configuration.", | ||||
| @@ -910,6 +880,56 @@ | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "port-isolation": { | ||||
|                     "description": "This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. Omitting this configuration completely fully disables any port-isolation configuration on this given port.", | ||||
|                     "type": "object", | ||||
|                     "properties": { | ||||
|                         "sessions": { | ||||
|                             "description": "Allow selected port to forward traffic in the provided session-based format.", | ||||
|                             "type": "array", | ||||
|                             "items": { | ||||
|                                 "type": "object", | ||||
|                                 "properties": { | ||||
|                                     "id": { | ||||
|                                         "description": "Session id to configure.", | ||||
|                                         "type": "integer" | ||||
|                                     }, | ||||
|                                     "uplink": { | ||||
|                                         "description": "Configuration object for uplink interface(s)", | ||||
|                                         "type": "object", | ||||
|                                         "properties": { | ||||
|                                             "interface-list": { | ||||
|                                                 "description": "List of interfaces (either physical or trunk ports)", | ||||
|                                                 "type": "array", | ||||
|                                                 "items": { | ||||
|                                                     "type": "string" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     }, | ||||
|                                     "downlink": { | ||||
|                                         "description": "Configuration object for downlink interface(s)", | ||||
|                                         "type": "object", | ||||
|                                         "properties": { | ||||
|                                             "interface-list": { | ||||
|                                                 "description": "List of interfaces (either physical or trunk ports)", | ||||
|                                                 "type": "array", | ||||
|                                                 "items": { | ||||
|                                                     "type": "string" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "jumbo-frames": { | ||||
|                     "description": "Enables Jumbo frames", | ||||
|                     "type": "boolean", | ||||
|                     "default": false | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
| @@ -1340,7 +1360,7 @@ | ||||
|                                         }, | ||||
|                                         "vrf": { | ||||
|                                             "description": "VRF id.", | ||||
|                                             "type": "number" | ||||
|                                             "type": "integer" | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
| @@ -1369,7 +1389,7 @@ | ||||
|                                         }, | ||||
|                                         "vrf": { | ||||
|                                             "description": "VRF id.", | ||||
|                                             "type": "number" | ||||
|                                             "type": "integer" | ||||
|                                         }, | ||||
|                                         "metric": { | ||||
|                                             "description": "Optional metric value (define a NH route's weight / metric).", | ||||
| @@ -1394,7 +1414,7 @@ | ||||
|                                         }, | ||||
|                                         "vrf": { | ||||
|                                             "description": "VRF id.", | ||||
|                                             "type": "number" | ||||
|                                             "type": "integer" | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
| @@ -4728,6 +4748,23 @@ | ||||
|                             "type": "boolean" | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "https": { | ||||
|                     "description": "Enable the webserver with the on-boarding webui", | ||||
|                     "type": "object", | ||||
|                     "properties": { | ||||
|                         "https-port": { | ||||
|                             "description": "The port that the secure HTTP server should run on.", | ||||
|                             "type": "integer", | ||||
|                             "maximum": 65535, | ||||
|                             "minimum": 1, | ||||
|                             "default": 443 | ||||
|                         }, | ||||
|                         "enable": { | ||||
|                             "description": "This option whether secure http server should be enabled or disabled.", | ||||
|                             "type": "boolean" | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|   | ||||
| @@ -10,6 +10,10 @@ | ||||
|         "uuid": { | ||||
|             "type": "integer" | ||||
|         }, | ||||
|         "public_ip_lookup": { | ||||
|             "type": "string", | ||||
|             "format": "uc-fqdn" | ||||
|         }, | ||||
|         "unit": { | ||||
|             "$ref": "#/$defs/unit" | ||||
|         }, | ||||
| @@ -130,6 +134,14 @@ | ||||
|                         "mld-snooping-enable": { | ||||
|                             "type": "boolean", | ||||
|                             "default": true | ||||
|                         }, | ||||
|                         "unknown-multicast-flood-control": { | ||||
|                             "type": "boolean", | ||||
|                             "default": false | ||||
|                         }, | ||||
|                         "querier-enable": { | ||||
|                             "type": "boolean", | ||||
|                             "default": false | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
| @@ -251,7 +263,7 @@ | ||||
|                                 ] | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
| @@ -269,7 +281,7 @@ | ||||
|                                 ] | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
| @@ -465,44 +477,6 @@ | ||||
|                             "maximum": 4094 | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "port-isolation": { | ||||
|                     "type": "object", | ||||
|                     "properties": { | ||||
|                         "sessions": { | ||||
|                             "type": "array", | ||||
|                             "items": { | ||||
|                                 "type": "object", | ||||
|                                 "properties": { | ||||
|                                     "id": { | ||||
|                                         "type": "integer" | ||||
|                                     }, | ||||
|                                     "uplink": { | ||||
|                                         "type": "object", | ||||
|                                         "properties": { | ||||
|                                             "interface-list": { | ||||
|                                                 "type": "array", | ||||
|                                                 "items": { | ||||
|                                                     "type": "string" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     }, | ||||
|                                     "downlink": { | ||||
|                                         "type": "object", | ||||
|                                         "properties": { | ||||
|                                             "interface-list": { | ||||
|                                                 "type": "array", | ||||
|                                                 "items": { | ||||
|                                                     "type": "string" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
| @@ -547,7 +521,6 @@ | ||||
|                                     "downstream" | ||||
|                                 ] | ||||
|                             } | ||||
|                         } | ||||
|                         }, | ||||
|                         "instances": { | ||||
|                             "type": "array", | ||||
| @@ -580,6 +553,7 @@ | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "ieee8021x": { | ||||
|                     "type": "object", | ||||
| @@ -666,6 +640,48 @@ | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "port-isolation": { | ||||
|                     "type": "object", | ||||
|                     "properties": { | ||||
|                         "sessions": { | ||||
|                             "type": "array", | ||||
|                             "items": { | ||||
|                                 "type": "object", | ||||
|                                 "properties": { | ||||
|                                     "id": { | ||||
|                                         "type": "integer" | ||||
|                                     }, | ||||
|                                     "uplink": { | ||||
|                                         "type": "object", | ||||
|                                         "properties": { | ||||
|                                             "interface-list": { | ||||
|                                                 "type": "array", | ||||
|                                                 "items": { | ||||
|                                                     "type": "string" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     }, | ||||
|                                     "downlink": { | ||||
|                                         "type": "object", | ||||
|                                         "properties": { | ||||
|                                             "interface-list": { | ||||
|                                                 "type": "array", | ||||
|                                                 "items": { | ||||
|                                                     "type": "string" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "jumbo-frames": { | ||||
|                     "type": "boolean", | ||||
|                     "default": false | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
| @@ -1094,7 +1110,7 @@ | ||||
|                                 ] | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
| @@ -1119,7 +1135,7 @@ | ||||
|                                 ] | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             }, | ||||
|                             "metric": { | ||||
|                                 "type": "number" | ||||
| @@ -1140,7 +1156,7 @@ | ||||
|                                 ] | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
| @@ -3622,6 +3638,20 @@ | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "service.https": { | ||||
|             "type": "object", | ||||
|             "properties": { | ||||
|                 "https-port": { | ||||
|                     "type": "integer", | ||||
|                     "maximum": 65535, | ||||
|                     "minimum": 1, | ||||
|                     "default": 443 | ||||
|                 }, | ||||
|                 "enable": { | ||||
|                     "type": "boolean" | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "service": { | ||||
|             "type": "object", | ||||
|             "properties": { | ||||
| @@ -3693,6 +3723,9 @@ | ||||
|                 }, | ||||
|                 "telnet": { | ||||
|                     "$ref": "#/$defs/service.telnet" | ||||
|                 }, | ||||
|                 "https": { | ||||
|                     "$ref": "#/$defs/service.https" | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|   | ||||
| @@ -13,6 +13,11 @@ | ||||
|             "description": "The unique ID of the configuration. This is the unix timestamp of when the config was created.", | ||||
|             "type": "integer" | ||||
|         }, | ||||
|         "public_ip_lookup": { | ||||
|             "description": "The fqdn to retrieve public ip of internet connection.", | ||||
|             "type": "string", | ||||
|             "format": "uc-fqdn" | ||||
|         }, | ||||
|         "unit": { | ||||
|             "$ref": "#/$defs/unit" | ||||
|         }, | ||||
| @@ -151,6 +156,16 @@ | ||||
|                             "description": "Global config for controlling whether MLD snooping is enabled. If this global setting is disabled, all VLANs are treated as disabled, whether they are enabled or not.", | ||||
|                             "type": "boolean", | ||||
|                             "default": true | ||||
|                         }, | ||||
|                         "unknown-multicast-flood-control": { | ||||
|                             "description": "Global config for the unknown multicast flood control feature. This enables the system to forward unknown multicast packets only to a multicast router (mrouter).", | ||||
|                             "type": "boolean", | ||||
|                             "default": false | ||||
|                         }, | ||||
|                         "querier-enable": { | ||||
|                             "description": "Global IGMP querier config. This enables all Vlan interfaces to act as a querier.", | ||||
|                             "type": "boolean", | ||||
|                             "default": false | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
| @@ -280,7 +295,7 @@ | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "description": "VRF id.", | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
| @@ -301,7 +316,7 @@ | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "description": "VRF id.", | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
| @@ -522,51 +537,6 @@ | ||||
|                             "maximum": 4094 | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "port-isolation": { | ||||
|                     "description": "This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. Omitting this configuration completely fully disables any port-isolation configuration on this given port.", | ||||
|                     "type": "object", | ||||
|                     "properties": { | ||||
|                         "sessions": { | ||||
|                             "description": "Allow selected port to forward traffic in the provided session-based format.", | ||||
|                             "type": "array", | ||||
|                             "items": { | ||||
|                                 "type": "object", | ||||
|                                 "properties": { | ||||
|                                     "id": { | ||||
|                                         "description": "Session id to configure.", | ||||
|                                         "type": "integer" | ||||
|                                     }, | ||||
|                                     "uplink": { | ||||
|                                         "description": "Configuration object for uplink interface(s)", | ||||
|                                         "type": "object", | ||||
|                                         "properties": { | ||||
|                                             "interface-list": { | ||||
|                                                 "description": "List of interfaces (either physical or trunk ports)", | ||||
|                                                 "type": "array", | ||||
|                                                 "items": { | ||||
|                                                     "type": "string" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     }, | ||||
|                                     "downlink": { | ||||
|                                         "description": "Configuration object for downlink interface(s)", | ||||
|                                         "type": "object", | ||||
|                                         "properties": { | ||||
|                                             "interface-list": { | ||||
|                                                 "description": "List of interfaces (either physical or trunk ports)", | ||||
|                                                 "type": "array", | ||||
|                                                 "items": { | ||||
|                                                     "type": "string" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
| @@ -618,7 +588,6 @@ | ||||
|                                     "downstream" | ||||
|                                 ] | ||||
|                             } | ||||
|                         } | ||||
|                         }, | ||||
|                         "instances": { | ||||
|                             "description": "Define a list of configuration for each STP instance. Meaning of this field depends on current STP protocol (switch.loop-detection.protocol)", | ||||
| @@ -658,6 +627,7 @@ | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "ieee8021x": { | ||||
|                     "description": "This section describes the global 802.1X (port access control) configuration.", | ||||
| @@ -761,6 +731,56 @@ | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "port-isolation": { | ||||
|                     "description": "This section describes the per-port specific port-isolation matrix (to which ports selected port can forward traffic to) configuration. Omitting this configuration completely fully disables any port-isolation configuration on this given port.", | ||||
|                     "type": "object", | ||||
|                     "properties": { | ||||
|                         "sessions": { | ||||
|                             "description": "Allow selected port to forward traffic in the provided session-based format.", | ||||
|                             "type": "array", | ||||
|                             "items": { | ||||
|                                 "type": "object", | ||||
|                                 "properties": { | ||||
|                                     "id": { | ||||
|                                         "description": "Session id to configure.", | ||||
|                                         "type": "integer" | ||||
|                                     }, | ||||
|                                     "uplink": { | ||||
|                                         "description": "Configuration object for uplink interface(s)", | ||||
|                                         "type": "object", | ||||
|                                         "properties": { | ||||
|                                             "interface-list": { | ||||
|                                                 "description": "List of interfaces (either physical or trunk ports)", | ||||
|                                                 "type": "array", | ||||
|                                                 "items": { | ||||
|                                                     "type": "string" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     }, | ||||
|                                     "downlink": { | ||||
|                                         "description": "Configuration object for downlink interface(s)", | ||||
|                                         "type": "object", | ||||
|                                         "properties": { | ||||
|                                             "interface-list": { | ||||
|                                                 "description": "List of interfaces (either physical or trunk ports)", | ||||
|                                                 "type": "array", | ||||
|                                                 "items": { | ||||
|                                                     "type": "string" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "jumbo-frames": { | ||||
|                     "description": "Enables Jumbo frames", | ||||
|                     "type": "boolean", | ||||
|                     "default": false | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
| @@ -1248,7 +1268,7 @@ | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "description": "VRF id.", | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
| @@ -1277,7 +1297,7 @@ | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "description": "VRF id.", | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             }, | ||||
|                             "metric": { | ||||
|                                 "description": "Optional metric value (define a NH route's weight / metric).", | ||||
| @@ -1302,7 +1322,7 @@ | ||||
|                             }, | ||||
|                             "vrf": { | ||||
|                                 "description": "VRF id.", | ||||
|                                 "type": "number" | ||||
|                                 "type": "integer" | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
| @@ -4172,6 +4192,23 @@ | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "service.https": { | ||||
|             "description": "Enable the webserver with the on-boarding webui", | ||||
|             "type": "object", | ||||
|             "properties": { | ||||
|                 "https-port": { | ||||
|                     "description": "The port that the secure HTTP server should run on.", | ||||
|                     "type": "integer", | ||||
|                     "maximum": 65535, | ||||
|                     "minimum": 1, | ||||
|                     "default": 443 | ||||
|                 }, | ||||
|                 "enable": { | ||||
|                     "description": "This option whether secure http server should be enabled or disabled.", | ||||
|                     "type": "boolean" | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "service": { | ||||
|             "description": "This section describes all of the services that may be present on the AP. Each service is then referenced via its name inside an interface, ssid, ...", | ||||
|             "type": "object", | ||||
| @@ -4244,6 +4281,9 @@ | ||||
|                 }, | ||||
|                 "telnet": { | ||||
|                     "$ref": "#/$defs/service.telnet" | ||||
|                 }, | ||||
|                 "https": { | ||||
|                     "$ref": "#/$defs/service.https" | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|   | ||||
| @@ -325,6 +325,10 @@ | ||||
|                         "description": "An IPv4 addreess." | ||||
|                     } | ||||
|                 }, | ||||
|                 "public_ip": { | ||||
|                     "type": "string", | ||||
|                     "description": "The public IP address of internet connection." | ||||
|                 }, | ||||
|                 "leasetime": { | ||||
|                     "type": "number", | ||||
|                     "description": "This is the leasetime if the IPv4 address of this logical interface was acquired via DHCPv4." | ||||
| @@ -755,6 +759,9 @@ | ||||
|                     "counters": { | ||||
|                         "$ref": "#/$defs/interface.counter" | ||||
|                     }, | ||||
|                     "delta_counters": { | ||||
|                         "$ref": "#/$defs/interface.counter" | ||||
|                     }, | ||||
|                     "mesh-path": { | ||||
|                         "$ref": "#/$defs/interface.mesh-path" | ||||
|                     }, | ||||
| @@ -883,6 +890,9 @@ | ||||
|                 "counters": { | ||||
|                     "$ref": "#/$defs/interface.counter" | ||||
|                 }, | ||||
|                 "delta_counters": { | ||||
|                     "$ref": "#/$defs/interface.counter" | ||||
|                 }, | ||||
|                 "poe": { | ||||
|                     "description": "This section describes the ethernet poe-port link-state object (statistics + PD info). Present only in case if port has any Power sourcing capabilities.", | ||||
|                     "type": "object", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user