diff --git a/README.md b/README.md index f5dfe95f8b6ba06792e066461718fa13c87bb023..8a31775b39308b1160cc2c81028e3777528b35df 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,11 @@ presented via OpenAPI compliant descriptions. MEC Sandbox provides the user with a choice of scenarios combining different network technologies (4G, 5G, Wi-Fi) and terminal types. Combining these assets in a geolocated environment, a user can gain hands-on experience on the behaviour -and capabilities of the Location (MEC013), Radio Network Information (MEC012), Traffic Management APIs (MEC015), Device Application Interface (MEC016), -WLAN Information (MEC028), Edge Platform Application Enablement (MEC011) and Application Mobility (MEC021) service APIs, V2X Information API (MEC030) service API and MEC Federation Service API (MEC040) service APIs. Such contextual information can offer +and capabilities of the Location (MEC013), Radio Network Information (MEC012), Traffic Management APIs (MEC015), Device Application Interface (MEC016), +WLAN Information (MEC028), Edge Platform Application Enablement (MEC011), Application Mobility (MEC021) service APIs, V2X Information API (MEC030) service API, +MEC IoT API (MEC 033), MEC Federation Service API (MEC040) service APIs and Sensors-Sharing Services (MEC046) service APIs. +MEC Sandbox provides also a support for Edge Native Connector (3GPP TS 29.222: 3rd Generation Partnership Project; Technical Specification GroupCore +Network and Terminals; Common API Framework for 3GPP Northbound APIs). Such contextual information can offer significant differential performance for edge based MEC applications. Application Enablement (MEC011) and Application Mobility (MEC021) service APIs. Such contextual information can offer significant differential performance for edge based MEC applications. @@ -47,7 +50,8 @@ MEC Sandbox has the following prerequisites: 1. [etsi-mec-sandbox](https://interdigitalinc.github.io/AdvantEDGE/) runtime & development environments on both VMs - Install [runtime environment](https://interdigitalinc.github.io/AdvantEDGE/docs/setup/env-runtime/) - Install [development environment](https://interdigitalinc.github.io/AdvantEDGE/docs/setup/env-dev/) -1. OAuth Applications using external providers + - Or deploy both using [Ansible Playbooks](https://labs.etsi.org/rep/mec/etsi-mec-sandbox/-/tree/STF678_Task_5_TTF_T043/playbooks) +2. OAuth Applications using external providers - **GitHub:** - github.com User Account --> Settings --> Developer settings --> OAuth Apps --> New OAuth App - _Application Name:_ ETSI MEC Sandbox @@ -68,7 +72,7 @@ MEC Sandbox has the following prerequisites: - **NOTES:** - Once created, keep note of the OAuth App Client ID & Secret - Enable Device Flow to use API driven sandbox -1. Python Installation +3. Python Installation - Install Python2: - Ubuntu 18.04: `sudo apt install python-minimal` - Ubuntu 20.04: `sudo apt install python2-minimal` @@ -76,7 +80,7 @@ MEC Sandbox has the following prerequisites: - Ubuntu 18.04: `sudo apt install python-pip` - Ubuntu 20.04: `sudo apt install python3-pip` - Install Pyyaml: `pip install pyyaml` -1. Host NFS server installation +4. Host NFS server installation In order to be deployed properly, MEC 016 service requires that an NFS server was deployed on the host. To achieve it, the followimg steps are required: - Install the NFS server @@ -216,6 +220,19 @@ $ showmount -e - `vi ~/etsi-mec-sandbox-frontend/config/values/meep-prometheus.yaml` - Set `slack_api_url` to your slack channel webhook url - Set `channel` to your slack channel + - Configure MQTT broker e.g `Mosquitto MQTT`: + - Install mosquitto. + - `sudo apt update` + - `sudo apt install -y mosquitto` + - Create a config file for mosquitto. + - `echo -e "listener 1883\nallow_anonymous true" | sudo tee /etc/mosquitto/conf.d/listener.conf > /dev/null` + - Restart mosquitto. + - `sudo systemctl restart mosquitto` + - Configure vis and federation api to use mqtt broker + - Set the `MEEP_BROKER` variable with the server IP (where Mosquitto is running) and port 1883 in the following two files: + - `~/etsi-mec-sandbox/charts/meep-federation/values-template.yaml` + - `~/etsi-mec-sandbox/charts/meep-vis/values-template.yaml` + - Example: `MEEP_BROKER: mqtt://192.168.x.x:1882` 1. Build & Deploy STF Frontend: - SSH to MEC Sandbox deployment VM - Build STF Frontend: @@ -332,5 +349,5 @@ The following procedure should be used to upgrade a running MEC Sandbox deployme ## Licensing MEC Sandbox is a private repo with all rights reserved to ETSI. ``` -Copyright (c) 2022 ETSI. All rights reserved. +Copyright (c) 2022-2025 ETSI. All rights reserved. ``` diff --git a/config/.meepctl-repocfg.yaml b/config/.meepctl-repocfg.yaml index 4083a2024c1a3b2b318dbbf3fb50a8e444c21ebd..7808060ff8d56b0c832a53b98c0df06557de8794 100644 --- a/config/.meepctl-repocfg.yaml +++ b/config/.meepctl-repocfg.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2025 The AdvantEDGE Authors +# Copyright (c) 2026 The AdvantEDGE Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -version: 1.10.0 +version: 1.11.0 repo: name: etsi-mec-sandbox @@ -308,6 +308,8 @@ repo: # - meep-tc-engine # - meep-app-enablement # - meep-vis + # - meep-iot + # - meep-sss # - meep-federation # location of API specifications api: @@ -423,7 +425,15 @@ repo: meep-app-enablement: charts/meep-app-enablement meep-virt-chart-templates: charts/meep-virt-chart-templates meep-vis: charts/meep-vis + meep-iot: charts/meep-iot + meep-sss: charts/meep-sss meep-federation: charts/meep-federation + meep-cloud-mosquitto: charts/meep-cloud-mosquitto + meep-mosquitto: charts/meep-mosquitto + meep-acme-mn-cse: charts/meep-acme-mn-cse + meep-acme-in-cse: charts/meep-acme-in-cse + meep-tinyiot-mn-cse: charts/meep-tinyiot-mn-cse + meep-tinyiot-in-cse: charts/meep-tinyiot-in-cse # list of sandbox specific pods sandbox-pods: - meep-gis-engine @@ -439,6 +449,8 @@ repo: # - meep-tc-engine # - meep-app-enablement # - meep-vis + # - meep-iot + # - meep-sss # - meep-federation meep-webhook: # location of source code @@ -942,6 +954,74 @@ repo: 'entrypoint.sh': go-apps/meep-vis/entrypoint.sh # location of grid map file 'grid_map.yaml': go-packages/meep-vis-traffic-mgr/grid_map.yaml + meep-iot: + # location of source code + src: go-apps/meep-iot + # location of binary + bin: bin/meep-iot + # location of deployment chart + chart: charts/meep-iot + # user supplied value file located @ .meep/user/values (use below file name) + chart-user-values: meep-iot.yaml + # extra build flags + build-flags: + - -mod=vendor + # enable meepctl build + build: true + # enable meepctl dockerize + dockerize: true + # enable meepctl deploy/delete + deploy: true + # supports code coverage measurement when built in codecov mode + codecov: true + # supports linting + lint: true + # location of API specifications + api: + - name: 'AdvantEDGE IOT APIs REST API' + file: go-apps/meep-iot/api/swagger.yaml + # location of user supplied API specifications + user-api: + - name: 'IOT APIs REST API' + file: config/api/iot-api.yaml + # resources available to docker container image + docker-data: + # location of entry script + 'entrypoint.sh': go-apps/meep-iot/entrypoint.sh + meep-sss: + # location of source code + src: go-apps/meep-sss + # location of binary + bin: bin/meep-sss + # location of deployment chart + chart: charts/meep-sss + # user supplied value file located @ .meep/user/values (use below file name) + chart-user-values: meep-sss.yaml + # extra build flags + build-flags: + - -mod=vendor + # enable meepctl build + build: true + # enable meepctl dockerize + dockerize: true + # enable meepctl deploy/delete + deploy: true + # supports code coverage measurement when built in codecov mode + codecov: true + # supports linting + lint: true + # location of API specifications + api: + - name: 'AdvantEDGE SENSORS SHARING APIs REST API' + file: go-apps/meep-sss/api/swagger.yaml + # location of user supplied API specifications + user-api: + - name: 'SENSORS SHARING APIs REST API' + file: config/api/sss-api.yaml + # resources available to docker container image + docker-data: + # location of entry script + 'entrypoint.sh': go-apps/meep-sss/entrypoint.sh meep-federation: # location of source code src: go-apps/meep-federation @@ -993,6 +1073,99 @@ repo: docker-data: 'mosquitto.conf': go-apps/meep-mosquitto/mosquitto.conf 'listener.conf': go-apps/meep-mosquitto/listener.conf + 'entrypoint.sh': go-apps/meep-mosquitto/entrypoint.sh + meep-cloud-mosquitto: + # location of source code + src: go-apps/meep-cloud-mosquitto + bin: bin/meep-cloud-mosquitto + # enable meepctl build + build: false + # enable meepctl dockerize + dockerize: true + # enable meepctl deploy/delete + deploy: false + # supports code coverage measurement when built in codecov mode + codecov: false + # supports linting + lint: false + docker-data: + 'mosquitto.conf': go-apps/meep-cloud-mosquitto/mosquitto.conf + 'listener.conf': go-apps/meep-cloud-mosquitto/listener.conf + 'entrypoint.sh': go-apps/meep-cloud-mosquitto/entrypoint.sh + meep-tinyiot-in-cse: + # location of source code + src: go-apps/meep-iot-pltf/tinyiot-in-cse + bin: bin/meep-iot-pltf/meep-tinyiot-in-cse + # enable meepctl build + build: false + # enable meepctl dockerize + dockerize: true + # enable meepctl deploy/delete + deploy: false + # supports code coverage measurement when built in codecov mode + codecov: false + # supports linting + lint: false + # TinyIoT resources available to docker container image + docker-data: + 'entrypoint.sh': go-apps/meep-iot-pltf/tinyiot-in-cse/entrypoint.sh + 'source': go-apps/meep-iot-pltf/tinyiot-in-cse/tinyIoT/source + meep-tinyiot-mn-cse: + # location of source code + src: go-apps/meep-iot-pltf/tinyiot-mn-cse + bin: bin/meep-iot-pltf/meep-tinyiot-mn-cse + # enable meepctl build + build: false + # enable meepctl dockerize + dockerize: true + # enable meepctl deploy/delete + deploy: false + # supports code coverage measurement when built in codecov mode + codecov: false + # supports linting + lint: false + # TinyIoT resources available to docker container image + docker-data: + 'entrypoint.sh': go-apps/meep-iot-pltf/tinyiot-mn-cse/entrypoint.sh + 'source': go-apps/meep-iot-pltf/tinyiot-mn-cse/tinyIoT/source + meep-acme-in-cse: + # location of source code + src: go-apps/meep-iot-pltf/meep-acme-in-cse + bin: bin/meep-iot-pltf/meep-acme-in-cse + # enable meepctl build + build: false + # enable meepctl dockerize + dockerize: true + # enable meepctl deploy/delete + deploy: false + # supports code coverage measurement when built in codecov mode + codecov: false + # supports linting + lint: false + docker-data: + # location of entry script + 'entrypoint.sh': go-apps/meep-iot-pltf/meep-acme-in-cse/entrypoint.sh + 'acme.ini.in': go-apps/meep-iot-pltf/meep-acme-in-cse/acme.ini.in + meep-acme-mn-cse: + # location of source code + src: go-apps/meep-iot-pltf/meep-acme-mn-cse + bin: bin/meep-iot-pltf/meep-acme-mn-cse + # enable meepctl build + build: false + # enable meepctl dockerize + dockerize: true + # enable meepctl deploy/delete + deploy: false + # supports code coverage measurement when built in codecov mode + codecov: false + # supports linting + lint: false + docker-data: + # location of entry script + 'entrypoint.sh': go-apps/meep-iot-pltf/meep-acme-mn-cse/entrypoint.sh + 'acme.ini.in': go-apps/meep-iot-pltf/meep-acme-mn-cse/acme.ini.in + 'acme': go-apps/meep-iot-pltf/meep-acme-mn-cse/acme + #------------------------------ # Dependencies #------------------------------ @@ -1358,6 +1531,16 @@ repo: src: go-packages/meep-vis-client # supports linting lint: false + meep-iot-client: + # location of source code + src: go-packages/meep-iot-client + # supports linting + lint: false + meep-sss-client: + # location of source code + src: go-packages/meep-sss-client + # supports linting + lint: false meep-federation-mgr: # location of source code src: go-packages/meep-federation-mgr @@ -1368,6 +1551,16 @@ repo: src: go-packages/meep-vis-traffic-mgr # supports linting lint: false + meep-iot-mgr: + # location of source code + src: go-packages/meep-iot-mgr + # supports linting + lint: false + meep-sss-mgr: + # location of source code + src: go-packages/meep-sss-mgr + # supports linting + lint: false meep-watchdog: # location of source code src: go-packages/meep-watchdog diff --git a/config/api/capif-mgmt.yaml b/config/api/capif-mgmt.yaml index d823b211707ef70e072ceed8c39c959e3862e9b0..20d3fd6913423793bf57f6e13a7d6dfde13d6752 100644 --- a/config/api/capif-mgmt.yaml +++ b/config/api/capif-mgmt.yaml @@ -279,7 +279,7 @@ paths: aefProfiles: - aefId: "sandboxTransport" versions: - - "3.1.1" + - apiVersion: "3.1.1" interfaceDescriptions: uris: - "http://my.callback.com/sbx2cmq8bn/mep1/vis/v2/" @@ -440,13 +440,11 @@ paths: aefProfiles: - aefId: "sandboxTransport" versions: - - "3.1.1" + - apiVersion: "3.1.1" interfaceDescriptions: - uris: - - "http://my.callback.com/sbx2cmq8bn/mep1/vis/v2/" - fqdn: null - addresses: null - alternative: null + - fqdn: "my.callback.com" + port: 80 + apiPrefix: "/sbx2cmq8bn/mep1/vis/v2" vendorSpecific-urn:etsi:mec:capifext:transport-info: name: "REST" type: "REST_HTTP" @@ -631,13 +629,11 @@ paths: aefProfiles: - aefId: "sandboxTransport" versions: - - "3.1.1" + - apiVersion: "3.1.1" interfaceDescriptions: - uris: - - "http://my.callback.com/sbx2cmq8bn/mep1/vis/v2/" - fqdn: null - addresses: null - alternative: null + - fqdn: "my.callback.com" + port: 80 + apiPrefix: "/sbx2cmq8bn/mep1/vis/v2" vendorSpecific-urn:etsi:mec:capifext:transport-info: name: "REST" type: "REST_HTTP" @@ -1323,18 +1319,21 @@ components: description: "AEF identifier. Shall be set to the value of the 'id' attribute as defined in clause 8.1.2.3." versions: type: array - items: - type: string - description: "API version. This array shall contain a single entry." minItems: 1 maxItems: 1 + items: + type: object + properties: + apiVersion: + type: string + description: "The version of the API as per clause 8.1.2.2" + required: + - apiVersion interfaceDescriptions: description: This type represents information about a transport endpoint - oneOf: - - $ref: '#/components/schemas/EndPointInfo.Uris' - - $ref: '#/components/schemas/EndPointInfo.Fqdn' - - $ref: '#/components/schemas/EndPointInfo.Addresses' - - $ref: '#/components/schemas/EndPointInfo.Alternative' + type: array + items: + $ref: '#/components/schemas/InterfaceDescription' x-etsi-notes: "NOTE:\tExactly one of \"uris\", \"fqdn\", \"addresses\" or\ \ \"alternative\" shall be present." vendorSpecific-urn:etsi:mec:capifext:transport-info : @@ -1434,69 +1433,32 @@ components: - RPC - RPC_STREAMING - WEBSOCKET - EndPointInfo.Alternative: - title: EndPointInfo.Alternative - required: - - alternative + InterfaceDescription: type: object + description: 3GPP-compliant InterfaceDescription (TS 29.222 Table 8.2.4.2.3-1) properties: - alternative: - type: object - description: "Entry point information of the service in a format defined\ - \ by an implementation, or in an external specification. See note." - description: This type represents information about a transport endpoint. - EndPointInfo.Address: - title: EndPointInfo.Address - required: - - host - - port - type: object - properties: - host: + ipv4Addr: + type: string + format: ipv4 + description: IPv4 address + ipv6Addr: type: string - description: Host portion of the address - example: "[\"192.0.2.0\"]" + format: ipv6 + description: IPv6 address + fqdn: + type: string + description: Fully Qualified Domain Name port: type: integer - description: Port portion of the address - description: A IP address and port pair - EndPointInfo.Addresses: - title: EndPointInfo.Addresses - required: - - addresses - type: object - properties: - addresses: - type: array - description: Entry point information of the service as one or more pairs - of IP address and port. See note. - items: - $ref: '#/components/schemas/EndPointInfo.Address' - EndPointInfo.Fqdn: - title: EndPointInfo.Fqdn - required: - - fqdn - type: object - properties: - fqdn: - type: array - description: Fully Qualified Domain Name of the service. See note. - items: - type: string - description: 'This type represents information about a transport endpoint. ' - EndPointInfo.Uris: - title: EndPointInfo.Uris - required: - - uris - type: object - properties: - uris: - type: array - description: "Entry point information of the service as string, formatted\ - \ according to URI syntax" - items: - type: string - description: This type represents information about a transport endpoint. + description: TCP port number + apiPrefix: + type: string + description: Optional API prefix path (starts with '/') + oneOf: + - required: [ipv4Addr] + - required: [ipv6Addr] + - required: [fqdn] + additionalProperties: false responses: "400": description: Bad Request. It is used to indicate that incorrect parameters were diff --git a/config/api/iot-api.yaml b/config/api/iot-api.yaml new file mode 100644 index 0000000000000000000000000000000000000000..14640b74bed7dd9cde653d5fd752a22dadeac288 --- /dev/null +++ b/config/api/iot-api.yaml @@ -0,0 +1,2858 @@ +openapi: 3.0.0 +info: + title: ETSI GS MEC 033 IoT API + description: ETSI GS MEC 033 IoT API described using OpenAPI. + contact: + name: ETSI Forge + url: https://forge.etsi.org/rep/mec/gs021-amsi-api + email: cti_support@etsi.org + license: + name: BSD-3-Clause + url: https://forge.etsi.org/legal-matters + version: 3.1.1 +externalDocs: + description: "ETSI GS MEC 033 IoT API, v3.3.1" + url: https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_mec033v030101p.pdf +servers: +- url: https://localhost/sandboxname/iots/v1 +tags: +- name: reg-dev + description: registered_devices +- name: reg-iot-plat + description: registered_iot_platforms +paths: + /registered_devices: + get: + tags: + - reg-dev + summary: Retrieve information about all devices with a valid traffic rule association + - see clause 5.2.2. + description: The GET method may be used by a service consumer to retrieve information + about all devices with a valid traffic rule association. This method is typically + used in the "registered devices query" procedure as described in clause 5.2.2. + operationId: registereddevicesGET + parameters: + - name: filter + in: query + description: "Attribute-based filtering parameters according to ETSI GS MEC\ + \ 009 [i.1]. The API producer shall support receiving the following filtering\ + \ parameters as part of the URI query string: \"(eq,enabled,TRUE)\".\n" + required: false + style: form + explode: true + schema: + type: string + - name: fields + in: query + description: | + The list may contain one or more of the following attributes from the DeviceInfo data type: + - deviceMetadata + - gpsi + - msisdn + - deviceId + - requestedMecTrafficRule + - requestedIotPlatformId + - requestedUserTransportId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + responses: + "200": + description: "Upon success, a response body containing the list of registered\ + \ devices is returned. The response body shall contain a list of resources\ + \ that match the attribute filter." + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200' + "400": + description: "Bad Request: used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be\ + \ mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + post: + tags: + - reg-dev + summary: Register a new device - see clause 5.2.3. + description: The POST method may be used by a service consumer to register a + new device. This method is typically used in the "device registration" procedure + as described in clause 5.2.3. + operationId: registereddevicesPOST + requestBody: + description: Payload body in the request contains the information associated + to the IoT device to be registered. + content: + application/json: + schema: + $ref: '#/components/schemas/registered_devices_body' + required: true + responses: + "201": + description: "Upon success, the HTTP response shall include a \"Location\"\ + \ HTTP header that contains the resource URI of the registered device." + content: + application/json: + schema: + $ref: '#/components/schemas/registered_devices_body' + "400": + description: "Bad Request: used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be\ + \ mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /registered_devices/{registeredDeviceId}: + get: + tags: + - reg-dev + summary: Retrieve information about a device - see clause 5.2.4. + description: The GET method may be used by a service consumer to retrieve information + about a device. This method is typically used in the "device registration + query" procedure as described in clause 5.2.4. + operationId: registereddevicesByIdGET + parameters: + - name: registeredDeviceId + in: path + description: The unique identifier of the registered device. + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: "Upon success, a response body containing information about\ + \ the registered device is returned." + content: + application/json: + schema: + $ref: '#/components/schemas/registered_devices_body' + "400": + description: "Bad Request: used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be\ + \ mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + put: + tags: + - reg-dev + summary: Update information about a device including its association to a valid + traffic rule - see clauses 5.2.5 and 5.4.3. + description: The PUT method may be used by a service consumer to update a device + registration including its association to a valid traffic rule. This method + is typically used in the "device registration update" procedure as described + in clause 5.2.5 and in the "user transport assignment" procedure as described + in clause 5.4.3. + operationId: registereddevicesByIdPUT + parameters: + - name: registeredDeviceId + in: path + description: The unique identifier of the registered device. + required: true + style: simple + explode: false + schema: + type: string + requestBody: + description: One or more updated attributes that are allowed to be changed + are included in the DeviceInfo data structure in the payload body of the + request. . + content: + application/json: + schema: + $ref: '#/components/schemas/registered_devices_registeredDeviceId_body' + required: true + responses: + "200": + description: "Upon success, a response body containing data type describing\ + \ the updated DeviceInfo is returned." + content: + application/json: + schema: + $ref: '#/components/schemas/registered_devices_registeredDeviceId_body' + "400": + description: "Bad Request: used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be\ + \ mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "412": + description: "Precondition failed: used when a condition has failed during\ + \ conditional requests, e.g. when using ETags to avoid write conflicts\ + \ when using PUT" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + delete: + tags: + - reg-dev + summary: Deregister a device - see clause 5.2.6. + description: The DELETE method may be used by a service consumer to deregister + a device. This method is typically used in the "device deregistration" procedure + as described in clause 5.2.6. + operationId: registereddevicesByIdDELETE + parameters: + - name: registeredDeviceId + in: path + description: The unique identifier of the registered device. + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "404": + description: "Not Found: used when a client provided a URI that cannot be\ + \ mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /registered_iot_platforms: + get: + tags: + - reg-iot-plat + summary: Retrieve information about all IoT platforms - see clause 5.3.2. + description: The GET method may be used by an authorized service consumer to + retrieve the information of all currently registered IoT platforms. This method + is typically used in the "registered IoT platforms query" procedure as described + in clause 5.3.2. + operationId: registerediotplatformsGET + parameters: + - name: fields + in: query + description: | + The list shall contain the following attributes from the IotPlatformInfo data type: + - iotPlatformId + - enabled + required: false + style: form + explode: true + schema: + type: array + items: + type: string + responses: + "200": + description: "Upon success, a response body containing the list of registered\ + \ IoT platforms is returned." + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/IotPlatformInfo' + x-content-type: application/json + "400": + description: "Bad Request: used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be\ + \ mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + post: + tags: + - reg-iot-plat + summary: Register a IoT platform - see clause 5.3.4. + description: The POST method may be used by a service consumer to register a + new IoT platform. This method is typically used in the "IoT platform registration" + procedure as described in clause 5.3.4. + operationId: registerediotplatformsPOST + requestBody: + description: Payload body in the request contains the information associated + to the IoT platform to be registered. + content: + application/json: + schema: + $ref: '#/components/schemas/registered_iot_platforms_body' + required: true + responses: + "201": + description: "Upon success, the HTTP response shall include a \"Location\"\ + \ HTTP header that contains the resource URI of the registered IoT platform." + content: + application/json: + schema: + $ref: '#/components/schemas/registered_iot_platforms_body' + "400": + description: "Bad Request: used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be\ + \ mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /registered_iot_platforms/{registeredIotPlatformId}: + get: + tags: + - reg-iot-plat + summary: Discover native services and obtain information about user transports + provided by a IoT platform - see clauses 5.3.3 and 5.4.2. + description: 'The GET method may be used by a service consumer to obtain information + about a IoT platform. This method is typically used in the "IoT platform information + request" procedure as described in clause 5.3.3 and in the "user transport + query" procedure as described in clause 5.4.2. ' + operationId: registerediotplatformsByIdGET + parameters: + - name: registeredIotPlatformId + in: path + description: The unique identifier of the registered IoT platform. + required: true + style: simple + explode: false + schema: + type: string + - name: fields + in: query + description: | + The list may contain one or more of the following attributes from the IotPlatformInfo data type: + - userTransportInfo + - customServiceTransportInfo + required: false + style: form + explode: true + schema: + type: array + items: + type: string + responses: + "200": + description: "Upon success, a response body containing information about\ + \ the registered IoT platform is returned." + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_1' + "400": + description: "Bad Request: used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be\ + \ mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + put: + tags: + - reg-iot-plat + summary: Update information about a IoT platform - see clause 5.3.5. + description: The PUT method may be used by a service consumer to update a IoT + platform registration. This method is typically used in the "IoT platform + update" procedure as described in clause 5.3.5. + operationId: registerediotplatformsByIdPUT + parameters: + - name: registeredIotPlatformId + in: path + description: The unique identifier of the registered IoT platform. + required: true + style: simple + explode: false + schema: + type: string + requestBody: + description: One or more updated attributes that are allowed to be changed + are included in the IotPlatformInfo data structure in the payload body of + the request. . + content: + application/json: + schema: + $ref: '#/components/schemas/registered_iot_platforms_registeredIotPlatformId_body' + required: true + responses: + "200": + description: "Upon success, a response body containing data type describing\ + \ the updated IotPlatformInfo is returned." + content: + application/json: + schema: + $ref: '#/components/schemas/registered_iot_platforms_registeredIotPlatformId_body' + "400": + description: "Bad Request: used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be\ + \ mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "412": + description: "Precondition failed: used when a condition has failed during\ + \ conditional requests, e.g. when using ETags to avoid write conflicts\ + \ when using PUT" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + delete: + tags: + - reg-iot-plat + summary: Deregister a IoT platform - see clause 5.3.6. + description: The DELETE method may be used by a service consumer to deregister + a IoT platform. This method is typically used in the "IoT platform deregistration" + procedure as described in clause 5.3.6. + operationId: registerediotplatformsByIdDELETE + parameters: + - name: registeredIotPlatformId + in: path + description: The unique identifier of the registered IoT platform. + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "404": + description: "Not Found: used when a client provided a URI that cannot be\ + \ mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' +components: + schemas: + ProblemDetails: + type: object + properties: + type: + type: string + description: A URI reference according to IETF RFC 3986 that identifies + the problem type + format: uri + title: + type: string + description: "A short, human-readable summary of the problem type" + status: + type: integer + description: The HTTP status code for this occurrence of the problem + format: uint32 + detail: + type: string + description: A human-readable explanation specific to this occurrence of + the problem + instance: + type: string + description: A URI reference that identifies the specific occurrence of + the problem + format: uri + DeviceInfo: + title: DeviceInfo + required: + - deviceAuthenticationInfo + - deviceId + - enabled + type: object + properties: + deviceAuthenticationInfo: + type: string + description: "Information needed for secondary authentication of the IoT\ + \ device to the data network - see ETSI TS 129 561 [i.4] and ETSI TS 129\ + \ 061 [i.5] for 5G and LTE procedures, respectively. This attribute is\ + \ implementation dependent and should be logically linked to the identifiers\ + \ of the IoT device listed hereafter." + deviceMetadata: + type: array + description: 'Additional information about the IoT device. This attribute + is implementation dependent and may be expressed as an array of keyvalue + pairs. ' + items: + $ref: '#/components/schemas/KeyValuePair' + gpsi: + type: string + description: GPSI of the IoT device if 5G-enabled (see note 1). + pei: + type: string + description: PEI of the IoT device if 5G-enabled (see note 1). + supi: + type: string + description: SUPI of the IoT device if 5G-enabled (see note 1). + msisdn: + type: string + description: MSISDN of the IoT device if LTE-enabled (see note 1). + imei: + type: string + description: IMEI of the IoT device if LTE-enabled (see note 1). + imsi: + type: string + description: IMSI of the IoT device if LTE-enabled (see note 1). + iccid: + type: string + description: ICCID of the IoT device (see note 1). + deviceId: + type: string + description: Human-readable identifier of the IoT device. + requestedMecTrafficRule: + type: array + description: "MEC traffic rules the IoT device is requested to be associated\ + \ to (see note 2). The data type definition is as per ETSI GS\_MEC 010-2\ + \ [i.6]." + items: + $ref: '#/components/schemas/TrafficRuleDescriptor' + requestedIotPlatformId: + type: string + description: IoT platform to which the IoT device is requested to be associated + to (see note 2). + requestedUserTransportId: + type: string + description: User transport to which the IoT device is requested to be associated + to (see note 2). + deviceSpecificMessageFormats: + $ref: '#/components/schemas/DeviceSpecificMessageFormats' + downlinkInfo: + $ref: '#/components/schemas/DownlinkInfo' + clientCertificate: + type: string + description: Client-side SSL/TLS certificate to be used by the MEC IoTS + to interact with the user transport provided by the associated IoT platform + in case the MEC IoTS acts on behalf of the IoT device. + enabled: + type: boolean + description: Indication whether the IoT device has a valid associated traffic + rule (TRUE) or not (FALSE). See note 3. + description: "NOTE 1: At least one attribute among gpsi, pei, supi, msisdn,\ + \ imei, imsi, and iccid should be provided. Sufficient security\n measures\ + \ shall be put in place when any attribute among PEI, SUPI, IMEI, and IMSI\ + \ is disclosed over the API.\nNOTE 2: Until a valid traffic rule is not provided,\ + \ the device will not be able to use the IoTS. A valid traffic rule is provided\n\ + \ by one of the following options:\n • the requestedMecTrafficRule\ + \ attribute;\n • the requestedIotPlatformId attribute when the IoT\ + \ platform offers only one user transport;\n • the combination of requestedIotPlatformId\ + \ and requestedUserTransportId.\nNOTE 3: Enabled is a pseudo-attribute which\ + \ needs to be maintained by the IoTS based on the presence or not of a valid\n\ + \ traffic rule associated to the device. It cannot be set directly\ + \ by the service consumer. \n" + example: + deviceSpecificMessageFormats: + eventMsgFormat: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + includeImsi: true + includeSupi: true + selectedSerializer: JSON + eventTopic: eventTopic + includeDeviceId: true + includePei: true + uplinkMsgFormat: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + uplinkTopic: uplinkTopic + includeImsi: true + includeSupi: true + selectedSerializer: null + includeDevicePort: true + includeDeviceId: true + includePei: true + clientCertificate: clientCertificate + downlinkInfo: + downlinkTopic: downlinkTopic + devicePort: 5 + imsi: imsi + supi: supi + deviceId: deviceId + requestedMecTrafficRule: + - action: SEE_DESCRIPTION + trafficRuleId: trafficRuleId + dstInterface: + interfaceType: TUNNEL + dstIPAddress: dstIPAddress + srcMACAddress: srcMACAddress + dstMACAddress: dstMACAddress + tunnelInfo: + tunnelSrcAddress: tunnelSrcAddress + tunnelType: GTP-U + tunnelSpecificData: tunnelSpecificData + tunnelDstAddress: tunnelDstAddress + filterType: per FLOW + priority: 0 + trafficFilter: + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - action: SEE_DESCRIPTION + trafficRuleId: trafficRuleId + dstInterface: + interfaceType: TUNNEL + dstIPAddress: dstIPAddress + srcMACAddress: srcMACAddress + dstMACAddress: dstMACAddress + tunnelInfo: + tunnelSrcAddress: tunnelSrcAddress + tunnelType: GTP-U + tunnelSpecificData: tunnelSpecificData + tunnelDstAddress: tunnelDstAddress + filterType: per FLOW + priority: 0 + trafficFilter: + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + enabled: true + gpsi: gpsi + requestedUserTransportId: requestedUserTransportId + iccid: iccid + pei: pei + requestedIotPlatformId: requestedIotPlatformId + deviceMetadata: + - value: value + key: key + - value: value + key: key + deviceAuthenticationInfo: deviceAuthenticationInfo + imei: imei + msisdn: msisdn + IotPlatformInfo: + title: IotPlatformInfo + required: + - enabled + - iotPlatformId + - userTransportInfo + type: object + properties: + iotPlatformId: + type: string + description: Identifier of the IoT platform. + userTransportInfo: + minItems: 1 + type: array + description: Information about the user transport(s) provided by the IoT + platform. + items: + $ref: '#/components/schemas/MBTransportInfo' + customServicesTransportInfo: + minItems: 0 + type: array + description: "Transport enabling access to vendor-specific services provided\ + \ by the IoT platform. The data type definition is as per ETSI GS MEC\ + \ 011 [i.2]." + items: + $ref: '#/components/schemas/TransportInfo' + enabled: + type: boolean + description: Indication whether the IoT platform is capable of providing + user transports and vendor-specific services (TRUE) or not (FALSE). + example: + iotPlatformId: iotPlatformId + customServicesTransportInfo: + - implSpecificInfo: implSpecificInfo + protocol: protocol + endpoint: null + security: null + name: name + description: description + id: id + type: null + version: version + - implSpecificInfo: implSpecificInfo + protocol: protocol + endpoint: null + security: null + name: name + description: description + id: id + type: null + version: version + userTransportInfo: + - implSpecificInfo: + uplinkTopics: + - uplinkTopics + - uplinkTopics + downlinkTopics: + - downlinkTopics + - downlinkTopics + eventTopics: + - eventTopics + - eventTopics + protocol: protocol + endpoint: + uris: + - uris + - uris + addresses: + - port: 0 + host: host + - port: 0 + host: host + fqdn: + - fqdn + - fqdn + alternative: alternative + security: + extensions: extensions + oAuth2Info: + tokenEndpoint: http://example.com/aeiou + grantTypes: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_AUTHORIZATION_CODE + name: name + description: description + id: id + type: REST_HTTP + version: version + - implSpecificInfo: + uplinkTopics: + - uplinkTopics + - uplinkTopics + downlinkTopics: + - downlinkTopics + - downlinkTopics + eventTopics: + - eventTopics + - eventTopics + protocol: protocol + endpoint: + uris: + - uris + - uris + addresses: + - port: 0 + host: host + - port: 0 + host: host + fqdn: + - fqdn + - fqdn + alternative: alternative + security: + extensions: extensions + oAuth2Info: + tokenEndpoint: http://example.com/aeiou + grantTypes: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_AUTHORIZATION_CODE + name: name + description: description + id: id + type: REST_HTTP + version: version + enabled: true + MBTransportInfo: + title: MBTransportInfo + required: + - endpoint + - id + - implSpecificInfo + - name + - protocol + - security + - type + - version + type: object + properties: + id: + type: string + description: "The identifier of this transport as per ETSI GS\_MEC\_011\ + \ [i.2]." + name: + type: string + description: "The name of this transport as per ETSI GS\_MEC\_011\_[i.2]." + description: + type: string + description: "Human-readable description of this transport as per ETSI GS\_\ + MEC 011 [i.2]." + type: + $ref: '#/components/schemas/TransportType' + protocol: + type: string + description: "The name of the protocol used. Being the transport of MB_TOPIC_BASED\ + \ type, this attribute should be typically set to \"MQTT\" or \"AMQP.\"" + version: + type: string + description: "The version of the protocol used as per ETSI GS\_MEC\_011\_\ + [i.2]." + endpoint: + $ref: '#/components/schemas/EndPointInfo' + security: + $ref: '#/components/schemas/SecurityInfo' + implSpecificInfo: + $ref: '#/components/schemas/ImplSpecificInfo' + example: + implSpecificInfo: + uplinkTopics: + - uplinkTopics + - uplinkTopics + downlinkTopics: + - downlinkTopics + - downlinkTopics + eventTopics: + - eventTopics + - eventTopics + protocol: protocol + endpoint: + uris: + - uris + - uris + addresses: + - port: 0 + host: host + - port: 0 + host: host + fqdn: + - fqdn + - fqdn + alternative: alternative + security: + extensions: extensions + oAuth2Info: + tokenEndpoint: http://example.com/aeiou + grantTypes: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_AUTHORIZATION_CODE + name: name + description: description + id: id + type: REST_HTTP + version: version + EventMsg: + title: EventMsg + required: + - eventTopic + - selectedSerializer + type: object + properties: + eventTopic: + type: string + description: 'Topic where the message containing application-specific information + should be published. ' + selectedSerializer: + $ref: '#/components/schemas/SerializerType' + includeDeviceAddr: + type: boolean + description: Indication whether to include the IP address of the IoT device + (TRUE) or not (FALSE). + includeDeviceMetadata: + type: boolean + description: Indication whether to include the metadata about the IoT device + (TRUE) or not (FALSE). + includePei: + type: boolean + description: Indication whether to include the PEI of the IoT device (TRUE) + or not (FALSE). + includeSupi: + type: boolean + description: Indication whether to include the SUPI of the IoT device (TRUE) + or not (FALSE). + includeImei: + type: boolean + description: Indication whether to include the IMEI of the IoT device (TRUE) + or not (FALSE). + includeImsi: + type: boolean + description: Indication whether to include the IMSI of the IoT device (TRUE) + or not (FALSE). + includeIccid: + type: boolean + description: Indication whether to include the ICCID of the IoT device (TRUE) + or not (FALSE). + includeDeviceId: + type: boolean + description: Indication whether to include the human-readable identified + of the IoT device (TRUE) or not (FALSE). + example: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + includeImsi: true + includeSupi: true + selectedSerializer: JSON + eventTopic: eventTopic + includeDeviceId: true + includePei: true + UplinkMsg: + title: UplinkMsg + required: + - selectedSerializer + - uplinkTopic + type: object + properties: + uplinkTopic: + type: string + description: "Topic where the message containing the data generated by the\ + \ IoT device(s) should be published, in order to be consumed by the end\ + \ IoT application(s)." + selectedSerializer: + $ref: '#/components/schemas/SerializerType' + includeDevicePort: + type: boolean + description: Indication whether to include the UDP port of the remote IoT + device (TRUE) or not (FALSE). + includeDeviceAddr: + type: boolean + description: Indication whether to include the IP address of the IoT device + (TRUE) or not (FALSE). + includeDeviceMetadata: + type: boolean + description: Indication whether to include the metadata about the IoT device + (TRUE) or not (FALSE). + includePei: + type: boolean + description: Indication whether to include the PEI of the IoT device (TRUE) + or not (FALSE). + includeSupi: + type: boolean + description: Indication whether to include the SUPI of the IoT device (TRUE) + or not (FALSE). + includeImei: + type: boolean + description: Indication whether to include the IMEI of the IoT device (TRUE) + or not (FALSE). + includeImsi: + type: boolean + description: Indication whether to include the IMSI of the IoT device (TRUE) + or not (FALSE). + includeIccid: + type: boolean + description: Indication whether to include the ICCID of the IoT device (TRUE) + or not (FALSE). + includeDeviceId: + type: boolean + description: Indication whether to include the human-readable identified + of the IoT device (TRUE) or not (FALSE). + example: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + uplinkTopic: uplinkTopic + includeImsi: true + includeSupi: true + selectedSerializer: null + includeDevicePort: true + includeDeviceId: true + includePei: true + DeviceSpecificMessageFormats: + type: object + properties: + eventMsgFormat: + $ref: '#/components/schemas/EventMsg' + uplinkMsgFormat: + $ref: '#/components/schemas/UplinkMsg' + description: Format of the messages to be published by the MEC IoTS on the user + transport provided by the associated IoT platform in case the MEC IoTS acts + on behalf of the IoT device. + example: + eventMsgFormat: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + includeImsi: true + includeSupi: true + selectedSerializer: JSON + eventTopic: eventTopic + includeDeviceId: true + includePei: true + uplinkMsgFormat: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + uplinkTopic: uplinkTopic + includeImsi: true + includeSupi: true + selectedSerializer: null + includeDevicePort: true + includeDeviceId: true + includePei: true + DownlinkInfo: + type: object + properties: + downlinkTopic: + type: string + description: Topic associated to the IoT device. This topic should be used + by an end IoT application to send downlink data to the IoT device. + devicePort: + type: integer + description: "UDP port to be used by the MEC IoTS for the outgoing downlink\ + \ packets towards the IoT device. In case a default value is used, this\ + \ attribute is optional." + description: Downlink communication configuration of the user transport provided + by the associated IoT platform in case the MEC IoTS acts on behalf of the + IoT device. + example: + downlinkTopic: downlinkTopic + devicePort: 5 + ImplSpecificInfo: + type: object + properties: + eventTopics: + minItems: 0 + type: array + description: Topics used to publish events related to the established session + between the IoT device(s) and the end IoT application(s) on the user transport. + items: + type: string + uplinkTopics: + type: array + description: "Topics used to publish data generated by the IoT device(s)\ + \ on the user transport, in order to be consumed by the end IoT application(s)." + items: + type: string + downlinkTopics: + type: array + description: "Topics used to publish data generated by the IoT applications(s)\ + \ on the user transport, in order to be consumed by the end IoT device(s)." + items: + type: string + description: Additional implementation specific details of the transport. + example: + uplinkTopics: + - uplinkTopics + - uplinkTopics + downlinkTopics: + - downlinkTopics + - downlinkTopics + eventTopics: + - eventTopics + - eventTopics + SerializerType: + type: string + description: The enumeration SerializerType represents types of serializers. + enum: + - JSON + - XML + - PROTOBUF3 + TransportInfo: + title: TransportInfo + required: + - endpoint + - id + - name + - protocol + - security + - type + - version + type: object + properties: + id: + type: string + description: The identifier of this transport. + name: + type: string + description: The name of this transport. + description: + type: string + description: Human-readable description of this transport. + type: + $ref: '#/components/schemas/TransportType' + protocol: + type: string + description: The name of the protocol used. Shall be set to "HTTP" for a + REST API. + version: + type: string + description: The version of the protocol used. + endpoint: + $ref: '#/components/schemas/EndPointInfo' + security: + $ref: '#/components/schemas/SecurityInfo' + implSpecificInfo: + type: string + description: Additional implementation specific details of the transport. + example: + implSpecificInfo: implSpecificInfo + protocol: protocol + endpoint: null + security: null + name: name + description: description + id: id + type: null + version: version + TransportType: + type: string + description: Enumeration representing types of transports. + enum: + - REST_HTTP + - MB_TOPIC_BASED + - MB_ROUTING + - MB_PUBSUB + - RPC + - RPC_STREAMING + - WEBSOCKET + EndPointInfo: + title: EndPointInfo + type: object + properties: + uris: + type: array + description: "Entry point information of the service as string, formatted\ + \ according to URI syntax (see IETF RFC 3986 [8]). Shall be used for REST\ + \ APIs. See note." + items: + type: string + fqdn: + type: array + description: Fully Qualified Domain Name of the service. See note. + items: + type: string + addresses: + type: array + items: + $ref: '#/components/schemas/Addresses' + alternative: + type: string + description: "Entry point information of the service in a format defined\ + \ by an implementation, or in an external specification. See\_note." + description: "NOTE: Exactly one of \"uris\", \"fqdn\", \"addresses\" or \"alternative\"\ + \ shall be present. \n" + example: + uris: + - uris + - uris + addresses: + - port: 0 + host: host + - port: 0 + host: host + fqdn: + - fqdn + - fqdn + alternative: alternative + SecurityInfo: + type: object + properties: + oAuth2Info: + $ref: '#/components/schemas/OAuth2Info' + extensions: + type: string + description: "Extensions for alternative transport mechanisms. These extensions\ + \ depend on the actual transport and are out of scope of the present document.\ + \ For instance, such extensions may be used to signal the necessary parameters\ + \ for the client to use TLS-based authorization defined for alternative\ + \ transports (see ETSI GS MEC 009 [5] for more information).\n" + example: + extensions: extensions + oAuth2Info: + tokenEndpoint: http://example.com/aeiou + grantTypes: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_AUTHORIZATION_CODE + Addresses: + required: + - host + - port + type: object + properties: + host: + type: string + description: Host portion of the address. + port: + type: integer + description: Port portion of the address. + description: Entry point information of the service as one or more pairs of + IP address and port. See note. + example: + port: 0 + host: host + OAuth2Info: + required: + - grantTypes + type: object + properties: + grantTypes: + type: array + description: "List of supported OAuth 2.0 grant types.\nEach entry shall\ + \ be one of the following permitted values:\n- OAUTH2_AUTHORIZATION_CODE:\ + \ Authorization code grant type\n- OAUTH2_IMPLICIT_GRANT: Implicit grant\ + \ type\n- OAUTH2_RESOURCE_OWNER: Resource owner password credentials grant\ + \ type\n- OAUTH2_CLIENT_CREDENTIALS: Client credentials grant type\nOnly\ + \ the value \"OAUTH2_CLIENT_CREDENTIALS\" is supported in the present\ + \ document.\n" + items: + type: string + enum: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_IMPLICIT_GRANT + - OAUTH2_RESOURCE_OWNER + - OAUTH2_CLIENT_CREDENTIALS + tokenEndpoint: + type: string + description: The token endpoint. Shall be present unless the grant type + is OAUTH2_IMPLICIT_GRANT. + format: uri + description: "Parameters related to use of OAuth 2.0. Shall be present in case\ + \ OAuth 2.0 (see IETF RFC 6749 [13]) is supported to secure the provision\ + \ of the service over the transport." + example: + tokenEndpoint: http://example.com/aeiou + grantTypes: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_AUTHORIZATION_CODE + TrafficRuleDescriptor: + title: TrafficRuleDescriptor + required: + - action + - filterType + - priority + - trafficFilter + - trafficRuleId + type: object + properties: + trafficRuleId: + type: string + description: Identifies the traffic rule. + filterType: + type: string + description: "Definition of filter type: per FLOW or PACKET\n\nIf it is\ + \ per FLOW, the filter matches upstream (e.g. UE->EPC) packets and downstream\ + \ (e.g. EPC->UE) packets are handled by the same context.\n" + enum: + - per FLOW + - per PACKET + priority: + type: integer + description: "Priority of this traffic rule within the range 0 to 255. If\ + \ traffic rule conflicts, the one with higher priority take precedence.\ + \ See note\_1." + trafficFilter: + type: array + description: The filter used to identify specific flow/packets that need + to be handled by the MEC host. + items: + $ref: '#/components/schemas/TrafficFilter' + action: + type: string + description: "Identifies the action of the MEC host data plane, when a packet\ + \ matches the trafficFilter, the example actions include:\nDROP,\nFORWARD_DECAPSULATED,\n\ + FORWARD_ENCAPSULATED,\nPASSTHROUGH,\nDUPLICATE_DECAPSULATED,\nDUPLICATE_ENCAPSULATED " + enum: + - SEE_DESCRIPTION + dstInterface: + $ref: '#/components/schemas/InterfaceDescriptor' + description: "NOTE 1: Value indicates the priority in descending order, i.e.\ + \ with 0 as the highest priority and 255 as the lowest\n priority.\n\ + NOTE 2: Some applications (like inline/tap) require two interfaces. The first\ + \ interface in the case of inline/tap is on the\n client (e.g. UE)\ + \ side and the second on the core network (e.g. EPC) side. \n" + example: + action: SEE_DESCRIPTION + trafficRuleId: trafficRuleId + dstInterface: + interfaceType: TUNNEL + dstIPAddress: dstIPAddress + srcMACAddress: srcMACAddress + dstMACAddress: dstMACAddress + tunnelInfo: + tunnelSrcAddress: tunnelSrcAddress + tunnelType: GTP-U + tunnelSpecificData: tunnelSpecificData + tunnelDstAddress: tunnelDstAddress + filterType: per FLOW + priority: 0 + trafficFilter: + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + TrafficFilter: + title: TrafficFilter + type: object + properties: + srcAddress: + type: array + description: "An IP address or a range of IP addresses.\nFor IPv4, the IP\ + \ address could be an IP address plus mask, or an individual IP address,\ + \ or a range of IP addresses.\nFor IPv6, the IP address could be an IP\ + \ prefix, or a range of IP prefixes." + items: + type: string + dstAddress: + type: array + description: "An IP address or a range of IP addresses.\nFor IPv4, the IP\ + \ address could be an IP address plus mask, or an individual IP address,\ + \ or a range of IP addresses.\nFor IPv6, the IP address could be an IP\ + \ prefix, or a range of IP prefixes." + items: + type: string + srcPort: + type: array + description: A port or a range of ports. + items: + type: string + dstPort: + type: array + description: A port or a range of ports. + items: + type: string + protocol: + type: array + description: Specify the protocol of the traffic filter. + items: + type: string + tag: + type: array + description: Used for tag based traffic rule. + items: + type: string + uri: + type: array + description: "An URI label, in application layer, i.e. in HTTP message,\ + \ is used to filter the traffic." + items: + type: string + packetLabel: + type: array + description: "A customized packet label in network layer, as defined by\ + \ the owner of the MEC platform, is used to filter the traffic." + items: + type: string + srcTunnelAddress: + type: array + description: Used for GTP tunnel based traffic rule. + items: + type: string + tgtTunnelAddress: + type: array + description: Used for GTP tunnel based traffic rule. + items: + type: string + srcTunnelPort: + type: array + description: Used for GTP tunnel based traffic rule. + items: + type: string + dstTunnelPort: + type: array + description: Used for GTP tunnel based traffic rule. + items: + type: string + qCI: + type: integer + description: Used to match all packets that have the same QCI. + dSCP: + type: integer + description: Used to match all IPv4 packets that have the same DSCP. + tC: + type: integer + description: Used to match all IPv6 packets that have the same TC. + example: + srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + InterfaceDescriptor: + title: InterfaceDescriptor + required: + - interfaceType + type: object + properties: + interfaceType: + type: string + description: "Type of interface: TUNNEL, MAC, IP, etc." + enum: + - TUNNEL + - MAC + - IP + tunnelInfo: + $ref: '#/components/schemas/TunnelInfo' + srcMACAddress: + type: string + description: "If the interface type is MAC, the source address identifies\ + \ the MAC address of the interface." + dstMACAddress: + type: string + description: "If the interface type is MAC, the destination address identifies\ + \ the MAC address of the destination. Only used for dstInterface." + dstIPAddress: + type: string + description: "If the interface type is IP, the destination address identifies\ + \ the IP address of the destination. Only used for dstInterface." + example: + interfaceType: TUNNEL + dstIPAddress: dstIPAddress + srcMACAddress: srcMACAddress + dstMACAddress: dstMACAddress + tunnelInfo: + tunnelSrcAddress: tunnelSrcAddress + tunnelType: GTP-U + tunnelSpecificData: tunnelSpecificData + tunnelDstAddress: tunnelDstAddress + TunnelInfo: + title: TunnelInfo + required: + - tunnelDstAddress + - tunnelSrcAddress + - tunnelType + type: object + properties: + tunnelType: + type: string + description: "Type of tunnel: GTP-U, GRE, etc." + enum: + - GTP-U + - GRE + tunnelDstAddress: + type: string + description: Destination address of the tunnel. + tunnelSrcAddress: + type: string + description: Source address of the tunnel. + tunnelSpecificData: + type: string + description: Parameters specific to the tunnel. + example: + tunnelSrcAddress: tunnelSrcAddress + tunnelType: GTP-U + tunnelSpecificData: tunnelSpecificData + tunnelDstAddress: tunnelDstAddress + KeyValuePair: + type: object + properties: + key: + type: string + value: + type: string + description: Key-value pairs for device metadata + example: + value: value + key: key + inline_response_200: + type: object + properties: + items: + $ref: '#/components/schemas/DeviceInfo' + example: + items: + deviceSpecificMessageFormats: + eventMsgFormat: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + includeImsi: true + includeSupi: true + selectedSerializer: JSON + eventTopic: eventTopic + includeDeviceId: true + includePei: true + uplinkMsgFormat: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + uplinkTopic: uplinkTopic + includeImsi: true + includeSupi: true + selectedSerializer: null + includeDevicePort: true + includeDeviceId: true + includePei: true + clientCertificate: clientCertificate + downlinkInfo: + downlinkTopic: downlinkTopic + devicePort: 5 + imsi: imsi + supi: supi + deviceId: deviceId + requestedMecTrafficRule: + - action: SEE_DESCRIPTION + trafficRuleId: trafficRuleId + dstInterface: + interfaceType: TUNNEL + dstIPAddress: dstIPAddress + srcMACAddress: srcMACAddress + dstMACAddress: dstMACAddress + tunnelInfo: + tunnelSrcAddress: tunnelSrcAddress + tunnelType: GTP-U + tunnelSpecificData: tunnelSpecificData + tunnelDstAddress: tunnelDstAddress + filterType: per FLOW + priority: 0 + trafficFilter: + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - action: SEE_DESCRIPTION + trafficRuleId: trafficRuleId + dstInterface: + interfaceType: TUNNEL + dstIPAddress: dstIPAddress + srcMACAddress: srcMACAddress + dstMACAddress: dstMACAddress + tunnelInfo: + tunnelSrcAddress: tunnelSrcAddress + tunnelType: GTP-U + tunnelSpecificData: tunnelSpecificData + tunnelDstAddress: tunnelDstAddress + filterType: per FLOW + priority: 0 + trafficFilter: + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + enabled: true + gpsi: gpsi + requestedUserTransportId: requestedUserTransportId + iccid: iccid + pei: pei + requestedIotPlatformId: requestedIotPlatformId + deviceMetadata: + - value: value + key: key + - value: value + key: key + deviceAuthenticationInfo: deviceAuthenticationInfo + imei: imei + msisdn: msisdn + registered_devices_body: + type: object + properties: + DeviceInfo: + $ref: '#/components/schemas/DeviceInfo' + example: + DeviceInfo: + deviceSpecificMessageFormats: + eventMsgFormat: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + includeImsi: true + includeSupi: true + selectedSerializer: JSON + eventTopic: eventTopic + includeDeviceId: true + includePei: true + uplinkMsgFormat: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + uplinkTopic: uplinkTopic + includeImsi: true + includeSupi: true + selectedSerializer: null + includeDevicePort: true + includeDeviceId: true + includePei: true + clientCertificate: clientCertificate + downlinkInfo: + downlinkTopic: downlinkTopic + devicePort: 5 + imsi: imsi + supi: supi + deviceId: deviceId + requestedMecTrafficRule: + - action: SEE_DESCRIPTION + trafficRuleId: trafficRuleId + dstInterface: + interfaceType: TUNNEL + dstIPAddress: dstIPAddress + srcMACAddress: srcMACAddress + dstMACAddress: dstMACAddress + tunnelInfo: + tunnelSrcAddress: tunnelSrcAddress + tunnelType: GTP-U + tunnelSpecificData: tunnelSpecificData + tunnelDstAddress: tunnelDstAddress + filterType: per FLOW + priority: 0 + trafficFilter: + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - action: SEE_DESCRIPTION + trafficRuleId: trafficRuleId + dstInterface: + interfaceType: TUNNEL + dstIPAddress: dstIPAddress + srcMACAddress: srcMACAddress + dstMACAddress: dstMACAddress + tunnelInfo: + tunnelSrcAddress: tunnelSrcAddress + tunnelType: GTP-U + tunnelSpecificData: tunnelSpecificData + tunnelDstAddress: tunnelDstAddress + filterType: per FLOW + priority: 0 + trafficFilter: + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + enabled: true + gpsi: gpsi + requestedUserTransportId: requestedUserTransportId + iccid: iccid + pei: pei + requestedIotPlatformId: requestedIotPlatformId + deviceMetadata: + - value: value + key: key + - value: value + key: key + deviceAuthenticationInfo: deviceAuthenticationInfo + imei: imei + msisdn: msisdn + registered_devices_registeredDeviceId_body: + type: object + properties: + DeviceInfo: + $ref: '#/components/schemas/DeviceInfo' + example: + DeviceInfo: + deviceSpecificMessageFormats: + eventMsgFormat: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + includeImsi: true + includeSupi: true + selectedSerializer: JSON + eventTopic: eventTopic + includeDeviceId: true + includePei: true + uplinkMsgFormat: + includeDeviceMetadata: true + includeIccid: true + includeDeviceAddr: true + includeImei: true + uplinkTopic: uplinkTopic + includeImsi: true + includeSupi: true + selectedSerializer: null + includeDevicePort: true + includeDeviceId: true + includePei: true + clientCertificate: clientCertificate + downlinkInfo: + downlinkTopic: downlinkTopic + devicePort: 5 + imsi: imsi + supi: supi + deviceId: deviceId + requestedMecTrafficRule: + - action: SEE_DESCRIPTION + trafficRuleId: trafficRuleId + dstInterface: + interfaceType: TUNNEL + dstIPAddress: dstIPAddress + srcMACAddress: srcMACAddress + dstMACAddress: dstMACAddress + tunnelInfo: + tunnelSrcAddress: tunnelSrcAddress + tunnelType: GTP-U + tunnelSpecificData: tunnelSpecificData + tunnelDstAddress: tunnelDstAddress + filterType: per FLOW + priority: 0 + trafficFilter: + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - action: SEE_DESCRIPTION + trafficRuleId: trafficRuleId + dstInterface: + interfaceType: TUNNEL + dstIPAddress: dstIPAddress + srcMACAddress: srcMACAddress + dstMACAddress: dstMACAddress + tunnelInfo: + tunnelSrcAddress: tunnelSrcAddress + tunnelType: GTP-U + tunnelSpecificData: tunnelSpecificData + tunnelDstAddress: tunnelDstAddress + filterType: per FLOW + priority: 0 + trafficFilter: + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + - srcTunnelPort: + - srcTunnelPort + - srcTunnelPort + dstAddress: + - dstAddress + - dstAddress + srcAddress: + - srcAddress + - srcAddress + srcPort: + - srcPort + - srcPort + uri: + - uri + - uri + tC: 5 + protocol: + - protocol + - protocol + dstTunnelPort: + - dstTunnelPort + - dstTunnelPort + dSCP: 1 + dstPort: + - dstPort + - dstPort + packetLabel: + - packetLabel + - packetLabel + qCI: 6 + srcTunnelAddress: + - srcTunnelAddress + - srcTunnelAddress + tag: + - tag + - tag + tgtTunnelAddress: + - tgtTunnelAddress + - tgtTunnelAddress + enabled: true + gpsi: gpsi + requestedUserTransportId: requestedUserTransportId + iccid: iccid + pei: pei + requestedIotPlatformId: requestedIotPlatformId + deviceMetadata: + - value: value + key: key + - value: value + key: key + deviceAuthenticationInfo: deviceAuthenticationInfo + imei: imei + msisdn: msisdn + registered_iot_platforms_body: + type: object + properties: + IoTPlatformInfo: + $ref: '#/components/schemas/IotPlatformInfo' + example: + IoTPlatformInfo: + iotPlatformId: iotPlatformId + customServicesTransportInfo: + - implSpecificInfo: implSpecificInfo + protocol: protocol + endpoint: null + security: null + name: name + description: description + id: id + type: null + version: version + - implSpecificInfo: implSpecificInfo + protocol: protocol + endpoint: null + security: null + name: name + description: description + id: id + type: null + version: version + userTransportInfo: + - implSpecificInfo: + uplinkTopics: + - uplinkTopics + - uplinkTopics + downlinkTopics: + - downlinkTopics + - downlinkTopics + eventTopics: + - eventTopics + - eventTopics + protocol: protocol + endpoint: + uris: + - uris + - uris + addresses: + - port: 0 + host: host + - port: 0 + host: host + fqdn: + - fqdn + - fqdn + alternative: alternative + security: + extensions: extensions + oAuth2Info: + tokenEndpoint: http://example.com/aeiou + grantTypes: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_AUTHORIZATION_CODE + name: name + description: description + id: id + type: REST_HTTP + version: version + - implSpecificInfo: + uplinkTopics: + - uplinkTopics + - uplinkTopics + downlinkTopics: + - downlinkTopics + - downlinkTopics + eventTopics: + - eventTopics + - eventTopics + protocol: protocol + endpoint: + uris: + - uris + - uris + addresses: + - port: 0 + host: host + - port: 0 + host: host + fqdn: + - fqdn + - fqdn + alternative: alternative + security: + extensions: extensions + oAuth2Info: + tokenEndpoint: http://example.com/aeiou + grantTypes: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_AUTHORIZATION_CODE + name: name + description: description + id: id + type: REST_HTTP + version: version + enabled: true + inline_response_200_1: + type: object + properties: + IotPlatformInfo: + $ref: '#/components/schemas/IotPlatformInfo' + example: + IotPlatformInfo: + iotPlatformId: iotPlatformId + customServicesTransportInfo: + - implSpecificInfo: implSpecificInfo + protocol: protocol + endpoint: null + security: null + name: name + description: description + id: id + type: null + version: version + - implSpecificInfo: implSpecificInfo + protocol: protocol + endpoint: null + security: null + name: name + description: description + id: id + type: null + version: version + userTransportInfo: + - implSpecificInfo: + uplinkTopics: + - uplinkTopics + - uplinkTopics + downlinkTopics: + - downlinkTopics + - downlinkTopics + eventTopics: + - eventTopics + - eventTopics + protocol: protocol + endpoint: + uris: + - uris + - uris + addresses: + - port: 0 + host: host + - port: 0 + host: host + fqdn: + - fqdn + - fqdn + alternative: alternative + security: + extensions: extensions + oAuth2Info: + tokenEndpoint: http://example.com/aeiou + grantTypes: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_AUTHORIZATION_CODE + name: name + description: description + id: id + type: REST_HTTP + version: version + - implSpecificInfo: + uplinkTopics: + - uplinkTopics + - uplinkTopics + downlinkTopics: + - downlinkTopics + - downlinkTopics + eventTopics: + - eventTopics + - eventTopics + protocol: protocol + endpoint: + uris: + - uris + - uris + addresses: + - port: 0 + host: host + - port: 0 + host: host + fqdn: + - fqdn + - fqdn + alternative: alternative + security: + extensions: extensions + oAuth2Info: + tokenEndpoint: http://example.com/aeiou + grantTypes: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_AUTHORIZATION_CODE + name: name + description: description + id: id + type: REST_HTTP + version: version + enabled: true + registered_iot_platforms_registeredIotPlatformId_body: + type: object + properties: + IotPlatformInfo: + $ref: '#/components/schemas/IotPlatformInfo' + example: + IotPlatformInfo: + iotPlatformId: iotPlatformId + customServicesTransportInfo: + - implSpecificInfo: implSpecificInfo + protocol: protocol + endpoint: null + security: null + name: name + description: description + id: id + type: null + version: version + - implSpecificInfo: implSpecificInfo + protocol: protocol + endpoint: null + security: null + name: name + description: description + id: id + type: null + version: version + userTransportInfo: + - implSpecificInfo: + uplinkTopics: + - uplinkTopics + - uplinkTopics + downlinkTopics: + - downlinkTopics + - downlinkTopics + eventTopics: + - eventTopics + - eventTopics + protocol: protocol + endpoint: + uris: + - uris + - uris + addresses: + - port: 0 + host: host + - port: 0 + host: host + fqdn: + - fqdn + - fqdn + alternative: alternative + security: + extensions: extensions + oAuth2Info: + tokenEndpoint: http://example.com/aeiou + grantTypes: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_AUTHORIZATION_CODE + name: name + description: description + id: id + type: REST_HTTP + version: version + - implSpecificInfo: + uplinkTopics: + - uplinkTopics + - uplinkTopics + downlinkTopics: + - downlinkTopics + - downlinkTopics + eventTopics: + - eventTopics + - eventTopics + protocol: protocol + endpoint: + uris: + - uris + - uris + addresses: + - port: 0 + host: host + - port: 0 + host: host + fqdn: + - fqdn + - fqdn + alternative: alternative + security: + extensions: extensions + oAuth2Info: + tokenEndpoint: http://example.com/aeiou + grantTypes: + - OAUTH2_AUTHORIZATION_CODE + - OAUTH2_AUTHORIZATION_CODE + name: name + description: description + id: id + type: REST_HTTP + version: version + enabled: true + responses: + "200": + description: OK + "204": + description: No Content + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed\ + \ to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of\ + \ the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped\ + \ to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "412": + description: "Precondition failed: used when a condition has failed during conditional\ + \ requests, e.g. when using ETags to avoid write conflicts when using PUT" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' diff --git a/config/api/loc-serv-api.yaml b/config/api/loc-serv-api.yaml index c4a3add67faad22d3f0f47475d9c90b04db2f036..1259be883066e656a83172bf70a899a660edfcdf 100644 --- a/config/api/loc-serv-api.yaml +++ b/config/api/loc-serv-api.yaml @@ -375,7 +375,7 @@ paths: example: userAreaNotification: notificationType: 'UserAreaNotification' - timestamp: + timeStamp: seconds: 1673507343 nanoSeconds": 0 address: 'acr:10.0.0.1' @@ -697,7 +697,7 @@ paths: example: userDistanceNotification: notificationType: 'UserDistanceNotification' - timestamp: + timeStamp: seconds: 1673507343 nanoSeconds": 0 monitoredUsers: @@ -705,7 +705,7 @@ paths: address: 'acr:10.0.0.1' accessPointId: '001010000000000000000000000000001' zoneId: 'zone01' - timestamp: + timeStamp: seconds: 1673507343 nanoSeconds": 0 resourceURL: 'http://meAppServer.example.com/location/v3/queries/users' @@ -1033,7 +1033,7 @@ paths: example: userLocationEventNotification: notificationType: 'UserLocationEventNotification' - timestamp: + timeStamp: seconds: 1673507343 nanoseconds: 0 address: 'acr:10.0.0.1' @@ -1335,7 +1335,7 @@ paths: example: - zoneLocationEventNotification: notificationType: 'ZoneLocationEventNotification' - timestamp: + timeStamp: seconds: 1673507343 nanoseconds: 0 address: 'acr:10.0.0.1' @@ -2472,7 +2472,7 @@ components: type: integer x-etsi-mec-cardinality: '1' x-etsi-mec-origin-type: Enum_inlined - timestamp: + timeStamp: $ref: '#/components/schemas/TimeStamp' uncertaintyRadius: description: Present only if "shape" equals 6 @@ -2812,7 +2812,7 @@ components: type: object TerminalDistance: - description: A type containing information about the distance from a terminal to a location or between two terminals, in addition the accuracy and a timestamp of the information are provided. + description: A type containing information about the distance from a terminal to a location or between two terminals, in addition the accuracy and a timeStamp of the information are provided. properties: accuracy: description: Accuracy of the provided distance in meters @@ -2824,7 +2824,7 @@ components: type: integer x-etsi-mec-cardinality: 1 x-etsi-mec-origin-type: integer - timestamp: + timeStamp: $ref: '#/components/schemas/TimeStamp' required: - distance @@ -3084,7 +3084,7 @@ components: type: string x-etsi-mec-cardinality: '1' x-etsi-mec-origin-type: AnyURI - timestamp: + timeStamp: $ref: '#/components/schemas/TimeStamp' zoneId: description: The identity of the zone the user is currently within, see note 1. @@ -3096,7 +3096,7 @@ components: - accessPointId - zoneId - resourceURL - - timestamp + - timeStamp type: object x-etsi-notes: "NOTE 1:\tAs specified in [5], clause 5.2.2.7.\nNOTE 2: \tAs specified in [5], clause 5.2.2.5." x-etsi-ref: 6.2.2 diff --git a/config/api/qms-api.yaml b/config/api/qms-api.yaml new file mode 100644 index 0000000000000000000000000000000000000000..746f4fa1b5bc9b245a21964557646985dc43560e --- /dev/null +++ b/config/api/qms-api.yaml @@ -0,0 +1,1174 @@ +openapi: 3.1.0 +jsonSchemaDialect: https://json-schema.org/draft/2020-12/schema +info: + contact: + url: https://forge.etsi.org/rep/mec/gs045-qos-mea-api + title: ETSI GS MEC 045 QoS Measurement API + version: 3.1.1 + description: ETSI GS MEC 045 QoS Measurement API described using OpenAPI. + license: + name: BSD-3-Clause + url: https://forge.etsi.org/legal-matters +servers: +- url: https://localhost/qms/v1 +paths: + 'Resource URI: {apiRoot}/subscriptions': + get: + summary: Retrieve information about a list of subscriptions. . + description: The GET method is used to retrieve information about a list of subscriptions. + operationId: 'Resource Uri: SubscriptionsGETApiroot' + tags: + - subscriptions + parameters: + - $ref: '#/components/parameters/Query.Subscriptionid' + - $ref: '#/components/parameters/Query.Subscriptiontype' + - name: apiRoot + in: path + required: true + description: The unique identifier of the apiRoot. + schema: + type: string + responses: + '200': + description: Upon success, a response body containing the list of links to requestor's subscriptions is returned. + content: + application/json: + schema: + type: object + properties: + NotificationSubscriptionList: + $ref: '#/components/schemas/NotificationSubscriptionList' + '400': + $ref: '#/components/responses/400' + '404': + $ref: '#/components/responses/404' + '403': + $ref: '#/components/responses/403' + '414': + $ref: '#/components/responses/414' + post: + summary: Create an individual subscription. + description: The POST method is used to create an individual subscription. + operationId: 'Resource Uri: SubscriptionsPOSTApiroot' + tags: + - subscriptions + requestBody: + description: 'The entity body in the request contains data type of QoS measurement subscription that is to be created, where the data type options are listed below and defined in clauses 6.3.2 and 6.3.3: + + QoSMeasureSubscription. + + QoSEventSubscription.' + content: + application/json: + schema: + type: object + properties: + QoSMeasureSubscription: + $ref: '#/components/schemas/QoSMeasureSubscription' + responses: + '201': + description: 'Indicates successful resource creation, where the resource URI shall be returned in the HTTP Location header field. + + In the returned NotificationSubscription structure, the created subscription is described using the appropriate data type from the list below and as defined in clauses 6.3.2 and 6.3.3: + + QoSMeasureSubscription. + + QoSEventSubscription.' + content: + application/json: + schema: + type: object + properties: + QoSMeasureSubscription: + $ref: '#/components/schemas/QoSMeasureSubscription' + '400': + $ref: '#/components/responses/400' + '404': + $ref: '#/components/responses/404' + '403': + $ref: '#/components/responses/403' + callbacks: + notification: + '{$request.body#/callbackUri}': + post: + summary: Callback POST used to send a notification + description: Subscription notification + operationId: notificationPOST875194 + requestBody: + description: Subscription notification + required: true + content: + application/json: + schema: + type: object + properties: + subscriptionNotification: + oneOf: + - $ref: '#/components/schemas/QoSMeasureSubscription' + - $ref: '#/components/schemas/QoSEventSubscription' + responses: + '204': + description: No content + '404': + description: Not found + parameters: + - name: apiRoot + in: path + required: true + description: The unique identifier of the apiRoot. + schema: + type: string + 'Resource URI: {apiRoot}/subscriptions/{subscriptionId}': + get: + summary: Retrieve information about a specific subscription. + description: The GET method is used to retrieve information about an individual subscription. + operationId: 'Resource Uri: SubscriptionsGETApirootSubscriptionid' + tags: + - subscriptions + responses: + '200': + description: 'Upon success, a response body containing data type describing the QoS measurement subscription is returned. The allowed data types for subscriptions are defined in clauses 6.3.2 and 6.3.3: + + QoSMeasureSubscription. + + QoSEventSubscription.' + content: + application/json: + schema: + type: object + properties: + QoSMeasureSubscription: + $ref: '#/components/schemas/QoSMeasureSubscription' + '400': + $ref: '#/components/responses/400' + '404': + $ref: '#/components/responses/404' + '403': + $ref: '#/components/responses/403' + parameters: + - name: apiRoot + in: path + required: true + description: The unique identifier of the apiRoot. + schema: + type: string + - name: subscriptionId + in: path + required: true + description: The unique identifier of the subscriptionId. + schema: + type: string + put: + summary: Modify the information about a specific subscription. + description: The PUT method is used to modify the information of an individual subscription. + operationId: 'Resource Uri: SubscriptionsPUTApirootSubscriptionid' + tags: + - subscriptions + requestBody: + description: 'New NotificationSubscription is included as entity body of the request. The allowed data types for subscriptions are defined in clauses 6.3.2 and 6.3.3: + + QoSMeasureSubscription. + + QoSEventSubscription.' + content: + application/json: + schema: + type: object + properties: + QoSMeasureSubscription: + $ref: '#/components/schemas/QoSMeasureSubscription' + responses: + '200': + description: 'Upon success, a response body containing data type describing the updated subscription is returned. The allowed data types for subscriptions are defined in clauses 6.3.2 and 6.3.3: + + QoSMeasureSubscription. + + QoSEventSubscription.' + content: + application/json: + schema: + type: object + properties: + QoSMeasureSubscription: + $ref: '#/components/schemas/QoSMeasureSubscription' + '400': + $ref: '#/components/responses/400' + '404': + $ref: '#/components/responses/404' + '403': + $ref: '#/components/responses/403' + '412': + $ref: '#/components/responses/412' + parameters: + - name: apiRoot + in: path + required: true + description: The unique identifier of the apiRoot. + schema: + type: string + - name: subscriptionId + in: path + required: true + description: The unique identifier of the subscriptionId. + schema: + type: string + delete: + summary: Delete a specific subscription. + description: The DELETE method is used to delete an individual subscription. + operationId: 'Resource Uri: SubscriptionsDELETEApirootSubscriptionid' + tags: + - subscriptions + responses: + '204': + $ref: '#/components/responses/204' + '404': + $ref: '#/components/responses/404' + '403': + $ref: '#/components/responses/403' + parameters: + - name: apiRoot + in: path + required: true + description: The unique identifier of the apiRoot. + schema: + type: string + - name: subscriptionId + in: path + required: true + description: The unique identifier of the subscriptionId. + schema: + type: string +components: + schemas: + ProblemDetails: + type: object + properties: + type: + type: string + format: uri + description: A URI reference according to IETF RFC 3986 that identifies the problem type + title: + type: string + description: A short, human-readable summary of the problem type + status: + type: integer + format: uint32 + description: The HTTP status code for this occurrence of the problem + detail: + type: string + description: A human-readable explanation specific to this occurrence of the problem + instance: + type: string + format: uri + description: A URI reference that identifies the specific occurrence of the problem + SerializerType: + x-etsi-ref: 8.1.6.3 + type: string + enum: + - JSON + - XML + - PROTOBUF3 + x-etsi-mec-extensible: true + x-etsi-mec-enumeration-table: + - value: JSON + description: Javascript object notation [9] + - value: XML + description: eXtensible Mark-up Language version 1.1 [10] + - value: PROTOBUF3 + description: Protocol buffers version 3 [i.3] + NotificationSubscriptionList: + x-etsi-ref: 6.3.1 + type: object + properties: + subscription: + type: array + items: + $ref: '#/components/schemas/Subscription1' + resourceURL: + description: Self-referring URL. + $ref: '#/components/schemas/LinkType' + required: + - resourceURL + QoSMeasureSubscription: + x-etsi-ref: 6.3.2 + type: object + properties: + subscriptionType: + description: Shall be set to "QoSMeasureSubscription". + type: string + callbackReference: + description: URI exposed by the client on which to receive notifications via HTTP. See note 1. + type: string + format: uri + requestTestNotification: + description: "Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS\_MEC 009 [2], clause 6.12a." + type: boolean + websockNotifConfig: + description: Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications. See note 1. + $ref: '#/components/schemas/WebsockNotifConfig' + _links: + $ref: '#/components/schemas/_links5' + users: + description: 'Address of user (e.g. ''sip'' URI, ''tel'' URI, ''acr'' URI). + + See note 2.' + type: array + format: uri + minItems: 0 + items: + $ref: '#/components/schemas/Uri' + flowInfo: + type: array + items: + $ref: '#/components/schemas/FlowInfo' + numberOfReports: + description: 'If not present, the subscription is active until it is actively terminated via HTTP DELETE. + + If present, it determines the number of reports to be sent until the subscription gets automatically terminated.' + type: integer + format: uint32 + reportingInterval: + description: 'The reportingInterval determines the interval between two contiguous reports. + + The unit is second.' + type: integer + format: uint32 + measuringPeriod: + description: "It determines measuring frequency. \nThe measuringPeriod shall be less than or equal to reportingInterval.\nThe unit is second. " + type: integer + format: uint32 + measuringArea: + type: array + items: + $ref: '#/components/schemas/MeasuringArea' + measuringTime: + type: array + items: + $ref: '#/components/schemas/MeasuringTime' + metricType: + description: The expected measuring result type. + type: array + minItems: 1 + items: + $ref: '#/components/schemas/MetricType' + expiryDeadline: + description: The expiration time of the subscription determined by the QoS Measurement Subscribe Service. + $ref: '#/components/schemas/TimeStamp' + required: + - subscriptionType + - measuringPeriod + - metricType + description: "|-\n NOTE 1: \tAt least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to location server to select an alternative and return only that alternative in the response, as specified in ETSI GS MEC 009 [2], clause 6.12a.\nNOTE 2:\tAt least one of users and flowInfo shall be provided by the service consumer.\nNOTE 3:\tAs specified in [3], clause 5.2.2.7." + QoSEventSubscription: + x-etsi-ref: 6.3.3 + type: object + properties: + subscriptionType: + description: Shall be set to "QoSEventSubscription". + type: string + callbackReference: + description: URI exposed by the client on which to receive notifications via HTTP. See note 1. + type: string + format: uri + requestTestNotification: + description: "Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS\_MEC 009 [2], clause 6.12a." + type: boolean + websockNotifConfig: + description: Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications. See note 1. + $ref: '#/components/schemas/WebsockNotifConfig' + _links: + $ref: '#/components/schemas/_links5' + users: + description: 'Address of user (e.g. ''sip'' URI, ''tel'' URI, ''acr'' URI). + + See note 2.' + type: array + format: uri + minItems: 0 + items: + $ref: '#/components/schemas/Uri' + flowFilter: + type: array + items: + $ref: '#/components/schemas/FlowFilter1' + reportTrigger: + type: array + items: + $ref: '#/components/schemas/ReportTrigger' + reportingCtrl: + description: Provides parameters that ctrl the reporting. + $ref: '#/components/schemas/ReportingCtrl' + measuringPeriod: + description: "It determines measuring frequency. \nThe unit is second. " + type: integer + format: uint32 + monitoringArea: + type: array + items: + $ref: '#/components/schemas/MonitoringArea' + monitoringTime: + type: array + items: + $ref: '#/components/schemas/MonitoringTime' + expiryDeadline: + description: The expiration time of the subscription determined by the QoS Measurement Subscribe Service. + $ref: '#/components/schemas/TimeStamp' + required: + - subscriptionType + - reportTrigger + - measuringPeriod + description: "|-\n NOTE 1: \tAt least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to location server to select an alternative and return only that alternative in the response, as specified in ETSI GS MEC 009 [2], clause 6.12a.\nNOTE 2:\tAt least one of users and flowFilter shall be provided by the service consumer.\nNOTE 3:\tAs specified in [3], clause 5.2.2.7." + TestNotification: + x-etsi-ref: 6.4.1 + type: object + properties: + notificationType: + description: Shall be set to "TestNotification". + type: string + _links: + $ref: '#/components/schemas/_links4' + required: + - notificationType + - _links + QoSMeasureNotification: + x-etsi-ref: 6.4.2 + type: object + properties: + notificationType: + description: Shall be set to "QoSMeasureNotification". + type: string + timeStamp: + description: Time stamp. + $ref: '#/components/schemas/TimeStamp' + subscriptionState: + type: string + enum: + - SEE_DESCRIPTION + description: 'It shall be absent if the related subscription has no numberOfReports attribute, and shall be present otherwise. + + ACTIVE: the subscription is active. + + FINISHED: This is the last report and the subscription is subject to automatic termination.' + qoSMeasureResult: + type: array + items: + $ref: '#/components/schemas/QoSMeasureResult' + _links: + $ref: '#/components/schemas/_links6' + required: + - notificationType + - _links + description: "|-\n NOTE 1:\tThe attributes of latency, jitter, throughput, loss_rate, and error_rate should be present according to corresponding subscription.\nNOTE 2:\tAs specified in [3], clause 5.2.2.7." + QoSEventNotification: + x-etsi-ref: 6.4.3 + type: object + properties: + notificationType: + description: Shall be set to "QoSEventNotification". + type: string + timeStamp: + description: Time stamp. + $ref: '#/components/schemas/TimeStamp' + subscriptionState: + type: string + enum: + - SEE_DESCRIPTION + description: 'It shall be absent if the related subscription has no numberOfReports attribute, and shall be present otherwise. + + ACTIVE: The subscription is active. + + FINISHED: This is the last report and the subscription is subject to automatic termination.' + user: + description: Address of user (e.g. 'sip' URI, 'tel' URI, 'acr' URI). Present if user has been provided in subscription. + type: string + format: uri + flow: + $ref: '#/components/schemas/Flow1' + metricType: + description: The monitoring metric type. + $ref: '#/components/schemas/MetricType' + qosEvent: + description: The reporting event. + $ref: '#/components/schemas/QoSEvent' + measuringArea: + $ref: '#/components/schemas/MeasuringArea2' + _links: + $ref: '#/components/schemas/_links6' + required: + - notificationType + - flow + - metricType + - qosEvent + - _links + description: "|-\n NOTE 1:\tThe attributes of latency, jitter, throughput, loss_rate, and error_rate should be present according to corresponding subscription.\nNOTE 2:\tAs specified in [3], clause 5.2.2.7." + WebsockNotifConfig: + x-etsi-ref: 6.5.2 + type: object + properties: + websocketUri: + description: Set by location server to indicate to the service consumer the Websocket URI to be used for delivering notifications. + type: string + format: uri + requestWebsocketUri: + description: Set to true by the service consumer to indicate that Websocket delivery is requested. + type: boolean + AreaInfo: + x-etsi-ref: 6.5.3 + type: object + properties: + shape: + type: integer + enum: + - 1 + - 2 + description: 'The shape of the area monitored: + + 1 = CIRCLE. + + 2 = POLYGON.' + points: + description: Shall include one point if the shape is CIRCLE. Shall include 3-15 points if the shape is POLYGON. + type: array + minItems: 1 + items: + $ref: '#/components/schemas/Point' + radius: + description: Shall be present if the shape is CIRCLE. + type: integer + required: + - shape + - points + Point: + x-etsi-ref: 6.5.4 + type: object + properties: + latitude: + description: "Location latitude, expressed in the range -90\xB0 to +90\xB0." + type: number + format: float + longitude: + description: "Location longitude, expressed in the range -180\xB0 to +180\xB0." + type: number + format: float + required: + - latitude + - longitude + TimeStamp: + x-etsi-ref: 6.5.5 + type: object + properties: + seconds: + description: 'The seconds part of the time. Time is defined as + + Unix-time since January 1, 1970, 00:00:00 UTC.' + type: integer + format: uint32 + nanoSeconds: + description: 'The nanoseconds part of the time. Time is defined as + + Unix-time since January 1, 1970, 00:00:00 UTC.' + type: integer + format: uint32 + required: + - seconds + - nanoSeconds + ReportingCtrl: + x-etsi-ref: 6.5.6 + type: object + properties: + minimumInterval: + description: Minimum interval between reports in case frequently reporting. Unit is second. + type: integer + maximumFrequency: + description: Maximum frequency (in seconds) of notifications per subscription. + type: integer + maximumCount: + description: Maximum number of notifications. For no maximum, either do not include this element or specify a value of zero. Default value is 0. + type: integer + LinkType: + x-etsi-ref: 6.6.2 + type: object + properties: + href: + description: URI referring to a resource. + type: string + format: uri + required: + - href + ServiceConsumerId: + description: The identifier of service consumer requesting the Application Mobility Service, i.e. either the application instance ID or the MEC platform ID. + type: object + properties: + appInstanceId: + description: If present, it represents the identifier of the application instance registering the Application Mobility Service. + type: string + mepId: + description: If present, it represents the identifier of the MEC platform registering the Application Mobility Service. + type: string + DeviceInformation: + description: 'If present, it specifies the device served by the application instance which is registering the Application Mobility Service. ' + type: object + properties: + associateId: + description: Represents the identifier of the device. See note. + $ref: '#/components/schemas/AssociateId' + appMobilityServiceLevel: + description: If the application is stateful, this attribute shall be included. + $ref: '#/components/schemas/AppMobilityServiceLevel' + contextTransferState: + type: integer + enum: + - 0 + - 1 + description: 'If present, it represents the state of transferring the user context to another application instance. The applicable values of this attribute are: + + 0 = NOT_TRANSFERRED (default value) + + 1 = USER_CONTEXT_TRANSFER_COMPLETED + + In the initial application mobility registration, this attribute shall be set to the default value.' + required: + - associateId + _links: + description: Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. + type: object + properties: + self: + description: Self-referring URI. The URI shall be unique within the AMS API as it acts as an ID for the subscription. + $ref: '#/components/schemas/LinkType' + required: + - self + FilterCriteria: + description: List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response. + type: object + properties: + appInstanceId: + description: Identifier of the application instance that registers the Application Mobility Service. + type: string + associateId: + description: 0 to N identifiers to associate the information for specific UE(s) and flow(s). + type: array + minItems: 0 + items: + $ref: '#/components/schemas/AssociateId' + mobilityStatus: + description: 'In case mobilityStatus is not included in the subscription request, the default value 1 = INTER_HOST_MOBILITY_TRIGGERED shall be used and included in the response. + + 1 = INTERHOST_MOVEOUT_TRIGGERED. + + 2 = INTERHOST_MOVEOUT_COMPLETED. + + 3 = INTERHOST_MOVEOUT_FAILED.' + type: array + minItems: 0 + items: + type: integer + FilterCriteria1: + description: List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response. + type: object + properties: + appInstanceId: + description: Identifier of the application instance that registers to the Application Mobility Service. + type: string + Subscription: + description: The service consumer's subscriptions. + type: object + properties: + href: + description: The URI referring to the subscription. + type: string + format: uri + subscriptionType: + description: "Type of the subscription. The string shall be set according to the \"subscriptionType\" attribute of the associated subscription data type defined in clauses\_7.3.2 and 7.3.3:\n\"MobilityProcedureSubscription\"\n\"AdjacentAppInfoSubscription\"" + type: string + required: + - href + - subscriptionType + _links1: + description: Hyperlinks related to the resource. + type: object + properties: + self: + description: URI of this resource. + $ref: '#/components/schemas/LinkType' + subscription: + type: array + items: + $ref: '#/components/schemas/Subscription' + required: + - self + TargetAppInfo: + description: Identifiers to associate the information of target application instance. + type: object + properties: + appInstanceId: + description: Identifiers of the target application instance. + type: string + commInterface: + description: If present, it specifies the communication interface of the application instance. + $ref: '#/components/schemas/CommunicationInterface' + required: + - appInstanceId + _links2: + description: Object containing hyperlinks related to the resource. + type: object + properties: + subscription: + description: Link to the related subscription. + $ref: '#/components/schemas/LinkType' + required: + - subscription + _links3: + description: Object containing hyperlinks related to the resource. + type: object + properties: + subscription: + description: Link to the expired subscription. + $ref: '#/components/schemas/LinkType' + required: + - subscription + _links4: + description: 'Hyperlink related to the resource. ' + type: object + properties: + subscription: + description: URI identifying the subscription for the test notification. + $ref: '#/components/schemas/LinkType' + required: + - subscription + IpAddresses: + description: Entry point information of the service as one or more pairs of IP address and port. + type: object + properties: + host: + description: Host portion of the address. + type: string + port: + description: Port portion of the address. + type: integer + required: + - host + - port + Subscription1: + description: '' + type: object + properties: + href: + description: The URI referring to the subscription. + type: string + format: uri + subscriptionType: + description: 'Type of the subscription. The string shall be set according to the "subscriptionType" attribute of the associated subscription data type defined in clauses 6.3.2 and 6.3.3: + + "QoSMeasureSubscription". + + "QoSEventSubscription".' + type: string + required: + - href + - subscriptionType + _links5: + description: Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. + type: object + properties: + self: + description: Self-referring URI. The URI shall be unique within the QoS measurement Subscribe as it acts as an ID for the subscription. + $ref: '#/components/schemas/LinkType' + required: + - self + FlowFilter: + description: Traffic flow filtering criteria. If the flowFilter field is included, at least one of its subfields shall be included. Any flowFilter subfield that is not included shall be ignored in traffic flow filtering. + type: object + properties: + sourceIp: + description: Source address identity of measured flow (including range). + type: string + sourcePort: + description: Source port identity of measured flow. + type: array + format: uint32 + minItems: 0 + items: + $ref: '#/components/schemas/Uint32' + dstIp: + description: Destination address identity of measured flow (including range). + type: string + dstPort: + description: Destination port identity of measured flow. + type: array + format: uint32 + minItems: 0 + items: + $ref: '#/components/schemas/Uint32' + protocol: + description: Protocol number. + type: integer + format: uint32 + dscp: + description: DSCP in the IPv4 header or Traffic Class in the IPv6 header. + type: integer + format: uint32 + flowlabel: + description: Flow Label in the IPv6 header, applicable only if the flow is IPv6. + type: integer + format: uint32 + FlowInfo: + description: 'The information of the measured flows. + + See note 2.' + type: object + properties: + samplingRate: + description: 'The sampling rate determines the proportion of flows that meet the flowFilter to be measured. If not present, all the flows that meet the flowFilter need to be measured. + + The value should be an integer from 1 to 100. If half of the qualified flows need to be measured, the value should be set to 50.' + type: integer + format: uint32 + flowFilter: + $ref: '#/components/schemas/FlowFilter' + required: + - flowFilter + MeasuringArea: + description: Area constraint for the measuring task. Traffic of users entering the area will be measured. + type: object + properties: + areaInfo: + description: It describes the measured area. It shall be present if accessPointId and zoneId are not present. + $ref: '#/components/schemas/AreaInfo' + accessPointId: + description: The identity of the access point the user is currently on, see note 3. + type: string + zoneId: + description: The identity of the zone the user is currently within, see note 3. + type: string + MeasuringTime: + description: 'Time constraint for the measuring task. If present, the monitoring task is working only at this specific time section. + + The time section of [startTime, endTime] may across the midnight.' + type: object + properties: + startTime: + description: The format is a string representing the hour, and the minute in a day, like "14:30". + type: string + endTime: + description: The format is a string representing the hour, and the minute in a day, like "14:30". + type: string + required: + - startTime + - endTime + FlowFilter1: + description: 'Traffic flow filtering criteria. If the flowFilter field is included, at least one of its subfields shall be included. Any flowFilter subfield that is not included shall be ignored in traffic flow filtering. + + See note 2.' + type: object + properties: + sourceIp: + description: Source address identity of measured flow (including range). + type: string + sourcePort: + description: Source port identity of measured flow + type: array + format: uint32 + minItems: 0 + items: + $ref: '#/components/schemas/Uint32' + dstIp: + description: Destination address identity of measured flow (including range). + type: string + dstPort: + description: Destination port identity of measured flow. + type: array + format: uint32 + minItems: 0 + items: + $ref: '#/components/schemas/Uint32' + protocol: + description: Protocol number. + type: integer + format: uint32 + dscp: + description: DSCP in the IPv4 header or Traffic Class in the IPv6 header. + type: integer + format: uint32 + flowlabel: + description: Flow Label in the IPv6 header, applicable only if the flow is IPv6. + type: integer + format: uint32 + ReportTrigger: + description: The trigger leading to the notification. + type: object + properties: + metricType: + description: The monitoring metric type. + $ref: '#/components/schemas/MetricType' + upperThreshold: + description: Threshold which if crossed upward shall cause a notification. + type: integer + format: uint32 + lowerThreshold: + description: Threshold which if crossed downward shall cause a notification. + type: integer + format: uint32 + required: + - metricType + MonitoringArea: + description: 'Area constraint for the monitoring task. ' + type: object + properties: + areaInfo: + description: It describes the measured area. It shall be present if accessPointId and zoneId are not present. + $ref: '#/components/schemas/AreaInfo' + accessPointId: + description: The identity of the access point the user is currently on, see note 3. + type: string + zoneId: + description: The identity of the zone the user is currently within, see note 3. + type: string + MonitoringTime: + description: 'Time in a day for the monitoring task. If present, the monitoring task is working only at this specific time section. + + The time section of [startTime, endTime] may across the midnight.' + type: object + properties: + startTime: + description: The format is a string representing the hour, and the minute in a day, like "14:30". + type: string + endTime: + description: The format is a string representing the hour, and the minute in a day, like "14:30". + type: string + required: + - startTime + - endTime + Flow: + description: Flow information. + type: object + properties: + sourceIp: + description: Source address identity. + type: string + sourcePort: + description: Source port identity. + type: integer + format: uint32 + dstIp: + description: Destination address identity. + type: string + dstPort: + description: Destination port identity. + type: integer + format: uint32 + protocol: + description: Protocol number. + type: integer + format: uint32 + dscp: + description: DSCP in the IPv4 header or Traffic Class in the IPv6 header. + type: integer + format: uint32 + flowlabel: + description: Flow Label in the IPv6 header, applicable only if the flow is IPv6 + type: integer + format: uint32 + required: + - sourceIp + - sourcePort + - dstIp + - dstPort + MeasuringArea1: + description: The area information for measurement reporting. + type: object + properties: + areaInfo: + description: It shall be present if accessPointId and zoneId are not present. + $ref: '#/components/schemas/AreaInfo' + accessPointId: + description: The identity of the access point which the user is currently on, see note 2. + type: string + zoneId: + description: The identity of the zone which the user is currently within, see note 2. + type: string + MeasuringTime1: + description: The time section for measurement reporting. + type: object + properties: + startTime: + description: Start time for measurement. + $ref: '#/components/schemas/TimeStamp' + endTime: + description: End time for measurement. + $ref: '#/components/schemas/TimeStamp' + required: + - startTime + - endTime + QoSMeasureResult: + description: The QoS measuring result. + type: object + properties: + user: + description: Address of user (e.g. 'sip' URI, 'tel' URI, 'acr' URI). Present if user has been provided in subscription. + type: string + format: uri + flow: + $ref: '#/components/schemas/Flow' + measuringArea: + $ref: '#/components/schemas/MeasuringArea1' + measuringTime: + $ref: '#/components/schemas/MeasuringTime1' + latency: + description: See note 1. The Unit is millisecond. + type: integer + format: uint32 + jitter: + description: See note 1. The Unit is millisecond. + type: integer + format: uint32 + throughput: + description: See note 1. The Unit is kbit/s. + type: integer + format: uint64 + loss_rate: + description: See note 1. The integer represents percent. + type: integer + format: uint32 + error_rate: + description: See note 1. The integer represents percent. + type: integer + format: uint32 + required: + - flow + _links6: + description: Object containing hyperlinks related to the resource. + type: object + properties: + subscription: + description: A link to the related subscription. + $ref: '#/components/schemas/LinkType' + required: + - subscription + Flow1: + description: Flow information. + type: object + properties: + sourceIp: + description: Source address identity. + type: string + sourcePort: + description: Source port identity. + type: integer + format: uint32 + dstIp: + description: Destination address identity. + type: string + dstPort: + description: Destination port identity. + type: integer + format: uint32 + protocol: + description: Protocol number. + type: integer + format: uint32 + dscp: + description: DSCP in the IPv4 header or Traffic Class in the IPv6 header. + type: integer + format: uint32 + flowlabel: + description: Flow Label in the IPv6 header, applicable only if the flow is IPv6. + type: integer + format: uint32 + required: + - sourceIp + - sourcePort + - dstIp + - dstPort + MeasuringArea2: + description: The area information for event reporting. + type: object + properties: + areaInfo: + description: It shall be present if accessPointId and zoneId are not present. + $ref: '#/components/schemas/AreaInfo' + accessPointId: + description: The identity of the access point which the user is currently on, see note 2. + type: string + zoneId: + description: The identity of the zone which the user is currently within, see note 2. + type: string + responses: + '200': + description: OK + '204': + description: No Content + '400': + description: 'Bad Request: used to indicate that incorrect parameters were passed to the request.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + '401': + description: 'Unauthorized: used when the client did not submit credentials.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + '403': + description: 'Forbidden: operation is not allowed given the current status of the resource.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + '404': + description: 'Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + '406': + description: 'Not Acceptable: used to indicate that the server cannot provide the any of the content formats supported by the client.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + '412': + description: 'Precondition failed: used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts when using PUT' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + '415': + description: 'Unsupported Media Type: used to indicate that the server or the client does not support the content type of the entity body.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + '422': + description: 'Unprocessable Entity: used to indicate that the server understands the content type of the request entity and that the syntax of the request entity is correct but that the server is unable to process the contained instructions. This error condition can occur if an JSON request body is syntactically correct but semantically incorrect, for example if the target area for the request is considered too large. This error condition can also occur if the capabilities required by the request are not supported.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + '429': + description: 'Too Many Requests: used when a rate limiter has triggered.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + parameters: + Query.Subscriptionid: + description: Multiple subscriptionId may be used as an input parameter to query a list of subscriptions. + name: subscriptionid + in: query + required: false + x-exportParamName: Query.Subscriptionid + schema: + type: array + items: + type: string + Query.Subscriptiontype: + description: subscriptionType may be used as an input parameter to query the availability of a list of subscriptions. + name: subscriptiontype + in: query + required: false + x-exportParamName: Query.Subscriptiontype + schema: + type: string + diff --git a/config/api/sss-api.yaml b/config/api/sss-api.yaml new file mode 100644 index 0000000000000000000000000000000000000000..fc04e6517e0e0be8a43179bb3422db69033c1feb --- /dev/null +++ b/config/api/sss-api.yaml @@ -0,0 +1,1259 @@ +openapi: 3.0.0 +info: + title: ETSI GS MEC 046 Sensors Sharing Service APIs + description: GS MEC 046 Sensors Sharing Service APIs described using OpenAPI. + contact: + name: ETSI Forge + url: https://forge.etsi.org/rep/mec/gs046-ss-api + email: cti_support@etsi.org + license: + name: BSD-3-Clause + url: https://forge.etsi.org/legal-matters + version: 3.1.1 +externalDocs: + description: "GS MEC 046 Sensors Sharing Service APIs, v3.3.1" + url: https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_mec046v030101p.pdf +servers: +- url: https://localhost/sandboxname/sens/v1 +tags: +- name: sensor-discovery-lookup + description: The Sensor Discovery Lookup is the procedure for applications acquiring the sensor(s) currently available and the related characteristics +- name: sensor-discovery-subscription + description: The Sensor Discovery Subscription is the procedure for applications to request to receive notifications about sensors when sensor information changes +- name: sensor-status-lookup + description: The Sensor Status Lookup is the procedure for applications acquiring the status (e.g. active or error state) of sensor(s) +- name: sensor-status-subscription + description: The Sensor Status Subscription is the procedure for applications to request to receive notifications about sensors when they change their status +- name: sensor-data-lookup + description: The Sensor Data Lookup is the procedure for applications to acquire the last data collected by the sensor(s) +- name: sensor-data-subscription + description: The Sensor Data Subscription is the procedure for applications to request to receive notifications every time new data are collected from the sensor(s) +- name: sensor-management + description: The Sensor Management is the procedure for a MEC application to configure specific parameter(s) on the sensor(s) +paths: + /queries/sensor_discovery: + get: + tags: + - sensor-discovery-lookup + summary: The GET method is used to query the available sensors + description: This method shall support the URI query parameters, request and response data structures, and response codes, as specified in Tables 7.3.3.1-1 and 7.3.3.1-2. + operationId: SensorDiscoveryLookupGET + parameters: + - name: sensorInfo + in: query + description: Object containing the characteristics of the sensor(s) to be selected for the query + required: false + style: form + explode: true + schema: + $ref: '#/components/schemas/SensorInfo' + responses: + "200": + description: "Upon success, a response body containing the available sensors is returned" + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SensorDiscoveryInfo' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /subscriptions/sensor_discovery: + get: + tags: + - sensor-discovery-subscription + summary: The GET method is used to request information about the subscriptions related to sensor discovery for this requestor + description: This method shall support the URI query parameter, request and response data structures, and response codes, as specified in Tables 7.4.3.1-1 and 7.4.3.1-2. + operationId: SensorDiscoverySubscriptionGET + parameters: + - name: sensorIdentifier + in: query + description: Object containing the characteristics of the sensor(s) to be selected for the query + required: false + style: form + explode: true + schema: + type: "string" + responses: + "200": + description: "Upon success, a response body containing the list of links to requestor's sensor discovery subscriptions is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SubscriptionLinkList' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + post: + tags: + - sensor-discovery-subscription + summary: The POST method is used to create a new subscription to sensor discovery notifications + description: This method shall support the request and response data structures, and response codes, as specified in Table 7.4.3.4-1 + operationId: SensorDiscoverySubscriptionPOST + requestBody: + description: "This type represents a subscription to notifications from the Sensor-sharing Service regarding events related to changes in sensor information" + required: true + content: + application/json: + schema: + type: object + properties: + SensorDiscoveryEventSubscription: + $ref: '#/components/schemas/SensorDiscoveryEventSubscription' + responses: + "201": + description: "Indicates successful resource creation, where the resource URI shall be returned in the HTTP Location header field" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SensorDiscoveryEventSubscription' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /subscriptions/sensor_discovery/{subscriptionId}: + get: + tags: + - sensor-discovery-subscription + summary: The GET method is used to request information about the subscriptions related to sensor status for this requestor + description: This method shall support the URI query parameter, request and response data structures, and response codes, as specified in Tables 7.7.3.1-1 and 7.7.3.1-2. + operationId: SensorDiscoveryIndividualSubscriptionGET + parameters: + - name: subscriptionId + in: path + description: Unique identifiers of the subscription + required: true + style: simple + schema: + type: string + responses: + "200": + description: "Upon success, a response body containing the list of links to requestor's sensor status subscriptions is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SubscriptionLinkList' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + put: + tags: + - sensor-discovery-subscription + summary: The POST method is used to create a new subscription to sensor discovery notifications + description: This method shall support the request and response data structures, and response codes, as specified in Table 7.4.3.4-1 + operationId: SensorDiscoverySubscriptionPUT + parameters: + - name: subscriptionId + in: path + description: It uniquely identifies the created individual application mobility service + required: true + style: simple + schema: + type: string + requestBody: + description: "New SensorDiscoveryEventSubscription is included as entity body of the request" + required: true + content: + application/json: + schema: + type: object + properties: + SensorDiscoveryEventSubscription: + $ref: '#/components/schemas/SensorDiscoveryEventSubscription' + responses: + "200": + description: "Upon success, a response body containing data type describing the updated sensor discovery subscription is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SubscriptionLinkList' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + delete: + tags: + - sensor-discovery-subscription + summary: The DELETE method is used to cancel the existing subscription. Cancellation can be made by deleting the resource that represents existing sensor discovery subscription + description: This method shall support the request and response data structures, and response codes, as specified in Tables 7.5.3.5-1 and 7.5.3.5-2 + operationId: SensorDiscoverySubscriptionDELETE + parameters: + - name: subscriptionId + in: path + description: It uniquely identifies the created individual application mobility service + required: true + style: simple + schema: + type: string + responses: + "204": + description: "Upon success, a response 204 No Content without any response body is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SubscriptionLinkList' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /queries/sensor_status: + get: + tags: + - sensor-status-lookup + summary: The GET method is used to query the available status + description: This method shall support the URI query parameters, request and response data structures, and response codes, as specified in Tables 7.6.3.1-1 and 7.6.3.1-2 + operationId: SensorStatusLookupGET + parameters: + - name: sensorIdentifier + in: query + description: It uniquely identifies the created individual application mobility service + required: true + style: form + schema: + type: array + items: + type: string + responses: + "200": + description: "Upon success, a response body containing the status information of specific sensors is returned" + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SensorStatusInfo' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /subscriptions/sensor_status: + get: + tags: + - sensor-status-subscription + summary: The GET method is used to request information about the subscriptions related to sensor status for this requestor + description: This method shall support the URI query parameter, request and response data structures, and response codes, as specified in Tables 7.7.3.1-1 and 7.7.3.1-2 + operationId: SensorStatusSubscriptionGET + parameters: + - name: sensorIdentifier + in: query + description: Unique identifiers of the sensors + required: false + style: form + schema: + type: array + items: + type: string + responses: + "200": + description: "Upon success, a response body containing the list of links to requestor's sensor status subscriptions is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SubscriptionLinkList' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + post: + tags: + - status-status-subscription + summary: The POST method is used to create a new subscription to sensor status notifications + description: This method shall support the request and response data structures, and response codes, as specified in Table 7.7.3.4-1 + operationId: SensorStatusSubscriptionPOST + requestBody: + description: "The entity body in the request contains data type of the specific sensor status subscription that is to be created" + required: true + content: + application/json: + schema: + type: object + properties: + SensorStatusSubscription: + $ref: '#/components/schemas/SensorStatusSubscription' + responses: + "201": + description: "Indicates successful resource creation, where the resource URI shall be returned in the HTTP Location header field." + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SensorStatusSubscription' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /subscriptions/sensor_status/{subscriptionId}: + get: + tags: + - sensor-status-subscription + summary: The GET method is used to retrieve information about this subscription + description: This method shall support the request and response data structures, and response codes, as specified in Tables 7.8.3.1-1 and 7.8.3.1-2 + operationId: SensorStatusIndividualSubscriptionGET + parameters: + - name: subscriptionId + in: path + description: Unique identifiers of the subscription + required: true + style: simple + schema: + type: string + responses: + "200": + description: "Upon success, a response body containing data type describing the specific sensor status subscription is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SensorStatusSubscription' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + put: + tags: + - sensor-status-subscription + summary: The PUT method is used to update the existing subscription + description: This method shall support the URI query parameters, request and response data structures, and response codes, as specified in Tables 7.8.3.2-1 and 7.8.3.2-2 + operationId: SensorStatusSubscriptionPUT + parameters: + - name: subscriptionId + in: path + description: It uniquely identifies the created individual application mobility service + required: true + style: simple + schema: + type: string + requestBody: + description: "New SensorStatusSubscription is included as entity body of the request" + required: true + content: + application/json: + schema: + type: object + properties: + SensorStatusSubscription: + $ref: '#/components/schemas/SensorStatusSubscription' + responses: + "200": + description: "Upon success, a response body containing data type describing the updated sensor status subscription is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SensorStatusSubscription' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + delete: + tags: + - sensor-status-subscription + summary: The DELETE method is used to cancel the existing subscription + description: This method shall support the request and response data structures, and response codes, as specified in Tables 7.8.3.5-1 and 7.8.3.5-2 + operationId: SensorStatusSubscriptionDELETE + parameters: + - name: subscriptionId + in: path + description: It uniquely identifies a subscription + required: true + style: simple + schema: + type: string + responses: + "204": + description: "Upon success, a response 204 No Content without any response body is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SubscriptionLinkList' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /queries/sensor_data: + get: + tags: + - sensor-data-lookup + summary: The GET method is used to query the last sensor data from specific sensors + description: This method shall support the URI query parameters, request and response data structures, and response codes, as specified in Tables 7.9.3.1-1 and 7.9.3.1-2 + operationId: SensorDataLookupGET + parameters: + - name: sensorIdentifier + in: query + description: It uniquely identifies the created individual application mobility service + required: true + style: form + schema: + type: array + items: + type: string + responses: + "200": + description: "Upon success, a response body containing the last sensor data measured by the sensors is returned" + content: + application/json: + schema: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/SensorData' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /subscriptions/sensor_data: + get: + tags: + - sensor-data-subscription + summary: The GET method is used to request information about the subscriptions related to sensor data for this requestor + description: This method shall support the URI query parameter, request and response data structures, and response codes, as specified in Tables 7.10.3.1-1 and 7.10.3.1-2 + operationId: SensorDataSubscriptionGET + parameters: + - name: sensorIdentifier + in: query + description: Unique identifiers of the sensors + required: true + style: form + schema: + type: array + items: + type: string + responses: + "200": + description: "Upon success, a response body containing the list of links to requestor's sensor status subscriptions is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SubscriptionLinkList' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + post: + tags: + - sensor-data-subscription + summary: The POST method is used to create a new subscription to sensor status notifications + description: This method shall support the request and response data structures, and response codes, as specified in Table 7.7.3.4-1 + operationId: SensorDataSubscriptionPOST + requestBody: + description: "The entity body in the request contains data type of the specific sensor status subscription that is to be created" + required: true + content: + application/json: + schema: + type: object + properties: + SensorDataSubscription: + $ref: '#/components/schemas/SensorDataSubscription' + responses: + "201": + description: "Indicates successful resource creation, where the resource URI shall be returned in the HTTP Location header field." + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SensorDataSubscription' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /queries/sensor_data/{subscriptionId}: + get: + tags: + - sensor-data-subscription + summary: The GET method is used to retrieve information about this subscription + description: This method shall support the request and response data structures, and response codes, as specified in Tables 7.11.3.1-1 and 7.11.3.1-2 + operationId: SensorDataIndividualSubscriptionGET + parameters: + - name: subscriptionId + in: path + description: Unique identifiers of a subscription + required: true + style: simple + schema: + type: string + responses: + "200": + description: "Upon success, a response body containing data type describing the specific sensor data subscription is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SensorDataSubscription' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + put: + tags: + - sensor-data-subscription + summary: The PUT method is used to update the existing subscription + description: This method shall support the URI query parameters, request and response data structures, and response codes, as specified in Tables 7.11.3.2-1 and 7.11.3.2-2 + operationId: SensorDataSubscriptionPUT + parameters: + - name: subscriptionId + in: path + description: Unique identifiers of a subscription + required: true + style: simple + schema: + type: string + requestBody: + description: "New SensorDataSubscription is included as entity body of the request" + required: true + content: + application/json: + schema: + type: object + properties: + SensorDataSubscription: + $ref: '#/components/schemas/SensorDataSubscription' + responses: + "200": + description: "Upon success, a response body containing data type describing the updated sensor data subscription is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SensorDataSubscription' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + delete: + tags: + - sensor-data-subscription + summary: The DELETE method is used to cancel the existing subscription + description: This method shall support the request and response data structures, and response codes, as specified in Tables 7.11.3.5-1 and 7.11.3.5-2 + operationId: SensorDataSubscriptionDELETE + parameters: + - name: subscriptionId + in: path + description: It uniquely identifies a subscription + required: true + style: simple + schema: + type: string + responses: + "204": + description: "Upon success, a response 204 No Content without any response body is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SubscriptionLinkList' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + /sensor_management: + get: + tags: + - sensor-management + summary: The GET method is used to receive the sensor characteristics that can be modified on specific sensors + description: This method shall support the URI query parameters, request and response data structures, and response codes, as specified in Tables 7.12.3.1-1 and 7.12.3.1-2 + operationId: SensorMgmtGET + parameters: + - name: sensorIdentifier + in: query + description: It uniquely identifies the created individual application mobility service + required: true + style: form + schema: + type: array + items: + type: string + responses: + "200": + description: "Upon success, a response body containing the characteristics that can be set on the specific sensors are returned" + content: + application/json: + schema: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/SensorCharacteristic' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + put: + tags: + - management + summary: The PUT method is used to update the value of the characteristics that can be set on a sensor or on a group of sensors + description: This method shall support the URI query parameters, request and response data structures, and response codes, as specified in Tables 7.12.3.2-1 and 7.12.3.2-2 + operationId: SensorMgmtPUT + requestBody: + description: "The list of sensor characteristics to be updated, with the new values to set, is included as entity body of the request" + required: true + content: + application/json: + schema: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/SensorCharacteristic' + responses: + "200": + description: "Upon success, a response body containing data type describing the updated sensor characteristics is returned" + content: + application/json: + schema: + type: object + items: + $ref: '#/components/schemas/SensorCharacteristic' + "400": + description: "Bad Request: used to indicate that incorrect parameters were passed to the request" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found: used when a client provided a URI that cannot be mapped to a valid resource URI" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden: operation is not allowed given the current status of the resource" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' +components: + schemas: + SensorStatusInfo: + type: "object" + required: + - sensorIdentifier + - sensorStatusType + properties: + sensorIdentifier: + type: string + description: Unique identifier of the sensor + sensorStatusType: + type: string + description: The status of the sensor + errorInformation: + type: string + description: String explaining the error of the sensor + + SensorData: + type: "object" + required: + - sensorIdentifier + - data + - dataFormat + - dataUnitOfMeasure + properties: + sensorIdentifier: + type: string + description: Unique identifier of the sensor + data: + type: string + description: The status of the sensor + dataFormat: + type: string + description: String explaining the error of the sensor + dataUnitOfMeasure: + type: string + description: String explaining the error of the sensor + dataTimestamp: + $ref: '#/components/schemas/TimeStamp' + description: Time instant at which the data have been collected. + SensorInfo: + type: "object" + required: + - type + - sensorPropertyList + properties: + type: + type: string + description: Type of the sensor + sensorPropertyList: + type: array + items: + type: string + minItems: 1 + description: It indicates the list of properties that the sensor can sense (see saref:Property in ETSI TS 103 264 [4], clause 4.3.8). + sensorCharacteristicList: + type: "array" + items: + $ref: '#/components/schemas/SensorCharacteristic' + minItems: 0 + description: The sensor' characteristics to be matched + geographicalArea: + type: "array" + items: + $ref: '#/components/schemas/AreaInfo' + minItems: 0 + description: The parameters describing the area + SensorDiscoveryInfo: + type: "object" + required: + - sensorIdentifier + - sensorType + - sensorPropertyList + properties: + sensorIdentifier: + type: "string" + description: Unique identifier of the sensor + sensorType: + type: "string" + description: Type of the Sensor + sensorPropertyList: + type: "array" + description: It indicates the list of properties that the sensor can sense + minItems: 1 + items: + type: "string" + sensorCharacteristicList: + type: "array" + description: The sensor' characteristics + minItems: 0 + items: + $ref: '#/components/schemas/SensorCharacteristic' + sensorPosition: + type: "object" + description: Geographical position of the sensor. + $ref: '#/components/schemas/Point' + SensorDiscoveryEventSubscription: + title: SensorDiscoveryEventSubscription + required: + - subscriptionType + type: object + properties: + subscriptionType: + $ref: '#/components/schemas/SubscriptionType' + description: Shall be set to "SensorDiscoveryEventSubscription" + callbackReference: + type: string + format: uri + description: URI exposed by the client on which to receive notifications via HTTP + requestTestNotification: + type: boolean + description: Set to TRUE by the MEC application to request a test notification via HTTP on the callbackReference URI, + websockNotifConfig: + $ref: '#/components/schemas/WebsockNotifConfig' + _links: + $ref: '#/components/schemas/SubscriptionLinks' + sensorInfoList: + description: Object containing the characteristics of the sensor(s) to be selected for the subscription + type: array + items: + type: string + geographicalArea: + description: The parameters describing the area to subscribe + type: array + items: + $ref: '#/components/schemas/AreaInfo' + expiryDeadline: + description: The expiration time of the subscription + $ref: '#/components/schemas/TimeStamp' + SensorStatusSubscription: + title: SensorStatusSubscription + required: + - subscriptionType + type: object + properties: + subscriptionType: + $ref: '#/components/schemas/SubscriptionType' + description: Shall be set to "SensorStatusSubscription" + callbackReference: + type: string + format: uri + description: URI exposed by the client on which to receive notifications via HTTP + requestTestNotification: + type: boolean + description: Set to TRUE by the MEC application to request a test notification via HTTP on the callbackReference URI, + websockNotifConfig: + $ref: '#/components/schemas/WebsockNotifConfig' + _links: + $ref: '#/components/schemas/SubscriptionLinks' + expiryDeadline: + description: The expiration time of the subscription + $ref: '#/components/schemas/TimeStamp' + SensorDataSubscription: + title: SensorDataSubscription + required: + - subscriptionType + type: object + properties: + subscriptionType: + $ref: '#/components/schemas/SubscriptionType' + description: Shall be set to "SensorDataSubscription" + callbackReference: + type: string + format: uri + description: URI exposed by the client on which to receive notifications via HTTP + requestTestNotification: + type: boolean + description: Set to TRUE by the MEC application to request a test notification via HTTP on the callbackReference URI, + websockNotifConfig: + $ref: '#/components/schemas/WebsockNotifConfig' + _links: + $ref: '#/components/schemas/SubscriptionLinks' + expiryDeadline: + description: The expiration time of the subscription + $ref: '#/components/schemas/TimeStamp' + SubscriptionType: + title: SubscriptionType + enum: + - SensorDiscoveryEventSubscription + - SensorStatusSubscription + - SensorDataSubscription + type: string + WebsockNotifConfig: + type: object + properties: + websocketUri: + description: Set by AMS to indicate to the service consumer the Websocket URI to be used for delivering notifications. + type: string + format: uri + requestWebsocketUri: + type: boolean + description: Set to true by the service consumer to indicate that Websocket delivery is requested. + SensorCharacteristic: + type: "object" + description: This type represents a sensor' characteristic which details the type of sensor and its working functionalities, such as the model of the sensor, the sampling frequency, the operating range, the accuracy + required: + - characteristicName + - characteristicValue + properties: + characteristicName: + type: "string" + description: The name of the characteristic + characteristicValue: + type: "string" + description: The value of the characteristic. + characteristicUnitOfMeasure: + type: "string" + description: The unit of measure of the characteristic (see saref:UnitOfMeasure in ETSI TS 103 264 [4], clause 4.3.8). + Point: + type: "object" + description: This type represents the geographical location of a point + required: + - latitude + - longitude + properties: + latitude: + type: "number" + description: Location latitude, expressed in the range -90° to +90° + longitude: + type: "number" + description: Location longitude, expressed in the range -180° to +180°. + SubscriptionLinks: + title: SubscriptionLinks + required: + - self + type: object + properties: + self: + $ref: '#/components/schemas/LinkType' + SubscriptionLinkList.links: + title: SubscriptionLinkList.links + required: + - self + type: object + properties: + self: + $ref: '#/components/schemas/LinkType' + subscriptions: + type: array + description: The MEC application's subscriptions + items: + $ref: '#/components/schemas/SubscriptionLinkList.subscription' + description: List of hyperlinks related to the resource. + SubscriptionLinkList.subscription: + title: SubscriptionLinkList.subscription + required: + - href + - subscriptionType + type: object + properties: + href: + type: string + description: The URI referring to the subscription + subscriptionType: + type: string + description: Type of the subscription + SubscriptionLinkList: + title: SubscriptionLinkList + required: + - _links + type: object + properties: + _links: + $ref: '#/components/schemas/SubscriptionLinkList.links' + ProblemDetails: + type: object + properties: + type: + type: string + description: A URI reference according to IETF RFC 3986 that identifies + the problem type + format: uri + title: + type: string + description: "A short, human-readable summary of the problem type" + status: + type: integer + description: The HTTP status code for this occurrence of the problem + format: uint32 + detail: + type: string + description: A human-readable explanation specific to this occurrence of + the problem + instance: + type: string + description: A URI reference that identifies the specific occurrence of + the problem + format: uri + LinkType: + title: LinkType + required: + - href + type: object + properties: + href: + type: string + description: The URI referring to the subscription. + description: "'This data type represents a type of link'" + example: + href: href + TimeStamp: + title: TimeStamp + required: + - nanoSeconds + - seconds + type: object + properties: + seconds: + type: integer + description: + "'The seconds part of the Time. Time is defined as Unix-time + since January 1, 1970, 00:00:00 UTC.'" + nanoSeconds: + type: integer + description: + "'The nanoseconds part of the Time. Time is defined as Unix-time + since January 1, 1970, 00:00:00 UTC.'" + description: "'This data type represents the time stamp as Unix-time since + January 1, 1970, 00:00:00 UTC'" + ShapeType: + title: ShapeType + enum: + - CIRCLE + - POLYGON + type: integer + AreaInfo: + title: AreaInfo + required: + - shape + - points + type: object + properties: + shape: + description: "The shape of the area monitored" + $ref: '#/components/schemas/ShapeType' + points: + description: "Shall include one point if the shape is CIRCLE. Shall include 3-15 points if the shape is POLYGON" + type: array + items: + $ref: '#/components/schemas/Point' + radius: + type: integer + description: "Shall be present if the shape is CIRCLE" diff --git a/config/permissions.yaml b/config/permissions.yaml index f03950ab329c3dc53875d8e87449d0d1998f8a80..1a91239097a226f49713cf4109cbe0f4fdf3f165 100644 --- a/config/permissions.yaml +++ b/config/permissions.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2022 InterDigital Communications, Inc +# Copyright (c) 2024 InterDigital Communications, Inc # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -758,7 +758,59 @@ services: roles: admin: 'allow' user: 'allow' - #------------------------------ + #------------------------------ + # IOT Service (Sbox) + #------------------------------ + - name: 'meep-iot' + path: '/iots/v1' + sbox: true + default: + mode: 'allow' + fileservers: + - name: 'Api' + path: '/api' + mode: 'verify' + roles: + admin: 'allow' + user: 'block' + - name: 'UserApi' + path: '/user-api' + mode: 'verify' + roles: + admin: 'allow' + user: 'allow' + endpoints: + - name: 'Index' + path: '/' + method: 'GET' + mode: 'block' + #------------------------------ + # Sensors Sharing Service (Sbox) + #------------------------------ + - name: 'meep-sss' + path: '/sens/v1' + sbox: true + default: + mode: 'allow' + fileservers: + - name: 'Api' + path: '/api' + mode: 'verify' + roles: + admin: 'allow' + user: 'block' + - name: 'UserApi' + path: '/user-api' + mode: 'verify' + roles: + admin: 'allow' + user: 'allow' + endpoints: + - name: 'Index' + path: '/' + method: 'GET' + mode: 'block' + #------------------------------ # FED Service (Sbox) #------------------------------ - name: 'meep-federation' diff --git a/js-apps/frontend/src/js/app-constants.js b/js-apps/frontend/src/js/app-constants.js index 955dfd34f14d81bb8e4c5856767211b2c040ced4..ec071f05720e6332be63b30904d43e9502bfe5d8 100644 --- a/js-apps/frontend/src/js/app-constants.js +++ b/js-apps/frontend/src/js/app-constants.js @@ -3,7 +3,7 @@ */ // Version -export const MEC_SANDBOX_VERSION = 'v1.10'; +export const MEC_SANDBOX_VERSION = 'v1.11'; // Host export const HOST_PATH = location.origin; @@ -34,7 +34,7 @@ export const ETSI_FORGE_MEC_URL = 'https://forge.etsi.org/rep/mec'; export const ETSI_PRIVACY_URL = 'https://forge.etsi.org/mec-sandbox-privacy'; export const ETSI_TERMS_OF_USE_URL = 'https://forge.etsi.org/mec-sandbox-terms-and-conditions'; export const ETSI_CONTACT_URL = 'https://www.etsi.org/contact'; -export const ETSI_MEC_OVERVIEW_PDF_URL = 'https://www.etsi.org/images/files/technologies/ETSI-MEC-Public-Overview.pdf'; +export const ETSI_MEC_OVERVIEW_PDF_URL = 'https://portal.etsi.org/Portals/0/TBpages/MEC/Docs/ETSI-MEC-Public-Overview_Generic.pdf'; export const ETSI_MEC_SANDBOX_WEBINAR_URL = 'https://mecwiki.etsi.org/index.php?title=MEC_Sandbox_Help#MEC_Sandbox_Concepts_.26_Usage'; export const DASHBOARD_MEC_SANDBOX_URL = HOST_PATH + '/grafana/d/mec-sandbox/mec-sandbox?orgId=1&from=now-24h&to=now&refresh=15s&kiosk=tv&theme=light'; diff --git a/js-apps/frontend/src/js/components/dialogs/detailed-data-dialog.js b/js-apps/frontend/src/js/components/dialogs/detailed-data-dialog.js index 651e60270b1333455a95cd7a575b51fec7d1c7ef..e9c2c474f3b2b9683a890f36b9bc633924ad0e46 100644 --- a/js-apps/frontend/src/js/components/dialogs/detailed-data-dialog.js +++ b/js-apps/frontend/src/js/components/dialogs/detailed-data-dialog.js @@ -78,7 +78,7 @@ class DetailedDataDialog extends Component { mapService(loggerName) { //loggerName is a combination of loggerName and mep name - let prefixes = ['meep-loc-serv', 'meep-federation', 'meep-rnis', 'meep-dai', 'meep-wais', 'meep-app-enablement', 'meep-ams', 'meep-vis', 'meep-tm']; + let prefixes = ['meep-loc-serv', 'meep-federation', 'meep-rnis', 'meep-dai', 'meep-wais', 'meep-app-enablement', 'meep-ams', 'meep-iot', 'meep-sss', 'meep-vis', 'meep-tm']; let prefixStd = ''; var prefix = ''; for (var i = 0; i < prefixes.length; i++) { @@ -113,9 +113,15 @@ class DetailedDataDialog extends Component { case 'meep-vis': prefixStd = '030'; break; + case 'meep-iot': + prefixStd = '033'; + break; case 'meep-federation': prefixStd = '040'; break; + case 'meep-sss': + prefixStd = '046'; + break; default: prefixStd = 'N/A'; } diff --git a/js-apps/frontend/src/js/components/dialogs/version-dialog.js b/js-apps/frontend/src/js/components/dialogs/version-dialog.js index d0d3dc6d28ae386d1142287c811b30e18b02dbad..8366d9e2104e9ac98657433a2aa0b06a7977bcae 100644 --- a/js-apps/frontend/src/js/components/dialogs/version-dialog.js +++ b/js-apps/frontend/src/js/components/dialogs/version-dialog.js @@ -22,9 +22,9 @@ class VersionDialog extends Component { >
-

v1.10 • 2025-06-20

+

v1.11 • 2026-02-25

-

AdvantEDGE baseline upgrade to v1.10.0

+

AdvantEDGE baseline upgrade to v1.11.0

STF678 Final: