mirror of
				https://github.com/Telecominfraproject/wlan-cloud-ucentralsec.git
				synced 2025-11-03 20:27:45 +00:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			v2.11.0-RC
			...
			v2.10.0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					aaebf74539 | ||
| 
						 | 
					5a6baeca7d | 
@@ -1,5 +1,5 @@
 | 
				
			|||||||
cmake_minimum_required(VERSION 3.13)
 | 
					cmake_minimum_required(VERSION 3.13)
 | 
				
			||||||
project(owsec VERSION 2.11.0)
 | 
					project(owsec VERSION 2.10.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set(CMAKE_CXX_STANDARD 17)
 | 
					set(CMAKE_CXX_STANDARD 17)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ fullnameOverride: ""
 | 
				
			|||||||
images:
 | 
					images:
 | 
				
			||||||
  owsec:
 | 
					  owsec:
 | 
				
			||||||
    repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owsec
 | 
					    repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owsec
 | 
				
			||||||
    tag: v2.11.0-RC1
 | 
					    tag: v2.10.0
 | 
				
			||||||
    pullPolicy: Always
 | 
					    pullPolicy: Always
 | 
				
			||||||
#    regcred:
 | 
					#    regcred:
 | 
				
			||||||
#      registry: tip-tip-wlan-cloud-ucentral.jfrog.io
 | 
					#      registry: tip-tip-wlan-cloud-ucentral.jfrog.io
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -565,6 +565,12 @@ components:
 | 
				
			|||||||
            - $ref: '#/components/schemas/StringList'
 | 
					            - $ref: '#/components/schemas/StringList'
 | 
				
			||||||
            - $ref: '#/components/schemas/TagValuePairList'
 | 
					            - $ref: '#/components/schemas/TagValuePairList'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    SystemCommandResults:
 | 
				
			||||||
 | 
					      type: object
 | 
				
			||||||
 | 
					      oneOf:
 | 
				
			||||||
 | 
					        - $ref: '#/components/schemas/StringList'
 | 
				
			||||||
 | 
					        - $ref: '#/components/schemas/TagValuePairList'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SystemInfoResults:
 | 
					    SystemInfoResults:
 | 
				
			||||||
      type: object
 | 
					      type: object
 | 
				
			||||||
      properties:
 | 
					      properties:
 | 
				
			||||||
@@ -593,33 +599,6 @@ components:
 | 
				
			|||||||
                type: integer
 | 
					                type: integer
 | 
				
			||||||
                format: int64
 | 
					                format: int64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SystemResources:
 | 
					 | 
				
			||||||
      type: object
 | 
					 | 
				
			||||||
      properties:
 | 
					 | 
				
			||||||
        numberOfFileDescriptors:
 | 
					 | 
				
			||||||
          type: integer
 | 
					 | 
				
			||||||
          format: int64
 | 
					 | 
				
			||||||
        currRealMem:
 | 
					 | 
				
			||||||
          type: integer
 | 
					 | 
				
			||||||
          format: int64
 | 
					 | 
				
			||||||
        peakRealMem:
 | 
					 | 
				
			||||||
          type: integer
 | 
					 | 
				
			||||||
          format: int64
 | 
					 | 
				
			||||||
        currVirtMem:
 | 
					 | 
				
			||||||
          type: integer
 | 
					 | 
				
			||||||
          format: int64
 | 
					 | 
				
			||||||
        peakVirtMem:
 | 
					 | 
				
			||||||
          type: integer
 | 
					 | 
				
			||||||
          format: int64
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    SystemCommandResults:
 | 
					 | 
				
			||||||
      type: object
 | 
					 | 
				
			||||||
      oneOf:
 | 
					 | 
				
			||||||
        - $ref: '#/components/schemas/SystemResources'
 | 
					 | 
				
			||||||
        - $ref: '#/components/schemas/SystemInfoResults'
 | 
					 | 
				
			||||||
        - $ref: '#/components/schemas/StringList'
 | 
					 | 
				
			||||||
        - $ref: '#/components/schemas/TagValuePairList'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ProfileAction:
 | 
					    ProfileAction:
 | 
				
			||||||
      type: object
 | 
					      type: object
 | 
				
			||||||
      properties:
 | 
					      properties:
 | 
				
			||||||
@@ -1988,12 +1967,16 @@ paths:
 | 
				
			|||||||
            type: string
 | 
					            type: string
 | 
				
			||||||
            enum:
 | 
					            enum:
 | 
				
			||||||
              - info
 | 
					              - info
 | 
				
			||||||
              - extraConfiguration
 | 
					 | 
				
			||||||
              - resources
 | 
					 | 
				
			||||||
          required: true
 | 
					          required: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      responses:
 | 
					      responses:
 | 
				
			||||||
        200:
 | 
					        200:
 | 
				
			||||||
          $ref: '#/components/schemas/SystemCommandResults'
 | 
					          description: Successful command execution
 | 
				
			||||||
 | 
					          content:
 | 
				
			||||||
 | 
					            application/json:
 | 
				
			||||||
 | 
					              schema:
 | 
				
			||||||
 | 
					                oneOf:
 | 
				
			||||||
 | 
					                  - $ref: '#/components/schemas/SystemInfoResults'
 | 
				
			||||||
        403:
 | 
					        403:
 | 
				
			||||||
          $ref: '#/components/responses/Unauthorized'
 | 
					          $ref: '#/components/responses/Unauthorized'
 | 
				
			||||||
        404:
 | 
					        404:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,9 +34,7 @@ namespace OpenWifi {
 | 
				
			|||||||
			return BadRequest(RESTAPI::Errors::SMSCouldNotValidate);
 | 
								return BadRequest(RESTAPI::Errors::SMSCouldNotValidate);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(Internal_) {
 | 
							if (UserInfo_.userinfo.userRole != SecurityObjects::ROOT &&
 | 
				
			||||||
            poco_information(Logger(),fmt::format("Internal SMS request: TID={}", TransactionId_));
 | 
					 | 
				
			||||||
        } else if (UserInfo_.userinfo.userRole != SecurityObjects::ROOT &&
 | 
					 | 
				
			||||||
			UserInfo_.userinfo.userRole != SecurityObjects::PARTNER &&
 | 
								UserInfo_.userinfo.userRole != SecurityObjects::PARTNER &&
 | 
				
			||||||
			UserInfo_.userinfo.userRole != SecurityObjects::ADMIN) {
 | 
								UserInfo_.userinfo.userRole != SecurityObjects::ADMIN) {
 | 
				
			||||||
			return UnAuthorized(RESTAPI::Errors::ACCESS_DENIED);
 | 
								return UnAuthorized(RESTAPI::Errors::ACCESS_DENIED);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,10 +37,6 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
        "uuid": {
 | 
					        "uuid": {
 | 
				
			||||||
            "type": "integer"
 | 
					            "type": "integer"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "public_ip_lookup": {
 | 
					 | 
				
			||||||
            "type": "string",
 | 
					 | 
				
			||||||
            "format": "uc-fqdn"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "unit": {
 | 
					        "unit": {
 | 
				
			||||||
            "$ref": "#/$defs/unit"
 | 
					            "$ref": "#/$defs/unit"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
@@ -638,6 +634,26 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                    "type": "string",
 | 
					                    "type": "string",
 | 
				
			||||||
                    "format": "uc-timeout",
 | 
					                    "format": "uc-timeout",
 | 
				
			||||||
                    "default": "6h"
 | 
					                    "default": "6h"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "relay-server": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "format": "ipv4",
 | 
				
			||||||
 | 
					                    "example": "192.168.2.1"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "circuit-id-format": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "example": [
 | 
				
			||||||
 | 
					                        "\\{Interface\\}:\\{VLAN-Id\\}:\\{SSID\\}:\\{Model\\}:\\{Name\\}:\\{AP-MAC\\}:\\{Location\\}",
 | 
				
			||||||
 | 
					                        "\\{AP-MAC\\};\\{SSID\\};\\{Crypto\\}",
 | 
				
			||||||
 | 
					                        "\\{Name\\} \\{ESSID\\}"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "remote-id-format": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "example": [
 | 
				
			||||||
 | 
					                        "\\{Client-MAC-hex\\} \\{SSID\\}",
 | 
				
			||||||
 | 
					                        "\\{AP-MAC-hex\\} \\{SSID\\}"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
@@ -1216,32 +1232,6 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                        "secret"
 | 
					                        "secret"
 | 
				
			||||||
                    ]
 | 
					                    ]
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "secondary": {
 | 
					 | 
				
			||||||
                    "type": "object",
 | 
					 | 
				
			||||||
                    "properties": {
 | 
					 | 
				
			||||||
                        "host": {
 | 
					 | 
				
			||||||
                            "type": "string",
 | 
					 | 
				
			||||||
                            "format": "uc-host",
 | 
					 | 
				
			||||||
                            "examples": [
 | 
					 | 
				
			||||||
                                "192.168.1.10"
 | 
					 | 
				
			||||||
                            ]
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "port": {
 | 
					 | 
				
			||||||
                            "type": "integer",
 | 
					 | 
				
			||||||
                            "maximum": 65535,
 | 
					 | 
				
			||||||
                            "minimum": 1024,
 | 
					 | 
				
			||||||
                            "examples": [
 | 
					 | 
				
			||||||
                                1812
 | 
					 | 
				
			||||||
                            ]
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "secret": {
 | 
					 | 
				
			||||||
                            "type": "string",
 | 
					 | 
				
			||||||
                            "examples": [
 | 
					 | 
				
			||||||
                                "secret"
 | 
					 | 
				
			||||||
                            ]
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "request-attribute": {
 | 
					                "request-attribute": {
 | 
				
			||||||
                    "type": "array",
 | 
					                    "type": "array",
 | 
				
			||||||
                    "items": {
 | 
					                    "items": {
 | 
				
			||||||
@@ -1319,25 +1309,6 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                                        "value": "Example Operator"
 | 
					                                        "value": "Example Operator"
 | 
				
			||||||
                                    }
 | 
					                                    }
 | 
				
			||||||
                                ]
 | 
					                                ]
 | 
				
			||||||
                            },
 | 
					 | 
				
			||||||
                            {
 | 
					 | 
				
			||||||
                                "type": "object",
 | 
					 | 
				
			||||||
                                "properties": {
 | 
					 | 
				
			||||||
                                    "id": {
 | 
					 | 
				
			||||||
                                        "type": "integer",
 | 
					 | 
				
			||||||
                                        "maximum": 255,
 | 
					 | 
				
			||||||
                                        "minimum": 1
 | 
					 | 
				
			||||||
                                    },
 | 
					 | 
				
			||||||
                                    "hex-value": {
 | 
					 | 
				
			||||||
                                        "type": "string"
 | 
					 | 
				
			||||||
                                    }
 | 
					 | 
				
			||||||
                                },
 | 
					 | 
				
			||||||
                                "examples": [
 | 
					 | 
				
			||||||
                                    {
 | 
					 | 
				
			||||||
                                        "id": 32,
 | 
					 | 
				
			||||||
                                        "value": "0a0b0c0d"
 | 
					 | 
				
			||||||
                                    }
 | 
					 | 
				
			||||||
                                ]
 | 
					 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        ]
 | 
					                        ]
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -1687,236 +1658,6 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "service.captive.click": {
 | 
					 | 
				
			||||||
            "type": "object",
 | 
					 | 
				
			||||||
            "properties": {
 | 
					 | 
				
			||||||
                "auth-mode": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "const": "click-to-continue"
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "service.captive.radius": {
 | 
					 | 
				
			||||||
            "type": "object",
 | 
					 | 
				
			||||||
            "properties": {
 | 
					 | 
				
			||||||
                "auth-mode": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "const": "radius"
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "auth-server": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "format": "uc-host",
 | 
					 | 
				
			||||||
                    "examples": [
 | 
					 | 
				
			||||||
                        "192.168.1.10"
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "auth-port": {
 | 
					 | 
				
			||||||
                    "type": "integer",
 | 
					 | 
				
			||||||
                    "maximum": 65535,
 | 
					 | 
				
			||||||
                    "minimum": 1024,
 | 
					 | 
				
			||||||
                    "default": 1812
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "auth-secret": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "examples": [
 | 
					 | 
				
			||||||
                        "secret"
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "acct-server": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "format": "uc-host",
 | 
					 | 
				
			||||||
                    "examples": [
 | 
					 | 
				
			||||||
                        "192.168.1.10"
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "acct-port": {
 | 
					 | 
				
			||||||
                    "type": "integer",
 | 
					 | 
				
			||||||
                    "maximum": 65535,
 | 
					 | 
				
			||||||
                    "minimum": 1024,
 | 
					 | 
				
			||||||
                    "default": 1812
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "acct-secret": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "examples": [
 | 
					 | 
				
			||||||
                        "secret"
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "acct-interval": {
 | 
					 | 
				
			||||||
                    "type": "integer",
 | 
					 | 
				
			||||||
                    "default": 600
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "service.captive.credentials": {
 | 
					 | 
				
			||||||
            "type": "object",
 | 
					 | 
				
			||||||
            "properties": {
 | 
					 | 
				
			||||||
                "auth-mode": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "const": "credentials"
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "credentials": {
 | 
					 | 
				
			||||||
                    "type": "array",
 | 
					 | 
				
			||||||
                    "items": {
 | 
					 | 
				
			||||||
                        "type": "object",
 | 
					 | 
				
			||||||
                        "properties": {
 | 
					 | 
				
			||||||
                            "username": {
 | 
					 | 
				
			||||||
                                "type": "string"
 | 
					 | 
				
			||||||
                            },
 | 
					 | 
				
			||||||
                            "password": {
 | 
					 | 
				
			||||||
                                "type": "string"
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "service.captive.uam": {
 | 
					 | 
				
			||||||
            "type": "object",
 | 
					 | 
				
			||||||
            "properties": {
 | 
					 | 
				
			||||||
                "auth-mode": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "const": "uam"
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "uam-port": {
 | 
					 | 
				
			||||||
                    "type": "integer",
 | 
					 | 
				
			||||||
                    "maximum": 65535,
 | 
					 | 
				
			||||||
                    "minimum": 1024,
 | 
					 | 
				
			||||||
                    "default": 3990
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "uam-secret": {
 | 
					 | 
				
			||||||
                    "type": "string"
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "uam-server": {
 | 
					 | 
				
			||||||
                    "type": "string"
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "nasid": {
 | 
					 | 
				
			||||||
                    "type": "string"
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "nasmac": {
 | 
					 | 
				
			||||||
                    "type": "string"
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "auth-server": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "format": "uc-host",
 | 
					 | 
				
			||||||
                    "examples": [
 | 
					 | 
				
			||||||
                        "192.168.1.10"
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "auth-port": {
 | 
					 | 
				
			||||||
                    "type": "integer",
 | 
					 | 
				
			||||||
                    "maximum": 65535,
 | 
					 | 
				
			||||||
                    "minimum": 1024,
 | 
					 | 
				
			||||||
                    "default": 1812
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "auth-secret": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "examples": [
 | 
					 | 
				
			||||||
                        "secret"
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "acct-server": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "format": "uc-host",
 | 
					 | 
				
			||||||
                    "examples": [
 | 
					 | 
				
			||||||
                        "192.168.1.10"
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "acct-port": {
 | 
					 | 
				
			||||||
                    "type": "integer",
 | 
					 | 
				
			||||||
                    "maximum": 65535,
 | 
					 | 
				
			||||||
                    "minimum": 1024,
 | 
					 | 
				
			||||||
                    "default": 1812
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "acct-secret": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "examples": [
 | 
					 | 
				
			||||||
                        "secret"
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "acct-interval": {
 | 
					 | 
				
			||||||
                    "type": "integer",
 | 
					 | 
				
			||||||
                    "default": 600
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "ssid": {
 | 
					 | 
				
			||||||
                    "type": "string"
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "mac-format": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "enum": [
 | 
					 | 
				
			||||||
                        "aabbccddeeff",
 | 
					 | 
				
			||||||
                        "aa-bb-cc-dd-ee-ff",
 | 
					 | 
				
			||||||
                        "aa:bb:cc:dd:ee:ff",
 | 
					 | 
				
			||||||
                        "AABBCCDDEEFF",
 | 
					 | 
				
			||||||
                        "AA:BB:CC:DD:EE:FF",
 | 
					 | 
				
			||||||
                        "AA-BB-CC-DD-EE-FF"
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "final-redirect-url": {
 | 
					 | 
				
			||||||
                    "type": "string",
 | 
					 | 
				
			||||||
                    "enum": [
 | 
					 | 
				
			||||||
                        "default",
 | 
					 | 
				
			||||||
                        "uam"
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "mac-auth": {
 | 
					 | 
				
			||||||
                    "type": "boolean",
 | 
					 | 
				
			||||||
                    "default": "default"
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "radius-gw-proxy": {
 | 
					 | 
				
			||||||
                    "type": "boolean",
 | 
					 | 
				
			||||||
                    "default": false
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "service.captive": {
 | 
					 | 
				
			||||||
            "allOf": [
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "oneOf": [
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            "$ref": "#/$defs/service.captive.click"
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            "$ref": "#/$defs/service.captive.radius"
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            "$ref": "#/$defs/service.captive.credentials"
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            "$ref": "#/$defs/service.captive.uam"
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "type": "object",
 | 
					 | 
				
			||||||
                    "properties": {
 | 
					 | 
				
			||||||
                        "walled-garden-fqdn": {
 | 
					 | 
				
			||||||
                            "type": "array",
 | 
					 | 
				
			||||||
                            "items": {
 | 
					 | 
				
			||||||
                                "type": "string"
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "walled-garden-ipaddr": {
 | 
					 | 
				
			||||||
                            "type": "array",
 | 
					 | 
				
			||||||
                            "items": {
 | 
					 | 
				
			||||||
                                "type": "string",
 | 
					 | 
				
			||||||
                                "format": "uc-ip"
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "web-root": {
 | 
					 | 
				
			||||||
                            "type": "string",
 | 
					 | 
				
			||||||
                            "format": "uc-base64"
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "idle-timeout": {
 | 
					 | 
				
			||||||
                            "type": "integer",
 | 
					 | 
				
			||||||
                            "default": 600
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "session-timeout": {
 | 
					 | 
				
			||||||
                            "type": "integer"
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "interface.ssid": {
 | 
					        "interface.ssid": {
 | 
				
			||||||
            "type": "object",
 | 
					            "type": "object",
 | 
				
			||||||
            "properties": {
 | 
					            "properties": {
 | 
				
			||||||
@@ -1969,10 +1710,6 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                "isolate-clients": {
 | 
					                "isolate-clients": {
 | 
				
			||||||
                    "type": "boolean"
 | 
					                    "type": "boolean"
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "strict-forwarding": {
 | 
					 | 
				
			||||||
                    "type": "boolean",
 | 
					 | 
				
			||||||
                    "default": false
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "power-save": {
 | 
					                "power-save": {
 | 
				
			||||||
                    "type": "boolean"
 | 
					                    "type": "boolean"
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
@@ -2041,15 +1778,8 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                    "$ref": "#/$defs/interface.ssid.rate-limit"
 | 
					                    "$ref": "#/$defs/interface.ssid.rate-limit"
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "roaming": {
 | 
					                "roaming": {
 | 
				
			||||||
                    "anyOf": [
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                    "$ref": "#/$defs/interface.ssid.roaming"
 | 
					                    "$ref": "#/$defs/interface.ssid.roaming"
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            "type": "boolean"
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "radius": {
 | 
					                "radius": {
 | 
				
			||||||
                    "$ref": "#/$defs/interface.ssid.radius"
 | 
					                    "$ref": "#/$defs/interface.ssid.radius"
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
@@ -2065,9 +1795,6 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                "access-control-list": {
 | 
					                "access-control-list": {
 | 
				
			||||||
                    "$ref": "#/$defs/interface.ssid.acl"
 | 
					                    "$ref": "#/$defs/interface.ssid.acl"
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "captive": {
 | 
					 | 
				
			||||||
                    "$ref": "#/$defs/service.captive"
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "hostapd-bss-raw": {
 | 
					                "hostapd-bss-raw": {
 | 
				
			||||||
                    "type": "array",
 | 
					                    "type": "array",
 | 
				
			||||||
                    "items": {
 | 
					                    "items": {
 | 
				
			||||||
@@ -2235,17 +1962,6 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                        ]
 | 
					                        ]
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "vlan-awareness": {
 | 
					 | 
				
			||||||
                    "type": "object",
 | 
					 | 
				
			||||||
                    "properties": {
 | 
					 | 
				
			||||||
                        "first": {
 | 
					 | 
				
			||||||
                            "type": "integer"
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "last": {
 | 
					 | 
				
			||||||
                            "type": "integer"
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "vlan": {
 | 
					                "vlan": {
 | 
				
			||||||
                    "$ref": "#/$defs/interface.vlan"
 | 
					                    "$ref": "#/$defs/interface.vlan"
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
@@ -2368,10 +2084,6 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                    "examples": [
 | 
					                    "examples": [
 | 
				
			||||||
                        "01234567890123456789012345678901"
 | 
					                        "01234567890123456789012345678901"
 | 
				
			||||||
                    ]
 | 
					                    ]
 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "mutual-tls": {
 | 
					 | 
				
			||||||
                    "type": "boolean",
 | 
					 | 
				
			||||||
                    "default": true
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
@@ -2981,6 +2693,236 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "service.captive.click": {
 | 
				
			||||||
 | 
					            "type": "object",
 | 
				
			||||||
 | 
					            "properties": {
 | 
				
			||||||
 | 
					                "auth-mode": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "const": "click-to-continue"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "service.captive.radius": {
 | 
				
			||||||
 | 
					            "type": "object",
 | 
				
			||||||
 | 
					            "properties": {
 | 
				
			||||||
 | 
					                "auth-mode": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "const": "radius"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "auth-server": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "format": "uc-host",
 | 
				
			||||||
 | 
					                    "examples": [
 | 
				
			||||||
 | 
					                        "192.168.1.10"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "auth-port": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "maximum": 65535,
 | 
				
			||||||
 | 
					                    "minimum": 1024,
 | 
				
			||||||
 | 
					                    "default": 1812
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "auth-secret": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "examples": [
 | 
				
			||||||
 | 
					                        "secret"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "acct-server": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "format": "uc-host",
 | 
				
			||||||
 | 
					                    "examples": [
 | 
				
			||||||
 | 
					                        "192.168.1.10"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "acct-port": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "maximum": 65535,
 | 
				
			||||||
 | 
					                    "minimum": 1024,
 | 
				
			||||||
 | 
					                    "default": 1812
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "acct-secret": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "examples": [
 | 
				
			||||||
 | 
					                        "secret"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "acct-interval": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "default": 600
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "service.captive.credentials": {
 | 
				
			||||||
 | 
					            "type": "object",
 | 
				
			||||||
 | 
					            "properties": {
 | 
				
			||||||
 | 
					                "auth-mode": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "const": "credentials"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "credentials": {
 | 
				
			||||||
 | 
					                    "type": "array",
 | 
				
			||||||
 | 
					                    "items": {
 | 
				
			||||||
 | 
					                        "type": "object",
 | 
				
			||||||
 | 
					                        "properties": {
 | 
				
			||||||
 | 
					                            "username": {
 | 
				
			||||||
 | 
					                                "type": "string"
 | 
				
			||||||
 | 
					                            },
 | 
				
			||||||
 | 
					                            "password": {
 | 
				
			||||||
 | 
					                                "type": "string"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "service.captive.uam": {
 | 
				
			||||||
 | 
					            "type": "object",
 | 
				
			||||||
 | 
					            "properties": {
 | 
				
			||||||
 | 
					                "auth-mode": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "const": "uam"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "uam-port": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "maximum": 65535,
 | 
				
			||||||
 | 
					                    "minimum": 1024,
 | 
				
			||||||
 | 
					                    "default": 3990
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "uam-secret": {
 | 
				
			||||||
 | 
					                    "type": "string"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "uam-server": {
 | 
				
			||||||
 | 
					                    "type": "string"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "nasid": {
 | 
				
			||||||
 | 
					                    "type": "string"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "nasmac": {
 | 
				
			||||||
 | 
					                    "type": "string"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "auth-server": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "format": "uc-host",
 | 
				
			||||||
 | 
					                    "examples": [
 | 
				
			||||||
 | 
					                        "192.168.1.10"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "auth-port": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "maximum": 65535,
 | 
				
			||||||
 | 
					                    "minimum": 1024,
 | 
				
			||||||
 | 
					                    "default": 1812
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "auth-secret": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "examples": [
 | 
				
			||||||
 | 
					                        "secret"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "acct-server": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "format": "uc-host",
 | 
				
			||||||
 | 
					                    "examples": [
 | 
				
			||||||
 | 
					                        "192.168.1.10"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "acct-port": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "maximum": 65535,
 | 
				
			||||||
 | 
					                    "minimum": 1024,
 | 
				
			||||||
 | 
					                    "default": 1812
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "acct-secret": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "examples": [
 | 
				
			||||||
 | 
					                        "secret"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "acct-interval": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "default": 600
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "ssid": {
 | 
				
			||||||
 | 
					                    "type": "string"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "mac-format": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "enum": [
 | 
				
			||||||
 | 
					                        "aabbccddeeff",
 | 
				
			||||||
 | 
					                        "aa-bb-cc-dd-ee-ff",
 | 
				
			||||||
 | 
					                        "aa:bb:cc:dd:ee:ff",
 | 
				
			||||||
 | 
					                        "AABBCCDDEEFF",
 | 
				
			||||||
 | 
					                        "AA:BB:CC:DD:EE:FF",
 | 
				
			||||||
 | 
					                        "AA-BB-CC-DD-EE-FF"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "final-redirect-url": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "enum": [
 | 
				
			||||||
 | 
					                        "default",
 | 
				
			||||||
 | 
					                        "uam"
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "mac-auth": {
 | 
				
			||||||
 | 
					                    "type": "boolean",
 | 
				
			||||||
 | 
					                    "default": "default"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "radius-gw-proxy": {
 | 
				
			||||||
 | 
					                    "type": "boolean",
 | 
				
			||||||
 | 
					                    "default": false
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "service.captive": {
 | 
				
			||||||
 | 
					            "allOf": [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "oneOf": [
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            "$ref": "#/$defs/service.captive.click"
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            "$ref": "#/$defs/service.captive.radius"
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            "$ref": "#/$defs/service.captive.credentials"
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            "$ref": "#/$defs/service.captive.uam"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "type": "object",
 | 
				
			||||||
 | 
					                    "properties": {
 | 
				
			||||||
 | 
					                        "walled-garden-fqdn": {
 | 
				
			||||||
 | 
					                            "type": "array",
 | 
				
			||||||
 | 
					                            "items": {
 | 
				
			||||||
 | 
					                                "type": "string"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "walled-garden-ipaddr": {
 | 
				
			||||||
 | 
					                            "type": "array",
 | 
				
			||||||
 | 
					                            "items": {
 | 
				
			||||||
 | 
					                                "type": "string",
 | 
				
			||||||
 | 
					                                "format": "uc-ip"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "web-root": {
 | 
				
			||||||
 | 
					                            "type": "string",
 | 
				
			||||||
 | 
					                            "format": "uc-base64"
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "idle-timeout": {
 | 
				
			||||||
 | 
					                            "type": "integer",
 | 
				
			||||||
 | 
					                            "default": 600
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "session-timeout": {
 | 
				
			||||||
 | 
					                            "type": "integer"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "service.gps": {
 | 
					        "service.gps": {
 | 
				
			||||||
            "type": "object",
 | 
					            "type": "object",
 | 
				
			||||||
            "properties": {
 | 
					            "properties": {
 | 
				
			||||||
@@ -2999,32 +2941,6 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "service.dhcp-relay": {
 | 
					 | 
				
			||||||
            "type": "object",
 | 
					 | 
				
			||||||
            "properties": {
 | 
					 | 
				
			||||||
                "select-ports": {
 | 
					 | 
				
			||||||
                    "type": "array",
 | 
					 | 
				
			||||||
                    "items": {
 | 
					 | 
				
			||||||
                        "type": "string"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "vlans": {
 | 
					 | 
				
			||||||
                    "type": "array",
 | 
					 | 
				
			||||||
                    "items": {
 | 
					 | 
				
			||||||
                        "type": "object",
 | 
					 | 
				
			||||||
                        "properties": {
 | 
					 | 
				
			||||||
                            "vlan": {
 | 
					 | 
				
			||||||
                                "type": "number"
 | 
					 | 
				
			||||||
                            },
 | 
					 | 
				
			||||||
                            "relay-server": {
 | 
					 | 
				
			||||||
                                "type": "string",
 | 
					 | 
				
			||||||
                                "format": "uc-ip"
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "service": {
 | 
					        "service": {
 | 
				
			||||||
            "type": "object",
 | 
					            "type": "object",
 | 
				
			||||||
            "properties": {
 | 
					            "properties": {
 | 
				
			||||||
@@ -3084,9 +3000,6 @@ static std::string DefaultUCentralSchema = R"foo(
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
                "gps": {
 | 
					                "gps": {
 | 
				
			||||||
                    "$ref": "#/$defs/service.gps"
 | 
					                    "$ref": "#/$defs/service.gps"
 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "dhcp-relay": {
 | 
					 | 
				
			||||||
                    "$ref": "#/$defs/service.dhcp-relay"
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,10 +24,9 @@ namespace OpenWifi {
 | 
				
			|||||||
							 Server, TransactionId, Internal) {}
 | 
												 Server, TransactionId, Internal) {}
 | 
				
			||||||
		static auto PathName() { return std::list<std::string>{"/api/v1/system"}; }
 | 
							static auto PathName() { return std::list<std::string>{"/api/v1/system"}; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		inline void DoGet() final {
 | 
							inline void DoGet() {
 | 
				
			||||||
			std::string Arg;
 | 
								std::string Arg;
 | 
				
			||||||
			if (HasParameter("command", Arg)) {
 | 
								if (HasParameter("command", Arg) && Arg == "info") {
 | 
				
			||||||
				if (Arg == "info") {
 | 
					 | 
				
			||||||
				Poco::JSON::Object Answer;
 | 
									Poco::JSON::Object Answer;
 | 
				
			||||||
				Answer.set(RESTAPI::Protocol::VERSION, MicroServiceVersion());
 | 
									Answer.set(RESTAPI::Protocol::VERSION, MicroServiceVersion());
 | 
				
			||||||
				Answer.set(RESTAPI::Protocol::UPTIME, MicroServiceUptimeTotalSeconds());
 | 
									Answer.set(RESTAPI::Protocol::UPTIME, MicroServiceUptimeTotalSeconds());
 | 
				
			||||||
@@ -65,23 +64,11 @@ namespace OpenWifi {
 | 
				
			|||||||
				Answer.set("certificates", Certificates);
 | 
									Answer.set("certificates", Certificates);
 | 
				
			||||||
				return ReturnObject(Answer);
 | 
									return ReturnObject(Answer);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
				if (Arg == "extraConfiguration") {
 | 
								if (GetBoolParameter("extraConfiguration")) {
 | 
				
			||||||
				Poco::JSON::Object Answer;
 | 
									Poco::JSON::Object Answer;
 | 
				
			||||||
				MicroServiceGetExtraConfiguration(Answer);
 | 
									MicroServiceGetExtraConfiguration(Answer);
 | 
				
			||||||
				return ReturnObject(Answer);
 | 
									return ReturnObject(Answer);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
				if (Arg == "resources") {
 | 
					 | 
				
			||||||
					Poco::JSON::Object Answer;
 | 
					 | 
				
			||||||
					Answer.set("numberOfFileDescriptors", Utils::get_open_fds());
 | 
					 | 
				
			||||||
					std::uint64_t currRealMem, peakRealMem, currVirtMem, peakVirtMem;
 | 
					 | 
				
			||||||
					Utils::getMemory(currRealMem, peakRealMem, currVirtMem, peakVirtMem);
 | 
					 | 
				
			||||||
					Answer.set("currRealMem", currRealMem);
 | 
					 | 
				
			||||||
					Answer.set("peakRealMem", peakRealMem);
 | 
					 | 
				
			||||||
					Answer.set("currVirtMem", currVirtMem);
 | 
					 | 
				
			||||||
					Answer.set("peakVirtMem", peakVirtMem);
 | 
					 | 
				
			||||||
					return ReturnObject(Answer);
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			BadRequest(RESTAPI::Errors::InvalidCommand);
 | 
								BadRequest(RESTAPI::Errors::InvalidCommand);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -401,12 +401,6 @@ namespace OpenWifi::RESTAPI::Errors {
 | 
				
			|||||||
		1171, "Command not supported on simulated device."
 | 
							1171, "Command not supported on simulated device."
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static const struct msg VenuesNameAlreadyExists {
 | 
					 | 
				
			||||||
            1172, "The venue name already exists."
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static const struct msg DefFirmwareNameExists { 1172, "Firmware name already exists." };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static const struct msg SimulationDoesNotExist {
 | 
					    static const struct msg SimulationDoesNotExist {
 | 
				
			||||||
        7000, "Simulation Instance ID does not exist."
 | 
					        7000, "Simulation Instance ID does not exist."
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,8 +13,6 @@
 | 
				
			|||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
#include <thread>
 | 
					#include <thread>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <dirent.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "Poco/Base64Decoder.h"
 | 
					#include "Poco/Base64Decoder.h"
 | 
				
			||||||
#include "Poco/Base64Encoder.h"
 | 
					#include "Poco/Base64Encoder.h"
 | 
				
			||||||
#include "Poco/File.h"
 | 
					#include "Poco/File.h"
 | 
				
			||||||
@@ -183,67 +181,4 @@ namespace OpenWifi::Utils {
 | 
				
			|||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	static inline std::uint64_t GetValue(FILE *file) {
 | 
					 | 
				
			||||||
		unsigned long v=0;
 | 
					 | 
				
			||||||
		char factor[32];
 | 
					 | 
				
			||||||
		if(fscanf(file, " %lu %31s", &v, factor)==2) {
 | 
					 | 
				
			||||||
			switch (factor[0]) {
 | 
					 | 
				
			||||||
			case 'k':
 | 
					 | 
				
			||||||
				return v * 1000;
 | 
					 | 
				
			||||||
			case 'M':
 | 
					 | 
				
			||||||
				return v * 1000000;
 | 
					 | 
				
			||||||
			case 'G':
 | 
					 | 
				
			||||||
				return v * 1000000000;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return v;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	inline bool getMemory(
 | 
					 | 
				
			||||||
		std::uint64_t &currRealMem, std::uint64_t &peakRealMem,
 | 
					 | 
				
			||||||
		std::uint64_t &currVirtMem, std::uint64_t &peakVirtMem) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// stores each word in status file
 | 
					 | 
				
			||||||
		char buffer[1024] = "";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		currRealMem = peakRealMem = currVirtMem = peakVirtMem = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// linux file contains this-process info
 | 
					 | 
				
			||||||
		FILE * file = std::fopen("/proc/self/status", "r");
 | 
					 | 
				
			||||||
		if (file == nullptr) {
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// read the entire file, recording mems in kB
 | 
					 | 
				
			||||||
		while (fscanf(file, " %1023s", buffer) == 1) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (strcmp(buffer, "VmRSS:") == 0) {
 | 
					 | 
				
			||||||
				currRealMem= GetValue(file);
 | 
					 | 
				
			||||||
			} else if (strcmp(buffer, "VmHWM:") == 0) {
 | 
					 | 
				
			||||||
				peakRealMem= GetValue(file);
 | 
					 | 
				
			||||||
			} else if (strcmp(buffer, "VmSize:") == 0) {
 | 
					 | 
				
			||||||
				currVirtMem= GetValue(file);
 | 
					 | 
				
			||||||
			} else if (strcmp(buffer, "VmPeak:") == 0) {
 | 
					 | 
				
			||||||
				peakVirtMem= GetValue(file);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		fclose(file);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	inline int get_open_fds() {
 | 
					 | 
				
			||||||
		DIR *dp = opendir("/proc/self/fd");
 | 
					 | 
				
			||||||
		struct dirent *de;
 | 
					 | 
				
			||||||
		int count = -3; // '.', '..', dp
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (dp == nullptr)
 | 
					 | 
				
			||||||
			return -1;
 | 
					 | 
				
			||||||
		while ((de = readdir(dp)) != nullptr)
 | 
					 | 
				
			||||||
			count++;
 | 
					 | 
				
			||||||
		(void)closedir(dp);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return count;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
} // namespace OpenWifi::Utils
 | 
					} // namespace OpenWifi::Utils
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user