diff --git a/TODO.md b/TODO.md index e3f9a2f50d441a9581a78d7d6b946eaa72f1d29a..01fbd72c2e8b7b7bf364c6a3826363329a102302 100644 --- a/TODO.md +++ b/TODO.md @@ -31,16 +31,28 @@ This file provides the list of the TODOs related to the STF 569. ### TRANS + +Draft ETSI GS MEC 011 V2.0.9 (2018-10) + +https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/TRANS/PlatTransport.tplan2 + +- TC_MEC_SRV_TRANS_001_OK To be tested + ### UEAREASUB +Draft ETSI GS MEC 013 V2.0.3 (2018-10) + +https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEDISTSUB/PlatUeAreaSubscription.tplan2 + +TODO CircleNotificationSubscription data structure not found + ### UEDISTLOOK Draft ETSI GS MEC 013 V2.0.3 (2018-10) -https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEDISTSUB/PlatUeDistanceSubscription.tplan2 - -TODO TerminalDistance data structure not found +https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEDISTLOOK/PlatUeDistanceSubscription.tplan2 +TODO TerminalDistance data structure not found ### UEDISTSUB @@ -50,7 +62,6 @@ https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20 TODO DistanceNotificationSubscription data structure not found - ### UEINFLOOK Draft ETSI GS MEC 013 V2.0.3 (2018-10) diff --git a/ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..d94df760ff084acef57900eabec695108c9bc49f --- /dev/null +++ b/ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn @@ -0,0 +1,97 @@ +/** + * @author ETSI / STF569 + * @version $URL:$ + * $ID:$ + * @desc This module provides the MEC test cases. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI GS MEC 003, Draft ETSI GS MEC 011 V2.0.9 (2018-10) + */ +module AtsMec_AppEnablementAPI_TestCases { + + // Libcommon + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibItsHttp_TypesAndValues all; + import from LibItsHttp_Functions all; + import from LibItsHttp_Templates all; + import from LibItsHttp_JsonTemplates all; + import from LibItsHttp_TestSystem all; + + // LibMec_AppEnablementAPI + import from AppEnablementAPI_Templates all; + import from AppEnablementAPI_Pics all; + import from AppEnablementAPI_Pixits all; + + // LibMec + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + group transport_info { + + /** + * @desc Check that the IUT responds with a list of available transports when queried by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRANS/PlatTransport.tplan2 + */ + testcase TC_MEC_SRV_TRANS_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var HeaderLines v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_ENABLE_APP_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + "/" & PICS_ROOT_API & PX_SVC_MGMT_TRANS_URI, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_transport_info_list( + { *, mw_transport_info, * } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_SRV_TRANS_001_OK + + } // End of group transport_info + +} // End of module AtsMec_AppEnablementAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_TestControl.ttcn b/ttcn/AtsMec/AtsMec_TestControl.ttcn index 5a1ce0b04d039d4a1592b98c6de9f2dcb468fa05..9beaec867ea777e4474e56b8af46418763394124 100644 --- a/ttcn/AtsMec/AtsMec_TestControl.ttcn +++ b/ttcn/AtsMec/AtsMec_TestControl.ttcn @@ -8,6 +8,8 @@ module AtsMec_TestControl { import from RnisAPI_Pics all; // LibMec/BwManagementAPI import from BwManagementAPI_Pics all; + // LibMec/AppEnablementAPI + import from AppEnablementAPI_Pics all; // LibMec import from LibMec_Pics all; @@ -56,6 +58,10 @@ module AtsMec_TestControl { execute(TC_MEC_PLAT_RLOC_001_OK()); } + + if (PICS_ENABLE_APP_API_SUPPORTED) { + execute(TC_MEC_SRV_TRANS_001_OK()); + } } if (PICS_RNIS) { diff --git a/ttcn/LibMec/AppEna/json/AppEnablementAPI.json b/ttcn/LibMec/AppEna/json/AppEnablementAPI.json index c5ee3fcda73baa582e50733f936af0fb7c26a484..e6a39042a6583aaba17e7fc7fc5b1a9c500b8032 100644 --- a/ttcn/LibMec/AppEna/json/AppEnablementAPI.json +++ b/ttcn/LibMec/AppEna/json/AppEnablementAPI.json @@ -1,9 +1,17 @@ { "openapi": "3.0.2", + "servers": [ + { + "url": "http://127.0.0.1:8081/mp1/v1" + }, + { + "url": "https://127.0.0.1:8081/mp1/v1" + } + ], "info": { - "title": "UE Application Interface API", + "title": "Mp1 API", "version": "1.1.1", - "description": "The ETSI MEC ISG MEC016 UE Application Interface API described using OpenAPI", + "description": "The ETSI MEC ISG MEC011 Application Enablement API described using OpenAPI", "license": { "name": "ETSI Forge copyright notice", "url": "https://forge.etsi.org/etsi-forge-copyright-notice.txt" @@ -13,130 +21,204 @@ } }, "externalDocs": { - "description": "ETSI GS MEC016 UE Application Interface API, V1.1.1", - "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/016/01.01.01_60/gs_MEC016v010101p.pdf" + "description": "ETSI GS MEC011 Application Enablement API, V1.1.1", + "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/011/01.01.01_60/gs_mec011v010101p.pdf" }, - "security": [ + "tags": [ { - "OauthSecurity": [ - "all" - ] - } - ], - "servers": [ + "name": "trafficRules" + }, { - "url": "http://127.0.0.1:8081/mx2/v1" + "name": "dnsRules" }, { - "url": "https://127.0.0.1:8081/mx2/v1" - } - ], - "tags": [ + "name": "subscriptions" + }, + { + "name": "services" + }, + { + "name": "timing" + }, { - "name": "appList" + "name": "transports" }, { - "name": "appContext" + "name": "callbacks" } ], "paths": { - "/app_list": { + "/applications/{appInstanceId}/dns_rules": { + "parameters": [ + { + "$ref": "#/components/parameters/Path.AppInstanceId" + } + ], "get": { - "description": "Used to query information about the available MEC applications.", - "operationId": "AppList_GET", + "description": "This method retrieves information about all the DNS rules associated with a mobile edge application instance.", + "operationId": "ApplicationsDnsRules_GET", "tags": [ - "appList" + "trafficRules" ], - "parameters": [ - { - "$ref": "#/components/parameters/Query.AppName" - }, - { - "$ref": "#/components/parameters/Query.AppProvider" + "responses": { + "200": { + "$ref": "#/components/responses/ApplicationsDnsRules.200" }, - { - "$ref": "#/components/parameters/Query.AppSoftVersion" + "400": { + "$ref": "#/components/responses/Error.400" }, - { - "$ref": "#/components/parameters/Query.ServiceCont" + "403": { + "$ref": "#/components/responses/Error.403" }, - { - "$ref": "#/components/parameters/Query.VendorId" + "404": { + "$ref": "#/components/responses/Error.404" } + } + } + }, + "/applications/{appInstanceId}/dns_rules/{dnsRuleId}": { + "parameters": [ + { + "$ref": "#/components/parameters/Path.AppInstanceId" + }, + { + "$ref": "#/components/parameters/Path.DnsRuleId" + } + ], + "get": { + "description": "This method retrieves information about a DNS rule associated with a mobile edge application instance.", + "operationId": "ApplicationsDnsRule_GET", + "tags": [ + "dnsRules" ], "responses": { "200": { - "$ref": "#/components/responses/AppList" + "$ref": "#/components/responses/ApplicationsDnsRule.200" }, "400": { "$ref": "#/components/responses/Error.400" }, - "401": { - "$ref": "#/components/responses/Error.401" + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + }, + "put": { + "description": "This method activates, de-activates or updates a traffic rule.", + "operationId": "ApplicationsDnsRule_PUT", + "tags": [ + "dnsRules" + ], + "responses": { + "200": { + "$ref": "#/components/responses/ApplicationsDnsRule.200" + }, + "400": { + "$ref": "#/components/responses/Error.400" }, "403": { "$ref": "#/components/responses/Error.403" }, "404": { "$ref": "#/components/responses/Error.404" + }, + "412": { + "$ref": "#/components/responses/Error.412" } + }, + "requestBody": { + "$ref": "#/components/requestBodies/ApplicationsDnsRule" } } }, - "/app_contexts": { + "/applications/{appInstanceId}/subscriptions": { + "parameters": [ + { + "$ref": "#/components/parameters/Path.AppInstanceId" + } + ], + "get": { + "description": "The GET method may be used to request information about all subscriptions for this requestor. Upon success, the response contains entity body with all the subscriptions for the requestor.", + "operationId": "ApplicationsSubscriptions_GET", + "tags": [ + "subscriptions" + ], + "responses": { + "200": { + "$ref": "#/components/responses/ApplicationsSubscriptions.200" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + }, "post": { - "description": "The POST method can be used to create a new application context. Upon success, the response contains entity body describing the created application context.", - "operationId": "AppContext_POST", + "description": "The POST method may be used to create a new subscription. One example use case is to create a new subscription to the mobile edge service availability notifications. Upon success, the response contains entity body describing the created subscription.", + "operationId": "ApplicationsSubscriptions_POST", "tags": [ - "appContext" + "subscriptions" ], - "requestBody": { - "$ref": "#/components/requestBodies/AppContext" - }, "responses": { "201": { - "$ref": "#/components/responses/AppContext" + "$ref": "#/components/responses/ApplicationsSubscriptions.201" }, "400": { "$ref": "#/components/responses/Error.400" }, - "401": { - "$ref": "#/components/responses/Error.401" - }, "403": { "$ref": "#/components/responses/Error.403" }, "404": { "$ref": "#/components/responses/Error.404" } + }, + "requestBody": { + "$ref": "#/components/requestBodies/ApplicationsSubscriptions" + }, + "callbacks": { + "appTerminationNotification": { + "$ref": "#/components/callbacks/AppTerminationNotification" + }, + "serviceAvailabilityNotification": { + "$ref": "#/components/callbacks/ServiceAvailabilityNotification" + } } } }, - "/app_contexts/{contextId}": { + "/applications/{appInstanceId}/subscriptions/{subscriptionType}/{subscriptionId}": { "parameters": [ { - "$ref": "#/components/parameters/Path.ContextId" + "$ref": "#/components/parameters/Path.AppInstanceId" + }, + { + "$ref": "#/components/parameters/Path.SubscriptionType" + }, + { + "$ref": "#/components/parameters/Path.SubscriptionId" } ], - "put": { - "description": "The PUT method is used to update the callback reference of the existing application context. Upon successful operation, the target resource is updated with new callback reference.", - "operationId": "AppContextId_PUT", + "get": { + "description": "The GET method requests information about a subscription for this requestor. Upon success, the response contains entity body with the subscription for the requestor.", + "operationId": "ApplicationsSubscription_GET", "tags": [ - "appContext" + "subscriptions" ], - "requestBody": { - "$ref": "#/components/requestBodies/AppContext" - }, "responses": { - "204": { - "description": "No Content." + "200": { + "$ref": "#/components/responses/ApplicationsSubscription.200" }, "400": { "$ref": "#/components/responses/Error.400" }, - "401": { - "$ref": "#/components/responses/Error.401" - }, "403": { "$ref": "#/components/responses/Error.403" }, @@ -146,155 +228,1874 @@ } }, "delete": { - "description": "The DELETE method is used to delete the resource that represents the existing application context.", - "operationId": "AppContextId_DEL", + "description": "This method deletes a meMp1Subscription. This method is typically used in \"Unsubscribing from service availability event notifications\" procedure.", + "operationId": "ApplicationsSubscription_DELETE", "tags": [ - "appContext" + "subscriptions" ], "responses": { "204": { "description": "No Content" }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + } + }, + "/applications/{appInstanceId}/traffic_rules": { + "parameters": [ + { + "$ref": "#/components/parameters/Path.AppInstanceId" + } + ], + "get": { + "description": "This method retrieves information about all the traffic rules associated with a mobile edge application instance.", + "operationId": "ApplicationsTrafficRules_GET", + "tags": [ + "trafficRules" + ], + "responses": { + "200": { + "$ref": "#/components/responses/ApplicationsTrafficRules.200" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + } + }, + "/applications/{appInstanceId}/traffic_rules/{trafficRuleId}": { + "parameters": [ + { + "$ref": "#/components/parameters/Path.AppInstanceId" + }, + { + "$ref": "#/components/parameters/Path.TrafficRuleId" + } + ], + "get": { + "description": "This method retrieves information about all the traffic rules associated with a mobile edge application instance.", + "operationId": "ApplicationsTrafficRule_GET", + "tags": [ + "trafficRules" + ], + "responses": { + "200": { + "$ref": "#/components/responses/ApplicationsTrafficRule.200" + }, "400": { "$ref": "#/components/responses/Error.400" }, - "401": { - "$ref": "#/components/responses/Error.401" + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + }, + "put": { + "description": "This method retrieves information about all the traffic rules associated with a mobile edge application instance.", + "operationId": "ApplicationsTrafficRule_PUT", + "tags": [ + "trafficRules" + ], + "responses": { + "200": { + "$ref": "#/components/responses/ApplicationsTrafficRule.200" + }, + "400": { + "$ref": "#/components/responses/Error.400" }, "403": { "$ref": "#/components/responses/Error.403" }, "404": { "$ref": "#/components/responses/Error.404" + }, + "412": { + "$ref": "#/components/responses/Error.412" } + }, + "requestBody": { + "$ref": "#/components/requestBodies/ApplicationsTrafficRule" } } - } - }, - "components": { - "parameters": { - "Query.AppName": { - "name": "appName", - "in": "query", - "description": "Name to identify the MEC application", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" + }, + "/services": { + "get": { + "description": "This method retrieves information about a list of meService resources. This method is typically used in \"service availability query\" procedure", + "operationId": "Services_GET", + "tags": [ + "services" + ], + "parameters": [ + { + "$ref": "#/components/parameters/Query.Ser_instance_id" + }, + { + "$ref": "#/components/parameters/Query.Ser_name" + }, + { + "$ref": "#/components/parameters/Query.Ser_category_id" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/Services.200" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" } } }, - "Query.AppProvider": { - "name": "appProvider", - "in": "query", - "description": "Provider of the MEC application", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" + "post": { + "description": "This method is used to create a meService resource. This method is typically used in \"service availability update and new service registration\" procedure", + "operationId": "Services_POST", + "tags": [ + "services" + ], + "responses": { + "201": { + "$ref": "#/components/responses/Services.201" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + }, + "requestBody": { + "$ref": "#/components/requestBodies/Services.Post" + } + } + }, + "/services/{serviceId}": { + "parameters": [ + { + "$ref": "#/components/parameters/Path.ServiceId" + } + ], + "get": { + "description": "This method retrieves information about a meService resource. This method is typically used in \"service availability query\" procedure", + "operationId": "ServicesServiceId_GET", + "tags": [ + "services" + ], + "responses": { + "200": { + "$ref": "#/components/responses/ServicesServiceId.200" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" } } }, - "Query.AppSoftVersion": { - "name": "appSoftVersion", - "in": "query", - "description": "Software version of the MEC application", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" + "put": { + "description": "This method updates the information about a meService resource", + "operationId": "ServicesServiceId_PUT", + "tags": [ + "services" + ], + "responses": { + "200": { + "$ref": "#/components/responses/ServicesServiceId.200" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + }, + "412": { + "$ref": "#/components/responses/Error.412" + } + }, + "requestBody": { + "$ref": "#/components/requestBodies/ServicesServiceId" + } + } + }, + "/timing/current_time": { + "get": { + "description": "This method retrieves the information of the platform's current time which corresponds to the get platform time procedure", + "operationId": "TimingCurrentTime_GET", + "tags": [ + "timing" + ], + "responses": { + "200": { + "$ref": "#/components/responses/TimingCurrentTime.200" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + } + }, + "/timing/timing_caps": { + "get": { + "description": "This method retrieves the information of the platform's timing capabilities which corresponds to the timing capabilities query", + "operationId": "TimingCaps_GET", + "tags": [ + "timing" + ], + "responses": { + "200": { + "$ref": "#/components/responses/TimingCaps.200" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + } + }, + "/transports": { + "get": { + "description": "This method retrieves information about a list of available transports. This method is typically used by a service-producing application to discover transports provided by the mobile edge platform in the \"transport information query\" procedure", + "operationId": "Transports_GET", + "tags": [ + "transports" + ], + "responses": { + "200": { + "$ref": "#/components/responses/Transports.200" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + } + } + }, + "components": { + "schemas": { + "Empty": { + "description": "Empty schema" + }, + "AppTerminationNotification.MaxGracefulTimeout": { + "description": "Maximum timeout value in seconds for graceful termination or graceful stop of an application instance.", + "type": "integer", + "format": "uint32", + "example": 10 + }, + "AppTerminationNotification.NotificationType": { + "description": "Shall be set to AppTerminationNotification.", + "type": "string", + "example": "AppTerminationNotification" + }, + "AppTerminationNotification": { + "description": "This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop.", + "type": "object", + "required": [ + "notificationType", + "maxGracefulTimeout", + "_links" + ], + "properties": { + "notificationType": { + "$ref": "#/components/schemas/AppTerminationNotification.NotificationType" + }, + "maxGracefulTimeout": { + "$ref": "#/components/schemas/AppTerminationNotification.MaxGracefulTimeout" + }, + "_links": { + "$ref": "#/components/schemas/Subscription" + } + } + }, + "AppTerminationNotificationSubscription.AppInstanceId": { + "description": "It is used as the filtering criterion for the subscribed events.", + "type": "string", + "example": "ID1" + }, + "AppTerminationNotificationSubscription.CallbackReference": { + "description": "URI selected by the mobile edge application instance to receive notifications on the subscribed mobile edge application instance management information. This shall be included in both the request and the response.", + "type": "string", + "format": "uri" + }, + "AppTerminationNotificationSubscription": { + "description": "This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop.", + "type": "object", + "required": [ + "subscriptionType", + "callbackReference", + "_links", + "appInstanceId" + ], + "properties": { + "subscriptionType": { + "$ref": "#/components/schemas/AppTerminationNotificationSubscription.SubscriptionType" + }, + "callbackReference": { + "$ref": "#/components/schemas/AppTerminationNotificationSubscription.CallbackReference" + }, + "_links": { + "$ref": "#/components/schemas/Self" + }, + "appInstanceId": { + "$ref": "#/components/schemas/AppTerminationNotificationSubscription.AppInstanceId" + } + } + }, + "AppTerminationNotificationSubscription.SubscriptionType": { + "description": "Shall be set to AppTerminationNotificationSubscription.", + "type": "string", + "example": "AppTerminationNotificationSubscription" + }, + "CategoryRef.Href": { + "description": "Reference of the catalogue", + "type": "string", + "example": "catItem1" + }, + "CategoryRef.Id": { + "description": "Unique identifier of the category", + "type": "string", + "example": "id12345" + }, + "CategoryRef.Name": { + "description": "Name of the category", + "type": "string", + "example": "RNI" + }, + "CategoryRef.Version": { + "description": "Category version", + "type": "string", + "example": "version1" + }, + "CategoryRef": { + "description": "This type represents the category reference", + "type": "object", + "required": [ + "href", + "id", + "name", + "version" + ], + "properties": { + "href": { + "$ref": "#/components/schemas/CategoryRef.Href" + }, + "id": { + "$ref": "#/components/schemas/CategoryRef.Id" + }, + "name": { + "$ref": "#/components/schemas/CategoryRef.Name" + }, + "version": { + "$ref": "#/components/schemas/CategoryRef.Version" + } + } + }, + "CurrentTime": { + "description": "This type represents the information provided by the mobile edge platform in response to the Get Platform Time Request message.", + "type": "object", + "required": [ + "nanoSeconds", + "seconds", + "timeSourceStatus" + ], + "properties": { + "seconds": { + "type": "integer", + "format": "uint32", + "description": "The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", + "example": 1577836800 + }, + "nanoSeconds": { + "type": "integer", + "format": "uint32", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", + "example": 0 + }, + "timeSourceStatus": { + "type": "string", + "enum": [ + "TRACEABLE", + "NONTRACEABLE" + ], + "description": "Platform Time Source status. 1 = TRACEABLE - time source is locked to the UTC time source. 2 = NONTRACEABLE - time source is not locked to the UTC time source", + "example": "TRACEABLE" + } + } + }, + "DestinationInterface.InterfaceType": { + "description": "Type of the interface", + "type": "string", + "enum": [ + "TUNNEL", + "MAC", + "IP" + ], + "example": "TUNNEL" + }, + "DestinationInterface.IpAddress": { + "description": "IP address of the remote destination", + "type": "string", + "example": "192.0.2.0" + }, + "DestinationInterface.MacAddress": { + "description": "Source address identifies the MAC address of the interface", + "type": "string", + "example": "02-00-00-00-00-00" + }, + "DestinationInterface": { + "description": "This type represents the destination interface.", + "type": "object", + "required": [ + "interfaceType" + ], + "properties": { + "interfaceType": { + "$ref": "#/components/schemas/DestinationInterface.InterfaceType" + }, + "tunnelInfo": { + "$ref": "#/components/schemas/TunnelInfo" + }, + "srcMacAddress": { + "$ref": "#/components/schemas/DestinationInterface.MacAddress" + }, + "dstMacAddress": { + "$ref": "#/components/schemas/DestinationInterface.MacAddress" + }, + "dstIpAddress": { + "$ref": "#/components/schemas/DestinationInterface.IpAddress" + } + } + }, + "DnsRule.DomainName": { + "description": "FQDN resolved by the DNS rule", + "type": "string", + "example": "www.example.com" + }, + "DnsRule.Id": { + "description": "Identifies the DNS Rule", + "type": "string", + "example": "dnsRule1" + }, + "DnsRule.IpAddress": { + "description": "IP address associated with the FQDN resolved by the DNS rule", + "type": "string", + "example": "192.0.2.0" + }, + "DnsRule.IpAddressType": { + "description": "IP address type", + "type": "string", + "enum": [ + "IP_V6", + "IP_V4" + ], + "example": "IP_V6" + }, + "DnsRule.State": { + "description": "DNS rule state", + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ], + "example": "ACTIVE" + }, + "DnsRule.Ttl": { + "description": "Time to live value", + "type": "integer", + "format": "uint32", + "example": "?" + }, + "DnsRule": { + "description": "This type represents the general information of a DNS rule.", + "type": "object", + "required": [ + "dnsRuleId", + "domainName", + "ipAddressType", + "ipAddress", + "state" + ], + "properties": { + "dnsRuleId": { + "$ref": "#/components/schemas/DnsRule.Id" + }, + "domainName": { + "$ref": "#/components/schemas/DnsRule.DomainName" + }, + "ipAddressType": { + "$ref": "#/components/schemas/DnsRule.IpAddressType" + }, + "ipAddress": { + "$ref": "#/components/schemas/DnsRule.IpAddress" + }, + "ttl": { + "$ref": "#/components/schemas/DnsRule.Ttl" + }, + "state": { + "$ref": "#/components/schemas/DnsRule.State" + } + } + }, + "EndPointInfo.Address.Host": { + "description": "Host portion of the address", + "type": "string", + "example": "192.0.2.0" + }, + "EndPointInfo.Address_Port": { + "description": "Port portion of the address", + "type": "integer", + "format": "uint32", + "example": 8080 + }, + "EndPointInfo.Address": { + "description": "A IP address and port pair", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "$ref": "#/components/schemas/EndPointInfo.Address.Host" + }, + "port": { + "$ref": "#/components/schemas/EndPointInfo.Address_Port" + } + } + }, + "EndPointInfo.Addresses": { + "description": "Entry point information of the service as one or more pairs of IP address and port", + "type": "object", + "required": [ + "addresses" + ], + "properties": { + "addresses": { + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/EndPointInfo.Address" + } + } + } + }, + "EndPointInfo.Alternative": { + "description": "Entry point information of the service in a format defined by an implementation, or in an external specification.", + "type": "object", + "required": [ + "alternative" + ], + "properties": { + "alternative": { + "type": "object" + } + } + }, + "EndPointInfo.Uri": { + "description": "Entry point information of the service", + "type": "string", + "format": "uri", + "example": "/meMp1/service/EntryPoint" + }, + "EndPointInfo.Uris": { + "description": "Entry point information of the service as string, formatted according to URI syntax", + "type": "object", + "required": [ + "uris" + ], + "properties": { + "uris": { + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/EndPointInfo.Uri" + } + } + } + }, + "LinkType": { + "description": "This type represents a type of link and may be referenced from data structures", + "type": "object", + "properties": { + "href": { + "$ref": "#/components/schemas/Href" + } + } + }, + "Href": { + "description": "URI referring to a resource", + "type": "string", + "format": "uri", + "example": "/meMp1/example" + }, + "Mp1SubscriptionLinkList.Links": { + "description": "Self-referring URI.", + "type": "object", + "required": [ + "self" + ], + "properties": { + "self": { + "$ref": "#/components/schemas/LinkType" + }, + "subscription": { + "description": "Subscription list", + "type": "array", + "items": { + "$ref": "#/components/schemas/Mp1SubscriptionLinkList.Subscription" + } + } + } + }, + "Mp1SubscriptionLinkList.Subscription": { + "description": "A link to a subscription.", + "type": "object", + "required": [ + "href", + "rel" + ], + "properties": { + "href": { + "$ref": "#/components/schemas/Href" + }, + "rel": { + "description": "The values are as defined in the \"subscriptionType\" attribute for each different Mp1 event subscription data type.", + "type": "string", + "enum": [ + "AppTerminationNotificationSubscription", + "SerAvailabilityNotificationSubscription" + ] + } + } + }, + "Mp1SubscriptionLinkList": { + "description": "This type represents a list of links related to currently existing subscriptions for a mobile edge application instance. This information is returned when sending a request to receive current subscriptions.", + "type": "object", + "required": [ + "_links" + ], + "properties": { + "_links": { + "$ref": "#/components/schemas/Mp1SubscriptionLinkList.Links" + } + } + }, + "ProblemDetails": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/Problem.type" + }, + "title": { + "$ref": "#/components/schemas/Problem.title" + }, + "status": { + "$ref": "#/components/schemas/Problem.status" + }, + "detail": { + "$ref": "#/components/schemas/Problem.detail" + }, + "instance": { + "$ref": "#/components/schemas/Problem.instance" + } + } + }, + "Problem.detail": { + "type": "string", + "description": "A human-readable explanation specific to this occurrence of the problem" + }, + "Problem.instance": { + "type": "string", + "format": "uri", + "description": "A URI reference that identifies the specific occurrence of the problem" + }, + "Problem.status": { + "type": "integer", + "format": "uint32", + "description": "The HTTP status code for this occurrence of the problem" + }, + "Problem.title": { + "type": "string", + "description": "A short, human-readable summary of the problem type" + }, + "Problem.type": { + "type": "string", + "format": "uri", + "description": "A URI reference according to IETF RFC 3986 that identifies the problem type" + }, + "SecurityInfo.OAuth2Info.GrantTypes": { + "description": "List of supported OAuth 2.0 grant types", + "type": "string", + "enum": [ + "OAUTH2_AUTHORIZATION_CODE", + "OAUTH2_IMPLICIT_GRANT", + "OAUTH2_RESOURCE_OWNER", + "OAUTH2_CLIENT_CREDENTIALS" + ], + "example": "OAUTH2_CLIENT_CREDENTIALS" + }, + "SecurityInfo.OAuth2Info.TokenEndpoint": { + "description": "The token endpoint", + "type": "string", + "format": "uri", + "example": "/meMp1/security/TokenEndPoint" + }, + "SecurityInfo.OAuth2Info": { + "description": "Parameters related to use of OAuth 2.0", + "required": [ + "grantTypes", + "tokenEndpoint" + ], + "properties": { + "grantTypes": { + "description": "List of supported OAuth 2.0 grant types.", + "type": "array", + "minItems": 1, + "maxItems": 4, + "items": { + "$ref": "#/components/schemas/SecurityInfo.OAuth2Info.GrantTypes" + } + }, + "tokenEndpoint": { + "$ref": "#/components/schemas/SecurityInfo.OAuth2Info.TokenEndpoint" + } + }, + "type": "object" + }, + "SecurityInfo": { + "description": "This type represents security information related to a transport", + "type": "object", + "properties": { + "oAuth2Info": { + "$ref": "#/components/schemas/SecurityInfo.OAuth2Info" + } + } + }, + "Self": { + "description": "Self-referring URI.", + "type": "object", + "required": [ + "self" + ], + "properties": { + "self": { + "$ref": "#/components/schemas/LinkType" + } + }, + "readOnly": true + }, + "SerAvailabilityNotificationSubscription.CallbackReference": { + "description": "URI selected by the mobile edge application instance to receive notifications on the subscribed mobile edge service availability information. This shall be included in both the request and the response.", + "type": "string", + "format": "uri" + }, + "SerAvailabilityNotificationSubscription": { + "description": "This type represents a subscription to the notifications from the mobile edge platform regarding the availability of a mobile edge service or a list of mobile edge services.", + "type": "object", + "required": [ + "subscriptionType", + "callbackReference", + "_links", + "filteringCriteria" + ], + "properties": { + "subscriptionType": { + "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription.SubscriptionType" + }, + "callbackReference": { + "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription.CallbackReference" + }, + "_links": { + "$ref": "#/components/schemas/Self" + }, + "filteringCriteria": { + "$ref": "#/components/schemas/ServiceInfo" + } + } + }, + "SerAvailabilityNotificationSubscription.SubscriptionType": { + "description": "Shall be set to SerAvailabilityNotificationSubscription.", + "type": "string", + "example": "SerAvailabilityNotificationSubscription" + }, + "ServiceAvailabilityNotification": { + "description": "This type represents the service availability information.", + "type": "object", + "required": [ + "notificationType", + "services", + "_links" + ], + "properties": { + "notificationType": { + "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription.SubscriptionType" + }, + "services": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ServiceInfo" + } + }, + "_links": { + "$ref": "#/components/schemas/Subscription" + } + } + }, + "SerializerTypes": { + "description": "The enumeration SerializerTypes represents types of serializers", + "type": "string", + "enum": [ + "JSON", + "XML", + "PROTOBUF3" + ], + "example": "JSON" + }, + "ServiceInfo.SerInstanceId": { + "description": "Identifier of the service instance assigned by the MEPM / mobile edge platform.", + "type": "string", + "readOnly": true, + "example": "ServiceInstance123" + }, + "ServiceInfo.SerName": { + "description": "The name of the service. This is how the service producing mobile edge application identifies the service instance it produces.", + "type": "string", + "example": "ExampleService" + }, + "ServiceInfo.State": { + "description": "Contains the state", + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ], + "example": "ACTIVE" + }, + "ServiceInfo.TransportId": { + "description": "Identifier of the platform-provided transport to be used by the service. Valid identifiers may be obtained using the \"Transport information query\" procedure. May be present in POST requests to signal the use of a platform-provided transport for the service, and shall be absent otherwise.", + "type": "string", + "writeOnly": true, + "example": "Rest1" + }, + "ServiceInfo.Version": { + "description": "Service version", + "type": "string", + "example": "ServiceVersion1" + }, + "ServiceInfo.Post": { + "description": "This type represents the general information of a mobile edge service.", + "type": "object", + "required": [ + "serName", + "version", + "state", + "serializer" + ], + "oneOf": [ + { + "required": [ + "transportId" + ] + }, + { + "required": [ + "transportInfo" + ] + } + ], + "properties": { + "serInstanceId": { + "$ref": "#/components/schemas/ServiceInfo.SerInstanceId" + }, + "serName": { + "$ref": "#/components/schemas/ServiceInfo.SerName" + }, + "serCategory": { + "$ref": "#/components/schemas/CategoryRef" + }, + "version": { + "$ref": "#/components/schemas/ServiceInfo.Version" + }, + "state": { + "$ref": "#/components/schemas/ServiceInfo.State" + }, + "transportId": { + "$ref": "#/components/schemas/ServiceInfo.TransportId" + }, + "transportInfo": { + "$ref": "#/components/schemas/TransportInfo" + }, + "serializer": { + "$ref": "#/components/schemas/SerializerTypes" + } + } + }, + "ServiceInfo": { + "description": "This type represents the general information of a mobile edge service.", + "type": "object", + "required": [ + "serName", + "version", + "state", + "transportInfo", + "serializer" + ], + "properties": { + "serInstanceId": { + "$ref": "#/components/schemas/ServiceInfo.SerInstanceId" + }, + "serName": { + "$ref": "#/components/schemas/ServiceInfo.SerName" + }, + "serCategory": { + "$ref": "#/components/schemas/CategoryRef" + }, + "version": { + "$ref": "#/components/schemas/ServiceInfo.Version" + }, + "state": { + "$ref": "#/components/schemas/ServiceInfo.State" + }, + "transportInfo": { + "$ref": "#/components/schemas/TransportInfo" + }, + "serializer": { + "$ref": "#/components/schemas/SerializerTypes" + } + } + }, + "Subscription": { + "description": "A link to the related subscription", + "type": "object", + "required": [ + "subscription" + ], + "properties": { + "subscription": { + "$ref": "#/components/schemas/LinkType" + } + } + }, + "TimingCaps.NtpServers.AuthenticationKeyNum": { + "description": "Authentication key number", + "type": "integer", + "format": "uint32", + "example": 1 + }, + "TimingCaps.NtpServers.AuthenticationOption": { + "description": "NTP authentication option", + "type": "string", + "enum": [ + "NONE", + "SYMMETRIC_KEY", + "AUTO_KEY" + ], + "example": "NONE" + }, + "TimingCaps.NtpServers.DelayReqMaxRate": { + "description": "Acceptable maximum rate of the Delay_Req messages in packets per second", + "type": "integer", + "format": "uint32", + "example": 10 + }, + "TimingCaps.NtpServers.LocalPriority": { + "description": "NTP server local priority", + "type": "integer", + "format": "uint32", + "example": 1 + }, + "TimingCaps.NtpServers.MaxPollingInterval": { + "description": "Maximum poll interval for NTP messages, in seconds as a power of two. Range 3...17", + "type": "integer", + "format": "uint32", + "example": 17 + }, + "TimingCaps.NtpServers.MinPollingInterval": { + "description": "Minimum poll interval for NTP messages, in seconds as a power of two. Range 3...17", + "type": "integer", + "format": "uint32", + "example": 3 + }, + "TimingCaps.NtpServers.NtpServerAddr": { + "description": "NTP server address", + "type": "string", + "example": "192.0.2.0" + }, + "TimingCaps.NtpServers.NtpServerAddrType": { + "description": "Address type of NTP server", + "type": "string", + "enum": [ + "IP_ADDRESS", + "DNS_NAME" + ], + "example": "IP_ADDRESS" + }, + "TimingCaps.NtpServers_PtpMasterIpAddress": { + "description": "PTP Master IP Address", + "type": "string", + "example": "192.0.2.0" + }, + "TimingCaps.NtpServers_PtpMasterLocalPriority": { + "description": "PTP Master local priority", + "type": "integer", + "format": "uint32", + "example": 1 + }, + "TimingCaps.NtpServers": { + "description": "NTP server detail.", + "type": "object", + "required": [ + "ntpServerAddrType", + "ntpServerAddr", + "minPollingInterval", + "maxPollingInterval", + "localPriority", + "authenticationOption", + "authenticationKeyNum" + ], + "properties": { + "ntpServerAddrType": { + "$ref": "#/components/schemas/TimingCaps.NtpServers.NtpServerAddrType" + }, + "ntpServerAddr": { + "$ref": "#/components/schemas/TimingCaps.NtpServers.NtpServerAddr" + }, + "minPollingInterval": { + "$ref": "#/components/schemas/TimingCaps.NtpServers.MinPollingInterval" + }, + "maxPollingInterval": { + "$ref": "#/components/schemas/TimingCaps.NtpServers.MaxPollingInterval" + }, + "localPriority": { + "$ref": "#/components/schemas/TimingCaps.NtpServers.LocalPriority" + }, + "authenticationOption": { + "$ref": "#/components/schemas/TimingCaps.NtpServers.AuthenticationOption" + }, + "authenticationKeyNum": { + "$ref": "#/components/schemas/TimingCaps.NtpServers.AuthenticationKeyNum" + } + } + }, + "TimingCaps_PtpMasters": { + "description": "NTP server detail.", + "type": "object", + "required": [ + "ptpMasterIpAddress", + "ptpMasterLocalPriority", + "delayReqMaxRate" + ], + "properties": { + "ptpMasterIpAddress": { + "$ref": "#/components/schemas/TimingCaps.NtpServers_PtpMasterIpAddress" + }, + "ptpMasterLocalPriority": { + "$ref": "#/components/schemas/TimingCaps.NtpServers_PtpMasterLocalPriority" + }, + "delayReqMaxRate": { + "$ref": "#/components/schemas/TimingCaps.NtpServers.DelayReqMaxRate" + } + } + }, + "TimingCaps.TimeStamp": { + "description": "time", + "type": "object", + "required": [ + "nanoSeconds", + "seconds" + ], + "properties": { + "seconds": { + "type": "integer", + "format": "uint32", + "description": "The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", + "example": 1577836800 + }, + "nanoSeconds": { + "type": "integer", + "format": "uint32", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", + "example": 0 + } + } + }, + "TimingCaps": { + "description": "This type represents the information provided by the mobile edge platform in response to the Timing capabilities Query message.", + "type": "object", + "properties": { + "timeStamp": { + "$ref": "#/components/schemas/TimingCaps.TimeStamp" + }, + "ntpServers": { + "description": "Available NTP servers", + "type": "array", + "items": { + "$ref": "#/components/schemas/TimingCaps.NtpServers" + } + }, + "ptpMasters": { + "description": "Available PTP Masters", + "type": "array", + "items": { + "$ref": "#/components/schemas/TimingCaps_PtpMasters" + } + } + } + }, + "TrafficFilter.Address": { + "description": "Identify the traffic ip address.", + "type": "string", + "example": "192.168.1.1" + }, + "TrafficFilter.DSCP": { + "description": "Used to match all IPv4 packets that have the same Differentiated Services Code Point (DSCP)", + "type": "integer", + "format": "uint32", + "example": 0 + }, + "TrafficFilter.Port": { + "description": "A port", + "type": "string", + "example": "8080" + }, + "TrafficFilter.Protocol": { + "description": "Protocol of the traffic filter", + "type": "string", + "example": "?" + }, + "TrafficFilter.QCI": { + "description": "Used to match all packets that have the same Quality Class Indicator (QCI).", + "type": "integer", + "format": "uint32", + "example": 1 + }, + "TrafficFilter.TC": { + "description": "Used to match all IPv6 packets that have the same Traffic Class.", + "type": "integer", + "format": "uint32", + "example": 1 + }, + "TrafficFilter.Token": { + "description": "Used for token based traffic rule", + "type": "string", + "example": "?" + }, + "TrafficFilter.TunnelAddress": { + "description": "Used for GTP tunnel based traffic rule", + "type": "string", + "example": "?" + }, + "TrafficFilter.TunnelPort": { + "description": "Used for GTP tunnel based traffic rule", + "type": "string", + "example": "?" + }, + "TrafficFilter": { + "description": "This type represents the traffic filter.", + "type": "object", + "properties": { + "srcAddress": { + "description": "An IP address or a range of IP address. For IPv4, the IP address could be an IP address plus mask, or an individual IP address, or a range of IP addresses. For IPv6, the IP address could be an IP prefix, or a range of IP prefixes.", + "type": "array", + "items": { + "$ref": "#/components/schemas/TrafficFilter.Address" + } + }, + "dstAddress": { + "description": "An IP address or a range of IP address. For IPv4, the IP address could be an IP address plus mask, or an individual IP address, or a range of IP addresses. For IPv6, the IP address could be an IP prefix, or a range of IP prefixes.", + "type": "array", + "items": { + "$ref": "#/components/schemas/TrafficFilter.Address" + } + }, + "srcPort": { + "description": "A port or a range of ports", + "type": "array", + "items": { + "$ref": "#/components/schemas/TrafficFilter.Port" + } + }, + "dstPort": { + "description": "A port or a range of ports", + "type": "array", + "items": { + "$ref": "#/components/schemas/TrafficFilter.Port" + } + }, + "protocol": { + "description": "Specify the protocol of the traffic filter", + "type": "array", + "items": { + "$ref": "#/components/schemas/TrafficFilter.Protocol" + } + }, + "token": { + "description": "Used for token based traffic rule", + "type": "array", + "items": { + "$ref": "#/components/schemas/TrafficFilter.Token" + } + }, + "srcTunnelAddress": { + "description": "Used for GTP tunnel based traffic rule", + "type": "array", + "items": { + "$ref": "#/components/schemas/TrafficFilter.TunnelAddress" + } + }, + "tgtTunnelAddress": { + "description": "Used for GTP tunnel based traffic rule", + "type": "array", + "items": { + "$ref": "#/components/schemas/TrafficFilter.TunnelAddress" + } + }, + "srcTunnelPort": { + "description": "Used for GTP tunnel based traffic rule", + "type": "array", + "items": { + "$ref": "#/components/schemas/TrafficFilter.TunnelPort" + } + }, + "dstTunnelPort": { + "description": "Used for GTP tunnel based traffic rule", + "type": "array", + "items": { + "$ref": "#/components/schemas/TrafficFilter.TunnelPort" + } + }, + "qCI": { + "$ref": "#/components/schemas/TrafficFilter.QCI" + }, + "dSCP": { + "$ref": "#/components/schemas/TrafficFilter.DSCP" + }, + "tC": { + "$ref": "#/components/schemas/TrafficFilter.TC" + } + } + }, + "TrafficRule.Action": { + "description": "The action of the ME host data plane when a packet matches the trafficFilter", + "type": "string", + "enum": [ + "DROP", + "FORWARD_DECAPSULATED", + "FORWARD_AS_IS", + "PASSTHROUGH", + "DUPLICATE_DECAPSULATED", + "DUPLICATE_AS_IS" + ], + "example": "DROP" + }, + "TrafficRule.FilterType": { + "description": "Definition of filter per FLOW or PACKET. If flow the filter match UE->EPC packet and the reverse packet is handled in the same context", + "type": "string", + "enum": [ + "FLOW", + "PACKET" + ], + "example": "FLOW" + }, + "TrafficRule.Id": { + "description": "Identify the traffic rule.", + "type": "string", + "example": "TrafficRule1" + }, + "TrafficRule_Priority": { + "description": "Priority of this traffic rule. If traffic rule conflicts, the one with higher priority take precedence", + "type": "integer", + "format": "uint32", + "example": 1 + }, + "TrafficRule.State": { + "description": "Contains the traffic rule state", + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ], + "example": "ACTIVE" + }, + "TrafficRule": { + "description": "This type represents the general information of a traffic rule.", + "type": "object", + "required": [ + "trafficRuleId", + "filterType", + "priority", + "trafficFilter", + "action", + "state" + ], + "properties": { + "trafficRuleId": { + "$ref": "#/components/schemas/TrafficRule.Id" + }, + "filterType": { + "$ref": "#/components/schemas/TrafficRule.FilterType" + }, + "priority": { + "$ref": "#/components/schemas/TrafficRule_Priority" + }, + "trafficFilter": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TrafficFilter" + } + }, + "action": { + "$ref": "#/components/schemas/TrafficRule.Action" + }, + "dstInterface": { + "$ref": "#/components/schemas/DestinationInterface" + }, + "state": { + "$ref": "#/components/schemas/TrafficRule.State" + } + } + }, + "TransportInfo.Description": { + "description": "Human-readable description of this transport", + "type": "string", + "example": "REST API" + }, + "TransportInfo.Id": { + "description": "The identifier of this transport", + "type": "string", + "example": "TransId12345" + }, + "TransportInfo.ImplSpecificInfo": { + "description": "Additional implementation specific details of the transport", + "type": "object" + }, + "TransportInfo.Name": { + "description": "The name of this transport", + "type": "string", + "example": "REST" + }, + "TransportInfo.Protocol": { + "description": "The name of the protocol used. Shall be set to HTTP for a REST API.", + "type": "string", + "example": "HTTP" + }, + "TransportInfo.Version": { + "description": "The version of the protocol used", + "type": "string", + "example": "2.0" + }, + "TransportInfo": { + "description": "This type represents the general information of a mobile edge service.", + "type": "object", + "required": [ + "id", + "name", + "type", + "protocol", + "version", + "endpoint", + "security" + ], + "properties": { + "id": { + "$ref": "#/components/schemas/TransportInfo.Id" + }, + "name": { + "$ref": "#/components/schemas/TransportInfo.Name" + }, + "description": { + "$ref": "#/components/schemas/TransportInfo.Description" + }, + "type": { + "$ref": "#/components/schemas/TransportTypes" + }, + "protocol": { + "$ref": "#/components/schemas/TransportInfo.Protocol" + }, + "version": { + "$ref": "#/components/schemas/TransportInfo.Version" + }, + "endpoint": { + "description": "This type represents information about a transport endpoint", + "type": "object", + "oneOf": [ + { + "$ref": "#/components/schemas/EndPointInfo.Uris" + }, + { + "$ref": "#/components/schemas/EndPointInfo.Addresses" + }, + { + "$ref": "#/components/schemas/EndPointInfo.Alternative" + } + ] + }, + "security": { + "$ref": "#/components/schemas/SecurityInfo" + }, + "implSpecificInfo": { + "$ref": "#/components/schemas/TransportInfo.ImplSpecificInfo" + } + } + }, + "TransportTypes": { + "description": "The enumeration TransportTypes represents types of transports", + "type": "string", + "enum": [ + "REST_HTTP", + "MB_TOPIC_BASED", + "MB_ROUTING", + "MB_PUBSUB", + "RPC", + "RPC_STREAMING", + "WEBSOCKET" + ], + "example": "REST_HTTP" + }, + "TunnelInfo.TunnelDstAddress": { + "description": "Destination address of the tunnel", + "type": "string", + "example": "?" + }, + "TunnelInfo.TunnelSrcAddress": { + "description": "Source address of the tunnel", + "type": "string", + "example": "?" + }, + "TunnelInfo.TunnelType": { + "description": "This type represents the tunnel information.", + "type": "string", + "enum": [ + "GTP_U", + "GRE" + ], + "example": "GTP_U" + }, + "TunnelInfo": { + "description": "This type represents the tunnel information.", + "type": "object", + "required": [ + "tunnelType" + ], + "properties": { + "tunnelType": { + "$ref": "#/components/schemas/TunnelInfo.TunnelType" + }, + "tunnelDstAddress": { + "$ref": "#/components/schemas/TunnelInfo.TunnelDstAddress" + }, + "tunnelSrcAddress": { + "$ref": "#/components/schemas/TunnelInfo.TunnelSrcAddress" + } + } + } + }, + "parameters": { + "Path.AppInstanceId": { + "name": "appInstanceId", + "description": "Represents a mobile edge application instance. Note that the appInstanceId is allocated by the mobile edge platform manager.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "Path.DnsRuleId": { + "name": "dnsRuleId", + "description": "Represents a DNS rule.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "Path.SubscriptionId": { + "name": "subscriptionId", + "description": "Represents a subscription to the notifications from the mobile edge platform.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "Path.SubscriptionType": { + "name": "subscriptionType", + "description": "Represents a subscription type to the notifications from the mobile edge platform.", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "AppTerminationNotificationSubscription", + "SerAvailabilityNotificationSubscription" + ] + } + }, + "Path.ServiceId": { + "name": "serviceId", + "description": "Represents a mobile edge service instance.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "Path.TrafficRuleId": { + "name": "trafficRuleId", + "description": "Represents a traffic rule.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "Query.Ser_category_id": { + "name": "ser_category_id", + "description": "A mobile edge application instance may use ser_category_id as an input parameter to query the availability of a list of mobile edge service instances in a serCategory. Either \"ser_instance_id\" or \"ser_name\" or \"ser_category_id\" or none of them shall be present.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + "Query.Ser_instance_id": { + "name": "ser_instance_id", + "description": "A mobile edge application instance may use multiple ser_instance_ids as an input parameter to query the availability of a list of mobile edge service instances. Either \"ser_instance_id\" or \"ser_name\" or \"ser_category_id\" or none of them shall be present.", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Query.Ser_name": { + "name": "ser_name", + "description": "A mobile edge application instance may use multiple ser_names as an input parameter to query the availability of a list of mobile edge service instances. Either \"ser_instance_id\" or \"ser_name\" or \"ser_category_id\" or none of them shall be present.", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "responses": { + "ApplicationsDnsRules.200": { + "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", + "content": { + "application/json": { + "schema": { + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/DnsRule" + } + }, + "examples": { + "DnsRules": { + "$ref": "#/components/examples/DnsRules" + } + } + } + }, + "links": { + "getIndividualMeDNSRule": { + "$ref": "#/components/links/GetIndividualMeDNSRule" + }, + "putIndividualMeDNSRule": { + "$ref": "#/components/links/PutIndividualMeDNSRule" + } + } + }, + "ApplicationsDnsRule.200": { + "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DnsRule" + }, + "examples": { + "DnsRule": { + "$ref": "#/components/examples/DnsRule" + } + } + } + } + }, + "ApplicationsSubscriptions.200": { + "description": "Upon success, a response body containing the list of links to the requested subscriptions is returned.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Mp1SubscriptionLinkList" + } + } + }, + "links": { + "getIndividualMeMp1SubscriptionLinkList": { + "$ref": "#/components/links/GetIndividualMeMp1SubscriptionLinkList" + }, + "delIndividualMeMp1SubscriptionLinkList": { + "$ref": "#/components/links/DelIndividualMeMp1SubscriptionLinkList" + } + } + }, + "ApplicationsSubscriptions.201": { + "description": "Entity body in the request contains a subscription to the mobile edge service availability notifications that is to be created.", + "headers": { + "location": { + "description": "The resource URI of the created resource", + "schema": { + "type": "string", + "format": "uri" + } + } + }, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/AppTerminationNotificationSubscription" + }, + { + "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription" + } + ] + } + } + }, + "links": { + "getIndividualMeMp1Subscription": { + "$ref": "#/components/links/GetIndividualMeMp1Subscription" + }, + "delIndividualMeMp1Subscription": { + "$ref": "#/components/links/DelIndividualMeMp1Subscription" + } + } + }, + "ApplicationsSubscription.200": { + "description": "Upon success, a response body containing the requested subscription is returned.", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/AppTerminationNotificationSubscription" + }, + { + "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription" + } + ] + } + } + } + }, + "ApplicationsTrafficRules.200": { + "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", + "content": { + "application/json": { + "schema": { + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/TrafficRule" + } + }, + "examples": { + "TrafficRules": { + "$ref": "#/components/examples/TrafficRules" + } + } + } + }, + "links": { + "getIndividualMeTrafficRule": { + "$ref": "#/components/links/GetIndividualMeTrafficRule" + }, + "putIndividualMeTrafficRule": { + "$ref": "#/components/links/PutIndividualMeTrafficRule" } } }, - "Query.ServiceCont": { - "name": "serviceCont", - "in": "query", - "description": "Required service continuity mode for this application", - "required": false, - "schema": { - "type": "string", - "enum": [ - "SERVICE_CONTINUITY_NOT_REQUIRED", - "SERVICE_CONTINUITY_REQUIRED" - ] + "ApplicationsTrafficRule.200": { + "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrafficRule" + }, + "examples": { + "TrafficRule": { + "$ref": "#/components/examples/TrafficRule" + } + } + } } }, - "Query.VendorId": { - "name": "vendorId", - "in": "query", - "description": "Vendor identifier", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" + "Services.200": { + "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", + "content": { + "application/json": { + "schema": { + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/ServiceInfo" + } + }, + "examples": { + "ServiceInfoList": { + "$ref": "#/components/examples/ServiceInfoList" + } + } + } + }, + "links": { + "getIndividualMeService": { + "$ref": "#/components/links/GetIndividualMeService" + }, + "putIndividualMeService": { + "$ref": "#/components/links/PutIndividualMeService" } } }, - "Path.ContextId": { - "name": "contextId", - "in": "path", - "description": "Uniquely identifies the application context in the MEC system. It is assigned by the MEC system and included in the response to an AppContext create.", - "required": true, - "schema": { - "type": "string" - } - } - }, - "requestBodies": { - "AppContext": { - "description": "Uniquely identifies the application context in the MEC system. It is assigned by the MEC system and included in the response to an AppContext create.", + "Services.201": { + "description": "Upon success, the HTTP response shall include a Location HTTP header that contains the resource URI of the created resource.", + "headers": { + "location": { + "description": "The resource URI of the created resource", + "schema": { + "type": "string", + "format": "uri" + } + } + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AppContext" + "$ref": "#/components/schemas/ServiceInfo" + }, + "examples": { + "ServiceInfo": { + "$ref": "#/components/examples/ServiceInfo" + } } } }, - "required": true - } - }, - "responses": { - "AppContext": { - "description": "The response body contains the Application Context as it was created by the MEC system", + "links": { + "getIndividualMeService": { + "$ref": "#/components/links/GetIndividualMeService" + }, + "putIndividualMeService": { + "$ref": "#/components/links/PutIndividualMeService" + } + } + }, + "ServicesServiceId.200": { + "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AppContext" + "$ref": "#/components/schemas/ServiceInfo" + }, + "examples": { + "ServiceInfo": { + "$ref": "#/components/examples/ServiceInfo" + } } } } }, - "AppList": { - "description": "The response body contains the ApplicationList resource available for the querying UE application", + "TimingCurrentTime.200": { + "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApplicationList" + "$ref": "#/components/schemas/CurrentTime" } } } }, - "Error.400": { - "description": "Bad Request. It is used to indicate that incorrect parameters were passed to the request.", + "TimingCaps.200": { + "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", "content": { - "application/problem+json": { + "application/json": { "schema": { - "$ref": "#/components/schemas/ProblemDetails" + "$ref": "#/components/schemas/TimingCaps" } - }, - "text/plain": { + } + } + }, + "Transports.200": { + "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", + "content": { + "application/json": { "schema": { - "$ref": "#/components/schemas/Empty" + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/TransportInfo" + } } } + }, + "links": { + "getTransportInfo": { + "$ref": "#/components/links/GetTransportInfo" + } } }, - "Error.401": { - "description": "Unauthorized. It is used when the client did not submit the appropriate credentials.", + "Error.400": { + "description": "Bad Request", "content": { "application/problem+json": { "schema": { @@ -309,7 +2110,7 @@ } }, "Error.403": { - "description": "Forbidden. The operation is not allowed given the current status of the resource. ", + "description": "Forbidden", "content": { "application/problem+json": { "schema": { @@ -319,7 +2120,7 @@ } }, "Error.404": { - "description": "Not Found. It is used when a client provided a URI that cannot be mapped to a valid resource URI.", + "description": "Not Found", "content": { "application/problem+json": { "schema": { @@ -332,286 +2133,396 @@ } } } - } - }, - "securitySchemes": { - "OauthSecurity": { - "type": "oauth2", - "flows": { - "clientCredentials": { - "tokenUrl": "https://oauth.exampleAPI/token", - "scopes": { - "all": "Single oauth2 scope for API" + }, + "Error.412": { + "description": "Precondition Failed", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Empty" } } } } }, - "schemas": { - "Empty": { - "description": "Empty schema" - }, - "ProblemDetails": { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/Problem.type" - }, - "title": { - "$ref": "#/components/schemas/Problem.title" - }, - "status": { - "$ref": "#/components/schemas/Problem.status" - }, - "detail": { - "$ref": "#/components/schemas/Problem.detail" - }, - "instance": { - "$ref": "#/components/schemas/Problem.instance" + "requestBodies": { + "ApplicationsDnsRule": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DnsRule" + } } - } - }, - "Problem.type": { - "type": "string", - "format": "uri", - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type" + }, + "description": "The updated state is included in the entity body of the request.", + "required": true }, - "Problem.title": { - "type": "string", - "description": "A short, human-readable summary of the problem type" + "ApplicationsSubscriptions": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/AppTerminationNotificationSubscription" + }, + { + "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription" + } + ] + } + } + }, + "description": "Entity body in the request contains a subscription to the mobile edge application termination notifications that is to be created.", + "required": true }, - "Problem.status": { - "type": "integer", - "format": "uint32", - "description": "The HTTP status code for this occurrence of the problem" + "ApplicationsTrafficRule": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrafficRule" + } + } + }, + "description": "One or more updated attributes that are allowed to be changed", + "required": true }, - "Problem.detail": { - "type": "string", - "description": "A human-readable explanation specific to this occurrence of the problem" + "Services": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceInfo" + } + } + }, + "description": "New ServiceInfo with updated \"state\" is included as entity body of the request", + "required": true }, - "Problem.instance": { - "type": "string", - "format": "uri", - "description": "A URI reference that identifies the specific occurrence of the problem" + "Services.Post": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceInfo.Post" + } + } + }, + "description": "New ServiceInfo with updated \"state\" is included as entity body of the request", + "required": true }, - "ApplicationList": { - "description": "Information on available applications", - "type": "object", - "properties": { - "appInfo": { - "$ref": "#/components/schemas/AppInfo" - }, - "vendorSpecificExt": { - "$ref": "#/components/schemas/VendorSpecificExt" + "ServicesServiceId": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceInfo" + } } - } + }, + "description": "New ServiceInfo with updated \"state\" is included as entity body of the request", + "required": true }, - "AppContext": { - "description": "Information on application context created by the MEC system", - "type": "object", - "required": [ - "contextId", - "associateUeAppId", - "appInfo" - ], - "properties": { - "contextId": { - "$ref": "#/components/schemas/ContextId" - }, - "associateUeAppId": { - "$ref": "#/components/schemas/AssociateUeAppId" - }, - "callbackReference": { - "$ref": "#/components/schemas/CallbackReference" - }, - "appInfo": { - "$ref": "#/components/schemas/RequiredAppInfo" + "AppTerminationNotification": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppTerminationNotification" + } } } }, - "NotificationEvent": { - "description": "The parameters used in the method \"Receiving notification events\".", - "type": "object", - "required": [ - "referenceURI" - ], - "properties": { - "referenceURI": { - "$ref": "#/components/schemas/ReferenceURL" + "ServiceAvailabilityNotification": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceAvailabilityNotification" + } } } - }, - "VendorSpecificExtList": { - "description": "Extension for vendor specific information.", - "type": "array", - "minItems": 0, - "items": { - "$ref": "#/components/schemas/VendorSpecificExt" + } + }, + "callbacks": { + "AppTerminationNotification": { + "{$request.body#/callbackReference}": { + "post": { + "description": "Represents the information that the MEP notifies the subscribed application instance about the corresponding application instance termination/stop", + "operationId": "AppTerminationNotification_POST", + "tags": [ + "callback" + ], + "requestBody": { + "$ref": "#/components/requestBodies/AppTerminationNotification" + }, + "responses": { + "200": { + "description": "Expected responses from callback consumer, if it accepts the callback" + } + } + } } }, - "VendorSpecificExt": { - "description": "Extension for vendor-specific information", - "required": [ - "vendorId" - ], - "properties": { - "vendorId": { - "$ref": "#/components/schemas/VendorId" + "ServiceAvailabilityNotification": { + "{$request.body#/callbackReference}": { + "post": { + "description": "'Represents the service availability information that is used in the following cases - when the MEC platform announces the newly available\n services to the authorized relevant MEC applications (e.g. \n the applications that indicate the services as \"optional\" \n or \"required\") that are subscribed to the corresponding \n service availability notifications\n- when the MEC platform notifies the authorized relevant applications that are subscribed to the corresponding service availability notifications about the service availability changes.'", + "operationId": "ServiceAvailabilityNotification_POST", + "tags": [ + "callback" + ], + "requestBody": { + "$ref": "#/components/requestBodies/ServiceAvailabilityNotification" + }, + "responses": { + "200": { + "description": "Expected responses from callback consumer, if it accepts the callback" + } + } } } + } + }, + "links": { + "GetIndividualMeService": { + "operationId": "ServicesServiceId_GET", + "description": "The `serviceId` value returned in the response can be used as the `serviceId` parameter in `GET /services/{serviceId}`", + "parameters": { + "serviceId": "$response.body#/serviceId" + } }, - "ContextId": { - "description": "Uniquely identifies the application context in the MEC system. Assigned by the MEC system and included in the response. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AssociateUeAppId": { - "description": "Uniquely identifies the UE application. Included in the request. The length of the value shall not exceed 32 characters.", - "type": "string" + "PutIndividualMeService": { + "operationId": "ServicesServiceId_PUT", + "description": "The `serviceId` value returned in the response can be used as the `serviceId` parameter in `PUT /services/{serviceId}`", + "parameters": { + "serviceId": "$response.body#/serviceId" + } }, - "VendorId": { - "description": "Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of this vendor specific extension is not defined", - "type": "string" + "GetIndividualMeDNSRule": { + "operationId": "ApplicationsDnsRule_GET", + "description": "The `dnsRuleId` value returned in the response can be used as the `dnsRuleId` parameter in `GET /applications/{appInstanceId}/dns_rules/{dnsRuleId}`", + "parameters": { + "dnsRuleId": "$response.body#/dnsRuleId" + } }, - "AppInfo": { - "description": "User applications available for the UE application", - "type": "array", - "items": { - "$ref": "#/components/schemas/AppInfoList" + "PutIndividualMeDNSRule": { + "operationId": "ApplicationsDnsRule_PUT", + "description": "The `dnsRuleId` value returned in the response can be used as the `dnsRuleId` parameter in `PUT /applications/{appInstanceId}/dns_rules/{dnsRuleId}`", + "parameters": { + "dnsRuleId": "$response.body#/dnsRuleId" } }, - "AppInfoList": { - "type": "object", - "required": [ - "appName", - "appProvider", - "appDescription" - ], - "properties": { - "appName": { - "$ref": "#/components/schemas/AppName" - }, - "appProvider": { - "$ref": "#/components/schemas/AppProvider" - }, - "appSoftVersion": { - "$ref": "#/components/schemas/AppSoftVersion" - }, - "appDescription": { - "$ref": "#/components/schemas/AppDescription" - }, - "appCharcs": { - "$ref": "#/components/schemas/AppCharcs" - } + "GetIndividualMeTrafficRule": { + "operationId": "ApplicationsTrafficRule_GET", + "description": "The `trafficRuleId` value returned in the response can be used as the `trafficRuleId` parameter in `GET /applications/{appInstanceId}/traffic_rules/{trafficRuleId}`", + "parameters": { + "trafficRuleId": "$response.body#/trafficRuleId" } }, - "RequiredAppInfo": { - "description": "Included in the request", - "type": "object", - "required": [ - "appName", - "appProvider", - "referenceURL" - ], - "properties": { - "appName": { - "$ref": "#/components/schemas/AppName" - }, - "appProvider": { - "$ref": "#/components/schemas/AppProvider" - }, - "appSoftVersion": { - "$ref": "#/components/schemas/AppSoftVersion" - }, - "appDescription": { - "$ref": "#/components/schemas/AppDescription" - }, - "referenceURL": { - "$ref": "#/components/schemas/ReferenceURL" - }, - "appPackageSource": { - "$ref": "#/components/schemas/AppPackageSource" - } + "PutIndividualMeTrafficRule": { + "operationId": "ApplicationsTrafficRule_PUT", + "description": "The `trafficRuleId` value returned in the response can be used as the `trafficRuleId` parameter in `PUT /applications/{appInstanceId}/traffic_rules/{trafficRuleId}`", + "parameters": { + "trafficRuleId": "$response.body#/trafficRuleId" } }, - "AppCharcs": { - "description": "The application characteristics relate to the system resources consumed by the application. UE application can use this information e.g., for estimating the cost of use of the application or for the expected user experience", - "type": "object", - "properties": { - "memory": { - "$ref": "#/components/schemas/Memory" - }, - "storage": { - "$ref": "#/components/schemas/Storage" - }, - "latency": { - "$ref": "#/components/schemas/Latency" - }, - "bandwidth": { - "$ref": "#/components/schemas/Bandwidth" - }, - "serviceCont": { - "$ref": "#/components/schemas/ServiceCont" - } + "GetTransportInfo": { + "operationId": "AppServices_POST", + "description": "The `id` value returned in the response can be used as the `transportId` parameter in `POST /applications/{appInstanceId}/services`. The first transport is provided as the link as wildcards are not supported", + "parameters": { + "transportId": "$response.body#/0/id" } }, - "Memory": { - "description": "The maximum size in Mbytes of the memory resource reserved for the MEC application instance in the MEC system", - "type": "integer", - "format": "uint32" + "GetIndividualMeMp1Subscription": { + "operationId": "ApplicationsSubscription_GET", + "description": "The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `GET /applications/{appInstanceId}/subscriptions/{subscriptionType}/{subscriptionId}`", + "parameters": { + "description": "regex = \\/mp1\\/v1\\/applications\\/.*\\/subscriptions\\/.*\\/(.*);subscriptionId = href.match(regex)[1];// where \"href\" is an attribute within the subscription attribute within the _links attribute", + "subscriptionId": "TBC" + } }, - "Storage": { - "description": "The maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system", - "type": "integer", - "format": "uint32" + "DelIndividualMeMp1Subscription": { + "operationId": "ApplicationsSubscription_DELETE", + "description": "The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `DELETE /applications/{appInstanceId}/subscriptions/{subscriptionType}/{subscriptionId}`", + "parameters": { + "description": "regex = \\/mp1\\/v1\\/applications\\/.*\\/subscriptions\\/.*\\/(.*);subscriptionId = href.match(regex)[1];// where \"href\" is an attribute within the subscription attribute within the _links attribute", + "subscriptionId": "TBC" + } }, - "Latency": { - "description": "The target round trip time in milliseconds supported by the MEC system for the MEC application instance", - "type": "integer", - "format": "uint32" + "GetIndividualMeMp1SubscriptionLinkList": { + "operationId": "ApplicationsSubscription_GET", + "description": "The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `GET /applications/{appInstanceId}/subscriptions/{subscriptionType}/{subscriptionId}`", + "parameters": { + "description": "regex = \\/mp1\\/v1\\/applications\\/.*\\/subscriptions\\/.*\\/(.*);subscriptionId = href.match(regex)[1];// where \"href\" is an attribute within the subscription attribute within the _links attribute", + "subscriptionId": "TBC" + } }, - "Bandwidth": { - "description": "The required connection bandwidth in kbit/s for the use of the mobile edge application instance", - "type": "integer", - "format": "uint32" + "DelIndividualMeMp1SubscriptionLinkList": { + "operationId": "ApplicationsSubscription_DELETE", + "description": "The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `DELETE /applications/{appInstanceId}/subscriptions/{subscriptionType}/{subscriptionId}`", + "parameters": { + "description": "regex = \\/mp1\\/v1\\/applications\\/.*\\/subscriptions\\/.*\\/(.*);subscriptionId = href.match(regex)[1];// where \"href\" is an attribute within the subscription attribute within the _links attribute", + "subscriptionId": "TBC" + } + } + }, + "examples": { + "DnsRule": { + "value": { + "dnsRuleId": "DnsRule1", + "domainName": "www.example.com", + "ipAddressType": "IP_V4", + "ipAddress": "146.241.7.3", + "ttl": 300, + "state": "ACTIVE" + } }, - "ServiceCont": { - "description": "Required service continuity mode for this application.", - "type": "string", - "enum": [ - "SERVICE_CONTINUITY_NOT_REQUIRED", - "SERVICE_CONTINUITY_REQUIRED" + "DnsRules": { + "value": [ + { + "dnsRuleId": "DnsRule1", + "domainName": "www.example.com", + "ipAddressType": "IP_V4", + "ipAddress": "146.241.7.3", + "ttl": 300, + "state": "ACTIVE" + } ] }, - "AppName": { - "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AppProvider": { - "description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AppSoftVersion": { - "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AppDescription": { - "description": "Human readable description of the MEC application. NOTE the language support may be limited. The length of the value shall not exceed 128 characters.", - "type": "string" + "ServiceInfo": { + "value": { + "serInstanceId": "ServiceInstance123", + "serName": "ExampleService", + "serCategory": { + "href": "catItem1", + "id": "id12345", + "name": "RNI", + "version": "version1" + }, + "version": "ServiceVersion1", + "state": "ACTIVE", + "transportInfo": { + "id": "TransId12345", + "name": "REST", + "description": "REST API", + "type": "REST_HTTP", + "protocol": "HTTP", + "version": "2.0", + "endpoint": { + "uris": [ + "/meMp1/service/EntryPoint" + ] + }, + "security": { + "oAuth2Info": { + "grantTypes": [ + "OAUTH2_CLIENT_CREDENTIALS" + ], + "tokenEndpoint": "/meMp1/security/TokenEndPoint" + } + } + }, + "serializer": "JSON" + } }, - "CallbackReference": { - "description": "URI assigned by the UE application to receive application lifecycle related notifications. Included in the request. This subscription stays alive for the lifetime of the application context.", - "type": "string", - "format": "uri" + "ServiceInfoList": { + "value": [ + { + "serInstanceId": "ServiceInstance123", + "serName": "ExampleService", + "serCategory": { + "href": "catItem1", + "id": "id12345", + "name": "RNI", + "version": "version1" + }, + "version": "ServiceVersion1", + "state": "ACTIVE", + "transportInfo": { + "id": "TransId12345", + "name": "REST", + "description": "REST API", + "type": "REST_HTTP", + "protocol": "HTTP", + "version": "2.0", + "endpoint": { + "addresses": [ + { + "host": "192.0.2.0", + "port": 8080 + } + ] + }, + "security": { + "oAuth2Info": { + "grantTypes": [ + "OAUTH2_CLIENT_CREDENTIALS" + ], + "tokenEndpoint": "/meMp1/security/TokenEndPoint" + } + } + }, + "serializer": "JSON" + } + ] }, - "ReferenceURL": { - "description": "Address of the user application. Used as the reference URL for the application. Assigned by the MEC system and included in the response", - "type": "string", - "format": "uri" + "TrafficRule": { + "value": { + "trafficRuleId": "TrafficRule123", + "serName": "ExampleService", + "filterType": "FLOW", + "priority": 1, + "trafficFilter": [ + { + "srcAddress": [ + "192.168.2.0/24", + "192.168.3.0/24" + ], + "dstAddress": [ + "192.127.4.100/32" + ], + "dstPort": [ + "80" + ] + } + ], + "action": "FORWARD_DECAPSULATED", + "dstInterface": { + "interfaceType": "IP", + "dstIpAddress": "20.1.1.1" + }, + "state": "ACTIVE" + } }, - "AppPackageSource": { - "description": "URI of the application package. Included in the request if the application is not one in the ApplicationList. appPackageSource enables on-boarding of the application package into the MEC system. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 010-2", - "type": "string", - "format": "uri" + "TrafficRules": { + "value": [ + { + "trafficRuleId": "TrafficRule123", + "serName": "ExampleService", + "filterType": "FLOW", + "priority": 1, + "trafficFilter": [ + { + "srcAddress": [ + "192.168.2.0/24", + "192.168.3.0/24" + ], + "dstAddress": [ + "192.127.4.100/32" + ], + "dstPort": [ + "80" + ] + } + ], + "action": "FORWARD_DECAPSULATED", + "dstInterface": { + "interfaceType": "IP", + "dstIpAddress": "20.1.1.1" + }, + "state": "ACTIVE" + } + ] } } } diff --git a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pics.ttcn b/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pics.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..350ac05e2370c71b809f363a17fba20d7d858a8d --- /dev/null +++ b/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pics.ttcn @@ -0,0 +1,5 @@ +module AppEnablementAPI_Pics { + + modulepar boolean PICS_ENABLE_APP_API_SUPPORTED := true; + +} // End of module AppEnablementAPI_Pics diff --git a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pixits.ttcn b/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pixits.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..bdb9c1b07d82e21c24d34b2606eaf4f05a67f13a --- /dev/null +++ b/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pixits.ttcn @@ -0,0 +1,19 @@ +module AppEnablementAPI_Pixits { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibMec/AppEnablementAPI + import from AppEnablementAPI_TypesAndValues all; + + modulepar universal charstring PX_APP_INSTANCE_ID := "appInst01"; + + modulepar universal charstring PX_NON_EXISTENT_APP_INSTANCE_ID := "appInst99"; + + modulepar universal charstring PX_UE_IDENTITY_TAG := "UeTagA"; + + modulepar universal charstring PX_UE_IDENTITY_TAG_INVALID_STATE := "UeTagC"; + + modulepar universal charstring PX_UE_IDENTITY_TAG_UNKNOWN := "UeTagW"; + +} // End of module AppEnablementAPI_Pixits diff --git a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Templates.ttcn b/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Templates.ttcn index 144a57c1641e15503bf4920ae47c32ff96616512..7b6b7298df7587ae26d53ff6aa6518e86e96d401 100644 --- a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Templates.ttcn +++ b/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Templates.ttcn @@ -27,144 +27,44 @@ module AppEnablementAPI_Templates { instance := p_instance } // End of template mw_problem_details - template (value) ApplicationList m_application_list( - in template (value) AppInfo p_app_info, - in template (value) VendorSpecificExt p_vendor_specific_ext - ) := { - appInfo := p_app_info, - vendorSpecificExt := p_vendor_specific_ext - } // End of template m_application_list - - template (present) ApplicationList mw_application_list( - template (present) AppInfo p_app_info := ?, - template (present) VendorSpecificExt p_vendor_specific_ext := ? - ) := { - appInfo := p_app_info, - vendorSpecificExt := p_vendor_specific_ext - } // End of template mw_application_list - - template (value) AppContext m_app_context( - in template (value) ContextId p_context_id, - in template (value) AssociateUeAppId p_associate_ue_app_id, - in template (value) RequiredAppInfo p_app_info - ) := { - contextId := p_context_id, - associateUeAppId := p_associate_ue_app_id, - appInfo := p_app_info, - callbackReference := omit - } // End of template m_app_context - - template (present) AppContext mw_app_context( - template (present) ContextId p_context_id := ?, - template (present) AssociateUeAppId p_associate_ue_app_id := ?, - template (present) RequiredAppInfo p_app_info := ? - ) := { - contextId := p_context_id, - associateUeAppId := p_associate_ue_app_id, - appInfo := p_app_info, - callbackReference := * - } // End of template mw_app_context - - template (value) NotificationEvent m_notification_event( - in template (value) ReferenceURL p_reference_uri - ) := { - referenceURI := p_reference_uri - } // End of template m_notification_event - - template (present) NotificationEvent mw_notification_event( - template (present) ReferenceURL p_reference_uri := ? - ) := { - referenceURI := p_reference_uri - } // End of template mw_notification_event - - template (value) VendorSpecificExt m_vendor_specific_ext( - in template (value) VendorId p_vendor_id - ) := { - vendorId := p_vendor_id - } // End of template m_vendor_specific_ext - - template (present) VendorSpecificExt mw_vendor_specific_ext( - template (present) VendorId p_vendor_id := ? - ) := { - vendorId := p_vendor_id - } // End of template mw_vendor_specific_ext - - template (value) AppInfoList m_appInfo_list( - in template (value) AppName p_app_name, - in template (value) AppProvider p_app_provider, - in template (value) AppDescription p_app_description - ) := { - appName := p_app_name, - appProvider := p_app_provider, - appDescription := p_app_description, - appSoftVersion := omit, - appCharcs := omit - } // End of template m_appInfo_list - - template (present) AppInfoList mw_appInfo_list( - template (present) AppName p_app_name := ?, - template (present) AppProvider p_app_provider := ?, - template (present) AppDescription p_app_description := ? - ) := { - appName := p_app_name, - appProvider := p_app_provider, - appDescription := p_app_description, - appSoftVersion := *, - appCharcs := * - } // End of template mw_appInfo_list - - template (value) RequiredAppInfo m_required_app_info( - in template (value) AppName p_app_name, - in template (value) AppProvider p_app_provider, - in template (value) ReferenceURL p_reference_url - ) := { - appName := p_app_name, - appProvider := p_app_provider, - referenceURL := p_reference_url, - appSoftVersion := omit, - appDescription := omit, - appPackageSource := omit - } // End of template m_required_app_info - - template (present) RequiredAppInfo mw_required_app_info( - template (present) AppName p_app_name := ?, - template (present) AppProvider p_app_provider := ?, - template (present) ReferenceURL p_reference_url := ? - ) := { - appName := p_app_name, - appProvider := p_app_provider, - referenceURL := p_reference_url, - appSoftVersion := *, - appDescription := *, - appPackageSource := * - } // End of template mw_required_app_info - - template (value) AppCharcs m_app_charcs( - in template (value) Memory p_memory, - in template (value) Storage p_storage, - in template (value) Latency p_latency, - in template (value) Bandwidth p_bandwidth, - in template (value) ServiceCont p_service_cont - ) := { - memory := p_memory, - storage := p_storage, - latency := p_latency, - bandwidth := p_bandwidth, - serviceCont := p_service_cont - } // End of template m_app_charcs - - template (present) AppCharcs mw_app_charcs( - template (present) Memory p_memory := ?, - template (present) Storage p_storage := ?, - template (present) Latency p_latency := ?, - template (present) Bandwidth p_bandwidth := ?, - template (present) ServiceCont p_service_cont := ? - ) := { - memory := p_memory, - storage := p_storage, - latency := p_latency, - bandwidth := p_bandwidth, - serviceCont := p_service_cont - } // End of template mw_app_charcs - + template (value) TransportInfo m_transport_info( + in TransportInfo_Id p_id, + in TransportInfo_Name p_name, + in TransportTypes p_type_, + in TransportInfo_Protocol p_protocol, + in TransportInfo_Version p_version, + in template (value) TransportInfo_Endpoint p_endpoint, + in SecurityInfo p_security + ) := { + id := p_id, + name := p_name, + description := omit, + type_ := p_type_, + protocol := p_protocol, + version := p_version, + endpoint := p_endpoint, + security := p_security, + implSpecificInfo := omit + } // End of template m_transport_info + + template (present) TransportInfo mw_transport_info( + template (present) TransportInfo_Id p_id := ?, + template (present) TransportInfo_Name p_name := ?, + template (present) TransportTypes p_type_ := ?, + template (present) TransportInfo_Protocol p_protocol := ?, + template (present) TransportInfo_Version p_version := ?, + template (present) TransportInfo_Endpoint p_endpoint := ?, + template (present) SecurityInfo p_security := ? + ) := { + id := p_id, + name := p_name, + description := *, + type_ := p_type_, + protocol := p_protocol, + version := p_version, + endpoint := p_endpoint, + security := p_security, + implSpecificInfo := * + } // End of template mw_transport_info + } // End of module AppEnablementAPI_Templates diff --git a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_TypesAndValues.ttcn index 02d388f3f3b4b500e36b8d0263bb1d9ee28b9115..b5f97e7e13be052db031dbde10b6f31c8444ed7d 100644 --- a/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_TypesAndValues.ttcn @@ -10,6 +10,289 @@ module AppEnablementAPI_TypesAndValues { // LibCommon import from LibCommon_BasicTypesAndValues all; + /** + * @desc Maximum timeout value in seconds for graceful termination or graceful stop of an application instance. + */ + type UInt32 MaxGracefulTimeout; + + /** + * @desc Shall be set to AppTerminationNotification. + */ + type JSON.String NotificationType; + + /** + * @desc This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop. + */ + type record AppTerminationNotification { + NotificationType notificationType, + MaxGracefulTimeout maxGracefulTimeout, + Subscription links + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc It is used as the filtering criterion for the subscribed events. + */ + type JSON.String AppInstanceId; + + /** + * @desc URI selected by the mobile edge application instance to receive notifications on the subscribed mobile edge application instance management information. + * This shall be included in both the request and the response." + */ + type JSON.String AppTerminationNotificationSubscription_CallbackReference; + + /** + * @desc This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop. + */ + type record AppTerminationNotificationSubscription { + SubscriptionType subscriptionType, + AppTerminationNotificationSubscription_CallbackReference callbackReference, + Self links, + AppInstanceId appInstanceId + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Shall be set to AppTerminationNotificationSubscription. + */ + type JSON.String SubscriptionType; + + /** + * @desc Reference of the catalogue. + */ + type JSON.String CategoryRef_Href; + + /** + * @desc Unique identifier of the category. + */ + type JSON.String CategoryRef_Id; + + /** + * @desc Name of the category. + */ + type JSON.String Name; + + /** + * @desc Category version. + */ + type JSON.String CategoryRef_Version; + + /** + * @desc This type represents the category reference. + */ + type record CategoryRef { + CategoryRef_Href href, + CategoryRef_Id id, + Name name, + CategoryRef_Version version + } + + /** + * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. + */ + type UInt32 Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. + */ + type UInt32 NanoSeconds; + + /** + * @desc Platform Time Source status. 1 = TRACEABLE - time source is locked to the UTC time source. 2 = NONTRACEABLE - time source is not locked to the UTC time source. + */ + type enumerated TimeSourceStatus { + TRACEABLE (1), + NONTRACEABLE (2) + } + + /** + * @desc This type represents the information provided by the mobile edge platform in response to the Get Platform Time Request message. + * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. + * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. + * @member timeSourceStatus Platform Time Source status. 1 = TRACEABLE - time source is locked to the UTC time source. 2 = NONTRACEABLE - time source is not locked to the UTC time source. + */ + type record CurrentTime { + Seconds seconds, + NanoSeconds nanoSeconds, + TimeSourceStatus timeSourceStatus + } + + /** + * @desc Type of the interface. + */ + type enumerated InterfaceType { + TUNNEL, + MAC, + IP + } + + /** + * @desc IP address of the remote destination. + */ + type JSON.String DestinationInterface_IpAddress; + + /** + * @desc Source address identifies the MAC address of the interface. + */ + type JSON.String DestinationInterface_MacAddress; + + /** + * @desc This type represents the destination interface. + */ + type record DestinationInterface { + InterfaceType interfaceType, + TunnelInfo tunnelInfo optional, + DestinationInterface_MacAddress srcMacAddress optional, + DestinationInterface_MacAddress dstMacAddress optional, + DestinationInterface_IpAddress dstIpAddress optional + } + + /** + * @desc FQDN resolved by the DNS rule. + */ + type JSON.String DomainName; + + /** + * @desc Identifies the DNS Rule. + */ + type JSON.String DnsRule_Id; + + /** + * @desc IP address associated with the FQDN resolved by the DNS rule. + */ + type JSON.String DnsRule_IpAddress; + + /** + * @desc IP address type. + */ + type enumerated DnsRule_IpAddressType { + IP_V6, + IP_V4 + } + + /** + * @desc DNS rule state. + */ + type enumerated DnsRule_State { + ACTIVE, + INACTIVE + } + + /** + * @desc Time to live value. + */ + type UInt32 Ttl; + + /** + * @desc This type represents the general information of a DNS rule. + */ + type record DnsRule { + DnsRule_Id dnsRuleId, + DomainName domainName, + DnsRule_IpAddressType ipAddressType, + DnsRule_IpAddress ipAddress, + Ttl ttl, + DnsRule_State state + } + + /** + * @desc Host portion of the address. + */ + type JSON.String Host; + + /** + * @desc Port portion of the address. + */ + type UInt32 Address_Port; + + /** + * @desc A IP address and port pair. + */ + type record Address { + Host host, + Address_Port port_ + } with { + variant (port_) "name as 'port'"; + } + type record length(0..infinity) of Address AddressList; + + /** + * @desc Entry point information of the service as one or more pairs of IP address and port. + */ + type record Addresses { + AddressList addresses + } + + /** + * @desc Entry point information of the service in a format defined by an implementation, or in an external specification. + */ + type record Alternative { + anytype alternative + } + + /** + * @desc Entry point information of the service. + */ + type JSON.String EndPointInfo_Uri; + type record length(0..infinity) of EndPointInfo_Uri EndPointInfo_UriList; + + /** + * @desc Entry point information of the service as string, formatted according to URI syntax. + */ + type record Uris { + EndPointInfo_UriList uris + } + + /** + * @desc This type represents a type of link and may be referenced from data structures. + */ + type record LinkType { + Href href + } + + /** + * @desc URI referring to a resource. + */ + type JSON.String Href; + + /** + * @desc Self-referring URI. + */ + type record Mp1SubscriptionLinkList_Links { + LinkType self_, + Mp1SubscriptionLinkList_SubscriptionList subscription optional + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc The values are as defined in the \"subscriptionType\" attribute for each different Mp1 event subscription data type. + */ + type enumerated Rel { + AppTerminationNotificationSubscription, + SerAvailabilityNotificationSubscription + } + + /** + * @desc A link to a subscription. + */ + type record Mp1SubscriptionLinkList_Subscription { + Href href, + Rel rel + } + type record length(0..infinity) of Mp1SubscriptionLinkList_Subscription Mp1SubscriptionLinkList_SubscriptionList; + + /** + * @desc This type represents a list of links related to currently existing subscriptions for a mobile edge application instance. This information is returned when sending a request to receive current subscriptions. + */ + type record Mp1SubscriptionLinkList { + Mp1SubscriptionLinkList_Links links + } with { + variant (links) "name as '_links'"; + } + /** * @desc Problem Details for HTTP APIs * @member type_ A URI reference according to IETF RFC 3986 that identifies the problem type @@ -30,159 +313,467 @@ module AppEnablementAPI_TypesAndValues { } /** - * @desc Information on available applications. + * @desc List of supported OAuth 2.0 grant types. + */ + type enumerated GrantTypes { + OAUTH2_AUTHORIZATION_CODE, + OAUTH2_IMPLICIT_GRANT, + OAUTH2_RESOURCE_OWNER, + OAUTH2_CLIENT_CREDENTIALS + } + type record length(1..4) of GrantTypes GrantTypesList; + + /** + * @desc The token endpoint. + */ + type JSON.String TokenEndpoint; + + /** + * @desc Parameters related to use of OAuth 2.0. */ - type record ApplicationList { - AppInfo appInfo, - VendorSpecificExt vendorSpecificExt + type record OAuth2Info { + GrantTypesList grantTypes, + TokenEndpoint tokenEndpoint } /** - * @desc Information on application context created by the MEC system. + * @desc This type represents security information related to a transport. */ - type record AppContext { - ContextId contextId, - AssociateUeAppId associateUeAppId, - RequiredAppInfo appInfo, - CallbackReference callbackReference optional + type record SecurityInfo { + OAuth2Info oAuth2Info } /** - * @desc The parameters used in the method "Receiving notification events". + * @desc Self-referring URI. */ - type record NotificationEvent { - ReferenceURL referenceURI + type record Self { + LinkType self_, + JSON.Bool readOnly optional + } with { + variant (self_) "name as 'self'"; } /** - * @desc Extension for vendor specific information. + * @desc URI selected by the mobile edge application instance to receive notifications on the subscribed mobile edge service availability information. This shall be included in both the request and the response. */ - type record length(0..infinity) of VendorSpecificExt VendorSpecificExtList; + type JSON.String SerAvailabilityNotificationSubscription_CallbackReference; /** - * @desc Extension for vendor-specific information. + * @desc This type represents a subscription to the notifications from the mobile edge platform regarding the availability of a mobile edge service or a list of mobile edge services. */ - type record VendorSpecificExt { - VendorId vendorId + type record SerAvailabilityNotificationSubscription { + SerAvailabilityNotificationSubscription_SubscriptionType subscriptionType, + SerAvailabilityNotificationSubscription_CallbackReference callbackReference, + Self links, + ServiceInfo filteringCriteria } /** - * @desc Uniquely identifies the application context in the MEC system. Assigned by the MEC system and included in the response. The length of the value shall not exceed 32 characters. + * @desc Shall be set to SerAvailabilityNotificationSubscription. */ - type JSON.String ContextId length(1..32) with {encode "length(1..32)"}; + type JSON.String SerAvailabilityNotificationSubscription_SubscriptionType; /** - * @desc Uniquely identifies the UE application. Included in the request. The length of the value shall not exceed 32 characters. + * @desc This type represents the service availability information. */ - type JSON.String AssociateUeAppId length(1..32) with {encode "length(1..32)"}; + type record ServiceAvailabilityNotification { + SerAvailabilityNotificationSubscription_SubscriptionType notificationType, + ServiceInfos services, + Subscription links + } /** - * @desc Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of this vendor specific extension is not defined. + * @desc The enumeration SerializerTypes represents types of serializers. */ - type JSON.String VendorId; + type enumerated SerializerTypes { + JSON, + XML, + PROTOBUF3 + } + + /** + * @desc Identifier of the service instance assigned by the MEPM / mobile edge platform. + */ + type JSON.String SerInstanceId; /** - * @desc User applications available for the UE application. + * @desc The name of the service. This is how the service producing mobile edge application identifies the service instance it produces. */ - type record of AppInfoList AppInfo; + type JSON.String SerName; + + /** + * @desc Contains the state. + */ + type enumerated ServiceInfo_State { + ACTIVE, + INACTIVE + } + + /** + * @desc Identifier of the platform-provided transport to be used by the service. Valid identifiers may be obtained using the \"Transport information query\" procedure. May be present in POST requests to signal the use of a platform-provided transport for the service, and shall be absent otherwise. + */ + type JSON.String TransportId; + + /** + * @desc Service version. + */ + type JSON.String ServiceInfo_Version; + + /** + * @desc This type represents the general information of a mobile edge service. + */ + type record Post { + SerInstanceId serInstanceId optional, + SerName serName, + ServiceInfo_Version version, + ServiceInfo_State state, + SerializerTypes serializer, + TransportId transportId optional, // JSON oneOf ??? + TransportInfo transportInfo optional // JSON oneOf ??? + } + + /** + * @desc This type represents the general information of a mobile edge service. + */ + type record ServiceInfo { + SerInstanceId serInstanceId optional, + SerName serName, + CategoryRef serCategory optional, + ServiceInfo_Version version, + ServiceInfo_State state, + TransportInfo transportInfo, + SerializerTypes serializer + } + type record of ServiceInfo ServiceInfos; /** - * @desc User applications available for the UE application. + * @desc A link to the related subscription. */ - type record AppInfoList { - AppName appName, - AppProvider appProvider, - AppDescription appDescription, - AppSoftVersion appSoftVersion optional, - AppCharcs appCharcs optional + type record Subscription { + LinkType subscription } /** - * @desc Included in the request. + * @desc Authentication key number. */ - type record RequiredAppInfo { - AppName appName, - AppProvider appProvider, - ReferenceURL referenceURL, - AppSoftVersion appSoftVersion optional, - AppDescription appDescription optional, - AppPackageSource appPackageSource optional + type UInt32 AuthenticationKeyNum; + + /** + * @desc NTP authentication option. + */ + type enumerated AuthenticationOption { + NONE, + SYMMETRIC_KEY, + AUTO_KEY } /** - * @desc The application characteristics relate to the system resources consumed by the application. UE application can use this information e.g., for estimating the cost of use of the application or for the expected user experience. + * @desc Acceptable maximum rate of the Delay_Req messages in packets per second. + */ + type UInt32 DelayReqMaxRate; + + /** + * @desc NTP server local priority. + */ + type UInt32 LocalPriority; + + /** + * @desc Maximum poll interval for NTP messages, in seconds as a power of two. Range 3...17. + */ + type integer MaxPollingInterval (3..17) with {variant "unsigned 32 bit"} ; + + /** + * @desc Minimum poll interval for NTP messages, in seconds as a power of two. Range 3...17. + */ + type integer MinPollingInterval (3..17) with {variant "unsigned 32 bit"} ; + + /** + * @desc NTP server address. + */ + type JSON.String NtpServerAddr; + + /** + * @desc Address type of NTP server. */ - type record AppCharcs { - Memory memory, - Storage storage, - Latency latency, - Bandwidth bandwidth, - ServiceCont serviceCont + type enumerated NtpServerAddrType { + IP_ADDRESS, + DNS_NAME } /** - * @desc The maximum size in Mbytes of the memory resource reserved for the MEC application instance in the MEC system. + * @desc PTP Master IP Address. */ - type UInt32 Memory; + type JSON.String NtpServers_PtpMasterIpAddress; /** - * @desc The maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system. + * @desc PTP Master local priority. */ - type UInt32 Storage; + type UInt32 NtpServers_PtpMasterLocalPriority; /** - * @desc The target round trip time in milliseconds supported by the MEC system for the MEC application instance. + * @desc NTP server detail. */ - type UInt32 Latency; + type record NtpServers { + NtpServerAddrType ntpServerAddrType, + NtpServerAddr ntpServerAddr, + MinPollingInterval minPollingInterval, + MaxPollingInterval maxPollingInterval, + LocalPriority localPriority, + AuthenticationOption authenticationOption, + AuthenticationKeyNum authenticationKeyNum + } + type record of NtpServers NtpServersList; /** - * @desc The required connection bandwidth in kbit/s for the use of the mobile edge application instance. + * @desc NTP server detail. */ - type UInt32 Bandwidth; + type record TimingCaps_PtpMasters { + NtpServers_PtpMasterIpAddress ptpMasterIpAddress, + NtpServers_PtpMasterLocalPriority ptpMasterLocalPriority, + DelayReqMaxRate delayReqMaxRate + } + type record of TimingCaps_PtpMasters TimingCaps_PtpMastersList; /** - * @desc Required service continuity mode for this application. + * @desc Time. + * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. + * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. + * @member timeSourceStatus Platform Time Source status. 1 = TRACEABLE - time source is locked to the UTC time source. 2 = NONTRACEABLE - time source is not locked to the UTC time source. */ - type enumerated ServiceCont { - SERVICE_CONTINUITY_NOT_REQUIRED, - SERVICE_CONTINUITY_REQUIRED + type record TimeStamp { + Seconds seconds, + NanoSeconds nanoSeconds } /** - * @desc Name of the MEC application. The length of the value shall not exceed 32 characters. + * @desc This type represents the information provided by the mobile edge platform in response to the Timing capabilities Query message. */ - type JSON.String AppName length(1..32) with {encode "length(1..32)"}; + type record TimingCaps { + TimeStamp timeStamp, + NtpServersList ntpServers, + TimingCaps_PtpMastersList ptpMasters + } /** - * @desc Provider of the MEC application. The length of the value shall not exceed 32 characters. + * @desc Identify the traffic ip address. */ - type JSON.String AppProvider length(1..32) with {encode "length(1..32)"}; + type JSON.String TrafficFilter_Address; + type record of TrafficFilter_Address TrafficFilter_AddressList; /** - * @desc Software version of the MEC application. The length of the value shall not exceed 32 characters. + * @desc Used to match all IPv4 packets that have the same Differentiated Services Code Point (DSCP). */ - type JSON.String AppSoftVersion length(1..32) with {encode "length(1..32)"}; + type UInt32 TrafficFilter_DSCP; /** - * @desc Human readable description of the MEC application. NOTE the language support may be limited. The length of the value shall not exceed 128 characters. + * @desc Identify the traffic ip address. */ - type JSON.String AppDescription length(1..128) with {encode "length(1..128)"}; + type JSON.String TrafficFilter_Port; /** - * @desc URI assigned by the UE application to receive application lifecycle related notifications. Included in the request. This subscription stays alive for the lifetime of the application context. + * @desc Protocol of the traffic filter. */ - type JSON.String CallbackReference; + type JSON.String TrafficFilter_Protocol; + type record of TrafficFilter_Protocol TrafficFilter_ProtocolList; /** - * @desc Address of the user application. Used as the reference URL for the application. Assigned by the MEC system and included in the response. + * @desc Used to match all packets that have the same Quality Class Indicator (QCI). */ - type JSON.AnyURI ReferenceURL; + type UInt32 TrafficFilter_QCI; /** - * @desc URI of the application package. Included in the request if the application is not one in the ApplicationList. appPackageSource enables on-boarding of the application package into the MEC system. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 010-2. + * @desc Used to match all IPv6 packets that have the same Traffic Class. */ - type JSON.AnyURI AppPackageSource; - + type UInt32 TrafficFilter_TC; + + /** + * @desc Used for token based traffic rule. + */ + type JSON.String TrafficFilter_Token; + type record of TrafficFilter_Token TrafficFilter_TokenList; + + /** + * @desc Used for GTP tunnel based traffic rule. + */ + type JSON.String TrafficFilter_TunnelAddress; + type record of TrafficFilter_TunnelAddress TrafficFilter_TunnelAddressList; + + /** + * @desc Used for GTP tunnel based traffic rule. + */ + type JSON.String TrafficFilter_TunnelPort; + type record of TrafficFilter_TunnelPort TrafficFilter_TunnelPortList; + + /** + * @desc This type represents the traffic filter. + */ + type record TrafficFilter { + TrafficFilter_Address srcAddress, + TrafficFilter_AddressList dstAddress, + TrafficFilter_Port srcPort, + TrafficFilter_Port dstPort, + TrafficFilter_ProtocolList protocol, + TrafficFilter_TokenList token, + TrafficFilter_TunnelAddressList srcTunnelAddress, + TrafficFilter_TunnelAddressList tgtTunnelAddress, + TrafficFilter_TunnelPortList srcTunnelPort, + TrafficFilter_TunnelPortList dstTunnelPort, + TrafficFilter_QCI qCI, + TrafficFilter_DSCP dSCP, + TrafficFilter_TC tC + } + type record of TrafficFilter TrafficFilterList; + + /** + * @desc The action of the ME host data plane when a packet matches the trafficFilter. + */ + type enumerated TrafficRule_Action { + DROP, + FORWARD_DECAPSULATED, + FORWARD_AS_IS, + PASSTHROUGH, + DUPLICATE_DECAPSULATED, + DUPLICATE_AS_IS + } + + /** + * @desc Definition of filter per FLOW or PACKET. If flow the filter match UE->EPC packet and the reverse packet is handled in the same context. + */ + type enumerated TrafficRule_FilterType { + FLOW, + PACKET + } + + /** + * @desc Identify the traffic rule. + */ + type JSON.String TrafficRule_Id; + + /** + * @desc Priority of this traffic rule. If traffic rule conflicts, the one with higher priority take precedence. + */ + type UInt32 TrafficRule_Priority; + + /** + * @desc Contains the traffic rule state. + */ + type enumerated TrafficRule_State { + ACTIVE, + INACTIVE + } + + /** + * @desc This type represents the general information of a traffic rule. + */ + type record TrafficRule { + TrafficRule_Id trafficRuleId, + TrafficRule_FilterType filterType, + TrafficRule_Priority priority, + TrafficFilterList trafficFilter, + TrafficRule_Action action_, + DestinationInterface dstInterface optional, + TrafficRule_State state + } with { + variant (action_) "name as 'action'"; + } + + /** + * @desc Human-readable description of this transport. + */ + type JSON.String TransportInfo_Description; + + /** + * @desc The identifier of this transport. + */ + type JSON.String TransportInfo_Id; + + /** + * @desc Additional implementation specific details of the transport. + */ + type anytype TransportInfo_ImplSpecificInfo; + + /** + * @desc The name of this transport. + */ + type JSON.String TransportInfo_Name; + + /** + * @desc The name of the protocol used. Shall be set to HTTP for a REST API. + */ + type JSON.String TransportInfo_Protocol; + + /** + * @desc The version of the protocol used. + */ + type JSON.String TransportInfo_Version; + + /** + * @desc This type represents information about a transport endpoint. + */ + type union TransportInfo_Endpoint { // JSON oneOf ??? + Uris uris, + Addresses addresses, + Alternative alternative + } + + /** + * @desc This type represents the general information of a mobile edge service. + */ + type record TransportInfo { + TransportInfo_Id id, + TransportInfo_Name name, + TransportInfo_Description description optional, + TransportTypes type_, + TransportInfo_Protocol protocol, + TransportInfo_Version version, + TransportInfo_Endpoint endpoint, + SecurityInfo security, + TransportInfo_ImplSpecificInfo implSpecificInfo optional + } with { + variant (type_) "name as 'type'"; + } + type record of TransportInfo TransportInfoList; + + /** + * @desc The enumeration TransportTypes represents types of transports. + */ + type enumerated TransportTypes { + REST_HTTP, + MB_TOPIC_BASED, + MB_ROUTING, + MB_PUBSUB, + RPC, + RPC_STREAMING, + WEBSOCKET + } + + /** + * @desc Destination address of the tunnel. + */ + type JSON.String TunnelInfo_TunnelDstAddress; + + /** + * @desc Source address of the tunnel. + */ + type JSON.String TunnelInfo_TunnelSrcAddress; + + /** + * @desc This type represents the tunnel information. + */ + type enumerated TunnelInfo_TunnelType { + GTP_U, + GRE + } + + /** + * @desc This type represents the tunnel information. + */ + type record TunnelInfo { + TunnelInfo_TunnelType tunnelType, + TunnelInfo_TunnelDstAddress tunnelDstAddress optional, + TunnelInfo_TunnelSrcAddress tunnelSrcAddress optional + } + } with { encode "JSON" } // End of module AppEnablementAPI_TypesAndValues diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index ca39738e31f9c7de2c2f328a2bbc9e7f82ba340c..bc795f22a85b6a3e47dd9b7b3d6fffa8a6a296cc 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -6,6 +6,16 @@ module LocationAPI_TypesAndValues { // LibCommon import from LibCommon_BasicTypesAndValues all; + /** + * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type UInt32 Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type UInt32 NanoSeconds; + /** * @desc * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC @@ -376,16 +386,6 @@ REST_NetAPI_Common]. OperationStatus operationStatus optional } - /** - * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type UInt32 Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type UInt32 NanoSeconds; - } with { encode "JSON" } diff --git a/ttcn/LibMec/UEAppInterfaceAPI/json/UEAppInterfaceAPI.json b/ttcn/LibMec/UEAppInterfaceAPI/json/UEAppInterfaceAPI.json new file mode 100644 index 0000000000000000000000000000000000000000..c5ee3fcda73baa582e50733f936af0fb7c26a484 --- /dev/null +++ b/ttcn/LibMec/UEAppInterfaceAPI/json/UEAppInterfaceAPI.json @@ -0,0 +1,618 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "UE Application Interface API", + "version": "1.1.1", + "description": "The ETSI MEC ISG MEC016 UE Application Interface API described using OpenAPI", + "license": { + "name": "ETSI Forge copyright notice", + "url": "https://forge.etsi.org/etsi-forge-copyright-notice.txt" + }, + "contact": { + "email": "cti_support@etsi.org" + } + }, + "externalDocs": { + "description": "ETSI GS MEC016 UE Application Interface API, V1.1.1", + "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/016/01.01.01_60/gs_MEC016v010101p.pdf" + }, + "security": [ + { + "OauthSecurity": [ + "all" + ] + } + ], + "servers": [ + { + "url": "http://127.0.0.1:8081/mx2/v1" + }, + { + "url": "https://127.0.0.1:8081/mx2/v1" + } + ], + "tags": [ + { + "name": "appList" + }, + { + "name": "appContext" + } + ], + "paths": { + "/app_list": { + "get": { + "description": "Used to query information about the available MEC applications.", + "operationId": "AppList_GET", + "tags": [ + "appList" + ], + "parameters": [ + { + "$ref": "#/components/parameters/Query.AppName" + }, + { + "$ref": "#/components/parameters/Query.AppProvider" + }, + { + "$ref": "#/components/parameters/Query.AppSoftVersion" + }, + { + "$ref": "#/components/parameters/Query.ServiceCont" + }, + { + "$ref": "#/components/parameters/Query.VendorId" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/AppList" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "401": { + "$ref": "#/components/responses/Error.401" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + } + }, + "/app_contexts": { + "post": { + "description": "The POST method can be used to create a new application context. Upon success, the response contains entity body describing the created application context.", + "operationId": "AppContext_POST", + "tags": [ + "appContext" + ], + "requestBody": { + "$ref": "#/components/requestBodies/AppContext" + }, + "responses": { + "201": { + "$ref": "#/components/responses/AppContext" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "401": { + "$ref": "#/components/responses/Error.401" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + } + }, + "/app_contexts/{contextId}": { + "parameters": [ + { + "$ref": "#/components/parameters/Path.ContextId" + } + ], + "put": { + "description": "The PUT method is used to update the callback reference of the existing application context. Upon successful operation, the target resource is updated with new callback reference.", + "operationId": "AppContextId_PUT", + "tags": [ + "appContext" + ], + "requestBody": { + "$ref": "#/components/requestBodies/AppContext" + }, + "responses": { + "204": { + "description": "No Content." + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "401": { + "$ref": "#/components/responses/Error.401" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + }, + "delete": { + "description": "The DELETE method is used to delete the resource that represents the existing application context.", + "operationId": "AppContextId_DEL", + "tags": [ + "appContext" + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "$ref": "#/components/responses/Error.400" + }, + "401": { + "$ref": "#/components/responses/Error.401" + }, + "403": { + "$ref": "#/components/responses/Error.403" + }, + "404": { + "$ref": "#/components/responses/Error.404" + } + } + } + } + }, + "components": { + "parameters": { + "Query.AppName": { + "name": "appName", + "in": "query", + "description": "Name to identify the MEC application", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Query.AppProvider": { + "name": "appProvider", + "in": "query", + "description": "Provider of the MEC application", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Query.AppSoftVersion": { + "name": "appSoftVersion", + "in": "query", + "description": "Software version of the MEC application", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Query.ServiceCont": { + "name": "serviceCont", + "in": "query", + "description": "Required service continuity mode for this application", + "required": false, + "schema": { + "type": "string", + "enum": [ + "SERVICE_CONTINUITY_NOT_REQUIRED", + "SERVICE_CONTINUITY_REQUIRED" + ] + } + }, + "Query.VendorId": { + "name": "vendorId", + "in": "query", + "description": "Vendor identifier", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Path.ContextId": { + "name": "contextId", + "in": "path", + "description": "Uniquely identifies the application context in the MEC system. It is assigned by the MEC system and included in the response to an AppContext create.", + "required": true, + "schema": { + "type": "string" + } + } + }, + "requestBodies": { + "AppContext": { + "description": "Uniquely identifies the application context in the MEC system. It is assigned by the MEC system and included in the response to an AppContext create.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppContext" + } + } + }, + "required": true + } + }, + "responses": { + "AppContext": { + "description": "The response body contains the Application Context as it was created by the MEC system", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppContext" + } + } + } + }, + "AppList": { + "description": "The response body contains the ApplicationList resource available for the querying UE application", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApplicationList" + } + } + } + }, + "Error.400": { + "description": "Bad Request. It is used to indicate that incorrect parameters were passed to the request.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Empty" + } + } + } + }, + "Error.401": { + "description": "Unauthorized. It is used when the client did not submit the appropriate credentials.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Empty" + } + } + } + }, + "Error.403": { + "description": "Forbidden. The operation is not allowed given the current status of the resource. ", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "Error.404": { + "description": "Not Found. It is 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" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Empty" + } + } + } + } + }, + "securitySchemes": { + "OauthSecurity": { + "type": "oauth2", + "flows": { + "clientCredentials": { + "tokenUrl": "https://oauth.exampleAPI/token", + "scopes": { + "all": "Single oauth2 scope for API" + } + } + } + } + }, + "schemas": { + "Empty": { + "description": "Empty schema" + }, + "ProblemDetails": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/Problem.type" + }, + "title": { + "$ref": "#/components/schemas/Problem.title" + }, + "status": { + "$ref": "#/components/schemas/Problem.status" + }, + "detail": { + "$ref": "#/components/schemas/Problem.detail" + }, + "instance": { + "$ref": "#/components/schemas/Problem.instance" + } + } + }, + "Problem.type": { + "type": "string", + "format": "uri", + "description": "A URI reference according to IETF RFC 3986 that identifies the problem type" + }, + "Problem.title": { + "type": "string", + "description": "A short, human-readable summary of the problem type" + }, + "Problem.status": { + "type": "integer", + "format": "uint32", + "description": "The HTTP status code for this occurrence of the problem" + }, + "Problem.detail": { + "type": "string", + "description": "A human-readable explanation specific to this occurrence of the problem" + }, + "Problem.instance": { + "type": "string", + "format": "uri", + "description": "A URI reference that identifies the specific occurrence of the problem" + }, + "ApplicationList": { + "description": "Information on available applications", + "type": "object", + "properties": { + "appInfo": { + "$ref": "#/components/schemas/AppInfo" + }, + "vendorSpecificExt": { + "$ref": "#/components/schemas/VendorSpecificExt" + } + } + }, + "AppContext": { + "description": "Information on application context created by the MEC system", + "type": "object", + "required": [ + "contextId", + "associateUeAppId", + "appInfo" + ], + "properties": { + "contextId": { + "$ref": "#/components/schemas/ContextId" + }, + "associateUeAppId": { + "$ref": "#/components/schemas/AssociateUeAppId" + }, + "callbackReference": { + "$ref": "#/components/schemas/CallbackReference" + }, + "appInfo": { + "$ref": "#/components/schemas/RequiredAppInfo" + } + } + }, + "NotificationEvent": { + "description": "The parameters used in the method \"Receiving notification events\".", + "type": "object", + "required": [ + "referenceURI" + ], + "properties": { + "referenceURI": { + "$ref": "#/components/schemas/ReferenceURL" + } + } + }, + "VendorSpecificExtList": { + "description": "Extension for vendor specific information.", + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/VendorSpecificExt" + } + }, + "VendorSpecificExt": { + "description": "Extension for vendor-specific information", + "required": [ + "vendorId" + ], + "properties": { + "vendorId": { + "$ref": "#/components/schemas/VendorId" + } + } + }, + "ContextId": { + "description": "Uniquely identifies the application context in the MEC system. Assigned by the MEC system and included in the response. The length of the value shall not exceed 32 characters.", + "type": "string" + }, + "AssociateUeAppId": { + "description": "Uniquely identifies the UE application. Included in the request. The length of the value shall not exceed 32 characters.", + "type": "string" + }, + "VendorId": { + "description": "Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of this vendor specific extension is not defined", + "type": "string" + }, + "AppInfo": { + "description": "User applications available for the UE application", + "type": "array", + "items": { + "$ref": "#/components/schemas/AppInfoList" + } + }, + "AppInfoList": { + "type": "object", + "required": [ + "appName", + "appProvider", + "appDescription" + ], + "properties": { + "appName": { + "$ref": "#/components/schemas/AppName" + }, + "appProvider": { + "$ref": "#/components/schemas/AppProvider" + }, + "appSoftVersion": { + "$ref": "#/components/schemas/AppSoftVersion" + }, + "appDescription": { + "$ref": "#/components/schemas/AppDescription" + }, + "appCharcs": { + "$ref": "#/components/schemas/AppCharcs" + } + } + }, + "RequiredAppInfo": { + "description": "Included in the request", + "type": "object", + "required": [ + "appName", + "appProvider", + "referenceURL" + ], + "properties": { + "appName": { + "$ref": "#/components/schemas/AppName" + }, + "appProvider": { + "$ref": "#/components/schemas/AppProvider" + }, + "appSoftVersion": { + "$ref": "#/components/schemas/AppSoftVersion" + }, + "appDescription": { + "$ref": "#/components/schemas/AppDescription" + }, + "referenceURL": { + "$ref": "#/components/schemas/ReferenceURL" + }, + "appPackageSource": { + "$ref": "#/components/schemas/AppPackageSource" + } + } + }, + "AppCharcs": { + "description": "The application characteristics relate to the system resources consumed by the application. UE application can use this information e.g., for estimating the cost of use of the application or for the expected user experience", + "type": "object", + "properties": { + "memory": { + "$ref": "#/components/schemas/Memory" + }, + "storage": { + "$ref": "#/components/schemas/Storage" + }, + "latency": { + "$ref": "#/components/schemas/Latency" + }, + "bandwidth": { + "$ref": "#/components/schemas/Bandwidth" + }, + "serviceCont": { + "$ref": "#/components/schemas/ServiceCont" + } + } + }, + "Memory": { + "description": "The maximum size in Mbytes of the memory resource reserved for the MEC application instance in the MEC system", + "type": "integer", + "format": "uint32" + }, + "Storage": { + "description": "The maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system", + "type": "integer", + "format": "uint32" + }, + "Latency": { + "description": "The target round trip time in milliseconds supported by the MEC system for the MEC application instance", + "type": "integer", + "format": "uint32" + }, + "Bandwidth": { + "description": "The required connection bandwidth in kbit/s for the use of the mobile edge application instance", + "type": "integer", + "format": "uint32" + }, + "ServiceCont": { + "description": "Required service continuity mode for this application.", + "type": "string", + "enum": [ + "SERVICE_CONTINUITY_NOT_REQUIRED", + "SERVICE_CONTINUITY_REQUIRED" + ] + }, + "AppName": { + "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string" + }, + "AppProvider": { + "description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string" + }, + "AppSoftVersion": { + "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string" + }, + "AppDescription": { + "description": "Human readable description of the MEC application. NOTE the language support may be limited. The length of the value shall not exceed 128 characters.", + "type": "string" + }, + "CallbackReference": { + "description": "URI assigned by the UE application to receive application lifecycle related notifications. Included in the request. This subscription stays alive for the lifetime of the application context.", + "type": "string", + "format": "uri" + }, + "ReferenceURL": { + "description": "Address of the user application. Used as the reference URL for the application. Assigned by the MEC system and included in the response", + "type": "string", + "format": "uri" + }, + "AppPackageSource": { + "description": "URI of the application package. Included in the request if the application is not one in the ApplicationList. appPackageSource enables on-boarding of the application package into the MEC system. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 010-2", + "type": "string", + "format": "uri" + } + } + } +} \ No newline at end of file diff --git a/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_Templates.ttcn b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..af1b7f97bd65c6a48571ec0e80b83b8aae98b551 --- /dev/null +++ b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_Templates.ttcn @@ -0,0 +1,170 @@ +/** + * @desc The ETSI MEC ISG MEC011 Application Enablement API described using OpenAPI + * @see http://www.etsi.org/deliver/etsi_gs/MEC/001_099/011/01.01.01_60/gs_mec011v010101p.pdf + */ +module UEAppInterfaceAPI_Templates { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibMec/AppEna + import from UEAppInterfaceAPI_TypesAndValues all; + + template (present) ProblemDetails mw_problem_details( + template (present) JSON.String p_type := ?, + template (present) JSON.String p_title := ?, + template (present) UInt32 p_status := ?, + template (present) JSON.String p_detail := ?, + template (present) JSON.String p_instance := ? + ) := { + type_ := p_type, + title := p_title, + status := p_status, + detail := p_detail, + instance := p_instance + } // End of template mw_problem_details + + template (value) ApplicationList m_application_list( + in template (value) AppInfo p_app_info, + in template (value) VendorSpecificExt p_vendor_specific_ext + ) := { + appInfo := p_app_info, + vendorSpecificExt := p_vendor_specific_ext + } // End of template m_application_list + + template (present) ApplicationList mw_application_list( + template (present) AppInfo p_app_info := ?, + template (present) VendorSpecificExt p_vendor_specific_ext := ? + ) := { + appInfo := p_app_info, + vendorSpecificExt := p_vendor_specific_ext + } // End of template mw_application_list + + template (value) AppContext m_app_context( + in template (value) ContextId p_context_id, + in template (value) AssociateUeAppId p_associate_ue_app_id, + in template (value) RequiredAppInfo p_app_info + ) := { + contextId := p_context_id, + associateUeAppId := p_associate_ue_app_id, + appInfo := p_app_info, + callbackReference := omit + } // End of template m_app_context + + template (present) AppContext mw_app_context( + template (present) ContextId p_context_id := ?, + template (present) AssociateUeAppId p_associate_ue_app_id := ?, + template (present) RequiredAppInfo p_app_info := ? + ) := { + contextId := p_context_id, + associateUeAppId := p_associate_ue_app_id, + appInfo := p_app_info, + callbackReference := * + } // End of template mw_app_context + + template (value) NotificationEvent m_notification_event( + in template (value) ReferenceURL p_reference_uri + ) := { + referenceURI := p_reference_uri + } // End of template m_notification_event + + template (present) NotificationEvent mw_notification_event( + template (present) ReferenceURL p_reference_uri := ? + ) := { + referenceURI := p_reference_uri + } // End of template mw_notification_event + + template (value) VendorSpecificExt m_vendor_specific_ext( + in template (value) VendorId p_vendor_id + ) := { + vendorId := p_vendor_id + } // End of template m_vendor_specific_ext + + template (present) VendorSpecificExt mw_vendor_specific_ext( + template (present) VendorId p_vendor_id := ? + ) := { + vendorId := p_vendor_id + } // End of template mw_vendor_specific_ext + + template (value) AppInfoList m_appInfo_list( + in template (value) AppName p_app_name, + in template (value) AppProvider p_app_provider, + in template (value) AppDescription p_app_description + ) := { + appName := p_app_name, + appProvider := p_app_provider, + appDescription := p_app_description, + appSoftVersion := omit, + appCharcs := omit + } // End of template m_appInfo_list + + template (present) AppInfoList mw_appInfo_list( + template (present) AppName p_app_name := ?, + template (present) AppProvider p_app_provider := ?, + template (present) AppDescription p_app_description := ? + ) := { + appName := p_app_name, + appProvider := p_app_provider, + appDescription := p_app_description, + appSoftVersion := *, + appCharcs := * + } // End of template mw_appInfo_list + + template (value) RequiredAppInfo m_required_app_info( + in template (value) AppName p_app_name, + in template (value) AppProvider p_app_provider, + in template (value) ReferenceURL p_reference_url + ) := { + appName := p_app_name, + appProvider := p_app_provider, + referenceURL := p_reference_url, + appSoftVersion := omit, + appDescription := omit, + appPackageSource := omit + } // End of template m_required_app_info + + template (present) RequiredAppInfo mw_required_app_info( + template (present) AppName p_app_name := ?, + template (present) AppProvider p_app_provider := ?, + template (present) ReferenceURL p_reference_url := ? + ) := { + appName := p_app_name, + appProvider := p_app_provider, + referenceURL := p_reference_url, + appSoftVersion := *, + appDescription := *, + appPackageSource := * + } // End of template mw_required_app_info + + template (value) AppCharcs m_app_charcs( + in template (value) Memory p_memory, + in template (value) Storage p_storage, + in template (value) Latency p_latency, + in template (value) Bandwidth p_bandwidth, + in template (value) ServiceCont p_service_cont + ) := { + memory := p_memory, + storage := p_storage, + latency := p_latency, + bandwidth := p_bandwidth, + serviceCont := p_service_cont + } // End of template m_app_charcs + + template (present) AppCharcs mw_app_charcs( + template (present) Memory p_memory := ?, + template (present) Storage p_storage := ?, + template (present) Latency p_latency := ?, + template (present) Bandwidth p_bandwidth := ?, + template (present) ServiceCont p_service_cont := ? + ) := { + memory := p_memory, + storage := p_storage, + latency := p_latency, + bandwidth := p_bandwidth, + serviceCont := p_service_cont + } // End of template mw_app_charcs + +} // End of module UEAppInterfaceAPI_Templates diff --git a/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..abbfd34433774887fc5822ccc0ac46fea4707f5d --- /dev/null +++ b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn @@ -0,0 +1,188 @@ +/** + * @desc The ETSI MEC ISG MEC011 Application Enablement API described using OpenAPI + * @see http://www.etsi.org/deliver/etsi_gs/MEC/001_099/011/01.01.01_60/gs_mec011v010101p.pdf + */ +module UEAppInterfaceAPI_TypesAndValues { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + /** + * @desc Problem Details for HTTP APIs + * @member type_ A URI reference according to IETF RFC 3986 that identifies the problem type + * @member title A short, human-readable summary of the problem type + * @member status The HTTP status code for this occurrence of the problem + * @member detail A human-readable explanation specific to this occurrence of the problem + * @member instance A URI reference that identifies the specific occurrence of the problem + * @see IETF RFC 7807 Clause 3. The Problem Details JSON Object + */ + type record ProblemDetails { + JSON.String type_, + JSON.String title, + UInt32 status, + JSON.String detail, + JSON.String instance + } with { + variant (type_) "name as 'type'"; + } + + /** + * @desc Information on available applications. + */ + type record ApplicationList { + AppInfo appInfo, + VendorSpecificExt vendorSpecificExt + } + + /** + * @desc Information on application context created by the MEC system. + */ + type record AppContext { + ContextId contextId, + AssociateUeAppId associateUeAppId, + RequiredAppInfo appInfo, + CallbackReference callbackReference optional + } + + /** + * @desc The parameters used in the method "Receiving notification events". + */ + type record NotificationEvent { + ReferenceURL referenceURI + } + + /** + * @desc Extension for vendor specific information. + */ + type record length(0..infinity) of VendorSpecificExt VendorSpecificExtList; + + /** + * @desc Extension for vendor-specific information. + */ + type record VendorSpecificExt { + VendorId vendorId + } + + /** + * @desc Uniquely identifies the application context in the MEC system. Assigned by the MEC system and included in the response. The length of the value shall not exceed 32 characters. + */ + type JSON.String ContextId length(1..32) with {encode "length(1..32)"}; + + /** + * @desc Uniquely identifies the UE application. Included in the request. The length of the value shall not exceed 32 characters. + */ + type JSON.String AssociateUeAppId length(1..32) with {encode "length(1..32)"}; + + /** + * @desc Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of this vendor specific extension is not defined. + */ + type JSON.String VendorId; + + /** + * @desc User applications available for the UE application. + */ + type record of AppInfoList AppInfo; + + /** + * @desc User applications available for the UE application. + */ + type record AppInfoList { + AppName appName, + AppProvider appProvider, + AppDescription appDescription, + AppSoftVersion appSoftVersion optional, + AppCharcs appCharcs optional + } + + /** + * @desc Included in the request. + */ + type record RequiredAppInfo { + AppName appName, + AppProvider appProvider, + ReferenceURL referenceURL, + AppSoftVersion appSoftVersion optional, + AppDescription appDescription optional, + AppPackageSource appPackageSource optional + } + + /** + * @desc The application characteristics relate to the system resources consumed by the application. UE application can use this information e.g., for estimating the cost of use of the application or for the expected user experience. + */ + type record AppCharcs { + Memory memory, + Storage storage, + Latency latency, + Bandwidth bandwidth, + ServiceCont serviceCont + } + + /** + * @desc The maximum size in Mbytes of the memory resource reserved for the MEC application instance in the MEC system. + */ + type UInt32 Memory; + + /** + * @desc The maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system. + */ + type UInt32 Storage; + + /** + * @desc The target round trip time in milliseconds supported by the MEC system for the MEC application instance. + */ + type UInt32 Latency; + + /** + * @desc The required connection bandwidth in kbit/s for the use of the mobile edge application instance. + */ + type UInt32 Bandwidth; + + /** + * @desc Required service continuity mode for this application. + */ + type enumerated ServiceCont { + SERVICE_CONTINUITY_NOT_REQUIRED, + SERVICE_CONTINUITY_REQUIRED + } + + /** + * @desc Name of the MEC application. The length of the value shall not exceed 32 characters. + */ + type JSON.String AppName length(1..32) with {encode "length(1..32)"}; + + /** + * @desc Provider of the MEC application. The length of the value shall not exceed 32 characters. + */ + type JSON.String AppProvider length(1..32) with {encode "length(1..32)"}; + + /** + * @desc Software version of the MEC application. The length of the value shall not exceed 32 characters. + */ + type JSON.String AppSoftVersion length(1..32) with {encode "length(1..32)"}; + + /** + * @desc Human readable description of the MEC application. NOTE the language support may be limited. The length of the value shall not exceed 128 characters. + */ + type JSON.String AppDescription length(1..128) with {encode "length(1..128)"}; + + /** + * @desc URI assigned by the UE application to receive application lifecycle related notifications. Included in the request. This subscription stays alive for the lifetime of the application context. + */ + type JSON.String CallbackReference; + + /** + * @desc Address of the user application. Used as the reference URL for the application. Assigned by the MEC system and included in the response. + */ + type JSON.AnyURI ReferenceURL; + + /** + * @desc URI of the application package. Included in the request if the application is not one in the ApplicationList. appPackageSource enables on-boarding of the application package into the MEC system. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 010-2. + */ + type JSON.AnyURI AppPackageSource; + +} with { + encode "JSON" +} // End of module UEAppInterfaceAPI_TypesAndValues diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 1b02fbdbc5b94c0a218b0161cc2a108e6cfff9f1..cd29db6cb3035ad7821e894efaf695af659448da 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -14,6 +14,8 @@ module LibMec_Pixits { modulepar charstring PX_ME_APP_Q_UE_IDENTITY_ID_URI := "/ui/v2/"; + modulepar charstring PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v1/transports"; + modulepar charstring PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions/"; modulepar charstring PX_ME_BWM_URI := "/bwm/v2/bw_allocations"; diff --git a/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn index 0ca201b7a62925ab2603f2c9b35546f581caa1a3..817261b2e00bd681131278244bc0f6e0f881557d 100644 --- a/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn @@ -8,7 +8,9 @@ module LibItsHttp_JsonMessageBodyTypes { import from RnisAPI_TypesAndValues all; // LibMec/BwManagementApi import from BwManagementAPI_TypesAndValues all; - + // LibMec/AppEnablementAPI + import from AppEnablementAPI_TypesAndValues all; + /** * This file volontary contains a trivial declaration of the type JsonBody. * In accordance with your TTCN-3 module LibItsHttp_JSONTypes, you have to change the JsonBody typing. @@ -17,19 +19,21 @@ module LibItsHttp_JsonMessageBodyTypes { type union JsonBody { // TODO Add here your custom variants - UserInfo userInfo, - UserList userList, - ZoneInfo zoneInfo, - AccessPointList accessPointList, - UserTrackingSubscription userTrackingSubscription, - ZonalTrafficSubscription zonalTrafficSubscription, - UEidentityAPI_TypesAndValues.ProblemDetails problemDetails_ue_identity, - UeIdentityTagInfo ueIdentityTagInfo, - SubscriptionLinkList subscriptionLinkList, - CellChangeSubscription cellChangeSubscription, - RnisAPI_TypesAndValues.ProblemDetails problemDetails_rnis, - BwInfo bwInfo, - BwManagementAPI_TypesAndValues.ProblemDetails problemDetails_bw_management, + UserInfo userInfo, + UserList userList, + ZoneInfo zoneInfo, + AccessPointList accessPointList, + UserTrackingSubscription userTrackingSubscription, + ZonalTrafficSubscription zonalTrafficSubscription, + UEidentityAPI_TypesAndValues.ProblemDetails problemDetails_ue_identity, + UeIdentityTagInfo ueIdentityTagInfo, + SubscriptionLinkList subscriptionLinkList, + CellChangeSubscription cellChangeSubscription, + RnisAPI_TypesAndValues.ProblemDetails problemDetails_rnis, + BwInfo bwInfo, + BwManagementAPI_TypesAndValues.ProblemDetails problemDetails_bw_management, + TransportInfoList transportInfoList, + AppEnablementAPI_TypesAndValues.ProblemDetails problemDetails_svc_mgmt, universal charstring raw } with { variant "" diff --git a/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn index 1268b9def3add37f0b5c0a06d74fe05b625b7565..29718a46b6889a02a011311c13be3b0f638b6fb9 100644 --- a/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn @@ -22,6 +22,9 @@ module LibItsHttp_JsonTemplates { // LibMec/BwManagementAPI import from BwManagementAPI_TypesAndValues all; import from BwManagementAPI_Templates all; + // LibMec/AppEnablementAPI + import from AppEnablementAPI_TypesAndValues all; + import from AppEnablementAPI_Templates all; // TODO Add here your custom RFCs import @@ -189,4 +192,20 @@ module LibItsHttp_JsonTemplates { } // End of group bw_management_api + group svc_mgmt { + + template (value) JsonBody m_body_json_transport_info_list( + in template (value) TransportInfoList p_transportInfoList + ) := { + transportInfoList := p_transportInfoList + } // End of template m_body_json_transport_info_list + + template (present) JsonBody mw_body_json_transport_info_list( + template (present) TransportInfoList p_transportInfoList := ? + ) := { + transportInfoList := p_transportInfoList + } // End of template mw_body_json_transport_info_list + + } // End of group svc_mgmt + } // End of module LibItsHttp_JsonTemplates