{
"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$
* $Id$
* @desc Types ANd Values for ETSI GS MEC 016 V2.2.1 (2020-04)
......@@ -10,88 +10,29 @@
*/
module DeviceApplicationInterfaceAPI_TypesAndValues {
// JSON
import from Json all;
// LibCommon
import from LibCommon_BasicTypesAndValues all;
/**
* @desc Required service continuity mode for this application.
*/
type enumerated ServiceCount {
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
* @desc Information on available applications
* @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
*/
type record CivicAddressElement {
Json.Integer caType,
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'";
type record ApplicationList {
AppList appList optional
}
/**
* @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 Clause 6.5.2 Type: LocationConstraints
* @desc Information on available applications
* @member appInfo List of user applications available to the device application
* @member vendorSpecificExt Extension for vendor specific information
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList
*/
type record LocationConstraints {
Json.String countryCode optional,
CivicAddressElement civicAddressElement optional,
Polygon area optional
type record AppListItem {
ApplicationList_AppInfo appInfo,
VendorSpecificExt vendorSpecificExt optional
}
type record of LocationConstraints LocationConstraintsList;
type record of AppListItem AppList;
/**
* @desc Information on available applications
......@@ -103,61 +44,74 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
* @member appDescription Human readable description of the MEC application
* @member appLocation Identifies the locations of the MEC 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 {
Json.String appDId,
Json.String appName,
Json.String appProvider,
Json.String appSoftVersion optional,
Json.String appDVersion,
Json.String appDescription optional,
Json.String appDId,
Json.String appName,
Json.String appProvider,
Json.String appSoftVersion,
Json.String appDVersion,
Json.String appDescription,
LocationConstraintsList appLocation optional,
AppCharcs appCharcs optional
AppCharcs appCharcs optional
}
/**
* @desc Extension for vendor specific information
* @member vendorId Vendor identifier
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList
*/
type record VendorSpecificExt {
Json.String vendorId
}
/**
* @desc Information on available applications
* @member appInfo List of user applications available to the device application
* @member vendorSpecificExt Extension for vendor specific information
* @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList
* @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 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList
*/
type record AppListItem {
ApplicationList_AppInfo appInfo,
VendorSpecificExt vendorSpecificExt optional
type record AppCharcs {
Json.UInteger memory 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
* @member appList List of user applications available to the device application
* @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList
* @desc 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 ApplicationList {
AppList appList optional
type enumerated ServiceCount {
SERVICE_CONTINUITY_NOT_REQUIRED (0),
SERVICE_CONTINUITY_REQUIRED (1)
} with {
variant "JSON: as number"
}
/**
* @desc user application instance information
* @member appInstanceId Identifier of the user application instance
* @member referenceURI Address of the user application instance
* @member appLocation Location of the user application instance
* @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext
* @desc Information on application context created by the MEC system
* @member contextId Uniquely identifies the application context in the MEC system
* @member associateDevAppId Uniquely identifies the device application
* @member callbackReference Assigned by the device application to receive application lifecycle related notifications
* @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 {
Json.String appInstanceId optional,
Json.AnyURI referenceURI optional,
LocationConstraints appLocation optional
type record AppContext {
Json.String contextId optional,
Json.String associateDevAppId,
Json.AnyURI callbackReference optional,
boolean appLocationUpdates optional,
boolean appAutoInstantiation optional,
ApplicationContext_AppInfo appInfo
}
type record of UserAppInstanceInfo UserAppInstanceInfoList;
/**
* @desc Information on available applications
......@@ -169,48 +123,44 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
* @member appDescription Human readable description of the MEC application
* @member userAppInstanceInfo List of user application instance information
* @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 {
Json.String appDId,
Json.String appName,
Json.String appProvider,
Json.String appSoftVersion optional,
Json.String appDVersion,
Json.String appDescription optional,
Json.String appDId,
Json.String appName,
Json.String appProvider,
Json.String appSoftVersion optional,
Json.String appDVersion,
Json.String appDescription optional,
UserAppInstanceInfoList userAppInstanceInfo optional,
Json.AnyURI appPackageSource optional
Json.AnyURI appPackageSource optional
}
/**
* @desc Information on application context created by the MEC system
* @member contextId Uniquely identifies the application context in the MEC system
* @member associateDevAppId Uniquely identifies the device application
* @member callbackReference Assigned by the device application to receive application lifecycle related notifications
* @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 Clause 6.2.3 Type: AppContext
* @desc user application instance information
* @member appInstanceId Identifier of the user application instance
* @member referenceURI Address of the user application instance
* @member appLocation Location of the user application instance
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.3 Type: AppContext
*/
type record AppContext {
Json.String contextId optional,
Json.String associateDevAppId,
Json.AnyURI callbackReference optional,
boolean appLocationUpdates optional,
boolean appAutoInstantiation optional,
ApplicationContext_AppInfo appInfo
type record UserAppInstanceInfo {
Json.String appInstanceId optional,
Json.AnyURI referenceURI optional,
LocationConstraints appLocation optional
}
type record of UserAppInstanceInfo UserAppInstanceInfoList;
/**
* @desc
* @member appLocation Shall only be included in the response, where it indicates a location constraint available in the MEC system
* @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability
* @desc Information on locations available instantiation of new user application instances
* @member associateDevAppId Uniquely identifies the device application
* @member appInfo
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.4 Type: ApplicationLocationAvailability
*/
type record AvailableLocations {
LocationConstraints appLocation optional
type record ApplicationLocationAvailability {
Json.String associateDevAppId,
ApplicationLocationAvailability_AppInfo appInfo
}
type record of AvailableLocations AvailableLocationsList;
/**
* @desc
* @member appDId Identifier of this MEC application descriptor
......@@ -221,29 +171,28 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
* @member appDescription Human readable description of the MEC application
* @member availableLocations MEC application location constraints
* @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 {
Json.String appDId,
Json.String appName,
Json.String appProvider,
Json.String appSoftVersion optional,
Json.String appDVersion,
Json.String appDescription optional,
Json.String appDId,
Json.String appName,
Json.String appProvider,
Json.String appSoftVersion optional,
Json.String appDVersion,
Json.String appDescription optional,
AvailableLocationsList availableLocations optional,
Json.AnyURI appPackageSource optional
Json.AnyURI appPackageSource optional
}
/**
* @desc Information on locations available instantiation of new user application instances
* @member associateDevAppId Uniquely identifies the device application
* @member appInfo
* @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability
* @desc
* @member appLocation Shall only be included in the response, where it indicates a location constraint available in the MEC system
* @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.4 Type: ApplicationLocationAvailability
*/
type record ApplicationLocationAvailability {
Json.String associateDevAppId,
ApplicationLocationAvailability_AppInfo appInfo
type record AvailableLocations {
LocationConstraints appLocation optional
}
type record of AvailableLocations AvailableLocationsList;
/**
* @desc Notification from the UALCMP regarding a change in address of a user application instance
......@@ -251,7 +200,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
* @member contextId Uniquely identifies the application context in the MEC system
* @member appInstanceId Identifier of the user application instance
* @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 {
Json.String notificationType,
......@@ -262,9 +211,9 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
/**
* @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
* @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 {
Json.String notificationType,
......@@ -273,30 +222,94 @@ module DeviceApplicationInterfaceAPI_TypesAndValues {
/**
* @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 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 {
Json.String notificationType,
Json.String contextId,
Json.String notificationType,
Json.String contextId,
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
* @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 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 {
Json.String notificationType,
Json.String contextId,
Json.String notificationType,
Json.String contextId,
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 {
encode "JSON"
} // 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 {
function f_create_service_info(
out ServiceInfo p_service_info,
out Headers p_headers
out charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
var HttpMessage v_response;
......@@ -39,24 +39,22 @@ module EdgePlatformApplicationEnablementAPI_Functions {
httpPort.send(
m_http_request(
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,
m_http_message_body_json(
m_body_json_service_info(
m_service_info(
v_service_name,
-, -, -,
m_service_info_link("m_service_info_link"),
-, -, //-,
-, -, -, -, -, -,
m_transport_info(
"transportId1",
"ETSI MEC-011 Conformance test",
"REST",
"REST_HTTP",
REST_HTTP,
"HTTP",
"2.0",
m_end_point_uris({"/meMp1/service/MyEntryPoint"}),
m_security_info
)))))));
)))))));
tc_ac.start;
alt {
[] httpPort.receive(
......@@ -65,13 +63,22 @@ module EdgePlatformApplicationEnablementAPI_Functions {
mw_http_message_body_json(
mw_body_json_service_info(
mw_service_info(
v_service_name //serName
)))))) -> value v_response {
v_service_name
)))))) -> 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_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services" & "/(?*)",
0
);
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 subscription: ", p_service_info);
log("f_create_service_info: INFO: IUT successfully responds to the service creation: ", p_service_info);
log("f_create_service_info: INFO: Resource URI: ", p_subscription_id);
}
[] tc_ac.timeout {
log("f_create_service_info: INCONC: Expected message not received");
......@@ -80,7 +87,7 @@ module EdgePlatformApplicationEnablementAPI_Functions {
} // End of function f_create_service_info
function f_delete_service_info(
in ServiceInfo p_service_info
in charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
......@@ -88,7 +95,7 @@ module EdgePlatformApplicationEnablementAPI_Functions {
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")) & "/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
)));
tc_ac.start;
......@@ -104,9 +111,96 @@ module EdgePlatformApplicationEnablementAPI_Functions {
}
} // End of 'alt' statement
} // 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(
out SerAvailabilityNotificationSubscription p_ser_availability_notification_subscription
out SerAvailabilityNotificationSubscription p_ser_availability_notification_subscription,
out charstring p_subscription_id
) runs on HttpComponent {
var Headers v_headers;
var HttpMessage v_response;
......@@ -115,13 +209,13 @@ module EdgePlatformApplicationEnablementAPI_Functions {
httpPort.send(
m_http_request(
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,
m_http_message_body_json(
m_body_json_srv_avail_notif_subscription(
m_srv_avail_notif_subscription(
PX_SRV_AVAIL_NOTIF_CALLBACK_URI
))))));
))))));
tc_ac.start;
alt {
[] httpPort.receive(
......@@ -131,11 +225,21 @@ module EdgePlatformApplicationEnablementAPI_Functions {
mw_body_json_srv_avail_notif_subscription(
mw_srv_avail_notif_subscription(
PX_SRV_AVAIL_NOTIF_CALLBACK_URI
)))))) -> value v_response {
)))))) -> 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_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
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 {
log("f_create_ser_availability_notification_subscription: INCONC: Expected message not received");
......@@ -144,28 +248,23 @@ module EdgePlatformApplicationEnablementAPI_Functions {
} // End of function f_create_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 {
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);
httpPort.send(
m_http_request(
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
)));
)));
tc_ac.start;
alt {
[] httpPort.receive(
mw_http_response(
mw_http_response_204_no_content
)) {
)) {
tc_ac.stop;
}
[] tc_ac.timeout {
......@@ -173,5 +272,81 @@ module EdgePlatformApplicationEnablementAPI_Functions {
}
} // End of 'alt' statement
} // 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
module EdgePlatformApplicationEnablementAPI_Pixits {
// JSON
import from Json all;
// LibMec/EdgePlatformApplicationEnablementAPI
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_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";
......
/**
* @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 {
......@@ -10,27 +9,17 @@ module EdgePlatformApplicationEnablementAPI_Templates {
// LibCommon
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_Pixits all;
template (value) TimeStamp m_time_stamp(
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(
template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo m_security_info(
in GrantTypesList p_grantTypes := { OAUTH2_CLIENT_CREDENTIALS },
in TokenEndpoint p_tokenEndpoint := "/mecSerMgmtApi/security/MyTokenEndPoint"
) := {
......@@ -41,7 +30,7 @@ module EdgePlatformApplicationEnablementAPI_Templates {
extentions := omit
} // 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) TokenEndpoint p_tokenEndpoint := ?
) := {
......@@ -52,18 +41,20 @@ module EdgePlatformApplicationEnablementAPI_Templates {
extentions := *
} // End of template mw_security_info
template (value) TransportInfo_Endpoint m_end_point_uris(
in template (value) EndPointInfo_UriList p_uris
) := {
template (value) EndPointInfo m_end_point_uris(
in template (value) EndPointInfo_UriList p_uris
) := {
uris := p_uris,
fqdn := omit,
addresses := omit,
alternative := omit
} // End of template m_end_point_uris
template (present) TransportInfo_Endpoint mw_end_point_uris(
template (present) EndPointInfo_UriList p_uris := ?
) := {
template (present) EndPointInfo mw_end_point_uris(
template (present) EndPointInfo_UriList p_uris := ?
) := {
uris := p_uris,
fqdn := *,
addresses := *,
alternative := *
} // End of template mw_end_point_uris
......@@ -86,8 +77,8 @@ module EdgePlatformApplicationEnablementAPI_Templates {
in SerName p_serName,
in ServiceInfo_Version p_version := PX_SERVICE_INFO_VERSION,
in ServiceState p_state := PX_SERVICE_INFO_STATE,
in SerializerType p_serializer := PX_SERIALIZER,
in template (value) ServiceInfo_Link p_links,
in EdgePlatformApplicationEnablementAPI_TypesAndValues.SerializerType p_serializer := PX_SERIALIZER,
in template (omit) ServiceInfo_Link p_links := omit,
in template (omit) SerInstanceId p_serInstanceId := omit,
in template (omit) TransportId p_transportId := omit,
in template (omit) TransportInfo p_transportInfo := omit,
......@@ -112,7 +103,7 @@ module EdgePlatformApplicationEnablementAPI_Templates {
template (present) SerName p_serName := ?,
template (present) ServiceInfo_Version p_version := PX_SERVICE_INFO_VERSION,
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 SerInstanceId p_serInstanceId := *,
template TransportId p_transportId := *,
......@@ -147,11 +138,17 @@ module EdgePlatformApplicationEnablementAPI_Templates {
} // End of template mw_subscription_link_list
template (value) Self m_self(
in template (value) LinkType p_self_
in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.LinkType p_self_
) := {
self_ := p_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(
in template (value) AppTerminationNotificationSubscription_CallbackReference p_callbackReference,
in template (omit) Self p_links := omit,
......@@ -182,6 +179,62 @@ module EdgePlatformApplicationEnablementAPI_Templates {
appInstanceId := p_appInstanceId
} // 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(
in ServiceState p_state,
in template (value) TimeStamp p_timeStamp,
......@@ -205,11 +258,11 @@ module EdgePlatformApplicationEnablementAPI_Templates {
template (value) TransportInfo m_transport_info(
in TransportInfo_Id p_id,
in TransportInfo_Name p_name,
in TransportTypes p_type_,
in EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType p_type_,
in TransportInfo_Protocol p_protocol,
in TransportInfo_Version p_version,
in template (value) TransportInfo_Endpoint p_endpoint,
in template (value) SecurityInfo p_security
in template (value) EndPointInfo p_endpoint,
in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo p_security
) := {
id := p_id,
name := p_name,
......@@ -225,11 +278,11 @@ module EdgePlatformApplicationEnablementAPI_Templates {
template (present) TransportInfo mw_transport_info(
template (present) TransportInfo_Id p_id := ?,
template (present) TransportInfo_Name p_name := ?,
template (present) TransportTypes p_type_ := ?,
template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType p_type_ := ?,
template (present) TransportInfo_Protocol p_protocol := ?,
template (present) TransportInfo_Version p_version := ?,
template (present) TransportInfo_Endpoint p_endpoint := ?,
template (present) SecurityInfo p_security := ?
template (present) EndPointInfo p_endpoint := ?,
template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo p_security := ?
) := {
id := p_id,
name := p_name,
......
/**
* @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 {
// JSON
import from Json all;
// LibCommon
import from LibCommon_BasicTypesAndValues all;
// LibMec
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.
*/
type UInt32 MaxGracefulTimeout;
type Json.UInteger MaxGracefulTimeout;
/**
* @desc Shall be set to AppTerminationNotification.
......@@ -24,63 +26,47 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues {
* @desc Operation that is being performed on the MEC
*/
type enumerated OperationAction {
STOPPING (0),
STOPPING (0),
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.
* @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 {
NotificationType notificationType,
OperationAction operationAction,
NotificationType notificationType,
OperationAction operationAction,
MaxGracefulTimeout maxGracefulTimeout,
Subscription links
Subscription links
} with {
variant (links) "name as '_links'";
}
/**
* @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
in the case of stop.
* that the application has completed its application level related terminate/stop actions, e.g. retention of application state
* 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 {
OperationAction operationAction
}
/**
* @desc This type represents the information that the MEC application instance indicates to the MEC platform that it is up and
running
* @desc This type represents the information that the MEC application instance indicates to the MEC platform that it is up and 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 {
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.
* This shall be included in both the request and the response."
......@@ -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.
* @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 {
SubscriptionType subscriptionType,
......@@ -104,6 +95,35 @@ running
*/
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.
*/
......@@ -128,25 +148,16 @@ running
* @desc This type represents the category reference.
*/
type record CategoryRef {
CategoryRef_Href href,
CategoryRef_Id id,
Name name,
CategoryRef_Href href,
CategoryRef_Id id,
Name name,
CategoryRef_Version version
}
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.
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.5-1: Attributes of CurrentTime
*/
type enumerated TimeSourceStatus {
TRACEABLE (1),
......@@ -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 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.
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.5-1: Attributes of CurrentTime
*/
type record CurrentTime {
Seconds seconds,
......@@ -165,6 +177,45 @@ running
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.
*/
......@@ -187,13 +238,19 @@ running
/**
* @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 {
InterfaceType interfaceType,
TunnelInfo tunnelInfo optional,
InterfaceType interfaceType,
TunnelInfo tunnelInfo optional,
DestinationInterface_MacAddress srcMacAddress optional,
DestinationInterface_MacAddress dstMacAddress optional,
DestinationInterface_IpAddress dstIpAddress optional
DestinationInterface_IpAddress dstIpAddress optional
}
type record of DestinationInterface DestinationInterfaceList;
......@@ -232,18 +289,25 @@ running
/**
* @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 {
DnsRule_Id dnsRuleId,
DomainName domainName,
DnsRule_Id dnsRuleId,
DomainName domainName,
DnsRule_IpAddressType ipAddressType,
DnsRule_IpAddress ipAddress,
Ttl ttl,
DnsRule_State state
DnsRule_IpAddress ipAddress,
Ttl ttl,
DnsRule_State state
}
type record of DnsRule DnsRuleList;
......@@ -255,13 +319,13 @@ running
/**
* @desc Port portion of the address.
*/
type UInt32 Address_Port;
type Json.UInteger Address_Port;
/**
* @desc A IP address and port pair.
*/
type record Address {
Host host,
Host host,
Address_Port port_
} with {
variant (port_) "name as 'port'";
......@@ -276,7 +340,7 @@ running
* @desc Entry point information of the service in a format defined by an implementation, or in an external specification.
*/
type record EndPointInfo_Alternative {
anytype alternative
anytype alternative optional
}
/**
......@@ -289,8 +353,15 @@ running
*/
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.
* @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 {
Href href
......@@ -337,8 +408,14 @@ running
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 {
LinkType self_,
LinkType self_,
Subscriptions subscriptions
} with {
variant (self_) "name as 'self'";
......@@ -346,6 +423,8 @@ running
/**
* @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 {
Links links
......@@ -357,6 +436,7 @@ running
* @desc The MEC application instance's subscriptions
* @member href URI referring to 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_ {
Json.AnyURI href,
......@@ -390,10 +470,11 @@ running
/**
* @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 {
OAuth2Info oAuth2Info optional,
UInt8 extentions optional
Json.UInt8 extentions optional
}
/**
......@@ -429,6 +510,12 @@ running
/**
* @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 {
SerInstanceIdList serInstanceIds optional,
......@@ -449,6 +536,7 @@ running
/**
* @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 {
JSON,
......@@ -483,6 +571,7 @@ running
/**
* @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 {
MEC_SYSTEM,
......@@ -514,6 +603,20 @@ running
/**
* @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 {
SerInstanceId serInstanceId optional,
......@@ -527,8 +630,8 @@ running
LocalityType scopeOfLocality optional,
Json.Bool consumedLocalOnly optional,
Json.Bool isLocal optional,
UInt32 livenessInterval optional,
ServiceInfo_Link links
Json.UInteger livenessInterval optional,
ServiceInfo_Link links optional
} with {
variant (links) "name as '_links'";
}
......@@ -544,7 +647,7 @@ running
/**
* @desc Authentication key number.
*/
type UInt32 AuthenticationKeyNum;
type Json.UInteger AuthenticationKeyNum;
/**
* @desc NTP authentication option.
......@@ -558,12 +661,12 @@ running
/**
* @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.
*/
type UInt32 LocalPriority;
type Json.UInteger LocalPriority;
/**
* @desc Maximum poll interval for NTP messages, in seconds as a power of two. Range 3...17.
......@@ -596,10 +699,18 @@ running
/**
* @desc PTP Master local priority.
*/
type UInt32 NtpServers_PtpMasterLocalPriority;
type Json.UInteger NtpServers_PtpMasterLocalPriority;
/**
* @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 {
NtpServerAddrType ntpServerAddrType,
......@@ -623,17 +734,11 @@ running
type record of TimingCaps_PtpMasters TimingCaps_PtpMastersList;
/**
* @desc Time.
* @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.
* @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.
*/
type record TimeStamp {
Seconds seconds,
NanoSeconds nanoSeconds
}
/**
* @desc This type represents the information provided by the mobile edge platform in response to the Timing capabilities Query message.
* @desc This type represents the information provided by the mobile edge platform in response to the Timing capabilities Query message
* @member timeStamp
* @member ntpServers Number of available NTP servers
* @member ptpMasters Number of available PTP Servers (referred to as "masters" in IEEE 1588-2019™ [i.2])
* @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.4-1: Attributes of TimingCaps
*/
type record TimingCaps {
TimeStamp timeStamp optional,
......@@ -650,7 +755,7 @@ running
/**
* @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.
......@@ -667,12 +772,12 @@ running
/**
* @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.
*/
type UInt32 TrafficFilter_TC;
type Json.UInteger TrafficFilter_TC;
/**
* @desc Used for tag based traffic rule.
......@@ -694,6 +799,20 @@ running
/**
* @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 {
TrafficFilter_AddressList srcAddress optional,
......@@ -740,7 +859,7 @@ running
/**
* @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.
......@@ -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 {
TrafficRule_Id trafficRuleId,
......@@ -797,25 +924,41 @@ running
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_FqdnList fqdn optional,
EndPointInfo_AddressList addresses optional,
EndPointInfo_Alternative alternative optional
}
/**
* @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 {
TransportInfo_Id id,
TransportInfo_Name name,
TransportInfo_Description description optional,
TransportTypes type_,
TransportType type_,
TransportInfo_Protocol protocol,
TransportInfo_Version version,
TransportInfo_Endpoint endpoint,
EndPointInfo endpoint,
SecurityInfo security,
TransportInfo_ImplSpecificInfo implSpecificInfo optional
} with {
......@@ -824,9 +967,10 @@ running
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,
MB_TOPIC_BASED,
MB_ROUTING,
......@@ -856,6 +1000,10 @@ running
/**
* @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 {
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 := \
ttcn/FixedAccessInformationServiceAPI_Pics.ttcn \
ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn \
ttcn/FixedAccessInformationServiceAPI_Templates.ttcn \
ttcn/FixedAccessInformationServiceAPI_Functions.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 {
/**
* @desc Does the IUT support MEC Federation API?
*/
modulepar boolean PICS_FAI_API_SUPPORTED := true;
} // End of module FixedAccessInformationServiceAPI_Pics
......@@ -6,17 +6,17 @@ module FixedAccessInformationServiceAPI_Pixits {
// LibMec_FixedAccessInformationServiceAPI
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 := "";
......@@ -24,6 +24,12 @@ module FixedAccessInformationServiceAPI_Pixits {
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_NON_EXISTENT_SUBSCRIPTION_ID := "";
......
......@@ -6,32 +6,51 @@ module FixedAccessInformationServiceAPI_Templates {
// LibCommon
import from LibCommon_BasicTypesAndValues all;
// LibMec
import from LibMec_TypesAndValues all;
// LibMec_FixedAccessInformationServiceAPI
import from FixedAccessInformationServiceAPI_TypesAndValues all;
import from FixedAccessInformationServiceAPI_Pixits all;
template (omit) FaInfo m_fa_info(
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) ConnectivityInfo p_connectivityInfo := omit
) := {
timeStamp := p_timeStamp,
customerPremisesInfo := p_customerPremisesInfo,
connectivityInfo := p_connectivityInfo
} // End of template m_fa_info
in template (omit) Json.Integer p_dsbw := omit,
in template (omit) Json.Integer p_usbw := omit,
in template (omit) Json.Integer p_latency := omit
) := {
timeStamp := p_timeStamp,
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 (present) CpInfo p_customerPremisesInfo := ?,
template (present) LastMileTech p_lastMileTech := ?,
template (present) InterfaceType p_interfaceType := ?,
template TimeStamp p_timeStamp := *,
template ConnectivityInfo p_connectivityInfo := *
) := {
timeStamp := p_timeStamp,
customerPremisesInfo := p_customerPremisesInfo,
connectivityInfo := p_connectivityInfo
} // End of template mw_fa_info
template Json.Integer p_dsbw := *,
template Json.Integer p_usbw := *,
template Json.Integer p_latency := *
) := {
timeStamp := p_timeStamp,
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(
in template (value) GatewayId p_gwId,
in template (value) Json.String p_gwId,
in template (value) DeviceStatus p_deviceStatus,
in template (value) Json.Number p_upTime,
in template (value) Json.Number p_iPConnectionUpTime,
......@@ -40,7 +59,7 @@ module FixedAccessInformationServiceAPI_Templates {
in template (value) Json.Number p_totalPacketsSent,
in template (value) Json.Number p_totalPacketsReceived,
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) TraceRouteDiagnostics p_traceRouteDiagnostics := omit,
in template (omit) DownloadDiagnostics p_downloadDiagnostics := omit,
......@@ -63,7 +82,7 @@ module FixedAccessInformationServiceAPI_Templates {
} // End of template m_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) Json.Number p_upTime := ?,
template (present) Json.Number p_iPConnectionUpTime := ?,
......@@ -72,7 +91,7 @@ module FixedAccessInformationServiceAPI_Templates {
template (present) Json.Number p_totalPacketsSent := ?,
template (present) Json.Number p_totalPacketsReceived := ?,
template TimeStamp p_timeStamp := *,
template DeviceId p_deviceId := *,
template Json.String p_deviceId := *,
template IPPingDiagnostics p_iPPingDiagnostics := *,
template TraceRouteDiagnostics p_traceRouteDiagnostics := *,
template DownloadDiagnostics p_downloadDiagnostics := *,
......@@ -96,133 +115,310 @@ module FixedAccessInformationServiceAPI_Templates {
template (omit) CableLineInfo m_cable_line_info(
in template (value) CpInfo p_customerPremisesInfo,
in template (value) CmdInfo p_cmdInfo,
in template (omit) TimeStamp p_timeStamp := omit
in template (value) Json.String p_cmdId,
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,
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
template CableLineInfo mw_cable_line_info(
template (present) CpInfo p_customerPremisesInfo := ?,
template (present) CmdInfo p_cmdInfo := ?,
template TimeStamp p_timeStamp := *
template (present) Json.String p_cmdId := ?,
template TimeStamp p_timeStamp := *,
template CmStatus p_cmStatus := *,
template CmDpvStats p_cmDpvStats := *,
template ServiceFlowStats p_serviceFlowStats := *
) := {
timeStamp := p_timeStamp,
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
template (omit) PonInfo m_pon_info(
in template (value) CpInfo p_customerPremisesInfo,
in template (value) PonSYS_ID p_ponSYS_ID,
in template (value) OpticalNetworkInfo p_opticalNetworkInfo,
in template (value) Json.String p_ponSYS_ID,
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
) := {
) := {
timeStamp := p_timeStamp,
customerPremisesInfo := p_customerPremisesInfo,
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
template PonInfo mw_pon_info(
template (present) CpInfo p_customerPremisesInfo := ?,
template (present) PonSYS_ID p_ponSYS_ID := ?,
template (present) OpticalNetworkInfo p_opticalNetworkInfo := ?,
template (present) Json.String p_ponSYS_ID := ?,
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 := *
) := {
) := {
timeStamp := p_timeStamp,
customerPremisesInfo := p_customerPremisesInfo,
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
template (omit) SubscriptionLinkList m_subscription_link_list(
in template (value) Links p_links,
in template (omit) Subscriptions p_subscription := omit
) := {
links := p_links,
subscription := p_subscription
in template (value) SubscriptionLinks p_links
) := {
links := p_links
} // End of template m_subscription_link_list
template SubscriptionLinkList mw_subscription_link_list(
template (present) Links p_links := ?,
template Subscriptions p_subscription := *
) := {
links := p_links,
subscription := p_subscription
template (present) SubscriptionLinks p_links := ?
) := {
links := p_links
} // End of template m_wsubscription_link_list
template (omit) OnuAlarmSubscription m_onu_alarm_subscription(
in template (value) Json.AnyURI p_callbackReference,
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) TimeStamp p_expiryDeadline := omit
) := {
subscriptionType := "OnuAlarmSubscription",
callbackReference := p_callbackReference,
links := p_links,
filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm,
expiryDeadline := p_expiryDeadline
) := {
subscriptionType := "OnuAlarmSubscription",
callbackReference := p_callbackReference,
requestTestNotification := p_requestTestNotification,
websockNotifConfig := p_websockNotifConfig,
links := p_links,
filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm,
expiryDeadline := p_expiryDeadline
} // End of template m_onu_alarm_subscription
template (omit) OnuAlarmSubscription m_onu_alarm_subscription_bad_request(
in template (value) Json.AnyURI p_callbackReference,
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) TimeStamp p_expiryDeadline := omit
) modifies m_onu_alarm_subscription := {
subscriptionType := "BadSubscriptionType"
} // End of template m_onu_alarm_subscription_bad_request
template OnuAlarmSubscription mw_onu_alarm_subscription(
template (present) Json.AnyURI p_callbackReference := ?,
template (present) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm := ?,
template Links p_links := *,
template TimeStamp p_expiryDeadline := *
) := {
subscriptionType := "OnuAlarmSubscription",
callbackReference := p_callbackReference,
links := p_links,
filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm,
expiryDeadline := p_expiryDeadline
template (present) OnuAlarmSubscription mw_onu_alarm_subscription(
template (present) Json.AnyURI p_callbackReference := ?,
template (present) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm := ?,
template Links p_links := *,
template Json.Bool p_requestTestNotification := *,
template WebsockNotifConfig p_websockNotifConfig := *,
template TimeStamp p_expiryDeadline := *
) := {
subscriptionType := "OnuAlarmSubscription",
callbackReference := p_callbackReference,
requestTestNotification := p_requestTestNotification,
websockNotifConfig := p_websockNotifConfig,
links := p_links,
filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm,
expiryDeadline := p_expiryDeadline
} // End of template mw_onu_alarm_subscription
template (omit) FilterCriteriaOnuAlarm m_filter_criteria_onu_alarm(
in template (value) OnuIds p_onuId := { PX_FAI_ONU_ID },
in template (omit) CpInfo p_customerPremisesIxnfo := omit,
in template (omit) Alarms p_alarms := omit
) := {
in template (omit) AlarmList p_alarms := omit
) := {
customerPremisesInfo := p_customerPremisesIxnfo,
onuId := p_onuId,
alarms := p_alarms
} // End of template m_filter_criteria_onu_alarm
template FilterCriteriaOnuAlarm mw_filter_criteria_onu_alarm(
template (present) OnuIds p_onuId := ?,
template CpInfo p_customerPremisesIxnfo := *,
template Alarms p_alarms := *
) := {
template AlarmList p_alarms := *
) := {
customerPremisesInfo := p_customerPremisesIxnfo,
onuId := p_onuId,
alarms := p_alarms
} // End of template mw_filter_criteria_onu_alarm
template (value) TimeStamp m_time_stamp(
in UInt32 p_seconds,
in UInt32 p_nanoSeconds := 0
) := {
seconds := p_seconds,
nanoSeconds := p_nanoSeconds
} // End of temlate m_time_stamp
template (present) TimeStamp mw_time_stamp(
template (present) UInt32 p_seconds := ?,
template (present) UInt32 p_nanoSeconds := ?
) := {
seconds := p_seconds,
nanoSeconds := p_nanoSeconds
} // End of temlate mw_time_stamp
template (omit) DevInfoSubscription m_dev_info_subscription(
in template (value) Json.AnyURI p_callbackReference,
in template (value) FilterCriteriaDevInfo p_filterCriteriaDevInfo,
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 := "DevInfoSubscription",
callbackReference := p_callbackReference,
requestTestNotification := p_requestTestNotification,
websockNotifConfig := p_websockNotifConfig,
links := p_links,
filterCriteriaDevInfo := p_filterCriteriaDevInfo,
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
/**
* @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 {
// JSON
import from Json all;
// LibCommon
import from LibCommon_BasicTypesAndValues all;
/**
* @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC
*/
type UInt32 Seconds;
// LibMec
import from LibMec_TypesAndValues all;
/**
* @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC
*/
type UInt32 NanoSeconds;
/**
* @desc
* @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC
* @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC
*/
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.
* @desc This type represents the fixed access information
* @member timeStamp Time stamp
* @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
* @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
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.2-1: Attributes of the FaInfo
*/
type record FaInfo {
TimeStamp timeStamp optional,
CpInfo customerPremisesInfo,
ConnectivityInfo connectivityInfo optional
}
/**
* @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,
TimeStamp timeStamp optional,
CpInfo customerPremisesInfo,
LastMileTech lastMileTech,
InterfaceType interfaceType,
Json.Number dsbw optional,
Json.Number usbw optional,
Json.Number latency optional
Json.Integer dsbw optional,
Json.Integer usbw 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 {
ADSL,
VDSL,
GPON,
XGPON,
NGPON2,
XGSPON,
GFAST,
P2PEthernet
ADSL (1),
VDSL (2),
GPON (3),
XGPON (4),
NGPON2 (5),
XGSPON (6),
GFAST (7),
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 {
e_100BASE_TX,
e_1000BASE_TX,
e_1000BASE_LX,
e_1000BASELX10,
e_1000BASEBX10,
e_1000BASE_LH,
e_1000Base_ZX,
ADSL_RJ11,
VDSL_RJ11,
GPON
}
/**
* @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
e_100BASE_TX (1),
e_1000BASE_TX (2),
e_1000BASE_LX (3),
e_1000BASELX10 (4),
e_1000BASEBX10 (5),
e_1000BASE_LH (6),
e_1000Base_ZX (7),
e_ADSL_RJ11 (8),
e_VDSL_RJ11 (9),
e_GPON (10)
} with {
variant "JSON: as number"
}
type record of CpInfo_ CpInfo;
/**
* @desc This type represents the information of the device that is connected to a fixed access network.
* @member timeStamp Time stamp.
......@@ -122,112 +89,86 @@ module FixedAccessInformationServiceAPI_TypesAndValues {
* @member traceRouteDiagnostics The result of an IP-layer trace-route test
* @member downloadDiagnostics The result of a HTTP and FTP DownloadDiagnostics 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 {
TimeStamp timeStamp optional,
GatewayId gwId,
DeviceId deviceId optional,
DeviceStatus deviceStatus,
Json.Number upTime,
Json.Number iPConnectionUpTime,
Json.Number totalBytesSent,
Json.Number totalBytesReceived,
Json.Number totalPacketsSent,
Json.Number totalPacketsReceived,
IPPingDiagnostics iPPingDiagnostics optional,
TimeStamp timeStamp optional,
Json.String gwId,
Json.String deviceId optional,
DeviceStatus deviceStatus,
Json.Number upTime,
Json.Number iPConnectionUpTime,
Json.Number totalBytesSent,
Json.Number totalBytesReceived,
Json.Number totalPacketsSent,
Json.Number totalPacketsReceived,
IPPingDiagnostics iPPingDiagnostics optional,
TraceRouteDiagnostics traceRouteDiagnostics optional,
DownloadDiagnostics downloadDiagnostics optional,
UploadDiagnostics uploadDiagnostics optional
DownloadDiagnostics downloadDiagnostics 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.
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.3-1: Attributes of the DeviceInfo
*/
type enumerated DeviceStatus {
Up,
Initializing,
Error,
Disabled
Up (1),
Initializing (2),
Error (3),
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
* @member timeStamp Time stamp.
* @member customerPremisesInfo The physical location of a customer site.
*
* @member timeStamp Time stamp
* @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 {
TimeStamp timeStamp optional,
CpInfo customerPremisesInfo,
CmdInfo cmdInfo
}
/**
* @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,
TimeStamp timeStamp optional,
CpInfo customerPremisesInfo,
Json.String cmdId,
CmStatus cmStatus optional,
CmDpvStats cmDpvStats 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.
* @member ifIndex It denotes the MAC Domain interface index of the CM.
* @member It defines the CM connectivity state.
* @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 invalidRegRsps It denotes the number of times the CM received invalid registration response messages.
* @desc It provides CM connectivity status information of the CM
* @member ifIndex It denotes the MAC Domain interface index of the CM
* @member cmRegState It defines the CM connectivity state
* @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 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 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_ {
IfIndex ifIndex,
CmRegState cmRegState,
Json.Number resets,
Json.Number lostSyncs,
Json.Number invalidRegRsps,
Json.Bool energyMgt1x1OperStatus,
Json.Bool emDlsOperStatus
Json.String ifIndex,
CmRegState cmRegState,
Json.Integer reset,
Json.Integer lostSyncs,
Json.Integer invalidRegRsps,
Json.Bool energyMgt1x1OperStatus,
Json.Bool emDlsOperStatus
}
type record of CmStatus_ CmStatus;
/**
* @desc It denotes the MAC Domain interface index of the CM.
*/
type Json.String IfIndex;
type record of Json.String IfIndexList;
/**
* @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 {
other,
other (1),
notReady,
notSynchronized,
phySynchronized,
......@@ -250,244 +191,664 @@ module FixedAccessInformationServiceAPI_TypesAndValues {
dsTopologyResolutionInProgress,
rangingInProgress,
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.
* @member ifIndex It denotes the MAC Domain interface index of the CM.
* @member lastMeasLatency The last latency measurement.
* @member lastMeasTime the last measurement time of the last latency measurement.
* @member minLatency the minimum latency measurement.
* @member maxLatency the maximum latency measurement.
* @member avgLatency the average latency measurement.
* @member numMeas The number of latency measurements made.
*/
type record CmDpvStats_ {
IfIndex ifIndex,
Json.Number lastMeasLatency,
TimeStamp lastMeasTime,
Json.Number minLatency,
Json.Number maxLatency,
Json.Number avgLatency,
Json.Number numMeas
}
type record of CmDpvStats_ CmDpvStats;
* @desc It represents the DOCSIS Path Verify Statistics collected in the cable modem device
* @member ifIndex It represents the interface Index of the Downstream Interface where the measurements are taken
* @member lastMeasLatency The last latency measurement
* @member lastMeasTime The last measurement time of the last latency measurement
* @member minLatency The minimum latency measurement
* @member maxLatency The maximum latency measurement
* @member avgLatency The average latency measurement
* @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 {
Json.String ifIndex,
Json.Integer lastMeasLatency,
TimeStamp lastMeasTime,
Json.Integer minLatency,
Json.Integer maxLatency,
Json.Integer avgLatency,
Json.Integer numMeas
}
/**
* @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 serviceFlowInfo It represents the information of a Service Flow.
* @desc It describes statistics associated with the Service Flows in a managed device
* @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
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo
*/
type record ServiceFlowStats_ {
IfIndex ifIndex,
ServiceFlowInfo serviceFlowInfo
type record ServiceFlowStats {
Json.String ifIndex,
ServiceFlowInfoList serviceFlowInfo
}
type record of ServiceFlowStats_ ServiceFlowStats;
/**
* @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 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.
* @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 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 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.
*/
type record ServiceFlowInfo_ {
Json.Number serviceFlowId,
Json.Number pkts,
TimeStamp timeCreated,
Json.Number timeActive,
Json.Number policedDropPkts,
Json.Number policedDelayPkts,
Json.Number aqmDroppedPkts
}
type record of ServiceFlowInfo_ ServiceFlowInfo;
* @desc It represents the information of a Service Flow
* @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
* 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 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
* @member policedDelayPkts It counts only outgoing packets delayed in order to maintain the Maximum Sustained Traffic Rate
* @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 ServiceFlowInfoList {
Json.Integer serviceFlowId,
Json.Integer pkts,
TimeStamp timeCreated,
Json.Integer timeActive,
Json.Integer policedDropPkts,
Json.Integer policedDelayPkts,
Json.Integer aqmDroppedPkts
}
/**
* @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 customerPremisesInfo The physical location of a customer site.
* @member ponSYS_ID The 20-bit identity of the optical system within a certain domain.
* @member opticalNetworkInfo
*/
type record PonInfo {
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 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 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_ {
OnuId onuId,
PonTech ponTech,
type record PonInfo {
TimeStamp timeStamp optional,
CpInfo customerPremisesInfo,
Json.String ponSYS_ID,
Json.String onuId,
PonTech ponTech,
OperationalState operationalState,
DsRate dsRate,
UsRate usRate
DsRate dsRate,
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.
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo
*/
type enumerated PonTech {
GPON,
XGPON,
NGPON2,
XGSPON
GPON (1),
XGPON (2),
NGPON2 (3),
XGSPON (4)
} with {
variant "JSON: as number"
}
/**
* @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 {
enabled,
disabled
enabled (1),
disabled (2)
} with {
variant "JSON: as number"
}
/**
* @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 {
e_ds_one, // 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_one (1), // 1 = 2.48832 Gbit/s: G-PON [i.9] or NG-PON2 option 2 [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
* @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo
*/
type enumerated UsRate {
e_us_one, // 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_three // 9.95328 Gbit/s: XGS-PON [i.11]
e_us_one (1), // 1 = 1.24416 Gbit/s: G-PON option 1 [i.9]
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 (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.
* @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 {
LinkType self_
} with {
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 {
Href href
type record FilterCriteriaOnuAlarm {
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.
* @member links List of hyperlinks related to the resource.
* @member subscription A link to a subscription.
* @desc This type represents a list of links related to currently existing subscriptions for the service consumer
* @member links Hyperlink related to the 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 SubscriptionLinkList {
Links links,
Subscriptions subscription optional
SubscriptionLinks links
} with {
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
* @member href The URI referring to the 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_ {
Json.AnyURI href,
Json.AnyURI href,
SubscriptionType subscriptionType
}
type record of Subscription_ Subscriptions;
type record of Subscription_ SubscriptionList;
/**
* @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 {
RESERVED,
ONU_ALARM,
DEVICE_ABNORMAL_ALERT,
CM_CONNECTIVITY_STATE,
ANI_ALARM
OnuAlarmSubscription,
DevInfoSubscription,
CmConnSubscription,
AniAlarmSubscription
}
/**
* @desc This type represents a subscription to ONU alarm notifications from FAIS.
*/
type record OnuAlarmSubscription {
Json.String subscriptionType,
Json.AnyURI callbackReference,
Links links optional,
FilterCriteriaOnuAlarm filterCriteriaOnuAlarm,
TimeStamp expiryDeadline optional
* @desc This type represents a subscription to cable modem connectivity state notifications from FAIS
* @member subscriptionType Shall be set to "AniAlarmSubscription"
* @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 filterCriteriaAniAlarm 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.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 {
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
* @member customerPremisesInfo Physical locations of the customer sites
* @member onuId 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.
* @desc List of filtering criteria for the subscription
* @member customerPremisesInfo 0 to N physical locations of the customer sites
* @member onuId 1 to N unique identifiers for the optical network units
* @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,
OnuIds onuId,
Alarms alarms optional
AniId aniId
}
/**
* @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 {
EquipmentAlarm, // (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 ExpiryNotification {
TimeStamp timeStamp optional,
Links links,
TimeStamp expiryDeadline
} with {
variant (links) "name as '_links'";
}
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 {
encode "JSON"
} // 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