{
"openapi": "3.0.0",
"info": {
"contact": {
"url": "https://forge.etsi.org/rep/mec/gs016-dev-app-api"
},
"title": "ETSI GS MEC 016 Device application interface",
"version": "2.2.1",
"description": "The ETSI MEC ISG Device application interface API described using OpenAPI.",
"license": {
"name": "BSD-3-Clause",
"url": "https://forge.etsi.org/legal-matters"
}
},
"externalDocs": {
"description": "ETSI GS MEC016 V2.2.1 Device application interface",
"url": "https://www.etsi.org/deliver/etsi_gs/MEC/001_099/016/02.02.01_60/gs_MEC016v020201p.pdf"
},
"servers": [
{
"url": "https://localhost/dev_app/v1"
}
],
"tags": [
{
"name": "dev_app"
}
],
"paths": {
"/app_list": {
"get": {
"tags": [
"dev_app"
],
"summary": "Get available application information.",
"description": "Used to query information about the available MEC applications.",
"operationId": "meAppListGET",
"parameters": [
{
"$ref": "#/components/parameters/Query.appName"
},
{
"$ref": "#/components/parameters/Query.appProvider"
},
{
"$ref": "#/components/parameters/Query.appSoftVersion"
},
{
"$ref": "#/components/parameters/Query.vendorId"
},
{
"$ref": "#/components/parameters/Query.serviceCont"
}
],
"responses": {
"200": {
"description": "The response body contains an array of the user applications available to the querying device application.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApplicationList"
}
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
}
}
}
},
"/app_contexts": {
"post": {
"tags": [
"dev_app"
],
"summary": "Creation of a new application context.",
"description": "Used to create a new application context. Upon success, the response contains entity body describing the created application context.",
"operationId": "devAppContextsGET",
"requestBody": {
"description": "Entity body in the request contains the Application Context as requested by the device application.",
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AppContext"
}
}
}
},
"parameters": [],
"responses": {
"201": {
"description": "The response body contains the Application Context as it was created by the MEC system, which includes the reference URI(s) of the associated user application instance(s). The URI of the resource created within the MEC system associated with the request, with its specific application context ID, shall be included in the 'Location' HTTP header of the response.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AppContext"
}
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
}
},
"callbacks": {
"notification": {
"{$request.body#/appContext.callbackReference}": {
"post": {
"summary": "Callback POST used to send a notification",
"description": "Notification with content based on subscription type",
"operationId": "notificationPOST",
"requestBody": {
"description": "Subscription notification",
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InlineNotification"
},
"example": {
"notificationType": "ApplicationContextDeleteNotification",
"contextId": "contextId123"
}
}
}
},
"responses": {
"204": {
"$ref": "#/components/responses/204"
}
}
}
}
}
}
}
},
"/app_contexts/{contextId}": {
"put": {
"tags": [
"dev_app"
],
"summary": "Updating the callbackReference and/or appLocation of an existing application context.",
"description": "Used to update the callback reference and/or application location constraints of an existing application context. Upon successful operation, the target resource is updated with the new application context information.",
"operationId": "devAppContextPUT",
"requestBody": {
"description": "Only the callbackReference and/or appLocation attribute values are allowed to be updated. Other attributes and their values shall remain untouched.",
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AppContext"
}
}
}
},
"parameters": [
{
"$ref": "#/components/parameters/Path.contextId"
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
}
}
},
"delete": {
"tags": [
"dev_app"
],
"summary": "Deletion of an existing application context.",
"description": "Used to delete the resource that represents the existing application context.",
"operationId": "devAppContextDELETE",
"parameters": [
{
"$ref": "#/components/parameters/Path.contextId"
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
}
}
}
},
"/obtain_app_loc_availability": {
"post": {
"tags": [
"dev_app"
],
"summary": "Obtain the location constraints for a new application context.",
"description": "Used to obtain the locations available for instantiation of a specific user application in the MEC system.",
"operationId": "appLocationAvailabilityPOST",
"requestBody": {
"description": "Entity body in the request contains the user application information for the MEC system to evaluate the locations available for instantiation of that application.",
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApplicationLocationAvailability"
}
}
}
},
"parameters": [],
"responses": {
"200": {
"description": "The response body contains the locations available for instantiation of the requested user application in the MEC system.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApplicationLocationAvailability"
}
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
}
}
}
}
},
"components": {
"responses": {
"204": {
"description": "Upon success, a response 204 No Content without any response body is returned."
},
"400": {
"description": "Bad Request : used to indicate that incorrect parameters were passed to the request.",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized : used when the client did not submit credentials.",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"403": {
"description": "Forbidden : operation is not allowed given the current status of the resource.",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"parameters": {
"Query.appName": {
"name": "appName",
"in": "query",
"description": "Name to identify the MEC application.",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32
}
}
},
"Query.appProvider": {
"name": "appProvider",
"in": "query",
"description": "Provider of the MEC application.",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32
}
}
},
"Query.appSoftVersion": {
"name": "appSoftVersion",
"in": "query",
"description": "Software version of the MEC application.",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32
}
}
},
"Query.vendorId": {
"name": "vendorId",
"in": "query",
"description": "Vendor identifier",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32
}
}
},
"Query.serviceCont": {
"name": "serviceCont",
"in": "query",
"description": "Required service continuity mode for this application. Permitted values: 0 = SERVICE_CONTINUITY_NOT_REQUIRED. 1 = SERVICE_CONTINUITY_REQUIRED.",
"required": false,
"schema": {
"type": "integer",
"enum": [
0,
1
]
}
},
"Path.contextId": {
"name": "contextId",
"in": "path",
"description": "Uniquely identifies the application context in the MEC system. It is assigned by the MEC system.",
"required": true,
"schema": {
"type": "string"
}
}
},
"schemas": {
"AddressChangeNotification": {
"properties": {
"appInstanceId": {
"description": "Identifier of the user application instance.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"contextId": {
"description": "Uniquely identifies the application context in the MEC system.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"notificationType": {
"description": "Shall be set to \"AddressChangeNotification\".",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"referenceURI": {
"description": "Address of the user application. Used as the reference URI for the application. Assigned by the MEC system.",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "URI"
}
},
"required": [
"notificationType",
"contextId",
"appInstanceId",
"referenceURI"
],
"type": "object",
"x-etsi-ref": "6.4.2"
},
"AppContext": {
"properties": {
"appAutoInstantiation": {
"description": "Provides indication to the MEC system that instantiation of the requested application is desired should a requested appLocation become available that was not at the time of the request.",
"type": "boolean",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Boolean"
},
"appInfo": {
"description": "",
"properties": {
"appDId": {
"description": "Identifier of this MEC application descriptor. This attribute shall be globally unique. It is equivalent to the appDId defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1]. It shall be present if the application is one in the ApplicationList.",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"appDVersion": {
"description": "Identifies the version of the application descriptor. It is equivalent to the appDVersion defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1].",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appDescription": {
"description": "Human readable description of the MEC application. The length of the value shall not exceed 128 characters.",
"type": "string",
"maxLength": 128,
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"appName": {
"description": "Name of the MEC application. The length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appProvider": {
"description": "Provider of the MEC application.\nThe length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appSoftVersion": {
"description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"appPackageSource": {
"description": "URI of the application package.\nIncluded 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 0102 [1].",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "URI"
},
"userAppInstanceInfo": {
"description": "List of user application instance information.",
"items": {
"type": "object",
"properties": {
"appInstanceId": {
"description": "Identifier of the user application instance. It shall only be included in the response.",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"appLocation": {
"$ref": "#/components/schemas/LocationConstraints"
},
"referenceURI": {
"description": "Address of the user application instance. It shall only be included in the response.",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "URI"
}
}
},
"minItems": 1,
"type": "array",
"x-etsi-mec-cardinality": "1..N",
"x-etsi-mec-origin-type": "array (Structure inlined)"
}
},
"required": [
"appName",
"appProvider",
"appDVersion",
"userAppInstanceInfo"
],
"type": "object",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Structure (inlined)"
},
"appLocationUpdates": {
"description": "Used by the device application to request to receive notifications at the callbackReference URI relating to location availability for user application instantiation.",
"type": "boolean",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Boolean"
},
"associateDevAppId": {
"description": "Uniquely identifies the device application. The length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"callbackReference": {
"description": "URI assigned by the device application to receive application lifecycle related notifications. Inclusion in the request implies the client supports the pub/sub mechanism and is capable of receiving notifications. This endpoint shall be maintained for the lifetime of the application context.",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "URI"
},
"contextId": {
"description": "Uniquely identifies the application context in the MEC system. Assigned by the MEC system and shall be present other than in a create request. The length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"associateDevAppId",
"appInfo"
],
"type": "object",
"x-etsi-notes": "NOTE 1:\tIf a value of the attribute is included in the request, the same value shall be included in the response.\nNOTE 2:\tThe design of the current operation with callback reference assumes no web proxy between the entity that originates the notification and the entity that receives it.\nNOTE 3:\tThe language support for the application description may be limited.\nNOTE 4:\tAttribute appLocationUpdates and appAutoInstantiation shall not both be set to TRUE.",
"x-etsi-ref": "6.2.3"
},
"ApplicationContextDeleteNotification": {
"properties": {
"contextId": {
"description": "Uniquely identifies the application context that has been deleted from the MEC system.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"notificationType": {
"description": "Shall be set to \"ApplicationContextDeleteNotification\".",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"notificationType",
"contextId"
],
"type": "object",
"x-etsi-ref": "6.4.3"
},
"ApplicationContextUpdateNotification": {
"properties": {
"contextId": {
"description": "Uniquely identifies the application context in the MEC system.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"notificationType": {
"description": "Shall be set to \"ApplicationContextUpdateNotification\".",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"userAppInstanceInfo": {
"description": "List of user application instance information.",
"items": {
"type": "object",
"properties": {
"appInstanceId": {
"description": "Identifier of the user application instance.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appLocation": {
"$ref": "#/components/schemas/LocationConstraints"
},
"referenceURI": {
"description": "Address of the user application instance.",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "URI"
}
}
},
"minItems": 1,
"required": [
"appInstanceId",
"referenceURI"
],
"type": "array",
"x-etsi-mec-cardinality": "1..N",
"x-etsi-mec-origin-type": "array (Structure inlined)"
}
},
"type": "object",
"required": [
"notificationType",
"contextId",
"userAppInstanceInfo"
],
"x-etsi-ref": "6.4.4"
},
"ApplicationList": {
"properties": {
"appList": {
"description": "List of user applications available to the device application. As defined below.",
"items": {
"type": "object",
"properties": {
"appInfo": {
"description": "",
"properties": {
"appCharcs": {
"description": "Characteristics of the application. As defined below. The application characteristics relate to the system resources consumed by the application. A device application can use this information e.g. for estimating the cost of use of the application or for the expected user experience.",
"properties": {
"bandwidth": {
"description": "The required connection bandwidth in kbit/s for the use of the MEC application instance. ",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "uint32"
},
"latency": {
"description": "The target round trip time in milliseconds supported by the MEC system for the MEC application instance.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "uint32"
},
"memory": {
"description": "The maximum size in Mbytes of the memory resource expected to be used by the MEC application instance in the MEC system.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "uint32"
},
"serviceCont": {
"description": "Required service continuity mode for this application. Permitted values: 0 = SERVICE_CONTINUITY_NOT_REQUIRED. 1 = SERVICE_CONTINUITY_REQUIRED.",
"enum": [
0,
1
],
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Enum"
},
"storage": {
"description": "The maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "uint32"
}
},
"type": "object",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Structure (inlined)"
},
"appDId": {
"description": "Identifier of this MEC application descriptor. It is equivalent to the appDId defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1]. This attribute shall be globally unique.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appDVersion": {
"description": "Identifies the version of the application descriptor. It is equivalent to the appDVersion defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1].",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appDescription": {
"description": "Human readable description of the MEC application (see note 2).",
"type": "string",
"maxLength": 128,
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appLocation": {
"description": "Identifies the locations of the MEC application.",
"items": {
"$ref": "#/components/schemas/LocationConstraints"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "LocationConstraints"
},
"appName": {
"description": "Name of the MEC application. The length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appProvider": {
"description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appSoftVersion": {
"description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"appDId",
"appName",
"appProvider",
"appSoftVersion",
"appDVersion",
"appDescription"
],
"type": "object",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Structure (inlined)"
},
"vendorSpecificExt": {
"description": "Extension for vendor specific information (see note 1).",
"properties": {
"vendorId": {
"description": "Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of vendor specific extension is not defined.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"vendorId"
],
"type": "object",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Structure (inlined)"
}
}
},
"minItems": 0,
"required": [
"appInfo"
],
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "Array (Structure (inlined))"
}
},
"type": "object",
"x-etsi-notes": "NOTE 1:\tThe vendor specific extension allows submitting information on the application lists that have been made available to the device application of the corresponding vendor.\nNOTE 2:\tThe language support may be limited. The length of the value shall not exceed 128 characters.",
"x-etsi-ref": "6.2.2"
},
"ApplicationLocationAvailability": {
"properties": {
"appInfo": {
"description": "",
"properties": {
"appDVersion": {
"description": "Identifies the version of the application descriptor. It is equivalent to the appDVersion defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1].",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appDescription": {
"description": "Human readable description of the MEC application. The length of the value shall not exceed 128 characters.",
"type": "string",
"maxLength": 128,
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"appName": {
"description": "Name of the MEC application. The length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appPackageSource": {
"description": "URI of the application package. Shall be included in the request. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 0102 [1].",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "URI"
},
"appProvider": {
"description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"appSoftVersion": {
"description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"availableLocations": {
"description": "MEC application location constraints. ",
"items": {
"type": "object",
"properties": {
"appLocation": {
"$ref": "#/components/schemas/LocationConstraints"
}
}
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "array (Structure (inline))"
}
},
"required": [
"appName",
"appProvider",
"appDVersion"
],
"type": "object",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Structure (inlined)"
},
"associateDevAppId": {
"description": "Uniquely identifies the device application. The length of the value shall not exceed 32 characters.",
"type": "string",
"maxLength": 32,
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"associateDevAppId",
"appInfo"
],
"type": "object",
"x-etsi-ref": "6.2.4"
},
"ApplicationLocationAvailabilityNotification": {
"properties": {
"availableLocations": {
"description": "Locations available to the MEC application.",
"items": {
"type": "object",
"properties": {
"appLocation": {
"$ref": "#/components/schemas/LocationConstraints"
}
}
},
"minItems": 1,
"required": [
"appLocation"
],
"type": "array",
"x-etsi-mec-cardinality": "1..N",
"x-etsi-mec-origin-type": "array (Structure (inline))"
},
"contextId": {
"description": "Uniquely identifies the application context in the MEC system.",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"notificationType": {
"description": "Shall be set to \"ApplicationLocationAvailabilityNotification\".",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
},
"type": "object",
"required": [
"notificationType",
"availableLocations"
],
"x-etsi-ref": "6.4.5"
},
"InlineNotification": {
"oneOf": [
{
"$ref": "#/components/schemas/AddressChangeNotification"
},
{
"$ref": "#/components/schemas/ApplicationContextDeleteNotification"
},
{
"$ref": "#/components/schemas/ApplicationContextUpdateNotification"
},
{
"$ref": "#/components/schemas/ApplicationLocationAvailabilityNotification"
}
],
"discriminator": {
"propertyName": "notificationType"
}
},
"LocationConstraints": {
"properties": {
"area": {
"$ref": "#/components/schemas/Polygon"
},
"civicAddressElement": {
"description": "Zero or more elements comprising the civic address. Shall be absent if the \"area\" attribute is present.",
"items": {
"type": "object",
"properties": {
"caType": {
"description": "Describe the content type of caValue. The value of caType shall comply with section 3.4 of IETF RFC 4776 [6]. ",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Integer"
},
"caValue": {
"description": "Content of civic address element corresponding to the caType. The format caValue shall comply with section 3.4 of IETF RFC 4776 [6].",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
}
},
"minItems": 0,
"required": [
"caType",
"caValue"
],
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "array (Structure inlined)"
},
"countryCode": {
"description": "The two-letter ISO 3166 [7] country code in capital letters. Shall be present in case the \"area\" attribute is absent. May be absent if the \"area\" attribute is present (see note).",
"type": "string",
"maxLength": 2,
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
}
},
"type": "object",
"x-etsi-notes": "NOTE:\tIf both \"countryCode\" and \"area\" are present, no conflicts should exist between the values of these two attributes. In case of conflicts, the API producer (e.g. MEO, MEAO) shall disregard parts of the geographic area signalled by \"area\" that are outside the boundaries of the country signalled by \"countryCode\". If \"countryCode\" is absent, it is solely the \"area\" attribute that defines the location constraint.",
"x-etsi-ref": "6.5.2"
},
"Polygon": {
"properties": {
"coordinates": {
"items": {
"items": {
"items": {
"type": "number",
"format": "float"
},
"type": "array"
},
"type": "array"
},
"minItems": 1,
"type": "array",
"x-etsi-mec-cardinality": 1,
"x-etsi-mec-origin-type": "array"
}
},
"type": "object"
},
"ProblemDetails": {
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "URI"
},
"status": {
"description": "The HTTP status code for this occurrence of the problem",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"title": {
"description": "A short, human-readable summary of the problem type",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"type": {
"description": "A URI reference according to IETF RFC 3986 that identifies the problem type",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "URI"
}
},
"type": "object"
}
}
}
}
/** /**
* @author ETSI / TTF T012 * @author ETSI / TTF T012 / TTF T027
* @version $Url$ * @version $Url$
* $Id$ * $Id$
* @desc Types ANd Values for ETSI GS MEC 016 V2.2.1 (2020-04) * @desc Types ANd Values for ETSI GS MEC 016 V2.2.1 (2020-04)
...@@ -10,88 +10,29 @@ ...@@ -10,88 +10,29 @@
*/ */
module DeviceApplicationInterfaceAPI_TypesAndValues { module DeviceApplicationInterfaceAPI_TypesAndValues {
// JSON // JSON
import from Json all; import from Json all;
// LibCommon
import from LibCommon_BasicTypesAndValues all;
/** /**
* @desc Required service continuity mode for this application. * @desc Information on available applications
*/ * @member appList List of user applications available to the device application
type enumerated ServiceCount { * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList
SERVICE_CONTINUITY_NOT_REQUIRED (0),
SERVICE_CONTINUITY_REQUIRED (1)
} with {
variant "JSON: as number"
}
/**
* @desc Characteristics of the application
* @member memory The maximum size in Mbytes of the memory resource expected to be used by the MEC application instance in the MEC system
* @member storageThe maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system
* @member latency The target round trip time in milliseconds supported by the MEC system for the MEC application instance
* @member bandwidth The required connection bandwidth in kbit/s for the use of the MEC application instance
* @member serviceCont Required service continuity mode for this application
* @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList
*/
type record AppCharcs {
UInt32 memory optional,
UInt32 storage optional,
UInt32 latency optional,
UInt32 bandwidth optional,
ServiceCount serviceCont optional
}
/**
* @desc elements comprising the civic address
* @member caType Describe the content type of caValue. The value of caType shall comply with section 3.4 of IETF RFC 4776
* @member caValue Content of civic address element corresponding to the caType. The format caValue shall comply with section 3.4 of IETF RFC 4776
*/ */
type record CivicAddressElement { type record ApplicationList {
Json.Integer caType, AppList appList optional
Json.String caValue
}
type record Geometry {
Json.String type_,
Coordinates coordinates
} with {
variant (type_) "name as 'type'";
}
type record of Json.Number Coordinate;
type record of Coordinate Coordinates;
type record Property {
Json.String key,
Json.String value_
} with {
variant (value_) "name as 'value'";
}
type record of Property Properties;
type record Polygon {
Json.String type_,
Geometry geometry,
Properties properties,
Json.String this_
} with {
variant (type_) "name as 'type'";
variant (this_) "name as 'this'";
} }
/** /**
* @desc Identifies the locations of the MEC application * @desc Information on available applications
* @member countryCode The two-letter ISO 3166 [7] country code in capital letters. Shall be present in case the "area" attribute is absent * @member appInfo List of user applications available to the device application
* @member civicAddressElement Zero or more elements comprising the civic address * @member vendorSpecificExt Extension for vendor specific information
* @member area Geographic area. Shall be absent if the "civicAddressElement" attribute is present * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList
* @see ETSI GS MEC 016 Clause 6.5.2 Type: LocationConstraints
*/ */
type record LocationConstraints { type record AppListItem {
Json.String countryCode optional, ApplicationList_AppInfo appInfo,
CivicAddressElement civicAddressElement optional, VendorSpecificExt vendorSpecificExt optional
Polygon area optional
} }
type record of LocationConstraints LocationConstraintsList; type record of AppListItem AppList;
/** /**
* @desc Information on available applications * @desc Information on available applications
...@@ -103,61 +44,74 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { ...@@ -103,61 +44,74 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
* @member appDescription Human readable description of the MEC application * @member appDescription Human readable description of the MEC application
* @member appLocation Identifies the locations of the MEC application * @member appLocation Identifies the locations of the MEC application
* @member appCharcs Characteristics of the application * @member appCharcs Characteristics of the application
* @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList
*/ */
type record ApplicationList_AppInfo { type record ApplicationList_AppInfo {
Json.String appDId, Json.String appDId,
Json.String appName, Json.String appName,
Json.String appProvider, Json.String appProvider,
Json.String appSoftVersion optional, Json.String appSoftVersion,
Json.String appDVersion, Json.String appDVersion,
Json.String appDescription optional, Json.String appDescription,
LocationConstraintsList appLocation optional, LocationConstraintsList appLocation optional,
AppCharcs appCharcs optional AppCharcs appCharcs optional
} }
/** /**
* @desc Extension for vendor specific information * @desc Extension for vendor specific information
* @member vendorId Vendor identifier * @member vendorId Vendor identifier
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList
*/ */
type record VendorSpecificExt { type record VendorSpecificExt {
Json.String vendorId Json.String vendorId
} }
/** /**
* @desc Information on available applications * @desc Characteristics of the application
* @member appInfo List of user applications available to the device application * @member memory The maximum size in Mbytes of the memory resource expected to be used by the MEC application instance in the MEC system
* @member vendorSpecificExt Extension for vendor specific information * @member storageThe maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system
* @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList * @member latency The target round trip time in milliseconds supported by the MEC system for the MEC application instance
* @member bandwidth The required connection bandwidth in kbit/s for the use of the MEC application instance
* @member serviceCont Required service continuity mode for this application
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList
*/ */
type record AppListItem { type record AppCharcs {
ApplicationList_AppInfo appInfo, Json.UInteger memory optional,
VendorSpecificExt vendorSpecificExt optional Json.UInteger storage optional,
Json.UInteger latency optional,
Json.UInteger bandwidth optional,
ServiceCount serviceCont optional
} }
type record of AppListItem AppList;
/** /**
* @desc Information on available applications * @desc Required service continuity mode for this application
* @member appList List of user applications available to the device application * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList
* @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList
*/ */
type record ApplicationList { type enumerated ServiceCount {
AppList appList optional SERVICE_CONTINUITY_NOT_REQUIRED (0),
SERVICE_CONTINUITY_REQUIRED (1)
} with {
variant "JSON: as number"
} }
/** /**
* @desc user application instance information * @desc Information on application context created by the MEC system
* @member appInstanceId Identifier of the user application instance * @member contextId Uniquely identifies the application context in the MEC system
* @member referenceURI Address of the user application instance * @member associateDevAppId Uniquely identifies the device application
* @member appLocation Location of the user application instance * @member callbackReference Assigned by the device application to receive application lifecycle related notifications
* @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext * @member appLocationUpdates Used by the device application to request to receive notifications at the callbackReference URI relating to location availability for user application instantiation
* @member appAutoInstantiation Provides indication to the MEC system that instantiation of the requested application is desired should a requested appLocation become available that was not at the time of the request
* @member appInfo
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.3 Type: AppContext
*/ */
type record UserAppInstanceInfo { type record AppContext {
Json.String appInstanceId optional, Json.String contextId optional,
Json.AnyURI referenceURI optional, Json.String associateDevAppId,
LocationConstraints appLocation optional Json.AnyURI callbackReference optional,
boolean appLocationUpdates optional,
boolean appAutoInstantiation optional,
ApplicationContext_AppInfo appInfo
} }
type record of UserAppInstanceInfo UserAppInstanceInfoList;
/** /**
* @desc Information on available applications * @desc Information on available applications
...@@ -169,48 +123,44 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { ...@@ -169,48 +123,44 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
* @member appDescription Human readable description of the MEC application * @member appDescription Human readable description of the MEC application
* @member userAppInstanceInfo List of user application instance information * @member userAppInstanceInfo List of user application instance information
* @member appPackageSource URI of the application package * @member appPackageSource URI of the application package
* @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.3 Type: AppContext
*/ */
type record ApplicationContext_AppInfo { type record ApplicationContext_AppInfo {
Json.String appDId, Json.String appDId,
Json.String appName, Json.String appName,
Json.String appProvider, Json.String appProvider,
Json.String appSoftVersion optional, Json.String appSoftVersion optional,
Json.String appDVersion, Json.String appDVersion,
Json.String appDescription optional, Json.String appDescription optional,
UserAppInstanceInfoList userAppInstanceInfo optional, UserAppInstanceInfoList userAppInstanceInfo optional,
Json.AnyURI appPackageSource optional Json.AnyURI appPackageSource optional
} }
/** /**
* @desc Information on application context created by the MEC system * @desc user application instance information
* @member contextId Uniquely identifies the application context in the MEC system * @member appInstanceId Identifier of the user application instance
* @member associateDevAppId Uniquely identifies the device application * @member referenceURI Address of the user application instance
* @member callbackReference Assigned by the device application to receive application lifecycle related notifications * @member appLocation Location of the user application instance
* @member appLocationUpdates Used by the device application to request to receive notifications at the callbackReference URI relating to location availability for user application instantiation * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.3 Type: AppContext
* @member appAutoInstantiation Provides indication to the MEC system that instantiation of the requested application is desired should a requested appLocation become available that was not at the time of the request
* @member appInfo
* @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext
*/ */
type record AppContext { type record UserAppInstanceInfo {
Json.String contextId optional, Json.String appInstanceId optional,
Json.String associateDevAppId, Json.AnyURI referenceURI optional,
Json.AnyURI callbackReference optional, LocationConstraints appLocation optional
boolean appLocationUpdates optional,
boolean appAutoInstantiation optional,
ApplicationContext_AppInfo appInfo
} }
type record of UserAppInstanceInfo UserAppInstanceInfoList;
/** /**
* @desc * @desc Information on locations available instantiation of new user application instances
* @member appLocation Shall only be included in the response, where it indicates a location constraint available in the MEC system * @member associateDevAppId Uniquely identifies the device application
* @member appInfo
* @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.4 Type: ApplicationLocationAvailability
*/ */
type record AvailableLocations { type record ApplicationLocationAvailability {
LocationConstraints appLocation optional Json.String associateDevAppId,
ApplicationLocationAvailability_AppInfo appInfo
} }
type record of AvailableLocations AvailableLocationsList;
/** /**
* @desc * @desc
* @member appDId Identifier of this MEC application descriptor * @member appDId Identifier of this MEC application descriptor
...@@ -221,29 +171,28 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { ...@@ -221,29 +171,28 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
* @member appDescription Human readable description of the MEC application * @member appDescription Human readable description of the MEC application
* @member availableLocations MEC application location constraints * @member availableLocations MEC application location constraints
* @member appPackageSource URI of the application package. Shall be included in the request * @member appPackageSource URI of the application package. Shall be included in the request
* @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability * @seeETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.4 Type: ApplicationLocationAvailability
*/ */
type record ApplicationLocationAvailability_AppInfo { type record ApplicationLocationAvailability_AppInfo {
Json.String appDId, Json.String appDId,
Json.String appName, Json.String appName,
Json.String appProvider, Json.String appProvider,
Json.String appSoftVersion optional, Json.String appSoftVersion optional,
Json.String appDVersion, Json.String appDVersion,
Json.String appDescription optional, Json.String appDescription optional,
AvailableLocationsList availableLocations optional, AvailableLocationsList availableLocations optional,
Json.AnyURI appPackageSource optional Json.AnyURI appPackageSource optional
} }
/** /**
* @desc Information on locations available instantiation of new user application instances * @desc
* @member associateDevAppId Uniquely identifies the device application * @member appLocation Shall only be included in the response, where it indicates a location constraint available in the MEC system
* @member appInfo * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.4 Type: ApplicationLocationAvailability
* @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability
*/ */
type record ApplicationLocationAvailability { type record AvailableLocations {
Json.String associateDevAppId, LocationConstraints appLocation optional
ApplicationLocationAvailability_AppInfo appInfo
} }
type record of AvailableLocations AvailableLocationsList;
/** /**
* @desc Notification from the UALCMP regarding a change in address of a user application instance * @desc Notification from the UALCMP regarding a change in address of a user application instance
...@@ -251,7 +200,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { ...@@ -251,7 +200,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
* @member contextId Uniquely identifies the application context in the MEC system * @member contextId Uniquely identifies the application context in the MEC system
* @member appInstanceId Identifier of the user application instance * @member appInstanceId Identifier of the user application instance
* @member referenceURI Address of the user application. Used as the reference URI for the application * @member referenceURI Address of the user application. Used as the reference URI for the application
* @see ETSI GS MEC 016 Clause 6.4.2 Type: AddressChangeNotification * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.4.2 Type: AddressChangeNotification
*/ */
type record AddressChangeNotification { type record AddressChangeNotification {
Json.String notificationType, Json.String notificationType,
...@@ -262,9 +211,9 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { ...@@ -262,9 +211,9 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
/** /**
* @desc Notification from the UALCMP regarding the deletion of an application context by the MEC system * @desc Notification from the UALCMP regarding the deletion of an application context by the MEC system
* @member notificationType Shall be set to "AddressChangeNotification" * @member notificationType Shall be set to "ApplicationContextDeleteNotification"
* @member contextId Uniquely identifies the application context in the MEC system * @member contextId Uniquely identifies the application context in the MEC system
* @see ETSI GS MEC 016 Clause 6.4.3 Type: ApplicationContextDeleteNotification * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.4.3 Type: ApplicationContextDeleteNotification
*/ */
type record ApplicationContextDeleteNotification { type record ApplicationContextDeleteNotification {
Json.String notificationType, Json.String notificationType,
...@@ -273,30 +222,94 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { ...@@ -273,30 +222,94 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
/** /**
* @desc Notification from the UALCMP regarding an update to an application change by the MEC system * @desc Notification from the UALCMP regarding an update to an application change by the MEC system
* @member notificationType Shall be set to "AddressChangeNotification" * @member notificationType Shall be set to "ApplicationContextUpdateNotification"
* @member contextId Uniquely identifies the application context in the MEC system * @member contextId Uniquely identifies the application context in the MEC system
* @member userAppInstanceInfo List of user application instance information * @member userAppInstanceInfo List of user application instance information
* @see ETSI GS MEC 016 Clause 6.4.4 Type: ApplicationContextDeleteNotification * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.4.4 Type: ApplicationContextUpdateNotification
*/ */
type record ApplicationContextUpdateNotification { type record ApplicationContextUpdateNotification {
Json.String notificationType, Json.String notificationType,
Json.String contextId, Json.String contextId,
UserAppInstanceInfoList userAppInstanceInfo UserAppInstanceInfoList userAppInstanceInfo
} }
/** /**
* @desc Notification from the UALCMP regarding the availability of a location that was requested in the Application context create that could not be fulfilled at the time of the request * @desc Notification from the UALCMP regarding the availability of a location that was requested in the Application context create that could not be fulfilled at the time of the request
* @member notificationType Shall be set to "AddressChangeNotification" * @member notificationType Shall be set to "ApplicationLocationAvailabilityNotification"
* @member contextId Uniquely identifies the application context in the MEC system * @member contextId Uniquely identifies the application context in the MEC system
* @member availableLocations Locations available to the MEC application * @member availableLocations Locations available to the MEC application
* @see ETSI GS MEC 016 Clause 6.4.5 Type: ApplicationLocationAvailabilityNotification * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.4.5 Type: ApplicationLocationAvailabilityNotification
*/ */
type record ApplicationLocationAvailabilityNotification { type record ApplicationLocationAvailabilityNotification {
Json.String notificationType, Json.String notificationType,
Json.String contextId, Json.String contextId,
AvailableLocationsList availableLocations AvailableLocationsList availableLocations
} }
/**
* @desc Identifies the locations of the MEC application
* @member countryCode The two-letter ISO 3166 [7] country code in capital letters. Shall be present in case the "area" attribute is absent
* @member civicAddressElement Zero or more elements comprising the civic address
* @member area Geographic area. Shall be absent if the "civicAddressElement" attribute is present
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.5.2 Type: LocationConstraints
*/
type record LocationConstraints {
Json.String countryCode optional,
CivicAddressElement civicAddressElement optional,
Polygon area optional
}
type record of LocationConstraints LocationConstraintsList;
/**
* @desc Elements comprising the civic address
* @member caType Describe the content type of caValue. The value of caType shall comply with section 3.4 of IETF RFC 4776
* @member caValue Content of civic address element corresponding to the caType. The format caValue shall comply with section 3.4 of IETF RFC 4776
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.5.2 Type: LocationConstraints
*/
type record CivicAddressElement {
Json.Integer caType,
Json.String caValue
}
/**
* @desc
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.5.2 Type: LocationConstraints
*/
type record Polygon {
Json.String type_,
Geometry geometry,
Properties properties,
Json.String this_
} with {
variant (type_) "name as 'type'";
variant (this_) "name as 'this'";
}
/**
* @desc
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.5.2 Type: LocationConstraints
*/
type record Geometry {
Json.String type_,
Coordinates coordinates
} with {
variant (type_) "name as 'type'";
}
type record of Json.Number Coordinate;
type record of Coordinate Coordinates;
/**
* @desc
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.5.2 Type: LocationConstraints
*/
type record Property {
Json.String key,
Json.String value_
} with {
variant (value_) "name as 'value'";
}
type record of Property Properties;
} with { } with {
encode "JSON" encode "JSON"
} // End of module DeviceApplicationInterfaceAPI_TypesAndValues } // End of module DeviceApplicationInterfaceAPI_TypesAndValues
{
"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": "Mp1 API",
"version": "1.1.1",
"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"
},
"contact": {
"email": "cti_support@etsi.org"
}
},
"externalDocs": {
"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"
},
"tags": [
{
"name": "trafficRules"
},
{
"name": "dnsRules"
},
{
"name": "subscriptions"
},
{
"name": "services"
},
{
"name": "timing"
},
{
"name": "transports"
},
{
"name": "callbacks"
}
],
"paths": {
"/applications/{appInstanceId}/dns_rules": {
"parameters": [
{
"$ref": "#/components/parameters/Path.AppInstanceId"
}
],
"get": {
"description": "This method retrieves information about all the DNS rules associated with a mobile edge application instance.",
"operationId": "ApplicationsDnsRules_GET",
"tags": [
"trafficRules"
],
"responses": {
"200": {
"$ref": "#/components/responses/ApplicationsDnsRules.200"
},
"400": {
"$ref": "#/components/responses/Error.400"
},
"403": {
"$ref": "#/components/responses/Error.403"
},
"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/ApplicationsDnsRule.200"
},
"400": {
"$ref": "#/components/responses/Error.400"
},
"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"
}
}
},
"/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 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": [
"subscriptions"
],
"responses": {
"201": {
"$ref": "#/components/responses/ApplicationsSubscriptions.201"
},
"400": {
"$ref": "#/components/responses/Error.400"
},
"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"
}
}
}
},
"/applications/{appInstanceId}/subscriptions/{subscriptionType}/{subscriptionId}": {
"parameters": [
{
"$ref": "#/components/parameters/Path.AppInstanceId"
},
{
"$ref": "#/components/parameters/Path.SubscriptionType"
},
{
"$ref": "#/components/parameters/Path.SubscriptionId"
}
],
"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": [
"subscriptions"
],
"responses": {
"200": {
"$ref": "#/components/responses/ApplicationsSubscription.200"
},
"400": {
"$ref": "#/components/responses/Error.400"
},
"403": {
"$ref": "#/components/responses/Error.403"
},
"404": {
"$ref": "#/components/responses/Error.404"
}
}
},
"delete": {
"description": "This method deletes a meMp1Subscription. This method is typically used in \"Unsubscribing from service availability event notifications\" procedure.",
"operationId": "ApplicationsSubscription_DELETE",
"tags": [
"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"
},
"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"
}
}
},
"/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"
}
}
},
"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"
}
}
},
"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"
}
}
},
"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"
}
}
}
}
},
"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"
}
}
},
"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/ServiceInfo"
},
"examples": {
"ServiceInfo": {
"$ref": "#/components/examples/ServiceInfo"
}
}
}
},
"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/ServiceInfo"
},
"examples": {
"ServiceInfo": {
"$ref": "#/components/examples/ServiceInfo"
}
}
}
}
},
"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/CurrentTime"
}
}
}
},
"TimingCaps.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/TimingCaps"
}
}
}
},
"Transports.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/TransportInfo"
}
}
}
},
"links": {
"getTransportInfo": {
"$ref": "#/components/links/GetTransportInfo"
}
}
},
"Error.400": {
"description": "Bad Request",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/plain": {
"schema": {
"$ref": "#/components/schemas/Empty"
}
}
}
},
"Error.403": {
"description": "Forbidden",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"Error.404": {
"description": "Not Found",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/plain": {
"schema": {
"$ref": "#/components/schemas/Empty"
}
}
}
},
"Error.412": {
"description": "Precondition Failed",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/plain": {
"schema": {
"$ref": "#/components/schemas/Empty"
}
}
}
}
},
"requestBodies": {
"ApplicationsDnsRule": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DnsRule"
}
}
},
"description": "The updated state is included in the entity body of the request.",
"required": true
},
"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
},
"ApplicationsTrafficRule": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TrafficRule"
}
}
},
"description": "One or more updated attributes that are allowed to be changed",
"required": true
},
"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
},
"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
},
"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
},
"AppTerminationNotification": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AppTerminationNotification"
}
}
}
},
"ServiceAvailabilityNotification": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceAvailabilityNotification"
}
}
}
}
},
"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"
}
}
}
}
},
"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"
}
},
"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"
}
},
"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"
}
},
"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"
}
},
"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"
}
},
"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"
}
},
"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"
}
},
"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"
}
},
"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"
}
},
"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"
}
},
"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"
}
},
"DnsRules": {
"value": [
{
"dnsRuleId": "DnsRule1",
"domainName": "www.example.com",
"ipAddressType": "IP_V4",
"ipAddress": "146.241.7.3",
"ttl": 300,
"state": "ACTIVE"
}
]
},
"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"
}
},
"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"
}
]
},
"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"
}
},
"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"
}
]
}
}
}
}
\ No newline at end of file
...@@ -29,7 +29,7 @@ module EdgePlatformApplicationEnablementAPI_Functions { ...@@ -29,7 +29,7 @@ module EdgePlatformApplicationEnablementAPI_Functions {
function f_create_service_info( function f_create_service_info(
out ServiceInfo p_service_info, out ServiceInfo p_service_info,
out Headers p_headers out charstring p_subscription_id
) runs on HttpComponent { ) runs on HttpComponent {
var Headers v_headers; var Headers v_headers;
var HttpMessage v_response; var HttpMessage v_response;
...@@ -39,24 +39,22 @@ module EdgePlatformApplicationEnablementAPI_Functions { ...@@ -39,24 +39,22 @@ module EdgePlatformApplicationEnablementAPI_Functions {
httpPort.send( httpPort.send(
m_http_request( m_http_request(
m_http_request_post( m_http_request_post(
PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services", PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services",
v_headers, v_headers,
m_http_message_body_json( m_http_message_body_json(
m_body_json_service_info( m_body_json_service_info(
m_service_info( m_service_info(
v_service_name, v_service_name,
-, -, -, -, -, -, -, -, -,
m_service_info_link("m_service_info_link"),
-, -, //-,
m_transport_info( m_transport_info(
"transportId1", "REST",
"ETSI MEC-011 Conformance test", "REST_HTTP",
REST_HTTP, REST_HTTP,
"HTTP", "HTTP",
"2.0", "2.0",
m_end_point_uris({"/meMp1/service/MyEntryPoint"}), m_end_point_uris({"/meMp1/service/MyEntryPoint"}),
m_security_info m_security_info
))))))); )))))));
tc_ac.start; tc_ac.start;
alt { alt {
[] httpPort.receive( [] httpPort.receive(
...@@ -65,13 +63,22 @@ module EdgePlatformApplicationEnablementAPI_Functions { ...@@ -65,13 +63,22 @@ module EdgePlatformApplicationEnablementAPI_Functions {
mw_http_message_body_json( mw_http_message_body_json(
mw_body_json_service_info( mw_body_json_service_info(
mw_service_info( mw_service_info(
v_service_name //serName v_service_name
)))))) -> value v_response { )))))) -> value v_response {
tc_ac.stop; tc_ac.stop;
// Extract HTTP Location header
var charstring_list v_subscription_id;
f_get_header(v_response.response.header, "Location", v_subscription_id);
// Extract HTTP subssription id
p_subscription_id := regexp(
v_subscription_id[0],
"?+" & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services" & "/(?*)",
0
);
p_service_info := v_response.response.body.json_body.serviceInfo; p_service_info := v_response.response.body.json_body.serviceInfo;
p_headers := v_response.response.header; log("f_create_service_info: INFO: IUT successfully responds to the service creation: ", p_service_info);
log("f_create_service_info: INFO: IUT successfully responds to the subscription: ", p_service_info); log("f_create_service_info: INFO: Resource URI: ", p_subscription_id);
} }
[] tc_ac.timeout { [] tc_ac.timeout {
log("f_create_service_info: INCONC: Expected message not received"); log("f_create_service_info: INCONC: Expected message not received");
...@@ -80,7 +87,7 @@ module EdgePlatformApplicationEnablementAPI_Functions { ...@@ -80,7 +87,7 @@ module EdgePlatformApplicationEnablementAPI_Functions {
} // End of function f_create_service_info } // End of function f_create_service_info
function f_delete_service_info( function f_delete_service_info(
in ServiceInfo p_service_info in charstring p_subscription_id
) runs on HttpComponent { ) runs on HttpComponent {
var Headers v_headers; var Headers v_headers;
...@@ -88,7 +95,7 @@ module EdgePlatformApplicationEnablementAPI_Functions { ...@@ -88,7 +95,7 @@ module EdgePlatformApplicationEnablementAPI_Functions {
httpPort.send( httpPort.send(
m_http_request( m_http_request(
m_http_request_delete( m_http_request_delete(
PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(p_service_info.serName)), PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & p_subscription_id,
v_headers v_headers
))); )));
tc_ac.start; tc_ac.start;
...@@ -104,9 +111,96 @@ module EdgePlatformApplicationEnablementAPI_Functions { ...@@ -104,9 +111,96 @@ module EdgePlatformApplicationEnablementAPI_Functions {
} }
} // End of 'alt' statement } // End of 'alt' statement
} // End of function f_delete_service_info } // End of function f_delete_service_info
function f_create_app_termination_notif_subscription(
out AppTerminationNotificationSubscription p_app_termination_notification_subscription,
out charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
var HttpMessage v_response;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_post(
PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions",
v_headers,
m_http_message_body_json(
m_body_json_app_termination_notif_subscription(
m_app_termination_notif_subscription(
PX_APP_TERM_NOTIF_CALLBACK_URI,
-,
PX_APP_INSTANCE_ID
))))));
// Test Body
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_201_created(
mw_http_message_body_json(
mw_body_json_app_termination_notif_subscription(
mw_app_termination_notif_subscription(
PX_APP_TERM_NOTIF_CALLBACK_URI,
mw_self,
PX_APP_INSTANCE_ID
)))))) -> value v_response {
tc_ac.stop;
// Extract HTTP Location header
var charstring_list v_subscription_id;
f_get_header(v_response.response.header, "Location", v_subscription_id);
// Extract HTTP subssription id
p_subscription_id := regexp(
v_subscription_id[0],
"?+" & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions" & "/(?*)",
0
);
p_app_termination_notification_subscription := v_response.response.body.json_body.appTerminationNotificationSubscription;
log("f_create_app_termination_notif_subscription: INFO: IUT successfully responds with a AppTerminationNotificationSubscription: ", p_app_termination_notification_subscription);
log("f_create_app_termination_notif_subscription: INFO: Resource URI: ", p_subscription_id);
}
[] tc_ac.timeout {
log("f_create_app_termination_notif_subscription: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_create_app_termination_notif_subscription
function f_delete_app_termination_notif_subscription(
in charstring p_subscription_id
) runs on HttpComponent {
// Local variables
var Headers v_headers;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_delete(
PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & p_subscription_id,
v_headers
)));
// Test Body
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_204_no_content
)) {
tc_ac.stop;
}
[] tc_ac.timeout {
log("f_delete_app_termination_notif_subscription: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_delete_app_termination_notif_subscription
function f_create_ser_availability_notification_subscription( function f_create_ser_availability_notification_subscription(
out SerAvailabilityNotificationSubscription p_ser_availability_notification_subscription out SerAvailabilityNotificationSubscription p_ser_availability_notification_subscription,
out charstring p_subscription_id
) runs on HttpComponent { ) runs on HttpComponent {
var Headers v_headers; var Headers v_headers;
var HttpMessage v_response; var HttpMessage v_response;
...@@ -115,13 +209,13 @@ module EdgePlatformApplicationEnablementAPI_Functions { ...@@ -115,13 +209,13 @@ module EdgePlatformApplicationEnablementAPI_Functions {
httpPort.send( httpPort.send(
m_http_request( m_http_request(
m_http_request_post( m_http_request_post(
PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions",
v_headers, v_headers,
m_http_message_body_json( m_http_message_body_json(
m_body_json_srv_avail_notif_subscription( m_body_json_srv_avail_notif_subscription(
m_srv_avail_notif_subscription( m_srv_avail_notif_subscription(
PX_SRV_AVAIL_NOTIF_CALLBACK_URI PX_SRV_AVAIL_NOTIF_CALLBACK_URI
)))))); ))))));
tc_ac.start; tc_ac.start;
alt { alt {
[] httpPort.receive( [] httpPort.receive(
...@@ -131,11 +225,21 @@ module EdgePlatformApplicationEnablementAPI_Functions { ...@@ -131,11 +225,21 @@ module EdgePlatformApplicationEnablementAPI_Functions {
mw_body_json_srv_avail_notif_subscription( mw_body_json_srv_avail_notif_subscription(
mw_srv_avail_notif_subscription( mw_srv_avail_notif_subscription(
PX_SRV_AVAIL_NOTIF_CALLBACK_URI PX_SRV_AVAIL_NOTIF_CALLBACK_URI
)))))) -> value v_response { )))))) -> value v_response {
tc_ac.stop; tc_ac.stop;
// Extract HTTP Location header
var charstring_list v_subscription_id;
f_get_header(v_response.response.header, "Location", v_subscription_id);
// Extract HTTP subssription id
p_subscription_id := regexp(
v_subscription_id[0],
"?+" & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions" & "/(?*)",
0
);
p_ser_availability_notification_subscription := v_response.response.body.json_body.serAvailabilityNotificationSubscription p_ser_availability_notification_subscription := v_response.response.body.json_body.serAvailabilityNotificationSubscription
log("f_create_ser_availability_notification_subscription: INFO: IUT successfully responds to the subscription: ", p_ser_availability_notification_subscription); log("f_create_ser_availability_notification_subscription: INFO: IUT successfully responds to the subscription: ", p_ser_availability_notification_subscription);
log("f_create_service_info: INFO: Resource URI: ", p_subscription_id);
} }
[] tc_ac.timeout { [] tc_ac.timeout {
log("f_create_ser_availability_notification_subscription: INCONC: Expected message not received"); log("f_create_ser_availability_notification_subscription: INCONC: Expected message not received");
...@@ -144,28 +248,23 @@ module EdgePlatformApplicationEnablementAPI_Functions { ...@@ -144,28 +248,23 @@ module EdgePlatformApplicationEnablementAPI_Functions {
} // End of function f_create_ser_availability_notification_subscription } // End of function f_create_ser_availability_notification_subscription
function f_delete_ser_availability_notification_subscription( function f_delete_ser_availability_notification_subscription(
in SerAvailabilityNotificationSubscription p_ser_availability_notification_subscription in charstring p_subscription_id
) runs on HttpComponent { ) runs on HttpComponent {
var Headers v_headers; var Headers v_headers;
var charstring v_uri := regexp(
oct2char(unichar2oct(p_ser_availability_notification_subscription.links.self_.href)),
"?+(" & PX_MEC_SVC_MGMT_APPS_URI & "/?*)",
0
);
f_init_default_headers_list(-, -, v_headers); f_init_default_headers_list(-, -, v_headers);
httpPort.send( httpPort.send(
m_http_request( m_http_request(
m_http_request_delete( m_http_request_delete(
PICS_ROOT_API & v_uri, PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & p_subscription_id,
v_headers v_headers
))); )));
tc_ac.start; tc_ac.start;
alt { alt {
[] httpPort.receive( [] httpPort.receive(
mw_http_response( mw_http_response(
mw_http_response_204_no_content mw_http_response_204_no_content
)) { )) {
tc_ac.stop; tc_ac.stop;
} }
[] tc_ac.timeout { [] tc_ac.timeout {
...@@ -173,5 +272,81 @@ module EdgePlatformApplicationEnablementAPI_Functions { ...@@ -173,5 +272,81 @@ module EdgePlatformApplicationEnablementAPI_Functions {
} }
} // End of 'alt' statement } // End of 'alt' statement
} // End of function f_delete_ser_availability_notification_subscription } // End of function f_delete_ser_availability_notification_subscription
function f_app_registration(
out AppInfo p_app_info,
out Headers p_headers
) runs on HttpComponent {
var Headers v_headers;
var HttpMessage v_response;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_post(
PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI,
v_headers,
m_http_message_body_json(
m_body_json_app_info_regapps(
m_app_info(
PX_APP_NAME,
-, -, -,
PX_APP_INSTANCE_ID,
m_end_point_uris({PX_APP_ENDPOINT_URI})
))))));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_201_created(
mw_http_message_body_json(
mw_body_json_app_info_regapps(
mw_app_info(
PX_APP_NAME,
-, -, -,
PX_APP_INSTANCE_ID,
mw_end_point_uris({PX_APP_ENDPOINT_URI})
)))))) -> value v_response {
tc_ac.stop;
p_app_info := v_response.response.body.json_body.appInfo_regapps;
p_headers := v_response.response.header;
log("f_app_registration: IUT successfully responds with a AppInfo: ", p_app_info);
}
[] tc_ac.timeout {
log("f_app_registration: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_app_registration
function f_app_deletion(
in Json.String p_app_instance_id
) runs on HttpComponent {
var Headers v_headers;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_delete(
PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")),
v_headers
)));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_204_no_content
)) {
tc_ac.stop;
}
[] tc_ac.timeout {
log("f_app_deletion: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_app_deletion
} // End of module EdgePlatformApplicationEnablementAPI_Functions } // End of module EdgePlatformApplicationEnablementAPI_Functions
module EdgePlatformApplicationEnablementAPI_Pixits { module EdgePlatformApplicationEnablementAPI_Pixits {
// JSON
import from Json all;
// LibMec/EdgePlatformApplicationEnablementAPI // LibMec/EdgePlatformApplicationEnablementAPI
import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; import from EdgePlatformApplicationEnablementAPI_TypesAndValues all;
modulepar Json.String PX_APP_NAME := "appName01";
modulepar Json.String PX_APP_D_ID := "appName01";
modulepar AppInstanceId PX_APP_INSTANCE_ID := "appInst01"; modulepar AppInstanceId PX_APP_INSTANCE_ID := "appInst01";
modulepar AppInstanceId PX_NON_EXISTENT_APP_INSTANCE_ID := "appInst99"; modulepar AppInstanceId PX_NON_EXISTENT_APP_INSTANCE_ID := "appInst99";
modulepar Json.String PX_APP_ENDPOINT_URI := "http://example.com:12345";
modulepar SerName PX_SERVICE_NAME := "serName"; modulepar SerName PX_SERVICE_NAME := "serName01";
modulepar SerName PX_NON_EXISTENT_SERVICE_NAME := "unknownSerName"; modulepar SerName PX_NON_EXISTENT_SERVICE_NAME := "unknownSerName";
......
/** /**
* @desc The ETSI MEC ISG MEC011 Application Enablement API described using OpenAPI * @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 EdgePlatformApplicationEnablementAPI_Templates { module EdgePlatformApplicationEnablementAPI_Templates {
...@@ -10,27 +9,17 @@ module EdgePlatformApplicationEnablementAPI_Templates { ...@@ -10,27 +9,17 @@ module EdgePlatformApplicationEnablementAPI_Templates {
// LibCommon // LibCommon
import from LibCommon_BasicTypesAndValues all; import from LibCommon_BasicTypesAndValues all;
// LibMec/AppEna // LibMec
import from LibMec_TypesAndValues all;
// LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI
import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all;
// LibMec/EdgePlatformApplicationEnablementAPI
import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; import from EdgePlatformApplicationEnablementAPI_TypesAndValues all;
import from EdgePlatformApplicationEnablementAPI_Pixits all; import from EdgePlatformApplicationEnablementAPI_Pixits all;
template (value) TimeStamp m_time_stamp( template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo m_security_info(
in Seconds p_seconds,
in NanoSeconds p_nanoSeconds := 0
) := {
seconds := p_seconds,
nanoSeconds := p_nanoSeconds
} // End of template m_time_stamp
template (present) TimeStamp mw_time_stamp(
template (present) Seconds p_seconds := ?,
template (present) NanoSeconds p_nanoSeconds := ?
) := {
seconds := p_seconds,
nanoSeconds := p_nanoSeconds
} // End of template mw_time_stamp
template (value) SecurityInfo m_security_info(
in GrantTypesList p_grantTypes := { OAUTH2_CLIENT_CREDENTIALS }, in GrantTypesList p_grantTypes := { OAUTH2_CLIENT_CREDENTIALS },
in TokenEndpoint p_tokenEndpoint := "/mecSerMgmtApi/security/MyTokenEndPoint" in TokenEndpoint p_tokenEndpoint := "/mecSerMgmtApi/security/MyTokenEndPoint"
) := { ) := {
...@@ -41,7 +30,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { ...@@ -41,7 +30,7 @@ module EdgePlatformApplicationEnablementAPI_Templates {
extentions := omit extentions := omit
} // End of template m_security_info } // End of template m_security_info
template (present) SecurityInfo mw_security_info( template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo mw_security_info(
template (present) GrantTypesList p_grantTypes := ?, template (present) GrantTypesList p_grantTypes := ?,
template (present) TokenEndpoint p_tokenEndpoint := ? template (present) TokenEndpoint p_tokenEndpoint := ?
) := { ) := {
...@@ -52,18 +41,20 @@ module EdgePlatformApplicationEnablementAPI_Templates { ...@@ -52,18 +41,20 @@ module EdgePlatformApplicationEnablementAPI_Templates {
extentions := * extentions := *
} // End of template mw_security_info } // End of template mw_security_info
template (value) TransportInfo_Endpoint m_end_point_uris( template (value) EndPointInfo m_end_point_uris(
in template (value) EndPointInfo_UriList p_uris in template (value) EndPointInfo_UriList p_uris
) := { ) := {
uris := p_uris, uris := p_uris,
fqdn := omit,
addresses := omit, addresses := omit,
alternative := omit alternative := omit
} // End of template m_end_point_uris } // End of template m_end_point_uris
template (present) TransportInfo_Endpoint mw_end_point_uris( template (present) EndPointInfo mw_end_point_uris(
template (present) EndPointInfo_UriList p_uris := ? template (present) EndPointInfo_UriList p_uris := ?
) := { ) := {
uris := p_uris, uris := p_uris,
fqdn := *,
addresses := *, addresses := *,
alternative := * alternative := *
} // End of template mw_end_point_uris } // End of template mw_end_point_uris
...@@ -86,8 +77,8 @@ module EdgePlatformApplicationEnablementAPI_Templates { ...@@ -86,8 +77,8 @@ module EdgePlatformApplicationEnablementAPI_Templates {
in SerName p_serName, in SerName p_serName,
in ServiceInfo_Version p_version := PX_SERVICE_INFO_VERSION, in ServiceInfo_Version p_version := PX_SERVICE_INFO_VERSION,
in ServiceState p_state := PX_SERVICE_INFO_STATE, in ServiceState p_state := PX_SERVICE_INFO_STATE,
in SerializerType p_serializer := PX_SERIALIZER, in EdgePlatformApplicationEnablementAPI_TypesAndValues.SerializerType p_serializer := PX_SERIALIZER,
in template (value) ServiceInfo_Link p_links, in template (omit) ServiceInfo_Link p_links := omit,
in template (omit) SerInstanceId p_serInstanceId := omit, in template (omit) SerInstanceId p_serInstanceId := omit,
in template (omit) TransportId p_transportId := omit, in template (omit) TransportId p_transportId := omit,
in template (omit) TransportInfo p_transportInfo := omit, in template (omit) TransportInfo p_transportInfo := omit,
...@@ -112,7 +103,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { ...@@ -112,7 +103,7 @@ module EdgePlatformApplicationEnablementAPI_Templates {
template (present) SerName p_serName := ?, template (present) SerName p_serName := ?,
template (present) ServiceInfo_Version p_version := PX_SERVICE_INFO_VERSION, template (present) ServiceInfo_Version p_version := PX_SERVICE_INFO_VERSION,
template (present) ServiceState p_state := PX_SERVICE_INFO_STATE, template (present) ServiceState p_state := PX_SERVICE_INFO_STATE,
template (present) SerializerType p_serializer := PX_SERIALIZER, template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.SerializerType p_serializer := PX_SERIALIZER,
template (present) ServiceInfo_Link p_links := ?, template (present) ServiceInfo_Link p_links := ?,
template SerInstanceId p_serInstanceId := *, template SerInstanceId p_serInstanceId := *,
template TransportId p_transportId := *, template TransportId p_transportId := *,
...@@ -147,11 +138,17 @@ module EdgePlatformApplicationEnablementAPI_Templates { ...@@ -147,11 +138,17 @@ module EdgePlatformApplicationEnablementAPI_Templates {
} // End of template mw_subscription_link_list } // End of template mw_subscription_link_list
template (value) Self m_self( template (value) Self m_self(
in template (value) LinkType p_self_ in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.LinkType p_self_
) := { ) := {
self_ := p_self_ self_ := p_self_
} // End of template m_self } // End of template m_self
template (present) Self mw_self(
template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.LinkType p_self_ := ?
) := {
self_ := p_self_
} // End of template mw_self
template (omit) AppTerminationNotificationSubscription m_app_termination_notif_subscription( template (omit) AppTerminationNotificationSubscription m_app_termination_notif_subscription(
in template (value) AppTerminationNotificationSubscription_CallbackReference p_callbackReference, in template (value) AppTerminationNotificationSubscription_CallbackReference p_callbackReference,
in template (omit) Self p_links := omit, in template (omit) Self p_links := omit,
...@@ -182,6 +179,62 @@ module EdgePlatformApplicationEnablementAPI_Templates { ...@@ -182,6 +179,62 @@ module EdgePlatformApplicationEnablementAPI_Templates {
appInstanceId := p_appInstanceId appInstanceId := p_appInstanceId
} // End of template mw_app_termination_notif_subscription } // End of template mw_app_termination_notif_subscription
template (omit) AppInfo m_app_info(
in Json.String p_appName,
in template (omit) Json.String p_appProvider := omit,
in template (omit) CategoryRef p_appCategory := omit,
in template (omit) Json.String p_appDId := omit,
in template (omit) Json.String p_appInstanceId := omit,
in template (omit) EndPointInfo p_endpoint := omit,
in template (omit) ServiceDependencies p_appServiceRequired := omit,
in template (omit) ServiceDependencies p_appServiceOptional := omit,
in template (omit) FeatureDependencies p_appFeatureRequired := omit,
in template (omit) FeatureDependencies p_appFeatureOptional := omit,
in template (omit) Json.Bool p_isInsByMec := omit,
in template (omit) AppProfile p_appProfile := omit
) := {
appName := p_appName,
appProvider := p_appProvider,
appCategory := p_appCategory,
appDId := p_appDId,
appInstanceId := p_appInstanceId,
endpoint := p_endpoint,
appServiceRequired := p_appServiceRequired,
appServiceOptional := p_appServiceOptional,
appFeatureRequired := p_appFeatureRequired,
appFeatureOptional := p_appFeatureOptional,
isInsByMec := p_isInsByMec,
appProfile := p_appProfile
} // End of template m_app_info
template (present) AppInfo mw_app_info(
template (present) Json.String p_appName := ?,
template Json.String p_appProvider := *,
template CategoryRef p_appCategory := *,
template Json.String p_appDId := *,
template Json.String p_appInstanceId := *,
template EndPointInfo p_endpoint := *,
template ServiceDependencies p_appServiceRequired := *,
template ServiceDependencies p_appServiceOptional := *,
template FeatureDependencies p_appFeatureRequired := *,
template FeatureDependencies p_appFeatureOptional := *,
template Json.Bool p_isInsByMec := *,
template AppProfile p_appProfile := *
) := {
appName := p_appName,
appProvider := p_appProvider,
appCategory := p_appCategory,
appDId := p_appDId,
appInstanceId := p_appInstanceId,
endpoint := p_endpoint,
appServiceRequired := p_appServiceRequired,
appServiceOptional := p_appServiceOptional,
appFeatureRequired := p_appFeatureRequired,
appFeatureOptional := p_appFeatureOptional,
isInsByMec := p_isInsByMec,
appProfile := p_appProfile
} // End of template mw_app_info
template (value) ServiceLivenessInfo m_service_liveness_info( template (value) ServiceLivenessInfo m_service_liveness_info(
in ServiceState p_state, in ServiceState p_state,
in template (value) TimeStamp p_timeStamp, in template (value) TimeStamp p_timeStamp,
...@@ -205,11 +258,11 @@ module EdgePlatformApplicationEnablementAPI_Templates { ...@@ -205,11 +258,11 @@ module EdgePlatformApplicationEnablementAPI_Templates {
template (value) TransportInfo m_transport_info( template (value) TransportInfo m_transport_info(
in TransportInfo_Id p_id, in TransportInfo_Id p_id,
in TransportInfo_Name p_name, in TransportInfo_Name p_name,
in TransportTypes p_type_, in EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType p_type_,
in TransportInfo_Protocol p_protocol, in TransportInfo_Protocol p_protocol,
in TransportInfo_Version p_version, in TransportInfo_Version p_version,
in template (value) TransportInfo_Endpoint p_endpoint, in template (value) EndPointInfo p_endpoint,
in template (value) SecurityInfo p_security in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo p_security
) := { ) := {
id := p_id, id := p_id,
name := p_name, name := p_name,
...@@ -225,11 +278,11 @@ module EdgePlatformApplicationEnablementAPI_Templates { ...@@ -225,11 +278,11 @@ module EdgePlatformApplicationEnablementAPI_Templates {
template (present) TransportInfo mw_transport_info( template (present) TransportInfo mw_transport_info(
template (present) TransportInfo_Id p_id := ?, template (present) TransportInfo_Id p_id := ?,
template (present) TransportInfo_Name p_name := ?, template (present) TransportInfo_Name p_name := ?,
template (present) TransportTypes p_type_ := ?, template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType p_type_ := ?,
template (present) TransportInfo_Protocol p_protocol := ?, template (present) TransportInfo_Protocol p_protocol := ?,
template (present) TransportInfo_Version p_version := ?, template (present) TransportInfo_Version p_version := ?,
template (present) TransportInfo_Endpoint p_endpoint := ?, template (present) EndPointInfo p_endpoint := ?,
template (present) SecurityInfo p_security := ? template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo p_security := ?
) := { ) := {
id := p_id, id := p_id,
name := p_name, name := p_name,
......
/** /**
* @desc The ETSI MEC ISG MEC011 Application Enablement API described using OpenAPI * @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_mec011v020201p.pdf
*/ */
module EdgePlatformApplicationEnablementAPI_TypesAndValues { module EdgePlatformApplicationEnablementAPI_TypesAndValues {
// JSON // JSON
import from Json all; import from Json all;
// LibCommon // LibMec
import from LibCommon_BasicTypesAndValues all; import from LibMec_TypesAndValues all;
// MEC-10-2
import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all;
/** /**
* @desc Maximum timeout value in seconds for graceful termination or graceful stop of an application instance. * @desc Maximum timeout value in seconds for graceful termination or graceful stop of an application instance.
*/ */
type UInt32 MaxGracefulTimeout; type Json.UInteger MaxGracefulTimeout;
/** /**
* @desc Shall be set to AppTerminationNotification. * @desc Shall be set to AppTerminationNotification.
...@@ -24,63 +26,47 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { ...@@ -24,63 +26,47 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues {
* @desc Operation that is being performed on the MEC * @desc Operation that is being performed on the MEC
*/ */
type enumerated OperationAction { type enumerated OperationAction {
STOPPING (0), STOPPING (0),
TERMINATING (1) TERMINATING (1)
} }
/** /**
* @desc This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop. * @desc This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop.
* @member notificationType Shall be set to "AppTerminationNotification"
* @member operationAction Operation that is being performed on the MEC application instance
* @member maxGracefulTimeout Maximum non-zero timeout value in seconds for graceful termination or graceful stop of an application instance
* @member links Object containing hyperlinks related to the resource
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.4.2-1: Attributes of AppTerminationNotification
*/ */
type record AppTerminationNotification { type record AppTerminationNotification {
NotificationType notificationType, NotificationType notificationType,
OperationAction operationAction, OperationAction operationAction,
MaxGracefulTimeout maxGracefulTimeout, MaxGracefulTimeout maxGracefulTimeout,
Subscription links Subscription links
} with { } with {
variant (links) "name as '_links'"; variant (links) "name as '_links'";
} }
/** /**
* @desc This type represents the information that the MEC application instance provides to the MEC platform when informing it * @desc This type represents the information that the MEC application instance provides to the MEC platform when informing it
that the application has completed its application level related terminate/stop actions, e.g. retention of application state * that the application has completed its application level related terminate/stop actions, e.g. retention of application state
in the case of stop. * in the case of stop.
* @member operationAction Operation that is being performed on the MEC application instance
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.4.3-1: Attributes of AppTerminationConfirmation
*/ */
type record AppTerminationConfirmation { type record AppTerminationConfirmation {
OperationAction operationAction OperationAction operationAction
} }
/** /**
* @desc This type represents the information that the MEC application instance indicates to the MEC platform that it is up and * @desc This type represents the information that the MEC application instance indicates to the MEC platform that it is up and running
running * @member indication Indication about the MEC application instance
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.4.4-1: Attributes of AppReadyConfirmation
*/ */
type record AppReadyConfirmation { type record AppReadyConfirmation {
Json.String indication Json.String indication
} }
/**
* @desc Represents possible states of a MEC service instance
*/
type enumerated ServiceState {
ACTIVE (0),
INACTIVE (1),
SUSPENDED (2)
}
type record length(1..infinity) of ServiceState ServiceStateList;
/**
* @desc This type represents the liveness information of a MEC service instance
*/
type record ServiceLivenessInfo {
ServiceState state,
TimeStamp timeStamp,
integer interval
}
/**
* @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. * @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." * This shall be included in both the request and the response."
...@@ -89,6 +75,11 @@ running ...@@ -89,6 +75,11 @@ running
/** /**
* @desc This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop. * @desc This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop.
* @member subscriptionType Shall be set to "AppTerminationNotificationSubscription"
* @member callbackReference URI selected by the MEC application instance to receive notifications on the subscribed MEC application instance management information
* @member links Object containing hyperlinks related to the resource
* @member appInstanceId It is used as the filtering criterion for the subscribed events
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.3.2-1: Attributes of AppTerminationNotificationSubscription
*/ */
type record AppTerminationNotificationSubscription { type record AppTerminationNotificationSubscription {
SubscriptionType subscriptionType, SubscriptionType subscriptionType,
...@@ -104,6 +95,35 @@ running ...@@ -104,6 +95,35 @@ running
*/ */
type Json.String SubscriptionType; type Json.String SubscriptionType;
/**
* @desc It is used as the filtering criterion for the subscribed events.
*/
type Json.String AppInstanceId;
/**
* @desc Represents possible states of a MEC service instance
* @see ETSI GS MEC 011 V3.2.1 Table 8.1.6.6-1: Enumeration ServiceState
*/
type enumerated ServiceState {
ACTIVE (0),
INACTIVE (1),
SUSPENDED (2)
}
type record length(1..infinity) of ServiceState ServiceStateList;
/**
* @desc This type represents the liveness information of a MEC service instance
* @member state Liveness state of the MEC service instance
* @member timeStamp The time when the last "heartbeat" message was received by MEC platform
* @member interval The interval (in seconds) between two consecutive "heartbeat" messages (see clause 8.2.10.3.3) that MEC platform has determined.
* @see ETSI GS MEC 011 V3.2.1 Table 8.1.2.4-1: Attributes of ServiceLivenessInfo
*/
type record ServiceLivenessInfo {
ServiceState state,
TimeStamp timeStamp,
integer interval
}
/** /**
* @desc Reference of the catalogue. * @desc Reference of the catalogue.
*/ */
...@@ -128,25 +148,16 @@ running ...@@ -128,25 +148,16 @@ running
* @desc This type represents the category reference. * @desc This type represents the category reference.
*/ */
type record CategoryRef { type record CategoryRef {
CategoryRef_Href href, CategoryRef_Href href,
CategoryRef_Id id, CategoryRef_Id id,
Name name, Name name,
CategoryRef_Version version CategoryRef_Version version
} }
type record length(1..infinity) of CategoryRef CategoryRefList; type record length(1..infinity) of CategoryRef CategoryRefList;
/**
* @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. * @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.
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.5-1: Attributes of CurrentTime
*/ */
type enumerated TimeSourceStatus { type enumerated TimeSourceStatus {
TRACEABLE (1), TRACEABLE (1),
...@@ -158,6 +169,7 @@ running ...@@ -158,6 +169,7 @@ running
* @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. * @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 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. * @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.
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.5-1: Attributes of CurrentTime
*/ */
type record CurrentTime { type record CurrentTime {
Seconds seconds, Seconds seconds,
...@@ -165,6 +177,45 @@ running ...@@ -165,6 +177,45 @@ running
TimeSourceStatus timeSourceStatus TimeSourceStatus timeSourceStatus
} }
/**
* @desc This type represents the information provided by the MEC application instance as part of the "application registration request" and "application registration update" messages
* @member appName Name of the application. It shall be consistent with the appName in the AppD, if an AppD is available
* @member appProvider Provider of the application. It shall be consistent with the appProvider in the AppD, if an AppD is available
* @member appCategory Category of the application
* @member appDId The application descriptor identifier
* @member appInstanceId Identifier of the application instance
* @member endpoint Endpoint information (e.g. URI, FQDN, IP address) of the application server, which is part of the application functionalities
* @member appServiceRequired Describes services a MEC application requires to run
* @member appServiceOptional Describes services a MEC application may use if available
* @member appFeatureRequired Describes features a MEC application requires to run
* @member appFeatureOptional Describes features a MEC application may use if available
* @member isInsByMec Indicate whether the application instance is instantiated by the MEC Management
* @member appProfile Can be mapped to EAS profile as defined in ETSI TS 129 558 [19]
* @see ETSI GS MEC 011 V3.2.1 7.1.2.6-1: Attributes of AppInfo
*/
type record AppInfo {
Json.String appName,
Json.String appProvider optional,
CategoryRef appCategory optional,
Json.String appDId optional,
Json.String appInstanceId optional,
EndPointInfo endpoint optional,
ServiceDependencies appServiceRequired optional,
ServiceDependencies appServiceOptional optional,
FeatureDependencies appFeatureRequired optional,
FeatureDependencies appFeatureOptional optional,
Json.Bool isInsByMec optional,
AppProfile appProfile optional
} // End of type AppInfo
/**
* @desc
* @see ETSI TS 129 558 V17.2.0
*/
type record AppProfile {
// TODO
} // End of type AppProfile
/** /**
* @desc Type of the interface. * @desc Type of the interface.
*/ */
...@@ -187,13 +238,19 @@ running ...@@ -187,13 +238,19 @@ running
/** /**
* @desc This type represents the destination interface. * @desc This type represents the destination interface.
* member interfaceType Type of the interface, e.g. TUNNEL, MAC, IP, etc
* member tunnelInfo Included only if the destination interface type is "tunnel"
* member srcMacAddress If the interface type is "MAC", source address identifies the MAC address of the interface
* member dstMacAddress If the interface type is "MAC", destination address identifies the MAC address of the interface
* member dstIpAddress If the interface type is "IP", destination address identifies the IP address of the remote destination
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.5.3-1: Attributes of DestinationInterface
*/ */
type record DestinationInterface { type record DestinationInterface {
InterfaceType interfaceType, InterfaceType interfaceType,
TunnelInfo tunnelInfo optional, TunnelInfo tunnelInfo optional,
DestinationInterface_MacAddress srcMacAddress optional, DestinationInterface_MacAddress srcMacAddress optional,
DestinationInterface_MacAddress dstMacAddress optional, DestinationInterface_MacAddress dstMacAddress optional,
DestinationInterface_IpAddress dstIpAddress optional DestinationInterface_IpAddress dstIpAddress optional
} }
type record of DestinationInterface DestinationInterfaceList; type record of DestinationInterface DestinationInterfaceList;
...@@ -232,18 +289,25 @@ running ...@@ -232,18 +289,25 @@ running
/** /**
* @desc Time to live value. * @desc Time to live value.
*/ */
type UInt32 Ttl; type Json.UInteger Ttl;
/** /**
* @desc This type represents the general information of a DNS rule. * @desc This type represents the general information of a DNS rule
* member dnsRuleId Identifies the DNS Rule
* member domainName FQDN resolved by the DNS rule
* member ipAddressType 1 Specify the IP address type, value: IP_V6, IP_V4
* member ipAddress IP address associated with the FQDN resolved by the DNS rule
* member ttl Time to live value, in seconds.
* member state Contains the DNS rule state: ACTIVE, INACTIVE
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.3-1: Attributes of DnsRule
*/ */
type record DnsRule { type record DnsRule {
DnsRule_Id dnsRuleId, DnsRule_Id dnsRuleId,
DomainName domainName, DomainName domainName,
DnsRule_IpAddressType ipAddressType, DnsRule_IpAddressType ipAddressType,
DnsRule_IpAddress ipAddress, DnsRule_IpAddress ipAddress,
Ttl ttl, Ttl ttl,
DnsRule_State state DnsRule_State state
} }
type record of DnsRule DnsRuleList; type record of DnsRule DnsRuleList;
...@@ -255,13 +319,13 @@ running ...@@ -255,13 +319,13 @@ running
/** /**
* @desc Port portion of the address. * @desc Port portion of the address.
*/ */
type UInt32 Address_Port; type Json.UInteger Address_Port;
/** /**
* @desc A IP address and port pair. * @desc A IP address and port pair.
*/ */
type record Address { type record Address {
Host host, Host host,
Address_Port port_ Address_Port port_
} with { } with {
variant (port_) "name as 'port'"; variant (port_) "name as 'port'";
...@@ -276,7 +340,7 @@ running ...@@ -276,7 +340,7 @@ running
* @desc Entry point information of the service in a format defined by an implementation, or in an external specification. * @desc Entry point information of the service in a format defined by an implementation, or in an external specification.
*/ */
type record EndPointInfo_Alternative { type record EndPointInfo_Alternative {
anytype alternative anytype alternative optional
} }
/** /**
...@@ -289,8 +353,15 @@ running ...@@ -289,8 +353,15 @@ running
*/ */
type record length(1..infinity) of EndPointInfo_Uri EndPointInfo_UriList; type record length(1..infinity) of EndPointInfo_Uri EndPointInfo_UriList;
/**
* @desc Fully Qualified Domain Name of the service.
*/
type record length(1..infinity) of Json.String EndPointInfo_FqdnList;
/** /**
* @desc This type represents a type of link and may be referenced from data structures. * @desc This type represents a type of link and may be referenced from data structures.
* @member href URI referring to a resource
* @see ETSI GS MEC 011 V3.2.1 Table 6.3.2-1: Attributes of the LinkType
*/ */
type record LinkType { type record LinkType {
Href href Href href
...@@ -337,8 +408,14 @@ running ...@@ -337,8 +408,14 @@ running
variant (links) "name as '_links'"; variant (links) "name as '_links'";
} }
/**
* @desc This type represents a list of links related to currently existing subscriptions for a MEC application instance.
* @member self_ Self-referring URI
* @member subscriptions The MEC application instance's subscriptions
* @see ETSI GS MEC 011 V3.2.1 Table 6.2.2-1: Attributes of the SubscriptionLinkList
*/
type record Links { type record Links {
LinkType self_, LinkType self_,
Subscriptions subscriptions Subscriptions subscriptions
} with { } with {
variant (self_) "name as 'self'"; variant (self_) "name as 'self'";
...@@ -346,6 +423,8 @@ running ...@@ -346,6 +423,8 @@ running
/** /**
* @desc This type represents a list of links related to currently existing subscriptions for a MEC application instance. * @desc This type represents a list of links related to currently existing subscriptions for a MEC application instance.
* @member links Object containing hyperlinks related to the resource
* @see ETSI GS MEC 011 V3.2.1 Table 6.2.2-1: Attributes of the SubscriptionLinkList
*/ */
type record SubscriptionLinkList { type record SubscriptionLinkList {
Links links Links links
...@@ -357,6 +436,7 @@ running ...@@ -357,6 +436,7 @@ running
* @desc The MEC application instance's subscriptions * @desc The MEC application instance's subscriptions
* @member href URI referring to the subscription * @member href URI referring to the subscription
* @member subscriptionType Type of the subscription * @member subscriptionType Type of the subscription
* @see ETSI GS MEC 011 V3.2.1 Table 6.2.2-1: Attributes of the SubscriptionLinkList
*/ */
type record Subscription_ { type record Subscription_ {
Json.AnyURI href, Json.AnyURI href,
...@@ -390,10 +470,11 @@ running ...@@ -390,10 +470,11 @@ running
/** /**
* @desc This type represents security information related to a transport. * @desc This type represents security information related to a transport.
* @see ETSI GS MEC 011 V3.2.1 Table 8.1.5.4-1: Attributes of SecurityInfo
*/ */
type record SecurityInfo { type record SecurityInfo {
OAuth2Info oAuth2Info optional, OAuth2Info oAuth2Info optional,
UInt8 extentions optional Json.UInt8 extentions optional
} }
/** /**
...@@ -429,6 +510,12 @@ running ...@@ -429,6 +510,12 @@ running
/** /**
* @desc Filtering criteria to match services for which events are requested to be reported * @desc Filtering criteria to match services for which events are requested to be reported
* @member serInstanceIds Identifiers of service instances about which to report events
* @member serNames Names of services about which to report events
* @member serCategories Categories of services about which to report events
* @member states States of the services about which to report events
* @member isLocal Restrict event reporting to whether the service is local to the MEC platform where the subscription is managed
* @see ETSI GS MEC 011 V3.2.1 Table 8.1.3.2-1: Attributes of SerAvailabilityNotificationSubscription
*/ */
type record FilteringCriteria { type record FilteringCriteria {
SerInstanceIdList serInstanceIds optional, SerInstanceIdList serInstanceIds optional,
...@@ -449,6 +536,7 @@ running ...@@ -449,6 +536,7 @@ running
/** /**
* @desc The enumeration SerializerTypes represents types of serializers. * @desc The enumeration SerializerTypes represents types of serializers.
* @see ETSI GS MEC 011 V3.2.1 Table 8.1.6.3-1: Enumeration SerializerType
*/ */
type enumerated SerializerType { type enumerated SerializerType {
JSON, JSON,
...@@ -483,6 +571,7 @@ running ...@@ -483,6 +571,7 @@ running
/** /**
* @desc Contains the types of locality. * @desc Contains the types of locality.
* @see ETSI GS MEC 011 V3.2.1 Table 8.1.6.5-1: Enumeration LocalityType
*/ */
type enumerated LocalityType { type enumerated LocalityType {
MEC_SYSTEM, MEC_SYSTEM,
...@@ -514,6 +603,20 @@ running ...@@ -514,6 +603,20 @@ running
/** /**
* @desc This type represents the general information of a mobile edge service. * @desc This type represents the general information of a mobile edge service.
* @member serInstanceId Identifier of the service instance assigned by the MEPM/MEC platform
* @member serName The name of the service
* @member serCategory A Category reference
* @member version The version of the service
* @member state Contains the service state
* @member transportId Identifier of the platform-provided transport to be used by the service
* @member transportInfo Information regarding the transport used by the service
* @member serializer Indicate the supported serialization format of the service
* @member scopeOfLocality The scope of locality as expressed by "consumedLocalOnly" and "isLocal".
* @member consumedLocalOnly Indicate whether the service can only be consumed by the MEC applications located in the same locality (as defined by scopeOfLocality) as this service instance (TRUE) or not (FALSE)
* @member isLocal Indicate whether the service is located in the same locality (as defined by scopeOfLocality) as the consuming MEC application (TRUE) or not (FALSE)
* @member livenessInterval Interval (in seconds) between two consecutive "heartbeat" messages
* @member links Links to resources related to this resource
* @see ETSI GS MEC 011 V3.2.1 Table 8.1.2.2-1: Attributes of ServiceInfo
*/ */
type record ServiceInfo { type record ServiceInfo {
SerInstanceId serInstanceId optional, SerInstanceId serInstanceId optional,
...@@ -527,8 +630,8 @@ running ...@@ -527,8 +630,8 @@ running
LocalityType scopeOfLocality optional, LocalityType scopeOfLocality optional,
Json.Bool consumedLocalOnly optional, Json.Bool consumedLocalOnly optional,
Json.Bool isLocal optional, Json.Bool isLocal optional,
UInt32 livenessInterval optional, Json.UInteger livenessInterval optional,
ServiceInfo_Link links ServiceInfo_Link links optional
} with { } with {
variant (links) "name as '_links'"; variant (links) "name as '_links'";
} }
...@@ -544,7 +647,7 @@ running ...@@ -544,7 +647,7 @@ running
/** /**
* @desc Authentication key number. * @desc Authentication key number.
*/ */
type UInt32 AuthenticationKeyNum; type Json.UInteger AuthenticationKeyNum;
/** /**
* @desc NTP authentication option. * @desc NTP authentication option.
...@@ -558,12 +661,12 @@ running ...@@ -558,12 +661,12 @@ running
/** /**
* @desc Acceptable maximum rate of the Delay_Req messages in packets per second. * @desc Acceptable maximum rate of the Delay_Req messages in packets per second.
*/ */
type UInt32 DelayReqMaxRate; type Json.UInteger DelayReqMaxRate;
/** /**
* @desc NTP server local priority. * @desc NTP server local priority.
*/ */
type UInt32 LocalPriority; type Json.UInteger LocalPriority;
/** /**
* @desc Maximum poll interval for NTP messages, in seconds as a power of two. Range 3...17. * @desc Maximum poll interval for NTP messages, in seconds as a power of two. Range 3...17.
...@@ -596,10 +699,18 @@ running ...@@ -596,10 +699,18 @@ running
/** /**
* @desc PTP Master local priority. * @desc PTP Master local priority.
*/ */
type UInt32 NtpServers_PtpMasterLocalPriority; type Json.UInteger NtpServers_PtpMasterLocalPriority;
/** /**
* @desc NTP server detail. * @desc NTP server detail.
* @member ntpServerAddrType Address type of NTP server
* @member ntpServerAddr NTP server address
* @member minPollingInterval Minimum poll interval for NTP messages
* @member maxPollingInterval Maximum poll interval for NTP messages
* @member localPriority NTP server local priority
* @member authenticationOption NTP authentication option
* @member authenticationKeyNum Authentication key number
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.4-1: Attributes of TimingCaps
*/ */
type record NtpServers { type record NtpServers {
NtpServerAddrType ntpServerAddrType, NtpServerAddrType ntpServerAddrType,
...@@ -623,17 +734,11 @@ running ...@@ -623,17 +734,11 @@ running
type record of TimingCaps_PtpMasters TimingCaps_PtpMastersList; type record of TimingCaps_PtpMasters TimingCaps_PtpMastersList;
/** /**
* @desc Time. * @desc This type represents the information provided by the mobile edge platform in response to the Timing capabilities Query message
* @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. * @member timeStamp
* @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. * @member ntpServers Number of available NTP servers
*/ * @member ptpMasters Number of available PTP Servers (referred to as "masters" in IEEE 1588-2019™ [i.2])
type record TimeStamp { * @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.4-1: Attributes of TimingCaps
Seconds seconds,
NanoSeconds nanoSeconds
}
/**
* @desc This type represents the information provided by the mobile edge platform in response to the Timing capabilities Query message.
*/ */
type record TimingCaps { type record TimingCaps {
TimeStamp timeStamp optional, TimeStamp timeStamp optional,
...@@ -650,7 +755,7 @@ running ...@@ -650,7 +755,7 @@ running
/** /**
* @desc Used to match all IPv4 packets that have the same Differentiated Services Code Point (DSCP). * @desc Used to match all IPv4 packets that have the same Differentiated Services Code Point (DSCP).
*/ */
type UInt32 TrafficFilter_DSCP; type Json.UInteger TrafficFilter_DSCP;
/** /**
* @desc Identify the traffic ip address. * @desc Identify the traffic ip address.
...@@ -667,12 +772,12 @@ running ...@@ -667,12 +772,12 @@ running
/** /**
* @desc Used to match all packets that have the same Quality Class Indicator (QCI). * @desc Used to match all packets that have the same Quality Class Indicator (QCI).
*/ */
type UInt32 TrafficFilter_QCI; type Json.UInteger TrafficFilter_QCI;
/** /**
* @desc Used to match all IPv6 packets that have the same Traffic Class. * @desc Used to match all IPv6 packets that have the same Traffic Class.
*/ */
type UInt32 TrafficFilter_TC; type Json.UInteger TrafficFilter_TC;
/** /**
* @desc Used for tag based traffic rule. * @desc Used for tag based traffic rule.
...@@ -694,6 +799,20 @@ running ...@@ -694,6 +799,20 @@ running
/** /**
* @desc This type represents the traffic filter. * @desc This type represents the traffic filter.
* @member srcAddress An IP address or a range of IP address
* @member dstAddress An IP address or a range of IP address
* @member srcPort A port or a range of ports.
* @member dstPort A port or a range of ports.
* @member protocol Specify the protocol of the traffic filter
* @member tag Used for tag based traffic rule
* @member srcTunnelAddress Used for GTP tunnel based traffic rule
* @member tgtTunnelAddress Used for GTP tunnel based traffic rule
* @member srcTunnelPort Used for GTP tunnel based traffic rule
* @member dstTunnelPort Used for GTP tunnel based traffic rule
* @member qCI Used to match all packets that have the same QCI
* @member dSCP Used to match all IPv4 packets that have the same DSCP
* @member tC Used to match all IPv6 packets that have the same TC
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.5.2-1: Attributes of TrafficFilter
*/ */
type record TrafficFilter { type record TrafficFilter {
TrafficFilter_AddressList srcAddress optional, TrafficFilter_AddressList srcAddress optional,
...@@ -740,7 +859,7 @@ running ...@@ -740,7 +859,7 @@ running
/** /**
* @desc Priority of this traffic rule. If traffic rule conflicts, the one with higher priority take precedence. * @desc Priority of this traffic rule. If traffic rule conflicts, the one with higher priority take precedence.
*/ */
type UInt32 TrafficRule_Priority; type Json.UInteger TrafficRule_Priority;
/** /**
* @desc Contains the traffic rule state. * @desc Contains the traffic rule state.
...@@ -751,7 +870,15 @@ running ...@@ -751,7 +870,15 @@ running
} }
/** /**
* @desc This type represents the general information of a traffic rule. * @desc This type represents the general information of a traffic rule
* member trafficRuleId Identify the traffic rule.
* member filterType Definition of filter per FLOW or PACKET
* member priority Priority of this traffic rule within the range 0 to 255]
* member trafficFilter The filter used to identify specific packets that need to be handled by the MEC host
* member action The action of the MEC host data plane when a packet matches the trafficFilter
* member dstInterface Describes the destination interface information
* member state Contains the traffic rule state: ACTIVE, INACTIVE
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.2-1: Attributes of TrafficRule
*/ */
type record TrafficRule { type record TrafficRule {
TrafficRule_Id trafficRuleId, TrafficRule_Id trafficRuleId,
...@@ -797,25 +924,41 @@ running ...@@ -797,25 +924,41 @@ running
type Json.String TransportInfo_Version; type Json.String TransportInfo_Version;
/** /**
* @desc This type represents information about a transport endpoint. * @desc This type represents information about a transport endpoint
* @member uris Entry point information of the service as string, formatted according to URI syntax (see IETF RFC 3986 [8])
* @member fqdn Fully Qualified Domain Name of the service
* @member addresses Entry point information of the service as one or more pairs of IP address and port
* @member alternativeEntry point information of the service in a format defined by an implementation, or in an external specification
* @see ETSI GS MEC 011 V3.2.1 Table 8.1.5.3-1: Attributes of EndPointInfo
*/ */
type record TransportInfo_Endpoint { type record EndPointInfo {
EndPointInfo_UriList uris optional, EndPointInfo_UriList uris optional,
EndPointInfo_FqdnList fqdn optional,
EndPointInfo_AddressList addresses optional, EndPointInfo_AddressList addresses optional,
EndPointInfo_Alternative alternative optional EndPointInfo_Alternative alternative optional
} }
/** /**
* @desc This type represents the general information of a mobile edge service. * @desc This type represents the general information of a mobile edge service.
* @member id The identifier of this transport
* @member name The name of this transport
* @member description Human-readable description of this transport
* @member type_ Type of the transport
* @member protocol The name of the protocol used. Shall be set to "HTTP" for a REST API
* @member version The version of the protocol used
* @member endpoint Information about the endpoint to access the transport
* @member security Information about the security used by the transport
* @member implSpecificInfo Additional implementation specific details of the transport
* @see ETSI GS MEC 011 V3.2.1 Table 8.1.2.3-1: Attributes of TransportInfo
*/ */
type record TransportInfo { type record TransportInfo {
TransportInfo_Id id, TransportInfo_Id id,
TransportInfo_Name name, TransportInfo_Name name,
TransportInfo_Description description optional, TransportInfo_Description description optional,
TransportTypes type_, TransportType type_,
TransportInfo_Protocol protocol, TransportInfo_Protocol protocol,
TransportInfo_Version version, TransportInfo_Version version,
TransportInfo_Endpoint endpoint, EndPointInfo endpoint,
SecurityInfo security, SecurityInfo security,
TransportInfo_ImplSpecificInfo implSpecificInfo optional TransportInfo_ImplSpecificInfo implSpecificInfo optional
} with { } with {
...@@ -824,9 +967,10 @@ running ...@@ -824,9 +967,10 @@ running
type record of TransportInfo TransportInfoList; type record of TransportInfo TransportInfoList;
/** /**
* @desc The enumeration TransportTypes represents types of transports. * @desc The enumeration TransportType represents types of transports.
* @see ETSI GS MEC 011 V3.2.1 Table 8.1.6.4-1: Enumeration TransportType
*/ */
type enumerated TransportTypes { type enumerated TransportType {
REST_HTTP, REST_HTTP,
MB_TOPIC_BASED, MB_TOPIC_BASED,
MB_ROUTING, MB_ROUTING,
...@@ -856,6 +1000,10 @@ running ...@@ -856,6 +1000,10 @@ running
/** /**
* @desc This type represents the tunnel information. * @desc This type represents the tunnel information.
* @member tunnelType Type of the tunnel, e.g. GTP_U, GRE, etc
* @member tunnelDstAddress Destination address of the tunnel
* @member tunnelSrcAddress Source address of the tunnel
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.5.4-1: Attributes of TunnelInfo
*/ */
type record TunnelInfo { type record TunnelInfo {
TunnelInfo_TunnelType tunnelType, TunnelInfo_TunnelType tunnelType,
......
sources := \
ttcn/FederationEnablementAPI_Pics.ttcn \
ttcn/FederationEnablementAPI_Pixits.ttcn \
ttcn/FederationEnablementAPI_Templates.ttcn \
ttcn/FederationEnablementAPI_Functions.ttcn \
ttcn/FederationEnablementAPI_TypesAndValues.ttcn
module FederationEnablementAPI_Functions {
// JSON
import from Json all;
// LibCommon
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_Time all;
import from LibCommon_VerdictControl all;
import from LibCommon_Sync all;
// LibHttp
import from LibHttp_TypesAndValues all;
import from LibHttp_Functions all;
import from LibHttp_Templates all;
import from LibHttp_JsonTemplates all;
import from LibHttp_TestSystem all;
// LibMec/FixedAccessInformationServiceAPI
import from FederationEnablementAPI_TypesAndValues all;
import from FederationEnablementAPI_Templates all;
import from FederationEnablementAPI_Pixits all;
// LibMec
import from LibMec_Templates all;
import from LibMec_Functions all;
import from LibMec_Pics all;
import from LibMec_Pixits all;
function f_create_system_info(
out SystemInfo p_system_info
) runs on HttpComponent {
var Headers v_headers;
var HttpMessage v_response;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_post(
PICS_ROOT_API & PX_FED_API_SUB,
v_headers,
m_http_message_body_json(
m_body_json_fed_system_info(
m_system_info(
PX_FED_SYSTEM_NAME_1,
PX_FED_SYSTEM_PROVIDER_1
))))));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_201_created(
mw_http_message_body_json(
mw_body_json_fed_system_info(
mw_system_info(
PX_FED_SYSTEM_PROVIDER_1,
PX_FED_SYSTEM_NAME_1,
PX_FED_SYSTEM_ID_1
)))))) -> value v_response {
tc_ac.stop;
p_system_info := v_response.response.body.json_body.systemInfo;
log("f_create_system_info: INFO: IUT successfully responds to the subscription: ", p_system_info);
}
[] tc_ac.timeout {
log("f_create_system_info: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_create_system_info
function f_delete_system_info(
in SystemInfo p_system_info
) runs on HttpComponent {
var Headers v_headers;
var HttpMessage v_response;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_delete(
PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(p_system_info.systemId, "UTF-8")),
v_headers
)));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_204_no_content
)) {
tc_ac.stop;
}
[] tc_ac.timeout {
log("f_delete_system_info: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_delete_system_info
function f_create_system_info_list(
out SystemInfoList p_system_info_list
) runs on HttpComponent {
for (var integer i := 0; i < lengthof(p_system_info_list); i := i + 1) {
f_create_system_info(p_system_info_list[i]);
}
} // End of function f_create_system_info_list
function f_delete_system_info_list(
in SystemInfoList p_system_info_list
) runs on HttpComponent {
for (var integer i := 0; i < lengthof(p_system_info_list); i := i + 1) {
if (ispresent(p_system_info_list[i].systemId)) {
f_delete_system_info(p_system_info_list[i]);
}
}
} // End of function f_delete_system_info_list
} // End of modue FederationEnablementAPI_Functions
\ No newline at end of file
module FederationEnablementAPI_Pics {
/**
* @desc Does the IUT support MEC Federation API?
*/
modulepar boolean PICS_FED_API_SUPPORTED := true;
} // End of module FederationEnablementAPI_Pics
\ No newline at end of file
module FederationEnablementAPI_Pixits {
// JSON
import from Json all;
// LibCommon
import from LibCommon_BasicTypesAndValues all;
// LibMec/FixedAccessInformationServiceAPI
import from FederationEnablementAPI_TypesAndValues all;
modulepar Json.String PX_FED_SYSTEM_ID_1 := "";
modulepar Json.String PX_FED_SYSTEM_NAME_1 := "";
modulepar Json.String PX_FED_SYSTEM_PROVIDER_1 := "";
modulepar Json.String PX_FED_SYSTEM_ID_2 := "";
modulepar Json.String PX_FED_SYSTEM_NAME_2 := "";
modulepar Json.String PX_FED_SYSTEM_PROVIDER_2 := "";
modulepar Json.String PX_FED_SYSTEM_ID_3 := "";
modulepar Json.String PX_FED_SYSTEM_NAME_3 := "";
modulepar Json.String PX_FED_SYSTEM_PROVIDER_3 := "";
modulepar Json.String PX_FED_SYSTEM_ID_UNKNOWN := "";
modulepar Json.String PX_FED_SYSTEM_NAME_UNKNOWN := "";
modulepar Json.String PX_FED_SYSTEM_PROVIDER_UNKNOWN := "";
modulepar Json.String PX_FED_ENDPOINT_URI_1 := "";
modulepar Json.String PX_FED_ENDPOINT_URI_2 := "";
modulepar Json.String PX_FED_ENDPOINT_URI_3 := "";
} // End of module FederationEnablementAPI_Pixits
\ No newline at end of file
module FederationEnablementAPI_Templates {
// JSON
import from Json all;
// LibCommon
import from LibCommon_BasicTypesAndValues all;
// LibMec/EdgePlatformApplicationEnablementAPI
import from EdgePlatformApplicationEnablementAPI_TypesAndValues all;
// LibMec/FixedAccessInformationServiceAPI
import from FederationEnablementAPI_TypesAndValues all;
template (omit) SystemInfo m_system_info(
in Json.String p_system_name,
in Json.String p_system_provider,
in template (omit) Json.String p_system_id := omit
) := {
systemId := p_system_id,
systemName := p_system_name,
systemProvider := p_system_provider
} // End of template m_system_info
template (present) SystemInfo mw_system_info(
template (present) Json.String p_system_name := ?,
template (present) Json.String p_system_provider := ?,
template Json.String p_system_id := *
) := {
systemId := p_system_id,
systemName := p_system_name,
systemProvider := p_system_provider
} // End of template mw_system_info
template (omit) SystemInfoUpdate m_system_info_update(
in template (omit) Json.String p_system_name := omit,
in template (omit) EdgePlatformApplicationEnablementAPI_TypesAndValues.EndPointInfo p_end_point := omit
) := {
systemName := p_system_name,
endPoint := p_end_point
} // End of template m_system_info_update
template SystemInfoUpdate mw_system_info_update(
template Json.String p_system_name := *,
template EdgePlatformApplicationEnablementAPI_TypesAndValues.EndPointInfo p_end_point := *
) := {
systemName := p_system_name,
endPoint := p_end_point
} // End of template mw_system_info_update
} // End of module FederationEnablementAPI_Templates
\ No newline at end of file
/**
* @desc The ETSI MEC ISG MEC040 Radio Network Information API described using OpenAPI
* @see TODO
*/
module FederationEnablementAPI_TypesAndValues {
// JSON
import from Json all;
// LibCommon
import from LibCommon_BasicTypesAndValues all;
import from EdgePlatformApplicationEnablementAPI_TypesAndValues all;
/**
* @desc Information provided by the MEC orchestrator as a part of the "Registration of MEC system to the federation"
* @member systemId Identifier of the MEC system
* @member systemName The name of the MEC system
* @member systemProvider Provider of the MEC system
* @see Draft ETSI GS MEC 040 V3.1.3 (2022-12) Table 6.2.2-1: Attributes of SystemInfo
*/
type record SystemInfo {
Json.String systemId optional, // Shall be absent in POST request
Json.String systemName,
Json.String systemProvider
} // End of type SystemInfo
type record of SystemInfo SystemInfoList;
/**
* @desc information provided by MEC orchestrator as a part of the "Update of MEC system(s) to the federation"
* @member systemName The name of the MEC system
* @member endpoint Endpoint information (e.g. URI, FQDN, IP address) of MEC federator
* @see Draft ETSI GS MEC 040 V3.1.3 (2022-12) Table 6.2.3-1: Attributes of SystemInfoUpdate
*/
type record SystemInfoUpdate {
Json.String systemName optional,
EdgePlatformApplicationEnablementAPI_TypesAndValues.EndPointInfo endPoint optional
} // End of type SystemInfoUpdate
} with {
encode "JSON"
} // End of module FederationEnablementAPI_TypesAndValues
\ No newline at end of file
...@@ -2,5 +2,6 @@ sources := \ ...@@ -2,5 +2,6 @@ sources := \
ttcn/FixedAccessInformationServiceAPI_Pics.ttcn \ ttcn/FixedAccessInformationServiceAPI_Pics.ttcn \
ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn \ ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn \
ttcn/FixedAccessInformationServiceAPI_Templates.ttcn \ ttcn/FixedAccessInformationServiceAPI_Templates.ttcn \
ttcn/FixedAccessInformationServiceAPI_Functions.ttcn \
ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn
module FixedAccessInformationServiceAPI_Functions {
// JSON
import from Json all;
// LibCommon
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_Time all;
import from LibCommon_VerdictControl all;
import from LibCommon_Sync all;
// LibHttp
import from LibHttp_TypesAndValues all;
import from LibHttp_Functions all;
import from LibHttp_Templates all;
import from LibHttp_JsonTemplates all;
import from LibHttp_TestSystem all;
// LibMec/FixedAccessInformationServiceAPI
import from FixedAccessInformationServiceAPI_TypesAndValues all;
import from FixedAccessInformationServiceAPI_Templates all;
import from FixedAccessInformationServiceAPI_Pixits all;
// LibMec
import from LibMec_Templates all;
import from LibMec_Functions all;
import from LibMec_Pics all;
import from LibMec_Pixits all;
function f_create_onu_alarm_subscription(
out OnuAlarmSubscription p_onu_alarm_subscription,
out charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
var HttpMessage v_response;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_post(
PICS_ROOT_API & PX_FAI_SUB_URI,
v_headers,
m_http_message_body_json(
m_body_json_fai_onu_alarm_subscription(
m_onu_alarm_subscription(
PX_ONU_ALARM_SUB_CALLBACK_URI,
m_filter_criteria_onu_alarm
))))));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_201_created(
mw_http_message_body_json(
mw_body_json_fai_onu_alarm_subscription(
mw_onu_alarm_subscription(
PX_ONU_ALARM_SUB_CALLBACK_URI
)))))) -> value v_response {
tc_ac.stop;
// Extract HTTP Location header
var charstring_list v_subscription_id;
f_get_header(v_response.response.header, "Location", v_subscription_id);
// Extract HTTP subssription id
p_subscription_id := regexp(
v_subscription_id[0],
"?+" & PX_FAI_SUB_URI & "/(?*)",
0
);
p_onu_alarm_subscription := v_response.response.body.json_body.onuAlarmSubscription;
log("f_create_onu_alarm_subscription: INFO: IUT successfully responds to the subscription: ", p_onu_alarm_subscription);
log("f_create_onu_alarm_subscription: INFO: p_subscription_id: ", p_subscription_id);
}
[] tc_ac.timeout {
log("f_create_onu_alarm_subscription: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_create_onu_alarm_subscription
function f_delete_onu_alarm_subscription(
in charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_delete(
PICS_ROOT_API & PX_FAI_SUB_URI & "/" & p_subscription_id,
v_headers
)));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_204_no_content
)) {
tc_ac.stop;
}
[] tc_ac.timeout {
log("f_delete_onu_alarm_subscription: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_delete_onu_alarm_subscription
function f_create_dev_info_subscription(
out DevInfoSubscription p_dev_info_subscription,
out charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
var HttpMessage v_response;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_post(
PICS_ROOT_API & PX_FAI_SUB_URI,
v_headers,
m_http_message_body_json(
m_body_json_fai_dev_info_subscription(
m_dev_info_subscription(
PX_DEV_ALARM_SUB_CALLBACK_URI,
m_filter_criteria_dev_info
))))));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_201_created(
mw_http_message_body_json(
mw_body_json_fai_onu_alarm_subscription(
mw_onu_alarm_subscription(
PX_ONU_ALARM_SUB_CALLBACK_URI
)))))) -> value v_response {
tc_ac.stop;
// Extract HTTP Location header
var charstring_list v_subscription_id;
f_get_header(v_response.response.header, "Location", v_subscription_id);
// Extract HTTP subssription id
p_subscription_id := regexp(
v_subscription_id[0],
"?+" & PX_FAI_SUB_URI & "/(?*)",
0
);
p_dev_info_subscription := v_response.response.body.json_body.devInfoSubscription;
log("f_create_dev_info_subscription: INFO: IUT successfully responds to the subscription: ", p_dev_info_subscription);
log("f_create_dev_info_subscription: INFO: p_subscription_id: ", p_subscription_id);
}
[] tc_ac.timeout {
log("f_create_onu_alarm_suf_create_dev_info_subscriptionbscription: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_create_dev_info_subscription
function f_delete_dev_info_subscription(
in charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_delete(
PICS_ROOT_API & PX_FAI_SUB_URI & "/" & p_subscription_id,
v_headers
)));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_204_no_content
)) {
tc_ac.stop;
}
[] tc_ac.timeout {
log("f_delete_dev_info_subscription: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_delete_dev_info_subscription
function f_create_cm_conn_subscription(
out CmConnSubscription p_cm_conn_subscription,
out charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
var HttpMessage v_response;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_post(
PICS_ROOT_API & PX_FAI_SUB_URI,
v_headers,
m_http_message_body_json(
m_body_json_fai_cm_conn_subscription(
m_cm_conn_subscription(
PX_CM_CONN_SUB_CALLBACK_URI
//m_filter_criteria_dev_info
))))));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_201_created(
mw_http_message_body_json(
mw_body_json_fai_onu_alarm_subscription(
mw_onu_alarm_subscription(
PX_CM_CONN_SUB_CALLBACK_URI
)))))) -> value v_response {
tc_ac.stop;
// Extract HTTP Location header
var charstring_list v_subscription_id;
f_get_header(v_response.response.header, "Location", v_subscription_id);
// Extract HTTP subssription id
p_subscription_id := regexp(
v_subscription_id[0],
"?+" & PX_FAI_SUB_URI & "/(?*)",
0
);
p_cm_conn_subscription := v_response.response.body.json_body.cmConnSubscription;
log("f_create_cm_conn_subscription: INFO: IUT successfully responds to the subscription: ", p_cm_conn_subscription);
log("f_create_cm_conn_subscription: INFO: p_subscription_id: ", p_subscription_id);
}
[] tc_ac.timeout {
log("f_create_onu_alarm_suf_create_cm_conn_subscriptionbscription: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_create_cm_conn_subscription
function f_delete_cm_conn_subscription(
in charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_delete(
PICS_ROOT_API & PX_FAI_SUB_URI & "/" & p_subscription_id,
v_headers
)));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_204_no_content
)) {
tc_ac.stop;
}
[] tc_ac.timeout {
log("f_delete_cm_conn_subscription: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_delete_cm_conn_subscription
function f_create_ani_alarm_subscription(
out AniAlarmSubscription p_ani_alarm_subscription,
out charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
var HttpMessage v_response;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_post(
PICS_ROOT_API & PX_FAI_SUB_URI,
v_headers,
m_http_message_body_json(
m_body_json_fai_ani_alarm_subscription(
m_ani_alarm_subscription(
PX_ANI_ALARM_SUB_CALLBACK_URI
//m_filter_criteria_ani_alarm
))))));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_201_created(
mw_http_message_body_json(
mw_body_json_fai_ani_alarm_subscription(
mw_ani_alarm_subscription(
PX_ANI_ALARM_SUB_CALLBACK_URI
)))))) -> value v_response {
tc_ac.stop;
// Extract HTTP Location header
var charstring_list v_subscription_id;
f_get_header(v_response.response.header, "Location", v_subscription_id);
// Extract HTTP subssription id
p_subscription_id := regexp(
v_subscription_id[0],
"?+" & PX_FAI_SUB_URI & "/(?*)",
0
);
p_ani_alarm_subscription := v_response.response.body.json_body.aniAlarmSubscription;
log("f_create_ani_alarm_subscription: INFO: IUT successfully responds to the subscription: ", p_ani_alarm_subscription);
log("f_create_ani_alarm_subscription: INFO: p_subscription_id: ", p_subscription_id);
}
[] tc_ac.timeout {
log("f_create_ani_alarm_subscription: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_create_ani_alarm_subscription
function f_delete_ani_alarm_subscription(
in charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
f_init_default_headers_list(-, -, v_headers);
httpPort.send(
m_http_request(
m_http_request_delete(
PICS_ROOT_API & PX_FAI_SUB_URI & "/" & p_subscription_id,
v_headers
)));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_204_no_content
)) {
tc_ac.stop;
}
[] tc_ac.timeout {
log("f_delete_ani_alarm_subscription: INCONC: Expected message not received");
}
} // End of 'alt' statement
} // End of function f_delete_ani_alarm_subscription
} // End of module FixedAccessInformationServiceAPI_Functions
\ No newline at end of file
module FixedAccessInformationServiceAPI_Pics { module FixedAccessInformationServiceAPI_Pics {
/**
* @desc Does the IUT support MEC Federation API?
*/
modulepar boolean PICS_FAI_API_SUPPORTED := true; modulepar boolean PICS_FAI_API_SUPPORTED := true;
} // End of module FixedAccessInformationServiceAPI_Pics } // End of module FixedAccessInformationServiceAPI_Pics
...@@ -6,17 +6,17 @@ module FixedAccessInformationServiceAPI_Pixits { ...@@ -6,17 +6,17 @@ module FixedAccessInformationServiceAPI_Pixits {
// LibMec_FixedAccessInformationServiceAPI // LibMec_FixedAccessInformationServiceAPI
import from FixedAccessInformationServiceAPI_TypesAndValues all; import from FixedAccessInformationServiceAPI_TypesAndValues all;
modulepar GatewayId PX_FAI_GW_ID := { "" }; modulepar Json.String PX_FAI_CM_ID := "";
modulepar GatewayId PX_NON_EXISTING_FAI_GW_ID := { "" }; modulepar Json.String PX_NON_EXISTING_FAI_CM_ID := "";
modulepar CmdId PX_FAI_CM_ID := ""; modulepar Json.String PX_FAI_ONU_ID := "";
modulepar CmdId PX_NON_EXISTING_FAI_CM_ID := ""; modulepar Json.String PX_NON_EXISTING_FAI_ONU_ID := "";
modulepar OnuId PX_FAI_ONU_ID := ""; modulepar Json.String PX_FAI_GW_ID := "";
modulepar OnuId PX_NON_EXISTING_FAI_ONU_ID := ""; modulepar Json.String PX_NON_EXISTING_FAI_GW_ID := "";
modulepar Json.String PX_FAI_SUB_ID := ""; modulepar Json.String PX_FAI_SUB_ID := "";
...@@ -24,6 +24,12 @@ module FixedAccessInformationServiceAPI_Pixits { ...@@ -24,6 +24,12 @@ module FixedAccessInformationServiceAPI_Pixits {
modulepar Json.AnyURI PX_ONU_ALARM_SUB_CALLBACK_URI := ""; modulepar Json.AnyURI PX_ONU_ALARM_SUB_CALLBACK_URI := "";
modulepar Json.AnyURI PX_DEV_ALARM_SUB_CALLBACK_URI := "";
modulepar Json.AnyURI PX_CM_CONN_SUB_CALLBACK_URI := "";
modulepar Json.AnyURI PX_ANI_ALARM_SUB_CALLBACK_URI := "";
modulepar Json.String PX_SUBSCRIPTION_ID := ""; modulepar Json.String PX_SUBSCRIPTION_ID := "";
modulepar Json.String PX_NON_EXISTENT_SUBSCRIPTION_ID := ""; modulepar Json.String PX_NON_EXISTENT_SUBSCRIPTION_ID := "";
......
...@@ -6,32 +6,51 @@ module FixedAccessInformationServiceAPI_Templates { ...@@ -6,32 +6,51 @@ module FixedAccessInformationServiceAPI_Templates {
// LibCommon // LibCommon
import from LibCommon_BasicTypesAndValues all; import from LibCommon_BasicTypesAndValues all;
// LibMec
import from LibMec_TypesAndValues all;
// LibMec_FixedAccessInformationServiceAPI // LibMec_FixedAccessInformationServiceAPI
import from FixedAccessInformationServiceAPI_TypesAndValues all; import from FixedAccessInformationServiceAPI_TypesAndValues all;
import from FixedAccessInformationServiceAPI_Pixits all; import from FixedAccessInformationServiceAPI_Pixits all;
template (omit) FaInfo m_fa_info( template (omit) FaInfo m_fa_info(
in template (value) CpInfo p_customerPremisesInfo, in template (value) CpInfo p_customerPremisesInfo,
in template (value) LastMileTech p_lastMileTech,
in template (value) InterfaceType p_interfaceType,
in template (omit) TimeStamp p_timeStamp := omit, in template (omit) TimeStamp p_timeStamp := omit,
in template (omit) ConnectivityInfo p_connectivityInfo := omit in template (omit) Json.Integer p_dsbw := omit,
) := { in template (omit) Json.Integer p_usbw := omit,
timeStamp := p_timeStamp, in template (omit) Json.Integer p_latency := omit
customerPremisesInfo := p_customerPremisesInfo, ) := {
connectivityInfo := p_connectivityInfo timeStamp := p_timeStamp,
} // End of template m_fa_info customerPremisesInfo := p_customerPremisesInfo,
lastMileTech := p_lastMileTech,
interfaceType := p_interfaceType,
dsbw := p_dsbw,
usbw := p_usbw,
latency := p_latency
} // End of template m_fa_info
template FaInfo mw_fa_info( template FaInfo mw_fa_info(
template (present) CpInfo p_customerPremisesInfo := ?, template (present) CpInfo p_customerPremisesInfo := ?,
template (present) LastMileTech p_lastMileTech := ?,
template (present) InterfaceType p_interfaceType := ?,
template TimeStamp p_timeStamp := *, template TimeStamp p_timeStamp := *,
template ConnectivityInfo p_connectivityInfo := * template Json.Integer p_dsbw := *,
) := { template Json.Integer p_usbw := *,
timeStamp := p_timeStamp, template Json.Integer p_latency := *
customerPremisesInfo := p_customerPremisesInfo, ) := {
connectivityInfo := p_connectivityInfo timeStamp := p_timeStamp,
} // End of template mw_fa_info customerPremisesInfo := p_customerPremisesInfo,
lastMileTech := p_lastMileTech,
interfaceType := p_interfaceType,
dsbw := p_dsbw,
usbw := p_usbw,
latency := p_latency
} // End of template mw_fa_info
template (omit) DeviceInfo m_device_info( template (omit) DeviceInfo m_device_info(
in template (value) GatewayId p_gwId, in template (value) Json.String p_gwId,
in template (value) DeviceStatus p_deviceStatus, in template (value) DeviceStatus p_deviceStatus,
in template (value) Json.Number p_upTime, in template (value) Json.Number p_upTime,
in template (value) Json.Number p_iPConnectionUpTime, in template (value) Json.Number p_iPConnectionUpTime,
...@@ -40,7 +59,7 @@ module FixedAccessInformationServiceAPI_Templates { ...@@ -40,7 +59,7 @@ module FixedAccessInformationServiceAPI_Templates {
in template (value) Json.Number p_totalPacketsSent, in template (value) Json.Number p_totalPacketsSent,
in template (value) Json.Number p_totalPacketsReceived, in template (value) Json.Number p_totalPacketsReceived,
in template (omit) TimeStamp p_timeStamp := omit, in template (omit) TimeStamp p_timeStamp := omit,
in template (omit) DeviceId p_deviceId := omit, in template (omit) Json.String p_deviceId := omit,
in template (omit) IPPingDiagnostics p_iPPingDiagnostics := omit, in template (omit) IPPingDiagnostics p_iPPingDiagnostics := omit,
in template (omit) TraceRouteDiagnostics p_traceRouteDiagnostics := omit, in template (omit) TraceRouteDiagnostics p_traceRouteDiagnostics := omit,
in template (omit) DownloadDiagnostics p_downloadDiagnostics := omit, in template (omit) DownloadDiagnostics p_downloadDiagnostics := omit,
...@@ -63,7 +82,7 @@ module FixedAccessInformationServiceAPI_Templates { ...@@ -63,7 +82,7 @@ module FixedAccessInformationServiceAPI_Templates {
} // End of template m_device_info } // End of template m_device_info
template DeviceInfo mw_device_info( template DeviceInfo mw_device_info(
template (present) GatewayId p_gwId := ?, template (present) Json.String p_gwId := ?,
template (present) DeviceStatus p_deviceStatus := ?, template (present) DeviceStatus p_deviceStatus := ?,
template (present) Json.Number p_upTime := ?, template (present) Json.Number p_upTime := ?,
template (present) Json.Number p_iPConnectionUpTime := ?, template (present) Json.Number p_iPConnectionUpTime := ?,
...@@ -72,7 +91,7 @@ module FixedAccessInformationServiceAPI_Templates { ...@@ -72,7 +91,7 @@ module FixedAccessInformationServiceAPI_Templates {
template (present) Json.Number p_totalPacketsSent := ?, template (present) Json.Number p_totalPacketsSent := ?,
template (present) Json.Number p_totalPacketsReceived := ?, template (present) Json.Number p_totalPacketsReceived := ?,
template TimeStamp p_timeStamp := *, template TimeStamp p_timeStamp := *,
template DeviceId p_deviceId := *, template Json.String p_deviceId := *,
template IPPingDiagnostics p_iPPingDiagnostics := *, template IPPingDiagnostics p_iPPingDiagnostics := *,
template TraceRouteDiagnostics p_traceRouteDiagnostics := *, template TraceRouteDiagnostics p_traceRouteDiagnostics := *,
template DownloadDiagnostics p_downloadDiagnostics := *, template DownloadDiagnostics p_downloadDiagnostics := *,
...@@ -96,133 +115,310 @@ module FixedAccessInformationServiceAPI_Templates { ...@@ -96,133 +115,310 @@ module FixedAccessInformationServiceAPI_Templates {
template (omit) CableLineInfo m_cable_line_info( template (omit) CableLineInfo m_cable_line_info(
in template (value) CpInfo p_customerPremisesInfo, in template (value) CpInfo p_customerPremisesInfo,
in template (value) CmdInfo p_cmdInfo, in template (value) Json.String p_cmdId,
in template (omit) TimeStamp p_timeStamp := omit in template (omit) TimeStamp p_timeStamp := omit,
in template (omit) CmStatus p_cmStatus := omit,
in template (omit) CmDpvStats p_cmDpvStats := omit,
in template (omit) ServiceFlowStats p_serviceFlowStats := omit
) := { ) := {
timeStamp := p_timeStamp, timeStamp := p_timeStamp,
customerPremisesInfo := p_customerPremisesInfo, customerPremisesInfo := p_customerPremisesInfo,
cmdInfo := p_cmdInfo cmdId := p_cmdId,
cmStatus := p_cmStatus,
cmDpvStats := p_cmDpvStats,
serviceFlowStats := p_serviceFlowStats
} // End of template m_cable_line_info } // End of template m_cable_line_info
template CableLineInfo mw_cable_line_info( template CableLineInfo mw_cable_line_info(
template (present) CpInfo p_customerPremisesInfo := ?, template (present) CpInfo p_customerPremisesInfo := ?,
template (present) CmdInfo p_cmdInfo := ?, template (present) Json.String p_cmdId := ?,
template TimeStamp p_timeStamp := * template TimeStamp p_timeStamp := *,
template CmStatus p_cmStatus := *,
template CmDpvStats p_cmDpvStats := *,
template ServiceFlowStats p_serviceFlowStats := *
) := { ) := {
timeStamp := p_timeStamp, timeStamp := p_timeStamp,
customerPremisesInfo := p_customerPremisesInfo, customerPremisesInfo := p_customerPremisesInfo,
cmdInfo := p_cmdInfo cmdId := p_cmdId,
cmStatus := p_cmStatus,
cmDpvStats := p_cmDpvStats,
serviceFlowStats := p_serviceFlowStats
} // End of template mw_cable_line_info } // End of template mw_cable_line_info
template (omit) PonInfo m_pon_info( template (omit) PonInfo m_pon_info(
in template (value) CpInfo p_customerPremisesInfo, in template (value) CpInfo p_customerPremisesInfo,
in template (value) PonSYS_ID p_ponSYS_ID, in template (value) Json.String p_ponSYS_ID,
in template (value) OpticalNetworkInfo p_opticalNetworkInfo, in template (value) Json.String p_onuId,
in template (value) PonTech p_ponTech,
in template (value) OperationalState p_operationalState,
in template (value) DsRate p_dsRate,
in template (value) UsRate p_usRate,
in template (omit) TimeStamp p_timeStamp := omit in template (omit) TimeStamp p_timeStamp := omit
) := { ) := {
timeStamp := p_timeStamp, timeStamp := p_timeStamp,
customerPremisesInfo := p_customerPremisesInfo, customerPremisesInfo := p_customerPremisesInfo,
ponSYS_ID := p_ponSYS_ID, ponSYS_ID := p_ponSYS_ID,
opticalNetworkInfo := p_opticalNetworkInfo onuId := p_onuId,
ponTech := p_ponTech,
operationalState := p_operationalState,
dsRate := p_dsRate,
usRate := p_usRate
} // End of template m_pon_info } // End of template m_pon_info
template PonInfo mw_pon_info( template PonInfo mw_pon_info(
template (present) CpInfo p_customerPremisesInfo := ?, template (present) CpInfo p_customerPremisesInfo := ?,
template (present) PonSYS_ID p_ponSYS_ID := ?, template (present) Json.String p_ponSYS_ID := ?,
template (present) OpticalNetworkInfo p_opticalNetworkInfo := ?, template (present) Json.String p_onuId := ?,
template (present) PonTech p_ponTech := ?,
template (present) OperationalState p_operationalState := ?,
template (present) DsRate p_dsRate := ?,
template (present) UsRate p_usRate := ?,
template TimeStamp p_timeStamp := * template TimeStamp p_timeStamp := *
) := { ) := {
timeStamp := p_timeStamp, timeStamp := p_timeStamp,
customerPremisesInfo := p_customerPremisesInfo, customerPremisesInfo := p_customerPremisesInfo,
ponSYS_ID := p_ponSYS_ID, ponSYS_ID := p_ponSYS_ID,
opticalNetworkInfo := p_opticalNetworkInfo onuId := p_onuId,
ponTech := p_ponTech,
operationalState := p_operationalState,
dsRate := p_dsRate,
usRate := p_usRate
} // End of template mw_pon_info } // End of template mw_pon_info
template (omit) SubscriptionLinkList m_subscription_link_list( template (omit) SubscriptionLinkList m_subscription_link_list(
in template (value) Links p_links, in template (value) SubscriptionLinks p_links
in template (omit) Subscriptions p_subscription := omit ) := {
) := { links := p_links
links := p_links,
subscription := p_subscription
} // End of template m_subscription_link_list } // End of template m_subscription_link_list
template SubscriptionLinkList mw_subscription_link_list( template SubscriptionLinkList mw_subscription_link_list(
template (present) Links p_links := ?, template (present) SubscriptionLinks p_links := ?
template Subscriptions p_subscription := * ) := {
) := { links := p_links
links := p_links,
subscription := p_subscription
} // End of template m_wsubscription_link_list } // End of template m_wsubscription_link_list
template (omit) OnuAlarmSubscription m_onu_alarm_subscription( template (omit) OnuAlarmSubscription m_onu_alarm_subscription(
in template (value) Json.AnyURI p_callbackReference, in template (value) Json.AnyURI p_callbackReference,
in template (value) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm, in template (value) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm,
in template (omit) Json.Bool p_requestTestNotification := omit,
in template (omit) WebsockNotifConfig p_websockNotifConfig := omit,
in template (omit) Links p_links := omit, in template (omit) Links p_links := omit,
in template (omit) TimeStamp p_expiryDeadline := omit in template (omit) TimeStamp p_expiryDeadline := omit
) := { ) := {
subscriptionType := "OnuAlarmSubscription", subscriptionType := "OnuAlarmSubscription",
callbackReference := p_callbackReference, callbackReference := p_callbackReference,
links := p_links, requestTestNotification := p_requestTestNotification,
filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm, websockNotifConfig := p_websockNotifConfig,
expiryDeadline := p_expiryDeadline links := p_links,
filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm,
expiryDeadline := p_expiryDeadline
} // End of template m_onu_alarm_subscription } // End of template m_onu_alarm_subscription
template (omit) OnuAlarmSubscription m_onu_alarm_subscription_bad_request( template (omit) OnuAlarmSubscription m_onu_alarm_subscription_bad_request(
in template (value) Json.AnyURI p_callbackReference, in template (value) Json.AnyURI p_callbackReference,
in template (value) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm, in template (value) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm,
in template (omit) Json.Bool p_requestTestNotification := omit,
in template (omit) WebsockNotifConfig p_websockNotifConfig := omit,
in template (omit) Links p_links := omit, in template (omit) Links p_links := omit,
in template (omit) TimeStamp p_expiryDeadline := omit in template (omit) TimeStamp p_expiryDeadline := omit
) modifies m_onu_alarm_subscription := { ) modifies m_onu_alarm_subscription := {
subscriptionType := "BadSubscriptionType" subscriptionType := "BadSubscriptionType"
} // End of template m_onu_alarm_subscription_bad_request } // End of template m_onu_alarm_subscription_bad_request
template OnuAlarmSubscription mw_onu_alarm_subscription( template (present) OnuAlarmSubscription mw_onu_alarm_subscription(
template (present) Json.AnyURI p_callbackReference := ?, template (present) Json.AnyURI p_callbackReference := ?,
template (present) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm := ?, template (present) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm := ?,
template Links p_links := *, template Links p_links := *,
template TimeStamp p_expiryDeadline := * template Json.Bool p_requestTestNotification := *,
) := { template WebsockNotifConfig p_websockNotifConfig := *,
subscriptionType := "OnuAlarmSubscription", template TimeStamp p_expiryDeadline := *
callbackReference := p_callbackReference, ) := {
links := p_links, subscriptionType := "OnuAlarmSubscription",
filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm, callbackReference := p_callbackReference,
expiryDeadline := p_expiryDeadline requestTestNotification := p_requestTestNotification,
websockNotifConfig := p_websockNotifConfig,
links := p_links,
filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm,
expiryDeadline := p_expiryDeadline
} // End of template mw_onu_alarm_subscription } // End of template mw_onu_alarm_subscription
template (omit) FilterCriteriaOnuAlarm m_filter_criteria_onu_alarm( template (omit) FilterCriteriaOnuAlarm m_filter_criteria_onu_alarm(
in template (value) OnuIds p_onuId := { PX_FAI_ONU_ID }, in template (value) OnuIds p_onuId := { PX_FAI_ONU_ID },
in template (omit) CpInfo p_customerPremisesIxnfo := omit, in template (omit) CpInfo p_customerPremisesIxnfo := omit,
in template (omit) Alarms p_alarms := omit in template (omit) AlarmList p_alarms := omit
) := { ) := {
customerPremisesInfo := p_customerPremisesIxnfo, customerPremisesInfo := p_customerPremisesIxnfo,
onuId := p_onuId, onuId := p_onuId,
alarms := p_alarms alarms := p_alarms
} // End of template m_filter_criteria_onu_alarm } // End of template m_filter_criteria_onu_alarm
template FilterCriteriaOnuAlarm mw_filter_criteria_onu_alarm( template FilterCriteriaOnuAlarm mw_filter_criteria_onu_alarm(
template (present) OnuIds p_onuId := ?, template (present) OnuIds p_onuId := ?,
template CpInfo p_customerPremisesIxnfo := *, template CpInfo p_customerPremisesIxnfo := *,
template Alarms p_alarms := * template AlarmList p_alarms := *
) := { ) := {
customerPremisesInfo := p_customerPremisesIxnfo, customerPremisesInfo := p_customerPremisesIxnfo,
onuId := p_onuId, onuId := p_onuId,
alarms := p_alarms alarms := p_alarms
} // End of template mw_filter_criteria_onu_alarm } // End of template mw_filter_criteria_onu_alarm
template (value) TimeStamp m_time_stamp( template (omit) DevInfoSubscription m_dev_info_subscription(
in UInt32 p_seconds, in template (value) Json.AnyURI p_callbackReference,
in UInt32 p_nanoSeconds := 0 in template (value) FilterCriteriaDevInfo p_filterCriteriaDevInfo,
) := { in template (omit) Links p_links := omit,
seconds := p_seconds, in template (omit) Json.Bool p_requestTestNotification := omit,
nanoSeconds := p_nanoSeconds in template (omit) WebsockNotifConfig p_websockNotifConfig := omit,
} // End of temlate m_time_stamp in template (omit) TimeStamp p_expiryDeadline := omit
) := {
template (present) TimeStamp mw_time_stamp( subscriptionType := "DevInfoSubscription",
template (present) UInt32 p_seconds := ?, callbackReference := p_callbackReference,
template (present) UInt32 p_nanoSeconds := ? requestTestNotification := p_requestTestNotification,
) := { websockNotifConfig := p_websockNotifConfig,
seconds := p_seconds, links := p_links,
nanoSeconds := p_nanoSeconds filterCriteriaDevInfo := p_filterCriteriaDevInfo,
} // End of temlate mw_time_stamp expiryDeadline := p_expiryDeadline
} // End of template m_dev_info_subscription
template (present) DevInfoSubscription mw_dev_info_subscription(
template (present) Json.AnyURI p_callbackReference := ?,
template (present) FilterCriteriaDevInfo p_filterCriteriaDevInfo := ?,
template Links p_links := *,
template Json.Bool p_requestTestNotification := *,
template WebsockNotifConfig p_websockNotifConfig := *,
template TimeStamp p_expiryDeadline := *
) := {
subscriptionType := "DevInfoSubscription",
callbackReference := p_callbackReference,
requestTestNotification := p_requestTestNotification,
websockNotifConfig := p_websockNotifConfig,
links := p_links,
filterCriteriaDevInfo := p_filterCriteriaDevInfo,
expiryDeadline := p_expiryDeadline
} // End of template mw_dev_info_subscription
template (omit) FilterCriteriaDevInfo m_filter_criteria_dev_info(
in template (value) GatewayIdList p_gwId := { PX_FAI_GW_ID },
in template (omit) DeviceIdList p_deviceId := omit,
in template (omit) DeviceErrStatus p_deviceErrStatus := omit
) := {
gwId := p_gwId,
deviceId := p_deviceId,
deviceErrStatus := p_deviceErrStatus
} // End of template m_filter_criteria_dev_info
template (present) FilterCriteriaDevInfo mw_filter_criteria_dev_info(
template (present) GatewayIdList p_gwId := ?,
template DeviceIdList p_deviceId := *,
template DeviceErrStatus p_deviceErrStatus := *
) := {
gwId := p_gwId,
deviceId := p_deviceId,
deviceErrStatus := p_deviceErrStatus
} // End of template mw_filter_criteria_dev_info
template (omit) CmConnSubscription m_cm_conn_subscription(
in template (value) Json.AnyURI p_callbackReference,
in template (omit) FilterCriteriaCmConn p_filterCriteriaCmConn := omit,
in template (omit) Links p_links := omit,
in template (omit) Json.Bool p_requestTestNotification := omit,
in template (omit) WebsockNotifConfig p_websockNotifConfig := omit,
in template (omit) TimeStamp p_expiryDeadline := omit
) := {
subscriptionType := "CmConnSubscription",
callbackReference := p_callbackReference,
requestTestNotification := p_requestTestNotification,
websockNotifConfig := p_websockNotifConfig,
links := p_links,
filterCriteriaCmConn := p_filterCriteriaCmConn,
expiryDeadline := p_expiryDeadline
} // End of template m_cm_conn_subscription
template (present) CmConnSubscription mw_cm_conn_subscription(
template (present) Json.AnyURI p_callbackReference := ?,
template FilterCriteriaCmConn p_filterCriteriaCmConn := *,
template Links p_links := *,
template Json.Bool p_requestTestNotification := *,
template WebsockNotifConfig p_websockNotifConfig := *,
template TimeStamp p_expiryDeadline := *
) := {
subscriptionType := "CmConnSubscription",
callbackReference := p_callbackReference,
requestTestNotification := p_requestTestNotification,
websockNotifConfig := p_websockNotifConfig,
links := p_links,
filterCriteriaCmConn := p_filterCriteriaCmConn,
expiryDeadline := p_expiryDeadline
} // End of template mw_cm_conn_subscription
template (omit) FilterCriteriaCmConn m_filter_criteria_cm_conn(
in template (omit) CpInfo p_customerPremisesInfo := omit,
in template (omit) CmIf p_cmIf := omit
) := {
customerPremisesInfo := p_customerPremisesInfo,
cmIf := p_cmIf
} // End of template m_filter_criteria_cm_conn
template FilterCriteriaCmConn mw_filter_criteria_cm_conn(
template CpInfo p_customerPremisesInfo := *,
template CmIf p_cmIf := *
) := {
customerPremisesInfo := p_customerPremisesInfo,
cmIf := p_cmIf
} // End of template mw_filter_criteria_cm_conn
template (omit) AniAlarmSubscription m_ani_alarm_subscription(
in template (value) Json.AnyURI p_callbackReference,
in template (omit) FilterCriteriaAniAlarm p_filterCriteriaAniAlarm := omit,
in template (omit) Links p_links := omit,
in template (omit) Json.Bool p_requestTestNotification := omit,
in template (omit) WebsockNotifConfig p_websockNotifConfig := omit,
in template (omit) TimeStamp p_expiryDeadline := omit
) := {
subscriptionType := "AniAlarmSubscription",
callbackReference := p_callbackReference,
requestTestNotification := p_requestTestNotification,
websockNotifConfig := p_websockNotifConfig,
links := p_links,
filterCriteriaAniAlarm := p_filterCriteriaAniAlarm,
expiryDeadline := p_expiryDeadline
} // End of template m_ani_alarm_subscription
template (present) AniAlarmSubscription mw_ani_alarm_subscription(
template (present) Json.AnyURI p_callbackReference := ?,
template FilterCriteriaAniAlarm p_filterCriteriaAniAlarm := *,
template Links p_links := *,
template Json.Bool p_requestTestNotification := *,
template WebsockNotifConfig p_websockNotifConfig := *,
template TimeStamp p_expiryDeadline := *
) := {
subscriptionType := "AniAlarmSubscription",
callbackReference := p_callbackReference,
requestTestNotification := p_requestTestNotification,
websockNotifConfig := p_websockNotifConfig,
links := p_links,
filterCriteriaAniAlarm := p_filterCriteriaAniAlarm,
expiryDeadline := p_expiryDeadline
} // End of template mw_ani_alarm_subscription
template (omit) FilterCriteriaAniAlarm m_filter_criteria_ani_alarm(
in template (value) OnuIds p_onuId,
in template (value) AniId p_aniId,
in template (omit) CpInfo p_customerPremisesInfo := omit
) := {
customerPremisesInfo := p_customerPremisesInfo,
onuId := p_onuId,
aniId := p_aniId
} // End of template m_filter_criteria_ani_alarm
template (present) FilterCriteriaAniAlarm mw_filter_criteria_ani_alarm(
template (present) OnuIds p_onuId := ?,
template (present) AniId p_aniId := ?,
template CpInfo p_customerPremisesInfo := *
) := {
customerPremisesInfo := p_customerPremisesInfo,
onuId := p_onuId,
aniId := p_aniId
} // End of template mw_filter_criteria_ani_alarm
} // End of module FixedAccessInformationServiceAPI_Templates } // End of module FixedAccessInformationServiceAPI_Templates
/**
* @author ETSI / STF569 / TTF T027
* @version $Url$
* $Id$
* @desc Types and Values for ETSI GS MEC 029 V2.2.1 (2022-01)
* @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.
*/
module FixedAccessInformationServiceAPI_TypesAndValues { module FixedAccessInformationServiceAPI_TypesAndValues {
// JSON // JSON
import from Json all; import from Json all;
// LibCommon // LibMec
import from LibCommon_BasicTypesAndValues all; import from LibMec_TypesAndValues 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 * @desc This type represents the fixed access information
*/ * @member timeStamp Time stamp
type UInt32 NanoSeconds; * @member customerPremisesInfo The physical location of a customer site
* @member lastMileTech An informative field identifying the last mile access technology used
/** * @member interfaceType The physical interface used for the end customer site
* @desc * @member dsbw The bandwidth (in Mbps) from the network towards the customer site
* @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC * @member usbw The bandwidth (in Mbps) from the customer site towards the network
* @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC * @member latency Maximum baseline latency
*/ * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.2-1: Attributes of the FaInfo
type record TimeStamp {
Seconds seconds,
NanoSeconds nanoSeconds
}
/**
* @desc This type represents the fixed access information.
* @member timeStamp Time stamp.
* @member customerPremisesInfo The physical location of a customer site.
* @member connectivityInfo The per connectivity domain fixed access information.
*/ */
type record FaInfo { type record FaInfo {
TimeStamp timeStamp optional, TimeStamp timeStamp optional,
CpInfo customerPremisesInfo, CpInfo customerPremisesInfo,
ConnectivityInfo connectivityInfo optional LastMileTech lastMileTech,
}
/**
* @desc The per connectivity domain fixed access information.
* @member LastMileTech An informative field identifying the last mile access technology used.
* @member InterfaceType The physical interface used for the end customer site – as defined in IEEE802, ITU, Broadband Forum.
* @member dsbw The bandwidth (in Mbps) from the network towards the customer site.
* @member usbw The bandwidth (in Mbps) from the customer site towards the network.
* @member latency Maximum baseline latency (in ms) between customer site and service edge node.
*/
type record ConnectivityInfo {
LastMileTech lastMileTech optional,
InterfaceType interfaceType, InterfaceType interfaceType,
Json.Number dsbw optional, Json.Integer dsbw optional,
Json.Number usbw optional, Json.Integer usbw optional,
Json.Number latency optional Json.Integer latency optional
} }
/** /**
* @desc An informative field identifying the last mile access technology used. * @desc An informative field identifying the last mile access technology used
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.2-1: Attributes of the FaInfo
*/ */
type enumerated LastMileTech { type enumerated LastMileTech {
ADSL, ADSL (1),
VDSL, VDSL (2),
GPON, GPON (3),
XGPON, XGPON (4),
NGPON2, NGPON2 (5),
XGSPON, XGSPON (6),
GFAST, GFAST (7),
P2PEthernet P2PEthernet (8)
} with {
variant "JSON: as number"
} }
/** /**
* @desc The physical interface used for the end customer site – as defined in IEEE802, ITU, Broadband Forum. * @desc The physical interface used for the end customer site
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.2-1: Attributes of the FaInfo
*/ */
type enumerated InterfaceType { type enumerated InterfaceType {
e_100BASE_TX, e_100BASE_TX (1),
e_1000BASE_TX, e_1000BASE_TX (2),
e_1000BASE_LX, e_1000BASE_LX (3),
e_1000BASELX10, e_1000BASELX10 (4),
e_1000BASEBX10, e_1000BASEBX10 (5),
e_1000BASE_LH, e_1000BASE_LH (6),
e_1000Base_ZX, e_1000Base_ZX (7),
ADSL_RJ11, e_ADSL_RJ11 (8),
VDSL_RJ11, e_VDSL_RJ11 (9),
GPON e_GPON (10)
} } with {
variant "JSON: as number"
/**
* @desc Latitude (DATUM=WGS84) -90 to 90 in decimal degree format DDD.ddd
*/
type Json.Number Latitude;
/**
* @desc Longitude (DATUM=WGS84) -180 to 180 in decimal degree format DDD.ddd
*/
type Json.Number Longitude;
/**
* @desc Postal code for the location
*/
type Json.String PostalCode;
type record CpInfo_{
Latitude latitude optional,
Longitude longitude optional,
PostalCode postalCode optional
} }
type record of CpInfo_ CpInfo;
/** /**
* @desc This type represents the information of the device that is connected to a fixed access network. * @desc This type represents the information of the device that is connected to a fixed access network.
* @member timeStamp Time stamp. * @member timeStamp Time stamp.
...@@ -122,112 +89,86 @@ module FixedAccessInformationServiceAPI_TypesAndValues { ...@@ -122,112 +89,86 @@ module FixedAccessInformationServiceAPI_TypesAndValues {
* @member traceRouteDiagnostics The result of an IP-layer trace-route test * @member traceRouteDiagnostics The result of an IP-layer trace-route test
* @member downloadDiagnostics The result of a HTTP and FTP DownloadDiagnostics Test * @member downloadDiagnostics The result of a HTTP and FTP DownloadDiagnostics Test
* @member uploadDiagnostics The result of a HTTP and FTP UploadDiagnostics Test * @member uploadDiagnostics The result of a HTTP and FTP UploadDiagnostics Test
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.3-1: Attributes of the DeviceInfo
*/ */
type record DeviceInfo { type record DeviceInfo {
TimeStamp timeStamp optional, TimeStamp timeStamp optional,
GatewayId gwId, Json.String gwId,
DeviceId deviceId optional, Json.String deviceId optional,
DeviceStatus deviceStatus, DeviceStatus deviceStatus,
Json.Number upTime, Json.Number upTime,
Json.Number iPConnectionUpTime, Json.Number iPConnectionUpTime,
Json.Number totalBytesSent, Json.Number totalBytesSent,
Json.Number totalBytesReceived, Json.Number totalBytesReceived,
Json.Number totalPacketsSent, Json.Number totalPacketsSent,
Json.Number totalPacketsReceived, Json.Number totalPacketsReceived,
IPPingDiagnostics iPPingDiagnostics optional, IPPingDiagnostics iPPingDiagnostics optional,
TraceRouteDiagnostics traceRouteDiagnostics optional, TraceRouteDiagnostics traceRouteDiagnostics optional,
DownloadDiagnostics downloadDiagnostics optional, DownloadDiagnostics downloadDiagnostics optional,
UploadDiagnostics uploadDiagnostics optional UploadDiagnostics uploadDiagnostics optional
} }
/**
* @desc Information (typically the serial number) to identify an Internet Gateway Device through which the customer premises device is connected.
*/
type record of Json.String GatewayId;
/**
* @desc Typically, the serial number of the device.
*/
type record of Json.String DeviceId;
/** /**
* @desc Current operational status of the device. * @desc Current operational status of the device.
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.3-1: Attributes of the DeviceInfo
*/ */
type enumerated DeviceStatus { type enumerated DeviceStatus {
Up, Up (1),
Initializing, Initializing (2),
Error, Error (3),
Disabled Disabled (4)
} with {
variant "JSON: as number"
} }
type record IPPingDiagnostics {}
type record TraceRouteDiagnostics {}
type record DownloadDiagnostics{}
type record UploadDiagnostics {}
/** /**
* @desc This type represents the information of the cable line of a fixed access network * @desc This type represents the information of the cable line of a fixed access network
* @member timeStamp Time stamp. * @member timeStamp Time stamp
* @member customerPremisesInfo The physical location of a customer site. * @member customerPremisesInfo The physical location of a customer site
* * @member cmdId Information (typically the serial number) to identify a Cable Modem at subscriber locations intended for use in conveying data communications on a cable data system
* @member cmStatus It provides CM connectivity status information of the CM
* @member cmDpvStats It represents the DOCSIS Path Verify Statistics collected in the cable modem device
* @member serviceFlowStats It describes statistics associated with the Service Flows in a managed device
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo
*/ */
type record CableLineInfo { type record CableLineInfo {
TimeStamp timeStamp optional, TimeStamp timeStamp optional,
CpInfo customerPremisesInfo, CpInfo customerPremisesInfo,
CmdInfo cmdInfo Json.String cmdId,
} CmStatus cmStatus optional,
CmDpvStats cmDpvStats optional,
/**
* @desc
* @member cmdId Information (typically the serial number) to identify a Cable Modem at subscriber locations intended for use in conveying data communications on a cable data system.
* @member cmStatus It provides CM connectivity status information of the CM.
* @member cmDpvStats It represents the DOCSIS Path Verify Statistics collected in the cable modem device.
* @member serviceFlowStats It describes statistics associated with the Service Flows in a managed device.
*/
type record CmdInfo_ {
CmdId cmdId,
CmStatus cmStatus optional,
CmDpvStats cmDpvStats optional,
ServiceFlowStats serviceFlowStats optional ServiceFlowStats serviceFlowStats optional
} }
type record of CmdInfo_ CmdInfo;
/**
* @desc Information (typically the serial number) to identify a Cable Modem at subscriber locations intended for use in conveying data communications on a cable data system.
*/
type Json.String CmdId;
/** /**
* @desc It provides CM connectivity status information of the CM. * @desc It provides CM connectivity status information of the CM
* @member ifIndex It denotes the MAC Domain interface index of the CM. * @member ifIndex It denotes the MAC Domain interface index of the CM
* @member It defines the CM connectivity state. * @member cmRegState It defines the CM connectivity state
* @member resets It denotes the number of times the CM reset or initialized this interface. * @member resets It denotes the number of times the CM reset or initialized this interface
* @member lostSyncs It denotes the number of times the CM lost synchronization with the downstream channel. * @member lostSyncs It denotes the number of times the CM lost synchronization with the downstream channel
* @member invalidRegRsps It denotes the number of times the CM received invalid registration response messages. * @member invalidRegRsps It denotes the number of times the CM received invalid registration response messages
* @member energyMgt1x1OperStatus It indicates whether the CM is currently operating in Energy Management 1x1 Mode * @member energyMgt1x1OperStatus It indicates whether the CM is currently operating in Energy Management 1x1 Mode
* @member emDlsOperStatus It indicates whether the CM is currently operating in Energy Management DLS Mode * @member emDlsOperStatus It indicates whether the CM is currently operating in Energy Management DLS Mode
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo
*/ */
type record CmStatus_ { type record CmStatus_ {
IfIndex ifIndex, Json.String ifIndex,
CmRegState cmRegState, CmRegState cmRegState,
Json.Number resets, Json.Integer reset,
Json.Number lostSyncs, Json.Integer lostSyncs,
Json.Number invalidRegRsps, Json.Integer invalidRegRsps,
Json.Bool energyMgt1x1OperStatus, Json.Bool energyMgt1x1OperStatus,
Json.Bool emDlsOperStatus Json.Bool emDlsOperStatus
} }
type record of CmStatus_ CmStatus; type record of CmStatus_ CmStatus;
type record of Json.String IfIndexList;
/**
* @desc It denotes the MAC Domain interface index of the CM.
*/
type Json.String IfIndex;
/** /**
* @desc It defines the CM connectivity state. * @desc It defines the CM connectivity state.
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo
*/ */
type enumerated CmRegState { type enumerated CmRegState {
other, other (1),
notReady, notReady,
notSynchronized, notSynchronized,
phySynchronized, phySynchronized,
...@@ -250,244 +191,664 @@ module FixedAccessInformationServiceAPI_TypesAndValues { ...@@ -250,244 +191,664 @@ module FixedAccessInformationServiceAPI_TypesAndValues {
dsTopologyResolutionInProgress, dsTopologyResolutionInProgress,
rangingInProgress, rangingInProgress,
rfMuteAll rfMuteAll
} with {
variant "JSON: as number"
} }
type record of CmRegState CmRegStateList;
/** /**
* @desc It represents the DOCSIS Path Verify Statistics collected in the cable modem device. * @desc It represents the DOCSIS Path Verify Statistics collected in the cable modem device
* @member ifIndex It denotes the MAC Domain interface index of the CM. * @member ifIndex It represents the interface Index of the Downstream Interface where the measurements are taken
* @member lastMeasLatency The last latency measurement. * @member lastMeasLatency The last latency measurement
* @member lastMeasTime the last measurement time of the last latency measurement. * @member lastMeasTime The last measurement time of the last latency measurement
* @member minLatency the minimum latency measurement. * @member minLatency The minimum latency measurement
* @member maxLatency the maximum latency measurement. * @member maxLatency The maximum latency measurement
* @member avgLatency the average latency measurement. * @member avgLatency The average latency measurement
* @member numMeas The number of latency measurements made. * @member numMeas The number of latency measurements made
*/ * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo
type record CmDpvStats_ { */
IfIndex ifIndex, type record CmDpvStats {
Json.Number lastMeasLatency, Json.String ifIndex,
TimeStamp lastMeasTime, Json.Integer lastMeasLatency,
Json.Number minLatency, TimeStamp lastMeasTime,
Json.Number maxLatency, Json.Integer minLatency,
Json.Number avgLatency, Json.Integer maxLatency,
Json.Number numMeas Json.Integer avgLatency,
} Json.Integer numMeas
type record of CmDpvStats_ CmDpvStats; }
/** /**
* @desc It describes statistics associated with the Service Flows in a managed device. * @desc It describes statistics associated with the Service Flows in a managed device
* @member ifIndex It denotes the MAC Domain interface index of the CM. * @member ifIndex It represents the interface index of the MAC Domain of the Service Flow
* @member serviceFlowInfo It represents the information of a Service Flow. * @member serviceFlowInfo It represents the information of a Service Flow
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo
*/ */
type record ServiceFlowStats_ { type record ServiceFlowStats {
IfIndex ifIndex, Json.String ifIndex,
ServiceFlowInfo serviceFlowInfo ServiceFlowInfoList serviceFlowInfo
} }
type record of ServiceFlowStats_ ServiceFlowStats;
/** /**
* @desc It represents the information of a Service Flow. * @desc It represents the information of a Service Flow
* @member ifIndex It denotes the MAC Domain interface index of the CM. * @member serviceFlowId It represents an identifier assigned to a Service Flow by CMTS within a MAC Domain
* @member serviceFlowId It represents an identifier assigned to a Service Flow by CMTS within a MAC Domain. * @member pkts For outgoing Service Flows, this attribute counts the number of Packet Data PDUs forwarded to this Service Flow
* @member pkts For outgoing Service Flows, this attribute counts the number of Packet Data PDUs forwarded to this Service Flow. For incoming upstream CMTS service flows, this attribute counts the number of Packet Data PDUs actually received on the Service Flow identified by the SID for which the packet was scheduled. * For incoming upstream CMTS service flows, this attribute counts the number of Packet Data PDUs actually received on the Service Flow identified by the SID for which the packet was scheduled
* @member timeCreated It indicates the time when the service flow was created. * @member timeCreated It indicates the time when the service flow was created
* @member timeActiveIt Indicates the number of seconds that the service flow has been active. * @member timeActive It indicates the number of seconds that the service flow has been active
* @member policedDropPkts For upstream service flows, this attribute counts the number of Packet Data PDUs classified to this service flow dropped due to: (1) exceeding the selected Buffer Size for the service flow; or (2) UGS packets dropped due to exceeding the Unsolicited Grant Size with a Request/Transmission policy that requires such packets to be dropped. * @member policedDropPkts For upstream service flows, this attribute counts the number of Packet Data PDUs classified to this service flow dropped
* @member policedDelayPkts It counts only outgoing packets delayed in order to maintain the Maximum Sustained Traffic Rate. * @member policedDelayPkts It counts only outgoing packets delayed in order to maintain the Maximum Sustained Traffic Rate
* @member aqmDroppedPkts For upstream service flows on which AQM is enabled, this attribute counts the number of Packet Data PDUs classified to this service flow dropped due to Active Queue Management drop decisions. * @member aqmDroppedPkts this attribute counts the number of Packet Data PDUs classified to this service flow dropped due to Active Queue Management drop decisions
*/ * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo
type record ServiceFlowInfo_ { */
Json.Number serviceFlowId, type record ServiceFlowInfoList {
Json.Number pkts, Json.Integer serviceFlowId,
TimeStamp timeCreated, Json.Integer pkts,
Json.Number timeActive, TimeStamp timeCreated,
Json.Number policedDropPkts, Json.Integer timeActive,
Json.Number policedDelayPkts, Json.Integer policedDropPkts,
Json.Number aqmDroppedPkts Json.Integer policedDelayPkts,
} Json.Integer aqmDroppedPkts
type record of ServiceFlowInfo_ ServiceFlowInfo; }
/** /**
* @desc This type represents the information of the of an optical network (e.g., G-PON, XG-PON, NG-PON2, XGS-PON). * @desc This type represents the information of the of an optical network (e.g., G-PON, XG-PON, NG-PON2, XGS-PON).
* @member timeStamp Time stamp. * @member timeStamp Time stamp.
* @member customerPremisesInfo The physical location of a customer site. * @member customerPremisesInfo The physical location of a customer site.
* @member ponSYS_ID The 20-bit identity of the optical system within a certain domain. * @member ponSYS_ID The 20-bit identity of the optical system within a certain domain.
* @member opticalNetworkInfo * @member onuId Information to identify an Optical Network Unit
*/ * @member ponTech An informative field identifying the optical technology used
type record PonInfo { * @member operationalState It reports whether the ONU is currently capable of performing its function
TimeStamp timeStamp optional,
CpInfo customerPremisesInfo,
PonSYS_ID ponSYS_ID,
OpticalNetworkInfo opticalNetworkInfo
}
type Json.String PonSYS_ID;
/**
* @desc This type represents the information of the of an optical network (e.g., G-PON, XG-PON, NG-PON2, XGS-PON).
* @member onuId Information to identify an Optical Network Unit.
* @member ponTech An informative field identifying the optical technology used.
* @member operationalState It reports whether the ONU is currently capable of performing its function.
* @member dsRate Downstream line rate * @member dsRate Downstream line rate
* @member usRate Upstream line rate * @member usRate Upstream line rate
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo
*/ */
type record OpticalNetworkInfo_ { type record PonInfo {
OnuId onuId, TimeStamp timeStamp optional,
PonTech ponTech, CpInfo customerPremisesInfo,
Json.String ponSYS_ID,
Json.String onuId,
PonTech ponTech,
OperationalState operationalState, OperationalState operationalState,
DsRate dsRate, DsRate dsRate,
UsRate usRate UsRate usRate
} }
type record of OpticalNetworkInfo_ OpticalNetworkInfo;
/**
* @desc Information to identify an Optical Network Unit.
*/
type Json.String OnuId;
type record of OnuId OnuIds;
/** /**
* @desc An informative field identifying the optical technology used. * @desc An informative field identifying the optical technology used.
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo
*/ */
type enumerated PonTech { type enumerated PonTech {
GPON, GPON (1),
XGPON, XGPON (2),
NGPON2, NGPON2 (3),
XGSPON XGSPON (4)
} with {
variant "JSON: as number"
} }
/** /**
* @desc It reports whether the ONU is currently capable of performing its function. * @desc It reports whether the ONU is currently capable of performing its function.
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo
*/ */
type enumerated OperationalState { type enumerated OperationalState {
enabled, enabled (1),
disabled disabled (2)
} with {
variant "JSON: as number"
} }
/** /**
* @desc Upstream line rate * @desc Upstream line rate
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo
*/ */
type enumerated DsRate { type enumerated DsRate {
e_ds_one, // 1 = 2.48832 Gbit/s: G-PON [i.9] or NG-PON2 option 2 [i.8] e_ds_one (1), // 1 = 2.48832 Gbit/s: G-PON [i.9] or NG-PON2 option 2 [i.8]
e_ds_two // 9.95328 Gbit/s: XG-PON [i.10] or XGS-PON [i.11] or NG-PON2 option 1 [i.8] e_ds_two (2) // 9.95328 Gbit/s: XG-PON [i.10] or XGS-PON [i.11] or NG-PON2 option 1 [i.8]
} with {
variant "JSON: as number"
} }
/** /**
* @desc Upstream line rate * @desc Upstream line rate
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo
*/ */
type enumerated UsRate { type enumerated UsRate {
e_us_one, // 1 = 1.24416 Gbit/s: G-PON option 1 [i.9] e_us_one (1), // 1 = 1.24416 Gbit/s: G-PON option 1 [i.9]
e_us_two, // 2 = 2.48832 Gbit/s: G-PON option 2 [i.9] or XG-PON [i.10] or NG-PON2 option 2 [i.8] e_us_two (2), // 2 = 2.48832 Gbit/s: G-PON option 2 [i.9] or XG-PON [i.10] or NG-PON2 option 2 [i.8]
e_us_three // 9.95328 Gbit/s: XGS-PON [i.11] e_us_three (3) // 9.95328 Gbit/s: XGS-PON [i.11]
} with {
variant "JSON: as number"
} }
/**
* @desc This type represents a subscription to ONU alarm notifications from FAIS
* @member subscriptionType Shall be set to "OnuAlarmSubscription"
* @member callbackReference URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service
* @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4]
* @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications
* @member links Hyperlink related to the resource
* @member filterCriteriaOnuAlarm List of filtering criteria for the subscription
* @member expiryDeadline Identifies a boundary after which the subscription will expire
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.2-1: Attributes of the OnuAlarmSubscription
*/
type record OnuAlarmSubscription {
Json.String subscriptionType,
Json.AnyURI callbackReference optional,
Json.Bool requestTestNotification optional,
WebsockNotifConfig websockNotifConfig optional,
Links links optional,
FilterCriteriaOnuAlarm filterCriteriaOnuAlarm,
TimeStamp expiryDeadline optional
} with {
variant (links) "name as '_links'";
}
/** /**
* @desc Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. * @desc Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.
* @member self_ Self referring URI. The URI shall be unique within the FAI API as it acts as an ID for the subscription. * @member self_ Self referring URI. The URI shall be unique within the FAI API as it acts as an ID for the subscription.
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.2-1: Attributes of the OnuAlarmSubscription
*/ */
type record Links { type record Links {
LinkType self_ LinkType self_
} with { } with {
variant (self_) "name as 'self'"; variant (self_) "name as 'self'";
} }
/** /**
* @desc This type represents a type of link and may be referenced from data structures. * @desc List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response
* @member customerPremisesInfo Physical locations of the customer sites
* @member onuId Unique identifiers for the optical network units.
* @member alarms In case alarms is not included in the subscription request, the default value -1 = All shall be used and included in the response.
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.2-1: Attributes of the OnuAlarmSubscription
*/ */
type record LinkType { type record FilterCriteriaOnuAlarm {
Href href CpInfo customerPremisesInfo optional,
OnuIds onuId,
AlarmList alarms optional
}
type record of Json.String OnuIds;
/**
* @desc In case alarms is not included in the subscription request, the default value -1 = All shall be used and included in the response
*/
type enumerated Alarm {
EquipmentAlarm (1), // (Functional failure on an internal interface)
PoweringAlarm, // (Loss of external power to battery backup unit. This alarm is typically derived through an external interface to a battery backup unit, and indicates that AC is no longer available to maintain battery charge.)
BatteryMissing, // (Battery is provisioned but missing)
BatteryFailure, // (Battery is provisioned and present but cannot recharge)
BatteryLow, // (Battery is provisioned and present but its voltage is too low)
PhysicalIntrusion, // (Applies if the ONU supports detection such as door or box open)
OnuSelfTestFailure, // (ONU has failed autonomous self-test)
DyingGasp, // ()ONU is powering off imminently due to loss of power to the ONU itself.)
TemperatureYellow, // (No service shutdown at present, but the circuit pack is operating beyond its recommended range.)
TemperatureRed, // ()Some services have been shut down to avoid equipment damage.)
VoltageYellow, // (No service shutdown at present, but the line power voltage is below its recommended minimum.)
VoltageRed, // (Some services have been shut down to avoid power collapse.)
OnuManualPowerOff, // (The ONU is shutting down because the subscriber has turned off its power switch.)
InvImage, // (Software image is invalid)
PseOverloadYellow, // (Indicates that the ONU is nearing its maximum ability to supply the known PoE demand of the attached PDs. The thresholds for declaring and clearing this alarm are vendor-specific.)
PseOverloadRed, // (Indicates that the ONU is unable to supply all of the PoE demand of the attached PDs and has removed or reduced power to at least one PD.)
All
} with {
variant "JSON: as number"
} }
type record of Alarm AlarmList;
/**
* @desc This type represents a subscription to device information notifications from FAIS
* @member subscriptionType Shall be set to "DevInfoSubscription"
* @member callbackReference URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service
* @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4]
* @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications
* @member links Hyperlink related to the resource
* @member filterCriteriaDevInfo List of filtering criteria for the subscription
* @member expiryDeadline Identifies a boundary after which the subscription will expire
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.3-1: Attributes of the DevInfoSubscription
*/
type record DevInfoSubscription {
Json.String subscriptionType,
Json.AnyURI callbackReference optional,
Json.Bool requestTestNotification optional,
WebsockNotifConfig websockNotifConfig optional,
Links links optional,
FilterCriteriaDevInfo filterCriteriaDevInfo,
TimeStamp expiryDeadline optional
} with {
variant (links) "name as '_links'";
}
/**
* @desc List of filtering criteria for the subscription
* @member gwId The identifier of an Internet Gateway Device through which the customer premises device is connected
* @member deviceId The device identifier
* @member deviceErrStatus The abnormal operational status of the device
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.3-1: Attributes of the DevInfoSubscription
*/
type record FilterCriteriaDevInfo {
GatewayIdList gwId optional,
DeviceIdList deviceId optional,
DeviceErrStatus deviceErrStatus optional
}
/**
* @desc Information (typically the serial number) to identify an Internet Gateway Device through which the customer premises device is connected.
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.3-1: Attributes of the DevInfoSubscription
*/
type record of Json.String GatewayIdList;
/**
* @desc Typically, the serial number of the device.
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.3-1: Attributes of the DevInfoSubscription
*/
type record of Json.String DeviceIdList;
/** /**
* @desc URI referring to a resource. * @desc Current operational status of the device.
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.3-1: Attributes of the DeviceInfo
*/ */
type Json.String Href; type enumerated DeviceErrStatus_ {
Error (1),
Disabled (2)
} with {
variant "JSON: as number"
}
type record of DeviceErrStatus_ DeviceErrStatus;
/**
* @desc This type represents a subscription to cable modem connectivity state notifications from FAIS
* @member subscriptionType Shall be set to "CmConnSubscription"
* @member callbackReference URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service
* @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4]
* @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications
* @member links Hyperlink related to the resource
* @member filterCriteriaCmConn List of filtering criteria for the subscription
* @member expiryDeadline Identifies a boundary after which the subscription will expire
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.4-1: Attributes of the CmConnSubscription
*/
type record CmConnSubscription {
Json.String subscriptionType,
Json.AnyURI callbackReference optional,
Json.Bool requestTestNotification optional,
WebsockNotifConfig websockNotifConfig optional,
Links links optional,
FilterCriteriaCmConn filterCriteriaCmConn,
TimeStamp expiryDeadline optional
} with {
variant (links) "name as '_links'";
}
/**
* @desc List of filtering criteria for the subscription
* @member customerPremisesInfo The physical location of a customer site
* @member cmIf
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.4-1: Attributes of the CmConnSubscription
*/
type record FilterCriteriaCmConn {
CpInfo customerPremisesInfo optional,
CmIf cmIf optional
}
/**
* @desc
* @member customerPremisesInfo The physical location of a customer site
* @member cmId The identifier of a Cable Modem at subscriber locations intended for use in conveying data communications on a cable data system
* @member ifIndex The MAC Domain interface index of the CM
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.4-1: Attributes of the CmConnSubscription
*/
type record CmIf {
Json.String cmId,
IfIndexList ifIndex,
CmRegStateList cmRegState
}
/** /**
* @desc This type represents a list of links related to currently existing subscriptions for the service consumer. * @desc This type represents a list of links related to currently existing subscriptions for the service consumer
* @member links List of hyperlinks related to the resource. * @member links Hyperlink related to the resource
* @member subscription A link to a subscription. * @member subscription The service consumer's subscriptions
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.5-1: Attributes of the SubscriptionLinkList
*/ */
type record SubscriptionLinkList { type record SubscriptionLinkList {
Links links, SubscriptionLinks links
Subscriptions subscription optional
} with { } with {
variant (links) "name as '_links'"; variant (links) "name as '_links'";
} }
/**
* @desc Hyperlink related to the resource
* @member self_ URI of this resource.
* @member subscription The service consumer's subscriptions
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.5-1: Attributes of the SubscriptionLinkList
*/
type record SubscriptionLinks {
LinkType self_,
SubscriptionList subscription optional
} with {
variant (self_) "name as 'self'";
}
/** /**
* @desc A link to a subscription * @desc A link to a subscription
* @member href The URI referring to the subscription. * @member href The URI referring to the subscription.
* @member subscriptionType Type of subscription * @member subscriptionType Type of subscription
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.5-1: Attributes of the SubscriptionLinkList
*/ */
type record Subscription_ { type record Subscription_ {
Json.AnyURI href, Json.AnyURI href,
SubscriptionType subscriptionType SubscriptionType subscriptionType
} }
type record of Subscription_ Subscriptions; type record of Subscription_ SubscriptionList;
/** /**
* @desc Type of subscription * @desc Type of subscription
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.5-1: Attributes of the SubscriptionLinkList
*/ */
type enumerated SubscriptionType { type enumerated SubscriptionType {
RESERVED, OnuAlarmSubscription,
ONU_ALARM, DevInfoSubscription,
DEVICE_ABNORMAL_ALERT, CmConnSubscription,
CM_CONNECTIVITY_STATE, AniAlarmSubscription
ANI_ALARM
} }
/** /**
* @desc This type represents a subscription to ONU alarm notifications from FAIS. * @desc This type represents a subscription to cable modem connectivity state notifications from FAIS
*/ * @member subscriptionType Shall be set to "AniAlarmSubscription"
type record OnuAlarmSubscription { * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service
Json.String subscriptionType, * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4]
Json.AnyURI callbackReference, * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications
Links links optional, * @member links Hyperlink related to the resource
FilterCriteriaOnuAlarm filterCriteriaOnuAlarm, * @member filterCriteriaAniAlarm List of filtering criteria for the subscription
TimeStamp expiryDeadline optional * @member expiryDeadline Identifies a boundary after which the subscription will expire
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.6-1: Attributes of the AniAlarmSubscription
*/
type record AniAlarmSubscription {
Json.String subscriptionType,
Json.AnyURI callbackReference optional,
Json.Bool requestTestNotification optional,
WebsockNotifConfig websockNotifConfig optional,
Links links optional,
FilterCriteriaAniAlarm filterCriteriaAniAlarm,
TimeStamp expiryDeadline optional
} with { } with {
variant (links) "name as '_links'"; variant (links) "name as '_links'";
} }
/** /**
* @desc List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response * @desc List of filtering criteria for the subscription
* @member customerPremisesInfo Physical locations of the customer sites * @member customerPremisesInfo 0 to N physical locations of the customer sites
* @member onuId Unique identifiers for the optical network units. * @member onuId 1 to N unique identifiers for the optical network units
* @member In case alarms is not included in the subscription request, the default value -1 = All shall be used and included in the response. * @member aniId
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.6-1: Attributes of the AniAlarmSubscription
*/ */
type record FilterCriteriaOnuAlarm { type record FilterCriteriaAniAlarm {
CpInfo customerPremisesInfo optional, CpInfo customerPremisesInfo optional,
OnuIds onuId, OnuIds onuId,
Alarms alarms optional AniId aniId
} }
/** /**
* @desc * @desc
* @member onuId The unique identifiers for the optical network unit
* @member aniId The index of an access network interface supported by the optical network unit
* @member alarms
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.6-1: Attributes of the AniAlarmSubscription
*/
type record AniId_ {
OnuIds onuId,
Json.String aniIndex,
AlarmList alarms optional
}
type record of AniId_ AniId
/**
* @desc This type represents a notification from FAIS with regards to ONU alarms
* @member notificationType Shall be set to "OnuAlarmNotification"
* @member timeStamp Date and time of the generation of the notification
* @member customerPremisesInfo The physical location of the related customer sites\
* @member onuId The unique identifier for an optical network unit
* @member alarm Indicates the alarm of the ONU
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.2-1: Attributes of the OnuAlarmNotification
*/
type record OnuAlarmNotification {
Json.String notificationType,
TimeStamp timeStamp optional,
CpInfo customerPremisesInfo optional,
Json.String onuId,
Alarm alarm
}
/**
* @desc This type represents a notification from FAIS with regards to ONU alarms
* @member notificationType Shall be set to "DevInfoNotification"
* @member timeStamp Date and time of the generation of the notification
* @member deviceId The identifier for a device
* @member deviceErrStatus Indicates the abnormal operational status of the device
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.3-1: Attributes of the DevInfoNotification
*/
type record DevInfoNotification {
Json.String notificationType,
TimeStamp timeStamp optional,
Json.String deviceId,
DeviceErrStatus_ deviceErrStatus
}
/**
* @desc This type represents a notification from FAIS with regards to ONU alarms
* @member notificationType Shall be set to "CmConnNotification"
* @member timeStamp Date and time of the generation of the notification
* @member customerPremisesInfo The physical location of a customer site
* @member cmIf
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.4-1: Attributes of the CmConnNotification
*/
type record CmConnNotification {
Json.String notificationType,
TimeStamp timeStamp optional,
CpInfo customerPremisesInfo optional,
CmIf cmIf
}
/**
* @desc This type represents a notification from FAIS with regards to expiry of the existing subscription
* @member timeStamp Date and time of the generation of the notification
* @member links List of hyperlinks related to the resource
* @member expiryDeadline Time stamp
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.5-1: Attributes of the ExpiryNotification
*/ */
type enumerated Alarm { type record ExpiryNotification {
EquipmentAlarm, // (Functional failure on an internal interface) TimeStamp timeStamp optional,
PoweringAlarm, // (Loss of external power to battery backup unit. This alarm is typically derived through an external interface to a battery backup unit, and indicates that AC is no longer available to maintain battery charge.) Links links,
BatteryMissing, // (Battery is provisioned but missing) TimeStamp expiryDeadline
BatteryFailure, // (Battery is provisioned and present but cannot recharge) } with {
BatteryLow, // (Battery is provisioned and present but its voltage is too low) variant (links) "name as '_links'";
PhysicalIntrusion, // (Applies if the ONU supports detection such as door or box open)
OnuSelfTestFailure, // (ONU has failed autonomous self-test)
DyingGasp, // ()ONU is powering off imminently due to loss of power to the ONU itself.)
TemperatureYellow, // (No service shutdown at present, but the circuit pack is operating beyond its recommended range.)
TemperatureRed, // ()Some services have been shut down to avoid equipment damage.)
VoltageYellow, // (No service shutdown at present, but the line power voltage is below its recommended minimum.)
VoltageRed, // (Some services have been shut down to avoid power collapse.)
OnuManualPowerOff, // (The ONU is shutting down because the subscriber has turned off its power switch.)
InvImage, // (Software image is invalid)
PseOverloadYellow, // (Indicates that the ONU is nearing its maximum ability to supply the known PoE demand of the attached PDs. The thresholds for declaring and clearing this alarm are vendor-specific.)
PseOverloadRed, //(Indicates that the ONU is unable to supply all of the PoE demand of the attached PDs and has removed or reduced power to at least one PD.)
All
} with {
variant "JSON: as number"
} }
type record of Alarm Alarms; /**
* @desc This type represents a notification from FAIS with regards to ONU alarms
* @member notificationType Shall be set to "AniAlarmNotification"
* @member timeStamp Date and time of the generation of the notification
* @member customerPremisesInfo The physical location of a customer site
* @member onuId The unique identifier for an optical network unit
* @member aniId
* @member alarm Indicates the alarm of the ANI
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.6-1: Attributes of the AniAlarmNotification
*/
type record AniAlarmNotification {
Json.String notificationType,
TimeStamp timeStamp optional,
CpInfo customerPremisesInfo optional,
OnuIds onuId optional,
AniId aniId optional,
Alarm alarm
}
/**
* @desc This type represents a test notification from a FAIS to determine if the Websocket method is to be utilized to issue notifications for a subscription
* @member notificationType Shall be set to "OnuAlarmNoTestNotificationtification"
* @member links Hyperlink related to the resource
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.7-1: Attributes of the TestNotification
*/
type record TestNotification {
Json.String notificationType,
Links_TestNotification links
} with {
variant (links) "name as '_links'";
}
/**
* @desc Hyperlink related to the resource
* @member subscription URI identifying the subscription for the test notification
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.7-1: Attributes of the TestNotification
*/
type record Links_TestNotification {
LinkType subscription
}
/**
* @desc This type represents a customer premises (physical location)
* @member latitude Latitude (DATUM=WGS84)
* @member longitude Longitude (DATUM=WGS84)
* @member postalCode Postal code for the location
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.3-1: Attributes of the CpInfo
*/
type record CpInfo_{
Json.Number latitude optional,
Json.Number longitude optional,
Json.String postalCode optional
}
type record of CpInfo_ CpInfo;
/**
* @desc This type represents an IP-layer ping test
* @member diagnosticsState The state of the IP ping test
* @member host Host name or address of the host to ping
* @member numberOfRepetitions Number of repetitions of the ping test to perform before reporting the results
* @member timeout_ Timeout in milliseconds for the ping test
* @member dataBlockSize Size of the data block in bytes to be sent for each ping
* @member successCount Result parameter indicating the number of successful pings (those in which a successful response was received prior to the timeout) in the most recent ping test
* @member failureCount Result parameter indicating the number of failed pings in the most recent ping test
* @member averageResponseTime Result parameter indicating the average response time in milliseconds over all repetitions with successful responses of the most recent ping test
* @member minimumResponseTime Result parameter indicating the minimum response time in milliseconds over all repetitions with successful responses of the most recent ping test
* @member maximumResponseTime Result parameter indicating the maximum response time in milliseconds over all repetitions with successful responses of the most recent ping test
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.4-1: Attributes of the IPPingDiagnostics
*/
type record IPPingDiagnostics {
DiagnosticsState diagnosticsState,
Json.String host optional,
Json.Number numberOfRepetitions optional,
Json.Number timeout_ optional,
Json.Number dataBlockSize optional,
Json.Number successCount optional,
Json.Number failureCount optional,
Json.Number averageResponseTime optional,
Json.Number minimumResponseTime optional,
Json.Number maximumResponseTime optional
}
/**
* @desc The state of the IP ping test
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.4-1: Attributes of the IPPingDiagnostics
*/
type enumerated DiagnosticsState {
None (1),
Requested (2),
Complete (3),
Error_CannotResolveHostName (4),
Error_Internal (5),
Error_Other (6)
} with {
variant "JSON: as number"
}
/**
* @desc This type represents an IP-layer trace-route test
* @member diagnosticsState The state of the IP ping test
* @member host Host name or address of the host to find a route to
* @member timeout_ Timeout in milliseconds for the trace route test
* @member dataBlockSize Size of the data block in bytes to be sent for each trace route
* @member maxHopCount The maximum number of hop used in outgoing probe packets. The default is 30 hops
* @member responseTime Result parameter indicating the response time in milliseconds the most recent trace route test
* @member numberOfRouteHops Result parameter indicating the number of hops within the discovered route
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.5-1: Attributes of the TraceRouteDiagnostics
*/
type record TraceRouteDiagnostics {
DiagnosticsState diagnosticsState,
Json.String host optional,
Json.Number timeout_ optional,
Json.Number dataBlockSize optional,
Json.Number maxHopCount optional,
Json.Number responseTime optional,
Json.Number numberOfRouteHops optional
}
/**
* @desc This type represents a HTTP and FTP DownloadDiagnostics test
* @member diagnosticsState The state of the HTTP and FTP download test
* @member downloadURI The URI for the device to perform the download on
* @member rOMTime Request time in UTC, which shall be specified to microsecond precision
* @member bOMTime Begin of transmission time in UTC, which shall be specified to microsecond precision
* @member eOMTime End of transmission in UTC, which shall be specified to microsecond precision
* @member testBytesReceived The test traffic received in bytes during the FTP/HTTP transaction including FTP/HTTP headers,`between bOMTime and eOMTime
* @member totalBytesReceived The total number of bytes received on the Interface between bOMTime and eOMTime
* @member tCPOpenRequestTime Request time in UTC, which shall be specified to microsecond precision
* @member tCPOpenReponseTime Response time in UTC, which shall be specified to microsecond precision
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.6-1: Attributes of the DownloadDiagnostics
*/
type record DownloadDiagnostics {
DiagnosticsState diagnosticsState,
Json.AnyURI downloadURI optional,
TimeStamp rOMTime optional,
TimeStamp bOMTime optional,
TimeStamp eOMTime optional,
Json.Number testBytesReceived optional,
Json.Number totalBytesReceived optional,
TimeStamp tCPOpenRequestTime optional,
TimeStamp tCPOpenReponseTime optional
}
/**
* @desc This type represents a HTTP and FTP UploadDiagnostics test
* @member diagnosticsState The state of the HTTP and FTP download test
* @member uploadURI The URI for the device to perform the upload to
* @member testFileLength The size of the file (in bytes) to be uploaded to the server
* @member rOMTime Request time in UTC, which shall be specified to microsecond precision
* @member bOMTime Begin of transmission time in UTC, which shall be specified to microsecond precision
* @member eOMTime End of transmission in UTC, which shall be specified to microsecond precision
* @member testBytesSent The test traffic sent in bytes during the FTP/HTTP transaction including FTP/HTTP headers, between bOMTime and eOMTime
* @member tCPOpenRequestTime Request time in UTC, which shall be specified to microsecond precision
* @member tCPOpenReponseTime Response time in UTC, which shall be specified to microsecond precision
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.7-1: Attributes of the UploadDiagnostics
*/
type record UploadDiagnostics {
DiagnosticsState diagnosticsState,
Json.AnyURI uploadURI optional,
Json.Number testFileLength optional,
TimeStamp rOMTime optional,
TimeStamp bOMTime optional,
TimeStamp eOMTime optional,
Json.Number testBytesSent optional,
TimeStamp tCPOpenRequestTime optional,
TimeStamp tCPOpenReponseTime optional
}
/**
* @desc This type represents a type of link and may be referenced from data structures
* @member href URI referring to a resource
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.8-1: Attributes of the LinkType
*/
type record LinkType {
Json.AnyURI href
}
/**
* @desc This type represents configuration for the delivery of subscription notifications over Websockets
* @member websocketUri Set by location server to indicate to the service consumer the Websocket URI to be used for delivering notifications
* @member requestWebsocketUri Set to true by the service consumer to indicate that Websocket delivery is requested
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.9-1: Attributes of the WebsockNotifConfig
*/
type record WebsockNotifConfig {
Json.AnyURI websocketUri optional,
Json.Bool requestWebsocketUri optional
}
} with { } with {
encode "JSON" encode "JSON"
} // End of module FixedAccessInformationServiceAPI_TypesAndValues } // End of module FixedAccessInformationServiceAPI_TypesAndValues
sources := \
ttcn/IoTAPI_Pics.ttcn \
ttcn/IoTAPI_Pixits.ttcn \
ttcn/IoTAPI_Templates.ttcn \
ttcn/IoTAPI_Functions.ttcn \
ttcn/IoTAPI_TypesAndValues.ttcn