mirror of
				https://github.com/Telecominfraproject/ols-ucentral-schema.git
				synced 2025-10-30 17:47:59 +00:00 
			
		
		
		
	Compare commits
	
		
			13 Commits
		
	
	
		
			fix_loop_d
			...
			secure_htt
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 4336be981b | ||
|   | 1e33d3fa0a | ||
|   | dc754dc519 | ||
|   | b3374bb60b | ||
|   | 0ef7362930 | ||
|   | b9762df2cf | ||
|   | 0983abe2bf | ||
|   | 719fd97705 | ||
|   | 777e2b26a8 | ||
|   | ab43179a83 | ||
|   | 3a41591f85 | ||
|   | 7fa4d15f5e | ||
|   | d105fe165e | 
							
								
								
									
										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. | ||||
							
								
								
									
										193
									
								
								capabilities/connect.capabilities.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								capabilities/connect.capabilities.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,193 @@ | ||||
| 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 | ||||
|   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 | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										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,42 @@ 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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										364
									
								
								schemareader.uc
									
									
									
									
									
								
							
							
						
						
									
										364
									
								
								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; | ||||
| 			} | ||||
|  | ||||
| @@ -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; | ||||
| 	} | ||||
|  | ||||
| @@ -1650,6 +1544,140 @@ 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); | ||||
| 		} | ||||
|  | ||||
| 		return obj; | ||||
| 	} | ||||
|  | ||||
| @@ -10241,6 +10269,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 = {}; | ||||
| @@ -10337,6 +10412,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; | ||||
| 	} | ||||
|  | ||||
| @@ -10809,6 +10888,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: | ||||
|   | ||||
| @@ -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"])) { | ||||
|   | ||||
| @@ -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 | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
| @@ -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" | ||||
|                                                     } | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| @@ -910,6 +880,51 @@ | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "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" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
| @@ -4728,6 +4743,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 | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
| @@ -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" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
| @@ -666,6 +640,44 @@ | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "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" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
| @@ -3622,6 +3634,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 +3719,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 | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
| @@ -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" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
| @@ -761,6 +731,51 @@ | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 }, | ||||
|                 "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" | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
| @@ -4172,6 +4187,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 +4276,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." | ||||
|   | ||||
		Reference in New Issue
	
	Block a user