From b82f63ae8c9b35882731836922aaae0302cb18a0 Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Wed, 22 Jan 2025 10:51:54 +0100 Subject: [PATCH 01/15] Initial API proposal --- code/API_definitions/dn-accesses.yaml | 410 +++++++++++++++++ code/API_definitions/dn-networks.yaml | 632 ++++++++++++++++++++++++++ code/API_definitions/dn-profiles.yaml | 311 +++++++++++++ 3 files changed, 1353 insertions(+) create mode 100644 code/API_definitions/dn-accesses.yaml create mode 100644 code/API_definitions/dn-networks.yaml create mode 100644 code/API_definitions/dn-profiles.yaml diff --git a/code/API_definitions/dn-accesses.yaml b/code/API_definitions/dn-accesses.yaml new file mode 100644 index 0000000..4e684b6 --- /dev/null +++ b/code/API_definitions/dn-accesses.yaml @@ -0,0 +1,410 @@ +openapi: 3.0.3 +info: + title: Dedicated Network - Network Accesses API + version: 0.0.1 + x-camara-commonalities: 0.4.0 +servers: + - url: "{apiRoot}/dedicated-network-accesses/v0" + variables: + apiRoot: + default: http://localhost:9091 + description: API root, defined by the service provider, e.g. `api.example.com` or `api.example.com/somepath` +tags: + - name: Accesses + description: Manage accesses of devices for a dedicated network +paths: + + /accesses: + get: + tags: + - Accesses + summary: Get a list of device accesses to dedicated networks, optionally filtered for a given device and/or for a given dedicated network + operationId: listNetworkAccesses + parameters: + - name: networkId + in: query + description: Dedicated network id + schema: + $ref: 'dn-networks.yaml#/components/schemas/NetworkId' + - $ref: "#/components/parameters/x-device" + - $ref: "#/components/parameters/x-correlator" + responses: + '200': + description: List of existing device accesses to dedicated networks, optionally filtered for a given device and/or for a dedicated network (the list can be empty) + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/NetworkAccessInfo' + "400": + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "404": + $ref: "#/components/responses/Generic404" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + post: + tags: + - Accesses + summary: Create a device access to a dedicated network with given configuration + operationId: createNetworkAccess + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateNetworkAccess' + responses: + '201': + description: Successful creation of network access for a device + content: + application/json: + schema: + $ref: '#/components/schemas/NetworkAccessInfo' + headers: + Location: + description: 'URL including the resource identifier of the newly created network access.' + required: true + schema: + type: string + '400': + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "404": + $ref: "#/components/responses/Generic404" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + + /accesses/{accessId}: + get: + tags: + - Accesses + summary: Get a device access to the dedicated network and its configuration + operationId: readNetworkAccess + parameters: + - name: accessId + in: path + required: true + schema: + $ref: "#/components/schemas/AccessId" + - $ref: "#/components/parameters/x-correlator" + responses: + '200': + description: A device access to the dedicated network with configuration + content: + application/json: + schema: + $ref: '#/components/schemas/NetworkAccessInfo' + '400': + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "404": + $ref: "#/components/responses/Generic404" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + + delete: + tags: + - Accesses + summary: Delete a device access to the dedicated network + operationId: deleteNetworkAccess + parameters: + - name: accessId + in: path + required: true + schema: + $ref: "#/components/schemas/AccessId" + - $ref: "#/components/parameters/x-correlator" + responses: + '204': + description: Successful deletion of a device access + '400': + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "404": + $ref: "#/components/responses/Generic404" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + +components: + + parameters: + x-correlator: + name: x-correlator + in: header + description: Correlation id for the different services + schema: + type: string + x-device: + name: x-device + in: header + description: Device object represented in a header + schema: + $ref: "#/components/headers/x-device" + example: 'phonenumber="+123456789"' + + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string + + x-device: + description: | + Device object represented in a header. + It is serialized according to RFC 8941 as a structured field value where + the Device object is a dictionary, with the following additonal provisions: + - property names are changed to lower case to comply with the RFC + - serializing property values must comply with the RFC depending on the type, and in particular: + - if the property value is a string which contains only ASCII characters, the string can be serialized as String, + as per section 3.3.3 of the RFC + - if the property value is a string and contains non-ASCII characters, the string must be serialized as Byte Sequence using UTF-8 encoding, + as per section 3.3.5 of the RFC + content: + text/plain: + schema: + $ref: "#/components/schemas/Device" + + schemas: + AccessId: + description: Network access id in UUID format + type: string + format: uuid + + BaseNetworkAccessInfo: + description: Common attributes of a device access to a dedicated network + type: object + properties: + networkId: + description: Reference to the dedicated network + $ref: "dn-networks.yaml#/components/schemas/NetworkId" + device: + description: Reference to the subscription of the device + $ref: "#/components/schemas/Device" + qosProfiles: + description: (Optional) List of supported QOS profiles usable for the device. When absent, all QosProfiles of the Network are supported. Only a subset of the QOS profiles of the network is allowed + type: array + items: + type: string + minItems: 1 + defaultQosProfile: + description: (Optional) The default QOS profile of a device access. When absent, the defaultQosProfile of the Network is used + type: string + required: + - networkId + - device + + CreateNetworkAccess: + description: Attributes required to create a dedicated network access for a device. + # NOTE this design prepares for adding request specific attributes later + allOf: + - $ref: "#/components/schemas/BaseNetworkAccessInfo" + + NetworkAccessInfo: + description: Inforamtion about a dedicated network access for a device + allOf: + - $ref: "#/components/schemas/BaseNetworkAccessInfo" + - type: object + properties: + id: + description: Access ID in UUID format + $ref: "#/components/schemas/AccessId" + required: + - id + + Device: + description: | + End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators. + The developer can choose to provide the below specified device identifiers: + * `phoneNumber` + * `networkAccessIdentifier` + NOTE1: the network operator might support only a subset of these options. The API invoker can provide multiple identifiers to be compatible across different network operators. In this case the identifiers MUST belong to the same device. + NOTE2: for the Commonalities release v0.4, we are enforcing that the networkAccessIdentifier is only part of the schema for future-proofing, and CAMARA does not currently allow its use. After the CAMARA meta-release work is concluded and the relevant issues are resolved, its use will need to be explicitly documented in the guidelines. + type: object + properties: + phoneNumber: + $ref: "#/components/schemas/PhoneNumber" + networkAccessIdentifier: + $ref: "#/components/schemas/NetworkAccessIdentifier" + minProperties: 1 + + PhoneNumber: + description: A public identifier addressing a telephone subscription. In mobile networks it corresponds to the MSISDN (Mobile Station International Subscriber Directory Number). In order to be globally unique it has to be formatted in international format, according to E.164 standard, prefixed with '+'. + type: string + pattern: '^\+[1-9][0-9]{4,14}$' + example: "+123456789" + + NetworkAccessIdentifier: + description: A public identifier addressing a subscription in a mobile network. In 3GPP terminology, it corresponds to the GPSI formatted with the External Identifier ({Local Identifier}@{Domain Identifier}). Unlike the telephone number, the network access identifier is not subjected to portability ruling in force, and is individually managed by each operator. + type: string + example: "123456789@domain.com" + + ErrorInfo: + description: Common schema for errors + type: object + properties: + status: + type: integer + description: HTTP status code returned along with this error response + code: + type: string + description: Code given to this error + message: + type: string + description: Detailed error description + required: + - status + - code + - message + + responses: + Generic400: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_400_INVALID_ARGUMENT: + description: Invalid Argument. Generic Syntax Exception + value: + status: 400 + code: INVALID_ARGUMENT + message: Client specified an invalid argument, request body or query param. + GENERIC_400_OUT_OF_RANGE: + description: Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested + value: + status: 400 + code: OUT_OF_RANGE + message: Client specified an invalid range. + + Generic401: + description: Unauthorized + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_401_UNAUTHENTICATED: + description: Request cannot be authenticated + value: + status: 401 + code: UNAUTHENTICATED + message: Request not authenticated due to missing, invalid, or expired credentials. + GENERIC_401_AUTHENTICATION_REQUIRED: + description: New authentication is needed, authentication is no longer valid + value: + status: 401 + code: AUTHENTICATION_REQUIRED + message: New authentication is required. + + Generic403: + description: Forbidden + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_403_PERMISSION_DENIED: + description: Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security + value: + status: 403 + code: PERMISSION_DENIED + message: Client does not have sufficient permissions to perform this action. + GENERIC_403_INVALID_TOKEN_CONTEXT: + description: Reflect some inconsistency between information in some field of the API and the related OAuth2 Token + value: + status: 403 + code: INVALID_TOKEN_CONTEXT + message: "{{field}} is not consistent with access token." + + Generic404: + description: Not found + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_404_NOT_FOUND: + description: Resource is not found + value: + status: 404 + code: NOT_FOUND + message: The specified resource is not found. + + Generic410: + description: Gone + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_410_GONE: + description: Use in notifications flow to allow API Consumer to indicate that its callback is no longer available + value: + status: 410 + code: GONE + message: Access to the target resource is no longer available. + + Generic500: + description: Internal server error + headers: + x-correlator: + $ref: '#/components/headers/x-correlator' + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + example: + status: 500 + code: INTERNAL + message: "Internal server error: ..." + + Generic503: + description: Service Unavailable + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_503_UNAVAILABLE: + description: Service is not available. Temporary situation usually related to maintenance process in the server side + value: + status: 503 + code: UNAVAILABLE + message: Service Unavailable. diff --git a/code/API_definitions/dn-networks.yaml b/code/API_definitions/dn-networks.yaml new file mode 100644 index 0000000..706e013 --- /dev/null +++ b/code/API_definitions/dn-networks.yaml @@ -0,0 +1,632 @@ +openapi: 3.0.3 +info: + title: Dedicated Network - Networks API + version: 0.0.1 + x-camara-commonalities: 0.4.0 +servers: + - url: "{apiRoot}/dedicated-network/v0" + variables: + apiRoot: + default: http://localhost:9091 + description: API root, defined by the service provider, e.g. `api.example.com` or `api.example.com/somepath` +tags: + - name: Networks + description: Manage a dedicated network +paths: + /networks: + get: + tags: + - Networks + summary: Get a list of dedicated networks + operationId: listNetworks + parameters: + - $ref: "#/components/parameters/x-correlator" + responses: + '200': + description: List of dedicated networks (the list can be empty) + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/NetworkInfo' + "400": + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "404": + $ref: "#/components/responses/Generic404" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + post: + tags: + - Networks + summary: Request to create a dedicated network + operationId: createNetwork + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CreateNetwork' + parameters: + - $ref: "#/components/parameters/x-correlator" + callbacks: + notifications: + "{$request.body#/sink}": + post: + tags: + - Network status callback + summary: "Network status notifications callback" + description: | + Important: this endpoint is to be implemented by the API consumer. + It will be called upon change of the network request status. + Currently only NETWORK_STATUS_CHANGED event is defined. + operationId: postNotification + parameters: + - $ref: "#/components/parameters/x-correlator" + requestBody: + required: true + content: + application/cloudevents+json: + schema: + $ref: "#/components/schemas/CloudEvent" + examples: + NETWORK_STATUS_CHANGED_EXAMPLE: + $ref: "#/components/examples/NETWORK_STATUS_CHANGED_EXAMPLE" + responses: + "204": + description: Successful notification + headers: + x-correlator: + $ref: '#/components/headers/x-correlator' + "400": + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "410": + $ref: "#/components/responses/Generic410" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + security: + - {} + - notificationsBearerAuth: [] + responses: + '201': + description: Reception acknowlegement a dedicated network request + content: + application/json: + schema: + $ref: '#/components/schemas/NetworkInfo' + headers: + Location: + description: 'URL including the resource identifier of the newly created dedicated network.' + required: true + schema: + type: string + format: uri + '400': + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "404": + $ref: "#/components/responses/Generic404" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + + /networks/{networkId}: + get: + tags: + - Networks + summary: Get the current information about a dedicated network + operationId: readNetwork + parameters: + - name: networkId + in: path + required: true + schema: + $ref: "#/components/schemas/NetworkId" + - $ref: "#/components/parameters/x-correlator" + responses: + '200': + description: Current dedicated network information + content: + application/json: + schema: + $ref: '#/components/schemas/NetworkInfo' + '400': + $ref: "#/components/responses/Generic400" + '404': + $ref: "#/components/responses/Generic404" + delete: + tags: + - Networks + summary: Destroy a dedicated network + operationId: deleteNetwork + parameters: + - name: networkId + in: path + required: true + schema: + $ref: "#/components/schemas/NetworkId" + - $ref: "#/components/parameters/x-correlator" + responses: + '204': + description: Successful deletion of a dedicated network + "400": + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "404": + $ref: "#/components/responses/Generic404" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + +components: + securitySchemes: + notificationsBearerAuth: + description: Bearer authentication for notifications + type: http + scheme: bearer + bearerFormat: "{$request.body#sinkCredential.credentialType}" + + parameters: + x-correlator: + name: x-correlator + in: header + description: Correlation id for the different services + schema: + type: string + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string + + schemas: + NetworkId: + description: Network id in UUID format + type: string + format: uuid + + BaseNetworkInfo: + description: Common attributes of a dedicated network + type: object + properties: + profileId: + description: Profile id for the dedicated network + $ref: 'dn-profiles.yaml#/components/schemas/NetworkProfileId' + serviceTime: + description: Time during which the dedicated network is to be available + $ref: '#/components/schemas/ServiceTime' + serviceArea: + description: Geografical area within which the service of the dedicated network is to be available + $ref: '#/components/schemas/Area' + sink: + description: Notification sink for sending notifications + type: string + format: uri + sinkCredential: + description: Sink credentials + $ref: '#/components/schemas/SinkCredential' + required: + - profileId + - serviceTime + - serviceArea + + NetworkInfo: + description: Current dedicated network information + allOf: + - $ref: "#/components/schemas/BaseNetworkInfo" + - type: object + properties: + id: + description: Network ID in UUID format + $ref: '#/components/schemas/NetworkId' + status: + description: Current status of the dedicated network + $ref: '#/components/schemas/NetworkStatus' + required: + - id + - status + + CreateNetwork: + description: Attributes required to create a dedicated network + # NOTE this design prepares for adding request specific attributes later + allOf: + - $ref: "#/components/schemas/BaseNetworkInfo" + + NetworkStatus: + description: | + The current status of the requested network. The status can be one of the following: + * `REQUESTED` - The DN is requested, but not approved. Possible transitions to RESERVED, ACTIVATED and TERMINATED states + * `RESERVED` - Request is accepted by the CSP (CSP has committed the requested resources), but the Network cannot be used (outside of requested time-window) + * `ACTIVATED` - Network turns from reserved into Activated. Now, devices with access can use the network. Possible transitions to RESERVED or TERMINATED states + * `TERMINATED` - The Network resource is used and up for deletion. The API does not allow any action (except delete). + + type: string + enum: + - REQUESTED + - RESERVED + - ACTIVATED + - TERMINATED + + CloudEvent: + description: Event compliant with the CloudEvents specification + required: + - id + - source + - specversion + - type + - time + properties: + id: + description: Identifier of this event, that must be unique in the source context. + type: string + source: + description: Identifies the context in which an event happened in the specific Provider Implementation. + type: string + format: uri-reference + type: + description: The type of the event. + type: string + enum: + - "org.camaraproject.dedicated-networks.v0.network-status-changed" + specversion: + description: Version of the specification to which this event conforms (must be 1.0 if it conforms to cloudevents 1.0.2 version) + type: string + enum: + - '1.0' + datacontenttype: + description: 'media-type that describes the event payload encoding, must be "application/json" for CAMARA APIs' + type: string + enum: + - 'application/json' + data: + description: Event notification details payload, which depends on the event type + type: object + time: + description: | + Timestamp of when the occurrence happened. It must follow RFC 3339 + type: string + format: date-time + discriminator: + propertyName: 'type' + mapping: + org.camaraproject.dedicated-networks.v0.network-status-changed: "#/components/schemas/EventNetworkStatusChanged" + + EventNetworkStatusChanged: + description: Event to notify a network status change + type: object + properties: + data: + type: object + description: Status change details + required: + - networkId + - status + properties: + networkId: + $ref: "#/components/schemas/NetworkId" + status: + $ref: "#/components/schemas/NetworkStatus" + required: + - data + + ServiceTime: + type: object + properties: + start: + type: string + format: date-time + end: + type: string + format: date-time + required: + - start + - end + + Area: + description: Base schema for all areas + type: object + properties: + areaType: + $ref: "#/components/schemas/AreaType" + required: + - areaType + discriminator: + propertyName: areaType + mapping: + AREANAME: "#/components/schemas/AreaName" + + AreaType: + type: string + description: | + Type of this area. + AREANAME - The area is defined by an area name + enum: + - AREANAME + + AreaName: + description: Name of a predefined area + allOf: + - $ref: "#/components/schemas/Area" + - type: object + required: + - areaName + properties: + areaName: + type: string + + SinkCredential: + type: object + properties: + credentialType: + type: string + enum: + - PLAIN + - ACCESSTOKEN + - REFRESHTOKEN + discriminator: + propertyName: credentialType + mapping: + PLAIN: '#/components/schemas/PlainCredential' + ACCESSTOKEN: '#/components/schemas/AccessTokenCredential' + REFRESHTOKEN: '#/components/schemas/RefreshTokenCredential' + required: + - credentialType + + PlainCredential: + type: object + description: A plain credential as a combination of an identifier and a secret. + allOf: + - $ref: '#/components/schemas/SinkCredential' + - type: object + required: + - identifier + - secret + properties: + identifier: + description: The identifier might be an account or username. + type: string + secret: + description: The secret might be a password or passphrase. + type: string + + AccessTokenCredential: + type: object + description: An access token credential. + allOf: + - $ref: '#/components/schemas/SinkCredential' + - type: object + properties: + accessToken: + description: REQUIRED. An access token is a previously acquired token granting access to the target resource. + type: string + accessTokenExpiresUtc: + type: string + format: date-time + description: REQUIRED. An absolute UTC instant at which the token shall be considered expired. + accessTokenType: + description: REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)). For the current version of the API the type MUST be set to `Bearer`. + type: string + enum: + - bearer + required: + - accessToken + - accessTokenExpiresUtc + - accessTokenType + + RefreshTokenCredential: + type: object + description: An access token credential with a refresh token. + allOf: + - $ref: '#/components/schemas/SinkCredential' + - type: object + properties: + accessToken: + description: REQUIRED. An access token is a previously acquired token granting access to the target resource. + type: string + accessTokenExpiresUtc: + type: string + format: date-time + description: REQUIRED. An absolute UTC instant at which the token shall be considered expired. + accessTokenType: + description: REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)). + type: string + enum: + - bearer + refreshToken: + description: REQUIRED. An refresh token credential used to acquire access tokens. + type: string + refreshTokenEndpoint: + type: string + format: uri + description: REQUIRED. A URL at which the refresh token can be traded for an access token. + required: + - accessToken + - accessTokenExpiresUtc + - accessTokenType + - refreshToken + - refreshTokenEndpoint + + ErrorInfo: + description: Common schema for errors + type: object + properties: + status: + type: integer + description: HTTP status code returned along with this error response + code: + type: string + description: Code given to this error + message: + type: string + description: Detailed error description + required: + - status + - code + - message + + responses: + Generic400: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_400_INVALID_ARGUMENT: + description: Invalid Argument. Generic Syntax Exception + value: + status: 400 + code: INVALID_ARGUMENT + message: Client specified an invalid argument, request body or query param. + GENERIC_400_OUT_OF_RANGE: + description: Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested + value: + status: 400 + code: OUT_OF_RANGE + message: Client specified an invalid range. + + Generic401: + description: Unauthorized + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_401_UNAUTHENTICATED: + description: Request cannot be authenticated + value: + status: 401 + code: UNAUTHENTICATED + message: Request not authenticated due to missing, invalid, or expired credentials. + GENERIC_401_AUTHENTICATION_REQUIRED: + description: New authentication is needed, authentication is no longer valid + value: + status: 401 + code: AUTHENTICATION_REQUIRED + message: New authentication is required. + + Generic403: + description: Forbidden + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_403_PERMISSION_DENIED: + description: Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security + value: + status: 403 + code: PERMISSION_DENIED + message: Client does not have sufficient permissions to perform this action. + GENERIC_403_INVALID_TOKEN_CONTEXT: + description: Reflect some inconsistency between information in some field of the API and the related OAuth2 Token + value: + status: 403 + code: INVALID_TOKEN_CONTEXT + message: "{{field}} is not consistent with access token." + + Generic404: + description: Not found + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_404_NOT_FOUND: + description: Resource is not found + value: + status: 404 + code: NOT_FOUND + message: The specified resource is not found. + + Generic410: + description: Gone + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_410_GONE: + description: Use in notifications flow to allow API Consumer to indicate that its callback is no longer available + value: + status: 410 + code: GONE + message: Access to the target resource is no longer available. + + Generic500: + description: Internal server error + headers: + x-correlator: + $ref: '#/components/headers/x-correlator' + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + example: + status: 500 + code: INTERNAL + message: "Internal server error: ..." + + Generic503: + description: Service Unavailable + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_503_UNAVAILABLE: + description: Service is not available. Temporary situation usually related to maintenance process in the server side + value: + status: 503 + code: UNAVAILABLE + message: Service Unavailable. + + examples: + + NETWORK_STATUS_CHANGED_EXAMPLE: + summary: Network status changed + description: Cloud event example for network status change to ACTIVATED + value: + id: 625b2d4b-4da7-4f07-9169-e60ffdf7667c + source: 'https://api.example.com/dedicated-networks/v0/networks/b69e5404-3871-448d-8f9f-11dc5d29a4c8' + specversion: '1.0' + type: "org.camaraproject.dedicated-networks.v0.network-status-changed" + time: '2024-11-29T13:04:00Z' + data: + networkId: 'b69e5404-3871-448d-8f9f-11dc5d29a4c8' + status: 'ACTIVATED' diff --git a/code/API_definitions/dn-profiles.yaml b/code/API_definitions/dn-profiles.yaml new file mode 100644 index 0000000..b597897 --- /dev/null +++ b/code/API_definitions/dn-profiles.yaml @@ -0,0 +1,311 @@ +openapi: 3.0.3 +info: + title: Dedicated Network - Network Profiles API + version: 0.0.1 + x-camara-commonalities: 0.4.0 +servers: + - url: "{apiRoot}/dedicated-network-profiles/v0" + variables: + apiRoot: + default: http://localhost:9091 + description: API root, defined by the service provider, e.g. `api.example.com` or `api.example.com/somepath` +paths: + /profiles: + get: + tags: + - Profiles + summary: Read dedicated network profiles + operationId: readNetworkProfiles + parameters: + - $ref: "#/components/parameters/x-correlator" + responses: + '200': + description: List of available network profiles + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/NetworkProfile' + '400': + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "404": + $ref: "#/components/responses/Generic404" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + /profiles/{profileId}: + get: + tags: + - Profiles + summary: Read a dedicated network profile + operationId: readNetworkProfile + parameters: + - name: profileId + in: path + required: true + schema: + $ref: "#/components/schemas/NetworkProfileId" + - $ref: "#/components/parameters/x-correlator" + responses: + '200': + description: List of available network profiles + content: + application/json: + schema: + $ref: '#/components/schemas/NetworkProfile' + '400': + $ref: "#/components/responses/Generic400" + "401": + $ref: "#/components/responses/Generic401" + "403": + $ref: "#/components/responses/Generic403" + "404": + $ref: "#/components/responses/Generic404" + "500": + $ref: "#/components/responses/Generic500" + "503": + $ref: "#/components/responses/Generic503" + +components: + + parameters: + x-correlator: + name: x-correlator + in: header + description: Correlation id for the different services + schema: + type: string + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string + + schemas: + NetworkProfileId: + type: string + + NetworkProfile: + type: object + properties: + id: + $ref: '#/components/schemas/NetworkProfileId' + maxNumberOfDevices: + type: integer + aggregatedUlThroughput: + description: Aggregated Uplink Throughput for all devices, reserved for the dedicated network + $ref: "#/components/schemas/BitRate" + aggregatedDlThroughput: + description: Aggregated Downlink Throughput for all devices, reserved for the dedicated network + $ref: "#/components/schemas/BitRate" + qosProfiles: + description: Qos Profiles, which are supported by the dedicated network. + type: array + items: + type: string + minItems: 1 + defaultQosProfile: + description: default Qos Profiles of a device access. + type: string + required: + - id + - maxNumberOfDevices + - aggregatedUlThroughput + - aggregatedDlThroughput + - qosProfiles + - defaultQosProfile + + BitRate: + description: Specification of bitrate + type: object + properties: + value: + description: Quantity of bitrate + type: integer + example: 10 + format: int32 + minimum: 1 + maximum: 1024 + unit: + $ref: "#/components/schemas/BitRateUnitEnum" + + BitRateUnitEnum: + description: Units of bitrate + type: string + enum: + - bps + - kbps + - Mbps + - Gbps + - Tbps + + ErrorInfo: + description: Common schema for errors + type: object + properties: + status: + type: integer + description: HTTP status code returned along with this error response + code: + type: string + description: Code given to this error + message: + type: string + description: Detailed error description + required: + - status + - code + - message + + responses: + Generic400: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_400_INVALID_ARGUMENT: + description: Invalid Argument. Generic Syntax Exception + value: + status: 400 + code: INVALID_ARGUMENT + message: Client specified an invalid argument, request body or query param. + GENERIC_400_OUT_OF_RANGE: + description: Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested + value: + status: 400 + code: OUT_OF_RANGE + message: Client specified an invalid range. + + Generic401: + description: Unauthorized + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_401_UNAUTHENTICATED: + description: Request cannot be authenticated + value: + status: 401 + code: UNAUTHENTICATED + message: Request not authenticated due to missing, invalid, or expired credentials. + GENERIC_401_AUTHENTICATION_REQUIRED: + description: New authentication is needed, authentication is no longer valid + value: + status: 401 + code: AUTHENTICATION_REQUIRED + message: New authentication is required. + + Generic403: + description: Forbidden + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_403_PERMISSION_DENIED: + description: Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security + value: + status: 403 + code: PERMISSION_DENIED + message: Client does not have sufficient permissions to perform this action. + GENERIC_403_INVALID_TOKEN_CONTEXT: + description: Reflect some inconsistency between information in some field of the API and the related OAuth2 Token + value: + status: 403 + code: INVALID_TOKEN_CONTEXT + message: "{{field}} is not consistent with access token." + + Generic404: + description: Not found + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_404_NOT_FOUND: + description: Resource is not found + value: + status: 404 + code: NOT_FOUND + message: The specified resource is not found. + + Generic410: + description: Gone + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_410_GONE: + description: Use in notifications flow to allow API Consumer to indicate that its callback is no longer available + value: + status: 410 + code: GONE + message: Access to the target resource is no longer available. + + Generic500: + description: Internal server error + headers: + x-correlator: + $ref: '#/components/headers/x-correlator' + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + example: + status: 500 + code: INTERNAL + message: "Internal server error: ..." + + Generic503: + description: Service Unavailable + headers: + x-correlator: + $ref: "#/components/headers/x-correlator" + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorInfo" + examples: + GENERIC_503_UNAVAILABLE: + description: Service is not available. Temporary situation usually related to maintenance process in the server side + value: + status: 503 + code: UNAVAILABLE + message: Service Unavailable. + + examples: + + NETWORK_STATUS_CHANGED_EXAMPLE: + summary: Network status changed + description: Cloud event example for network status change to ACTIVATED + value: + id: 625b2d4b-4da7-4f07-9169-e60ffdf7667c + source: 'https://api.example.com/dedicated-networks/v0/networks/b69e5404-3871-448d-8f9f-11dc5d29a4c8' + specversion: '1.0' + type: "org.camaraproject.dedicated-networks.v0.network-status-changed" + time: '2024-11-29T13:04:00Z' + data: + networkId: 'b69e5404-3871-448d-8f9f-11dc5d29a4c8' + status: 'ACTIVATED' From d6f520df786e5a7cc7fd639168f6ab2756b1eabb Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Wed, 22 Jan 2025 11:20:41 +0100 Subject: [PATCH 02/15] Correction of Linter error (removal of trailing spaces) --- code/API_definitions/dn-accesses.yaml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/code/API_definitions/dn-accesses.yaml b/code/API_definitions/dn-accesses.yaml index 4e684b6..a91ac24 100644 --- a/code/API_definitions/dn-accesses.yaml +++ b/code/API_definitions/dn-accesses.yaml @@ -16,7 +16,7 @@ paths: /accesses: get: - tags: + tags: - Accesses summary: Get a list of device accesses to dedicated networks, optionally filtered for a given device and/or for a given dedicated network operationId: listNetworkAccesses @@ -25,7 +25,7 @@ paths: in: query description: Dedicated network id schema: - $ref: 'dn-networks.yaml#/components/schemas/NetworkId' + $ref: 'dn-networks.yaml#/components/schemas/NetworkId' - $ref: "#/components/parameters/x-device" - $ref: "#/components/parameters/x-correlator" responses: @@ -35,7 +35,7 @@ paths: application/json: schema: type: array - items: + items: $ref: '#/components/schemas/NetworkAccessInfo' "400": $ref: "#/components/responses/Generic400" @@ -50,7 +50,7 @@ paths: "503": $ref: "#/components/responses/Generic503" post: - tags: + tags: - Accesses summary: Create a device access to a dedicated network with given configuration operationId: createNetworkAccess @@ -87,7 +87,7 @@ paths: /accesses/{accessId}: get: - tags: + tags: - Accesses summary: Get a device access to the dedicated network and its configuration operationId: readNetworkAccess @@ -119,7 +119,7 @@ paths: $ref: "#/components/responses/Generic503" delete: - tags: + tags: - Accesses summary: Delete a device access to the dedicated network operationId: deleteNetworkAccess @@ -170,13 +170,13 @@ components: type: string x-device: - description: | + description: | Device object represented in a header. It is serialized according to RFC 8941 as a structured field value where the Device object is a dictionary, with the following additonal provisions: - property names are changed to lower case to comply with the RFC - serializing property values must comply with the RFC depending on the type, and in particular: - - if the property value is a string which contains only ASCII characters, the string can be serialized as String, + - if the property value is a string which contains only ASCII characters, the string can be serialized as String, as per section 3.3.3 of the RFC - if the property value is a string and contains non-ASCII characters, the string must be serialized as Byte Sequence using UTF-8 encoding, as per section 3.3.5 of the RFC @@ -204,12 +204,12 @@ components: qosProfiles: description: (Optional) List of supported QOS profiles usable for the device. When absent, all QosProfiles of the Network are supported. Only a subset of the QOS profiles of the network is allowed type: array - items: + items: type: string minItems: 1 defaultQosProfile: description: (Optional) The default QOS profile of a device access. When absent, the defaultQosProfile of the Network is used - type: string + type: string required: - networkId - device From 4ab1322bc69bce54f342778634336fc2c5fb5c3a Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Wed, 22 Jan 2025 11:22:39 +0100 Subject: [PATCH 03/15] Removal of accidentally added file (UsageScenarios). --- .../SupportingDocuments/UsageScenarios.md | 60 ------------------- 1 file changed, 60 deletions(-) delete mode 100644 documentation/SupportingDocuments/UsageScenarios.md diff --git a/documentation/SupportingDocuments/UsageScenarios.md b/documentation/SupportingDocuments/UsageScenarios.md deleted file mode 100644 index 047921a..0000000 --- a/documentation/SupportingDocuments/UsageScenarios.md +++ /dev/null @@ -1,60 +0,0 @@ -# Usage Scenarios of the Dedicated Networks API - -## Introduction - -The API was motivated by a number of use cases and usage scenarios during the API presentation ([pdf](https://github.com/camaraproject/APIBacklog/blob/main/documentation/SupportingDocuments/DedicatedNetworks%C2%A0API%C2%A0Introduction.pdf)). A short description is provided in the following. - -## Media Production - -A Media Producer needs a stable connectivity performance for a camera crew with two or more cameras for capturing the live video footage of a press briefing event. Although multiple cameras are actively used during the production, only a single live video stream is produced. The different cameras are positioned to capture different aspects of the press briefing, for example, one camera is capturing all speakers (pan view) and another camera is capturing individual speakers (head and shoulder). The program director selects the camera (called “Live Camera”), which is feeding the outgoing live video stream. For the selection, the video stream of each camera is shown at a production gallery to the production director. - -Each camera should get the needed connectivity performance (in terms of throughput) during the press briefing event. Standby Cameras (cameras, which are only streaming the video to the production gallery) can have a lower quality and lower QOS. The live camera (camera, which is currently feeding the outgoing video stream) should have a higher quality and higher QOS. The used QOS profile is changed dynamically for each camera. - -The media producer is planning the video production of the press briefing before the press briefing event. It should be assumed that the media producer is already an API customer of the Network Provider and has access to the Dedicated Network API. The Network is prepared with the needed configurations, like QOS Profile configurations. - -The media producer decides on the used cameras before the press briefing. It should be assumed that the media producer has access to a pool of cameras, including video encoding and transmission equipment, and only a subset of cameras are used within a certain production event. Each camera is equipped with a matching SIM for the Network Provider. The media producer permits devices (SIMs), which should get access to the capabilities provided by the Dedicated Network. - -## Festival - -The festival organizer is interested in obtaining a dedicated network from a public network provider to connect multiple devices for “running” a festival. Thus, the dedicated network is not intended for the festival audience/visitors. The stable connectivity performance provided by the dedicated network is needed for operating credit card readers (festival payment system) and for the CCTV (security) cameras. The quality of the CCTV cameras can be switched between “matrix view” (low quality for each camera) and “single view” (high quality for the single camera). An according QOS profile is selected as needed. - -The festival organizer is planning the festival, e.g., how many credit card readers & CCTV cameras are needed. The festival organizer knows, “where” (location) and “when” (time) the festival will be and is interested in getting a dedicated network for enabling the festival. - -It should be assumed that the festival organizer is already an API customer of the Network Provider and has access to the Dedicated Network API. Each device is equipped with a matching SIM for the Network Provider. It should be assumed that the festival organizer has more devices/SIMs and only uses a subset of these devices. The festival organizer permits devices (SIMs), which should get access to the capabilities provided by the Dedicated Network. - -## Enterprise - -A dedicated network is used to connect devices (e.g., Laptops) of employees to corporate services. Different connectivity quality (QOS Profiles) is needed, e.g., during a video conference/virtual meeting. During a virtual meeting, one or more meeting participants may decide to switch on the video camera in addition to the audio streams, to improve the meeting quality. - -The Enterprise wants secure access to its corporate services and is planning the needed capacity. The devices are managed by the enterprise IT organization. It should be assumed that the enterprise is already an API customer of the Network Provider, which offers the Dedicated Network API. Each device is equipped with a matching SIM for the Network Provider. The enterprise permits only its own devices (SIMs) to get access to the capabilities provided by the Dedicated Network. - -## Additional Scenarios - -Here are the other Dedicated Network use cases they can be added to the list: - -- **Emergency Services**: Dedicated Networks provide reliable communication and data services for emergency responders, ensuring they have the necessary information and connectivity during critical situations. - -- **Smart Cities**: Dedicated Networks support intelligent transport systems, public safety, and other smart city applications. -The following use cases from 3-12 can be added under the Enterprise section. - -- **Airports**: Dedicated Networks can be used for video surveillance, asset tracking, and real-time data analytics to enhance security and operational efficiency. - -- **Mining**: In the mining industry, Dedicated Networks support remote control of machinery, environmental monitoring, and predictive maintenance. - -- **Manufacturing and Logistics**: Dedicated Networks enable the use of Automated Guided Vehicles (AGVs), robots, and drones for efficient operations. They also support asset tracking and real-time data analytics. - -- **Ports**: Dedicated Networks facilitate the management of logistics and supply chains, ensuring smooth operations and tracking of assets. - -- **Oil & Gas**: Dedicated Networks are used for environmental monitoring, asset tracking, and ensuring safety in operations. - -- **Utilities**: Dedicated Networks support the monitoring and management of utility services, enhancing reliability and efficiency. - -- **Rail**: Dedicated Networks are used for asset tracking, remote control of machinery, and real-time data analytics to improve safety and efficiency in rail operations - -- **Healthcare**: In hospitals, Dedicated Networks ensure secure and reliable connectivity for life-saving systems and medical devices. - -- **Public Venues**: In large public venues like stadiums and convention center's, Dedicated Networks provide predictable connectivity and enhanced security for various applications. - -- **Industrial Applications**: Dedicated Networks support robotics, automated inventory control, and other industrial applications that require constant connectivity and low latency. - -- **Transportation and Logistics**: Dedicated Networks facilitate the tracking and management of assets, ensuring efficient operations in transportation and logistics. \ No newline at end of file From 2c473129cba27de473b11f885bde2e3dec9670d4 Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Wed, 22 Jan 2025 11:34:27 +0100 Subject: [PATCH 04/15] Removing trailing spaces from dn-networks.yaml. --- code/API_definitions/dn-networks.yaml | 30 +++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/code/API_definitions/dn-networks.yaml b/code/API_definitions/dn-networks.yaml index 706e013..141a10d 100644 --- a/code/API_definitions/dn-networks.yaml +++ b/code/API_definitions/dn-networks.yaml @@ -15,7 +15,7 @@ tags: paths: /networks: get: - tags: + tags: - Networks summary: Get a list of dedicated networks operationId: listNetworks @@ -28,7 +28,7 @@ paths: application/json: schema: type: array - items: + items: $ref: '#/components/schemas/NetworkInfo' "400": $ref: "#/components/responses/Generic400" @@ -41,9 +41,9 @@ paths: "500": $ref: "#/components/responses/Generic500" "503": - $ref: "#/components/responses/Generic503" + $ref: "#/components/responses/Generic503" post: - tags: + tags: - Networks summary: Request to create a dedicated network operationId: createNetwork @@ -54,7 +54,7 @@ paths: schema: $ref: '#/components/schemas/CreateNetwork' parameters: - - $ref: "#/components/parameters/x-correlator" + - $ref: "#/components/parameters/x-correlator" callbacks: notifications: "{$request.body#/sink}": @@ -77,7 +77,7 @@ paths: $ref: "#/components/schemas/CloudEvent" examples: NETWORK_STATUS_CHANGED_EXAMPLE: - $ref: "#/components/examples/NETWORK_STATUS_CHANGED_EXAMPLE" + $ref: "#/components/examples/NETWORK_STATUS_CHANGED_EXAMPLE" responses: "204": description: Successful notification @@ -98,7 +98,7 @@ paths: $ref: "#/components/responses/Generic503" security: - {} - - notificationsBearerAuth: [] + - notificationsBearerAuth: [] responses: '201': description: Reception acknowlegement a dedicated network request @@ -124,11 +124,11 @@ paths: "500": $ref: "#/components/responses/Generic500" "503": - $ref: "#/components/responses/Generic503" + $ref: "#/components/responses/Generic503" /networks/{networkId}: get: - tags: + tags: - Networks summary: Get the current information about a dedicated network operationId: readNetwork @@ -151,7 +151,7 @@ paths: '404': $ref: "#/components/responses/Generic404" delete: - tags: + tags: - Networks summary: Destroy a dedicated network operationId: deleteNetwork @@ -219,7 +219,7 @@ components: description: Geografical area within which the service of the dedicated network is to be available $ref: '#/components/schemas/Area' sink: - description: Notification sink for sending notifications + description: Notification sink for sending notifications type: string format: uri sinkCredential: @@ -243,8 +243,8 @@ components: description: Current status of the dedicated network $ref: '#/components/schemas/NetworkStatus' required: - - id - - status + - id + - status CreateNetwork: description: Attributes required to create a dedicated network @@ -258,7 +258,7 @@ components: * `REQUESTED` - The DN is requested, but not approved. Possible transitions to RESERVED, ACTIVATED and TERMINATED states * `RESERVED` - Request is accepted by the CSP (CSP has committed the requested resources), but the Network cannot be used (outside of requested time-window) * `ACTIVATED` - Network turns from reserved into Activated. Now, devices with access can use the network. Possible transitions to RESERVED or TERMINATED states - * `TERMINATED` - The Network resource is used and up for deletion. The API does not allow any action (except delete). + * `TERMINATED` - The Network resource is used and up for deletion. The API does not allow any action (except delete). type: string enum: @@ -371,7 +371,7 @@ components: required: - areaName properties: - areaName: + areaName: type: string SinkCredential: From 2df1afb55c516150079dd83c6fa101a8d10a273b Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Wed, 22 Jan 2025 11:41:06 +0100 Subject: [PATCH 05/15] Correction of linter errors. --- code/API_definitions/dn-accesses.yaml | 3 --- code/API_definitions/dn-networks.yaml | 5 ----- code/API_definitions/dn-profiles.yaml | 2 -- 3 files changed, 10 deletions(-) diff --git a/code/API_definitions/dn-accesses.yaml b/code/API_definitions/dn-accesses.yaml index a91ac24..fe83536 100644 --- a/code/API_definitions/dn-accesses.yaml +++ b/code/API_definitions/dn-accesses.yaml @@ -196,10 +196,8 @@ components: type: object properties: networkId: - description: Reference to the dedicated network $ref: "dn-networks.yaml#/components/schemas/NetworkId" device: - description: Reference to the subscription of the device $ref: "#/components/schemas/Device" qosProfiles: description: (Optional) List of supported QOS profiles usable for the device. When absent, all QosProfiles of the Network are supported. Only a subset of the QOS profiles of the network is allowed @@ -227,7 +225,6 @@ components: - type: object properties: id: - description: Access ID in UUID format $ref: "#/components/schemas/AccessId" required: - id diff --git a/code/API_definitions/dn-networks.yaml b/code/API_definitions/dn-networks.yaml index 141a10d..ccb47e3 100644 --- a/code/API_definitions/dn-networks.yaml +++ b/code/API_definitions/dn-networks.yaml @@ -213,17 +213,14 @@ components: description: Profile id for the dedicated network $ref: 'dn-profiles.yaml#/components/schemas/NetworkProfileId' serviceTime: - description: Time during which the dedicated network is to be available $ref: '#/components/schemas/ServiceTime' serviceArea: - description: Geografical area within which the service of the dedicated network is to be available $ref: '#/components/schemas/Area' sink: description: Notification sink for sending notifications type: string format: uri sinkCredential: - description: Sink credentials $ref: '#/components/schemas/SinkCredential' required: - profileId @@ -237,10 +234,8 @@ components: - type: object properties: id: - description: Network ID in UUID format $ref: '#/components/schemas/NetworkId' status: - description: Current status of the dedicated network $ref: '#/components/schemas/NetworkStatus' required: - id diff --git a/code/API_definitions/dn-profiles.yaml b/code/API_definitions/dn-profiles.yaml index b597897..f59245e 100644 --- a/code/API_definitions/dn-profiles.yaml +++ b/code/API_definitions/dn-profiles.yaml @@ -99,10 +99,8 @@ components: maxNumberOfDevices: type: integer aggregatedUlThroughput: - description: Aggregated Uplink Throughput for all devices, reserved for the dedicated network $ref: "#/components/schemas/BitRate" aggregatedDlThroughput: - description: Aggregated Downlink Throughput for all devices, reserved for the dedicated network $ref: "#/components/schemas/BitRate" qosProfiles: description: Qos Profiles, which are supported by the dedicated network. From 14a75adb1a2bb40bf127637ec274188c72dd0d04 Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Wed, 22 Jan 2025 13:08:56 +0100 Subject: [PATCH 06/15] remaining 'trailing spaces' errors --- code/API_definitions/dn-networks.yaml | 1 - code/API_definitions/dn-profiles.yaml | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/code/API_definitions/dn-networks.yaml b/code/API_definitions/dn-networks.yaml index ccb47e3..945ef1d 100644 --- a/code/API_definitions/dn-networks.yaml +++ b/code/API_definitions/dn-networks.yaml @@ -210,7 +210,6 @@ components: type: object properties: profileId: - description: Profile id for the dedicated network $ref: 'dn-profiles.yaml#/components/schemas/NetworkProfileId' serviceTime: $ref: '#/components/schemas/ServiceTime' diff --git a/code/API_definitions/dn-profiles.yaml b/code/API_definitions/dn-profiles.yaml index f59245e..44c8fca 100644 --- a/code/API_definitions/dn-profiles.yaml +++ b/code/API_definitions/dn-profiles.yaml @@ -12,7 +12,7 @@ servers: paths: /profiles: get: - tags: + tags: - Profiles summary: Read dedicated network profiles operationId: readNetworkProfiles @@ -41,7 +41,7 @@ paths: $ref: "#/components/responses/Generic503" /profiles/{profileId}: get: - tags: + tags: - Profiles summary: Read a dedicated network profile operationId: readNetworkProfile @@ -58,7 +58,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/NetworkProfile' + $ref: '#/components/schemas/NetworkProfile' '400': $ref: "#/components/responses/Generic400" "401": @@ -70,7 +70,7 @@ paths: "500": $ref: "#/components/responses/Generic500" "503": - $ref: "#/components/responses/Generic503" + $ref: "#/components/responses/Generic503" components: @@ -109,7 +109,7 @@ components: type: string minItems: 1 defaultQosProfile: - description: default Qos Profiles of a device access. + description: default Qos Profiles of a device access. type: string required: - id From 44c4dce16913b2bef97865d13949f34642221247 Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Wed, 22 Jan 2025 18:50:03 +0100 Subject: [PATCH 07/15] Renaming yaml files to comply with camara guideline. --- .../{dn-accesses.yaml => dedicated-network-accesses.yaml} | 7 +++++-- .../{dn-profiles.yaml => dedicated-network-profiles.yaml} | 3 +++ .../{dn-networks.yaml => dedicated-network.yaml} | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) rename code/API_definitions/{dn-accesses.yaml => dedicated-network-accesses.yaml} (98%) rename code/API_definitions/{dn-profiles.yaml => dedicated-network-profiles.yaml} (99%) rename code/API_definitions/{dn-networks.yaml => dedicated-network.yaml} (99%) diff --git a/code/API_definitions/dn-accesses.yaml b/code/API_definitions/dedicated-network-accesses.yaml similarity index 98% rename from code/API_definitions/dn-accesses.yaml rename to code/API_definitions/dedicated-network-accesses.yaml index fe83536..f4e4fc9 100644 --- a/code/API_definitions/dn-accesses.yaml +++ b/code/API_definitions/dedicated-network-accesses.yaml @@ -1,6 +1,9 @@ openapi: 3.0.3 info: title: Dedicated Network - Network Accesses API + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html version: 0.0.1 x-camara-commonalities: 0.4.0 servers: @@ -25,7 +28,7 @@ paths: in: query description: Dedicated network id schema: - $ref: 'dn-networks.yaml#/components/schemas/NetworkId' + $ref: 'dedicated-network.yaml#/components/schemas/NetworkId' - $ref: "#/components/parameters/x-device" - $ref: "#/components/parameters/x-correlator" responses: @@ -196,7 +199,7 @@ components: type: object properties: networkId: - $ref: "dn-networks.yaml#/components/schemas/NetworkId" + $ref: "dedicated-network.yaml#/components/schemas/NetworkId" device: $ref: "#/components/schemas/Device" qosProfiles: diff --git a/code/API_definitions/dn-profiles.yaml b/code/API_definitions/dedicated-network-profiles.yaml similarity index 99% rename from code/API_definitions/dn-profiles.yaml rename to code/API_definitions/dedicated-network-profiles.yaml index 44c8fca..897d72f 100644 --- a/code/API_definitions/dn-profiles.yaml +++ b/code/API_definitions/dedicated-network-profiles.yaml @@ -1,6 +1,9 @@ openapi: 3.0.3 info: title: Dedicated Network - Network Profiles API + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html version: 0.0.1 x-camara-commonalities: 0.4.0 servers: diff --git a/code/API_definitions/dn-networks.yaml b/code/API_definitions/dedicated-network.yaml similarity index 99% rename from code/API_definitions/dn-networks.yaml rename to code/API_definitions/dedicated-network.yaml index 945ef1d..3287189 100644 --- a/code/API_definitions/dn-networks.yaml +++ b/code/API_definitions/dedicated-network.yaml @@ -1,6 +1,9 @@ openapi: 3.0.3 info: title: Dedicated Network - Networks API + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html version: 0.0.1 x-camara-commonalities: 0.4.0 servers: @@ -210,7 +213,7 @@ components: type: object properties: profileId: - $ref: 'dn-profiles.yaml#/components/schemas/NetworkProfileId' + $ref: 'dedicated-network-profiles.yaml#/components/schemas/NetworkProfileId' serviceTime: $ref: '#/components/schemas/ServiceTime' serviceArea: From 034944f656b47fa3450e743b466fad45cf281101 Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Fri, 24 Jan 2025 14:40:55 +0100 Subject: [PATCH 08/15] Replacing OAS 3.1.x features with OAS 3.0.3 features. --- code/API_definitions/dedicated-network-accesses.yaml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/code/API_definitions/dedicated-network-accesses.yaml b/code/API_definitions/dedicated-network-accesses.yaml index f4e4fc9..c44d42a 100644 --- a/code/API_definitions/dedicated-network-accesses.yaml +++ b/code/API_definitions/dedicated-network-accesses.yaml @@ -174,7 +174,7 @@ components: x-device: description: | - Device object represented in a header. + Device object (#/components/schemas/Device") represented in a header. It is serialized according to RFC 8941 as a structured field value where the Device object is a dictionary, with the following additonal provisions: - property names are changed to lower case to comply with the RFC @@ -183,10 +183,8 @@ components: as per section 3.3.3 of the RFC - if the property value is a string and contains non-ASCII characters, the string must be serialized as Byte Sequence using UTF-8 encoding, as per section 3.3.5 of the RFC - content: - text/plain: - schema: - $ref: "#/components/schemas/Device" + schema: + type: string schemas: AccessId: From cd7e91309210c8ab5bd0afdb0fee96ca415dd780 Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Fri, 24 Jan 2025 14:56:21 +0100 Subject: [PATCH 09/15] Removing columns from descriptions --- code/API_definitions/dedicated-network-accesses.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/API_definitions/dedicated-network-accesses.yaml b/code/API_definitions/dedicated-network-accesses.yaml index c44d42a..0d0363e 100644 --- a/code/API_definitions/dedicated-network-accesses.yaml +++ b/code/API_definitions/dedicated-network-accesses.yaml @@ -176,9 +176,9 @@ components: description: | Device object (#/components/schemas/Device") represented in a header. It is serialized according to RFC 8941 as a structured field value where - the Device object is a dictionary, with the following additonal provisions: + the Device object is a dictionary, with the following additonal provisions - property names are changed to lower case to comply with the RFC - - serializing property values must comply with the RFC depending on the type, and in particular: + - serializing property values must comply with the RFC depending on the type, and in particular - if the property value is a string which contains only ASCII characters, the string can be serialized as String, as per section 3.3.3 of the RFC - if the property value is a string and contains non-ASCII characters, the string must be serialized as Byte Sequence using UTF-8 encoding, From 6adfd854e474727f56ba12eb8217e8ec18be2fa5 Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Fri, 24 Jan 2025 15:01:37 +0100 Subject: [PATCH 10/15] Merging definition from x-devices in headers section into x-device parameters definition. --- .../dedicated-network-accesses.yaml | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/code/API_definitions/dedicated-network-accesses.yaml b/code/API_definitions/dedicated-network-accesses.yaml index 0d0363e..4145c9e 100644 --- a/code/API_definitions/dedicated-network-accesses.yaml +++ b/code/API_definitions/dedicated-network-accesses.yaml @@ -162,18 +162,6 @@ components: name: x-device in: header description: Device object represented in a header - schema: - $ref: "#/components/headers/x-device" - example: 'phonenumber="+123456789"' - - headers: - x-correlator: - description: Correlation id for the different services - schema: - type: string - - x-device: - description: | Device object (#/components/schemas/Device") represented in a header. It is serialized according to RFC 8941 as a structured field value where the Device object is a dictionary, with the following additonal provisions @@ -185,6 +173,13 @@ components: as per section 3.3.5 of the RFC schema: type: string + example: 'phonenumber="+123456789"' + + headers: + x-correlator: + description: Correlation id for the different services + schema: + type: string schemas: AccessId: From cc3f36971f94e5a5bd4ee0f35beacb418c724ef2 Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Thu, 30 Jan 2025 14:43:55 +0100 Subject: [PATCH 11/15] Revert "Removal of accidentally added file (UsageScenarios)." This reverts commit 4ab1322bc69bce54f342778634336fc2c5fb5c3a. --- .../SupportingDocuments/UsageScenarios.md | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 documentation/SupportingDocuments/UsageScenarios.md diff --git a/documentation/SupportingDocuments/UsageScenarios.md b/documentation/SupportingDocuments/UsageScenarios.md new file mode 100644 index 0000000..047921a --- /dev/null +++ b/documentation/SupportingDocuments/UsageScenarios.md @@ -0,0 +1,60 @@ +# Usage Scenarios of the Dedicated Networks API + +## Introduction + +The API was motivated by a number of use cases and usage scenarios during the API presentation ([pdf](https://github.com/camaraproject/APIBacklog/blob/main/documentation/SupportingDocuments/DedicatedNetworks%C2%A0API%C2%A0Introduction.pdf)). A short description is provided in the following. + +## Media Production + +A Media Producer needs a stable connectivity performance for a camera crew with two or more cameras for capturing the live video footage of a press briefing event. Although multiple cameras are actively used during the production, only a single live video stream is produced. The different cameras are positioned to capture different aspects of the press briefing, for example, one camera is capturing all speakers (pan view) and another camera is capturing individual speakers (head and shoulder). The program director selects the camera (called “Live Camera”), which is feeding the outgoing live video stream. For the selection, the video stream of each camera is shown at a production gallery to the production director. + +Each camera should get the needed connectivity performance (in terms of throughput) during the press briefing event. Standby Cameras (cameras, which are only streaming the video to the production gallery) can have a lower quality and lower QOS. The live camera (camera, which is currently feeding the outgoing video stream) should have a higher quality and higher QOS. The used QOS profile is changed dynamically for each camera. + +The media producer is planning the video production of the press briefing before the press briefing event. It should be assumed that the media producer is already an API customer of the Network Provider and has access to the Dedicated Network API. The Network is prepared with the needed configurations, like QOS Profile configurations. + +The media producer decides on the used cameras before the press briefing. It should be assumed that the media producer has access to a pool of cameras, including video encoding and transmission equipment, and only a subset of cameras are used within a certain production event. Each camera is equipped with a matching SIM for the Network Provider. The media producer permits devices (SIMs), which should get access to the capabilities provided by the Dedicated Network. + +## Festival + +The festival organizer is interested in obtaining a dedicated network from a public network provider to connect multiple devices for “running” a festival. Thus, the dedicated network is not intended for the festival audience/visitors. The stable connectivity performance provided by the dedicated network is needed for operating credit card readers (festival payment system) and for the CCTV (security) cameras. The quality of the CCTV cameras can be switched between “matrix view” (low quality for each camera) and “single view” (high quality for the single camera). An according QOS profile is selected as needed. + +The festival organizer is planning the festival, e.g., how many credit card readers & CCTV cameras are needed. The festival organizer knows, “where” (location) and “when” (time) the festival will be and is interested in getting a dedicated network for enabling the festival. + +It should be assumed that the festival organizer is already an API customer of the Network Provider and has access to the Dedicated Network API. Each device is equipped with a matching SIM for the Network Provider. It should be assumed that the festival organizer has more devices/SIMs and only uses a subset of these devices. The festival organizer permits devices (SIMs), which should get access to the capabilities provided by the Dedicated Network. + +## Enterprise + +A dedicated network is used to connect devices (e.g., Laptops) of employees to corporate services. Different connectivity quality (QOS Profiles) is needed, e.g., during a video conference/virtual meeting. During a virtual meeting, one or more meeting participants may decide to switch on the video camera in addition to the audio streams, to improve the meeting quality. + +The Enterprise wants secure access to its corporate services and is planning the needed capacity. The devices are managed by the enterprise IT organization. It should be assumed that the enterprise is already an API customer of the Network Provider, which offers the Dedicated Network API. Each device is equipped with a matching SIM for the Network Provider. The enterprise permits only its own devices (SIMs) to get access to the capabilities provided by the Dedicated Network. + +## Additional Scenarios + +Here are the other Dedicated Network use cases they can be added to the list: + +- **Emergency Services**: Dedicated Networks provide reliable communication and data services for emergency responders, ensuring they have the necessary information and connectivity during critical situations. + +- **Smart Cities**: Dedicated Networks support intelligent transport systems, public safety, and other smart city applications. +The following use cases from 3-12 can be added under the Enterprise section. + +- **Airports**: Dedicated Networks can be used for video surveillance, asset tracking, and real-time data analytics to enhance security and operational efficiency. + +- **Mining**: In the mining industry, Dedicated Networks support remote control of machinery, environmental monitoring, and predictive maintenance. + +- **Manufacturing and Logistics**: Dedicated Networks enable the use of Automated Guided Vehicles (AGVs), robots, and drones for efficient operations. They also support asset tracking and real-time data analytics. + +- **Ports**: Dedicated Networks facilitate the management of logistics and supply chains, ensuring smooth operations and tracking of assets. + +- **Oil & Gas**: Dedicated Networks are used for environmental monitoring, asset tracking, and ensuring safety in operations. + +- **Utilities**: Dedicated Networks support the monitoring and management of utility services, enhancing reliability and efficiency. + +- **Rail**: Dedicated Networks are used for asset tracking, remote control of machinery, and real-time data analytics to improve safety and efficiency in rail operations + +- **Healthcare**: In hospitals, Dedicated Networks ensure secure and reliable connectivity for life-saving systems and medical devices. + +- **Public Venues**: In large public venues like stadiums and convention center's, Dedicated Networks provide predictable connectivity and enhanced security for various applications. + +- **Industrial Applications**: Dedicated Networks support robotics, automated inventory control, and other industrial applications that require constant connectivity and low latency. + +- **Transportation and Logistics**: Dedicated Networks facilitate the tracking and management of assets, ensuring efficient operations in transportation and logistics. \ No newline at end of file From e56f4ebf491993f1d6834fc1cd2f3e791823ad7b Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Thu, 6 Feb 2025 18:59:56 +0100 Subject: [PATCH 12/15] Aligning API versions to CAMARA design guidelines, i.e. 0.0.1 -> wip and /v0 -> /vwip --- code/API_definitions/dedicated-network-accesses.yaml | 4 ++-- code/API_definitions/dedicated-network-profiles.yaml | 4 ++-- code/API_definitions/dedicated-network.yaml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/API_definitions/dedicated-network-accesses.yaml b/code/API_definitions/dedicated-network-accesses.yaml index 4145c9e..c700e6c 100644 --- a/code/API_definitions/dedicated-network-accesses.yaml +++ b/code/API_definitions/dedicated-network-accesses.yaml @@ -4,10 +4,10 @@ info: license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html - version: 0.0.1 + version: wip x-camara-commonalities: 0.4.0 servers: - - url: "{apiRoot}/dedicated-network-accesses/v0" + - url: "{apiRoot}/dedicated-network-accesses/vwip" variables: apiRoot: default: http://localhost:9091 diff --git a/code/API_definitions/dedicated-network-profiles.yaml b/code/API_definitions/dedicated-network-profiles.yaml index 897d72f..095f4d3 100644 --- a/code/API_definitions/dedicated-network-profiles.yaml +++ b/code/API_definitions/dedicated-network-profiles.yaml @@ -4,10 +4,10 @@ info: license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html - version: 0.0.1 + version: wip x-camara-commonalities: 0.4.0 servers: - - url: "{apiRoot}/dedicated-network-profiles/v0" + - url: "{apiRoot}/dedicated-network-profiles/vwip" variables: apiRoot: default: http://localhost:9091 diff --git a/code/API_definitions/dedicated-network.yaml b/code/API_definitions/dedicated-network.yaml index 3287189..43dff1d 100644 --- a/code/API_definitions/dedicated-network.yaml +++ b/code/API_definitions/dedicated-network.yaml @@ -4,10 +4,10 @@ info: license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html - version: 0.0.1 + version: wip x-camara-commonalities: 0.4.0 servers: - - url: "{apiRoot}/dedicated-network/v0" + - url: "{apiRoot}/dedicated-network/vwip" variables: apiRoot: default: http://localhost:9091 From f94d471f9defed73dd306542dd48663a303a0205 Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Tue, 18 Feb 2025 08:26:59 +0100 Subject: [PATCH 13/15] Making yamls compliant to Commonalities 0.5 (Fall-25 Meta Release), providing an initial API description. --- code/API_definitions/dedicated-network-accesses.yaml | 4 +++- code/API_definitions/dedicated-network-profiles.yaml | 4 +++- code/API_definitions/dedicated-network.yaml | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/code/API_definitions/dedicated-network-accesses.yaml b/code/API_definitions/dedicated-network-accesses.yaml index c700e6c..b64ea83 100644 --- a/code/API_definitions/dedicated-network-accesses.yaml +++ b/code/API_definitions/dedicated-network-accesses.yaml @@ -1,11 +1,13 @@ openapi: 3.0.3 info: title: Dedicated Network - Network Accesses API + description: | + This API allows for requesting network access for devices. A device is identified by the CAMARA _device object_, containing either a n MSIDSN or a Network Access Identifier. license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html version: wip - x-camara-commonalities: 0.4.0 + x-camara-commonalities: 0.5 servers: - url: "{apiRoot}/dedicated-network-accesses/vwip" variables: diff --git a/code/API_definitions/dedicated-network-profiles.yaml b/code/API_definitions/dedicated-network-profiles.yaml index 095f4d3..a561ebf 100644 --- a/code/API_definitions/dedicated-network-profiles.yaml +++ b/code/API_definitions/dedicated-network-profiles.yaml @@ -1,11 +1,13 @@ openapi: 3.0.3 info: title: Dedicated Network - Network Profiles API + description: | + This API allows for discovering available network profiles, which are offered by the network provider to be used in conjunction of the Dedicated Network API. Network profiles describe the capabilities and performance targets of a dedicated network. license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html version: wip - x-camara-commonalities: 0.4.0 + x-camara-commonalities: 0.5 servers: - url: "{apiRoot}/dedicated-network-profiles/vwip" variables: diff --git a/code/API_definitions/dedicated-network.yaml b/code/API_definitions/dedicated-network.yaml index 43dff1d..809c2e8 100644 --- a/code/API_definitions/dedicated-network.yaml +++ b/code/API_definitions/dedicated-network.yaml @@ -1,11 +1,13 @@ openapi: 3.0.3 info: title: Dedicated Network - Networks API + description: | + This API allows for requesting a Dedicated Network, which provides a set of capabilities and connectivity performance targets. The Dedicated Network may be requested for a particular geographical location and at a particular time window. Depending on the requested start time for the dedicated network, the network may first enter a _reserved_ state. license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html version: wip - x-camara-commonalities: 0.4.0 + x-camara-commonalities: 0.5 servers: - url: "{apiRoot}/dedicated-network/vwip" variables: From 4372af15236efbd5db7f71c54cba2ea55185e766 Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Tue, 18 Feb 2025 09:52:21 +0100 Subject: [PATCH 14/15] Removing trailing spaces. --- code/API_definitions/dedicated-network-accesses.yaml | 2 +- code/API_definitions/dedicated-network-profiles.yaml | 2 +- code/API_definitions/dedicated-network.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/API_definitions/dedicated-network-accesses.yaml b/code/API_definitions/dedicated-network-accesses.yaml index b64ea83..487e09d 100644 --- a/code/API_definitions/dedicated-network-accesses.yaml +++ b/code/API_definitions/dedicated-network-accesses.yaml @@ -2,7 +2,7 @@ openapi: 3.0.3 info: title: Dedicated Network - Network Accesses API description: | - This API allows for requesting network access for devices. A device is identified by the CAMARA _device object_, containing either a n MSIDSN or a Network Access Identifier. + This API allows for requesting network access for devices. A device is identified by the CAMARA _device object_, containing either a n MSIDSN or a Network Access Identifier. license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html diff --git a/code/API_definitions/dedicated-network-profiles.yaml b/code/API_definitions/dedicated-network-profiles.yaml index a561ebf..aa167f9 100644 --- a/code/API_definitions/dedicated-network-profiles.yaml +++ b/code/API_definitions/dedicated-network-profiles.yaml @@ -2,7 +2,7 @@ openapi: 3.0.3 info: title: Dedicated Network - Network Profiles API description: | - This API allows for discovering available network profiles, which are offered by the network provider to be used in conjunction of the Dedicated Network API. Network profiles describe the capabilities and performance targets of a dedicated network. + This API allows for discovering available network profiles, which are offered by the network provider to be used in conjunction of the Dedicated Network API. Network profiles describe the capabilities and performance targets of a dedicated network. license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html diff --git a/code/API_definitions/dedicated-network.yaml b/code/API_definitions/dedicated-network.yaml index 809c2e8..ec0f6e5 100644 --- a/code/API_definitions/dedicated-network.yaml +++ b/code/API_definitions/dedicated-network.yaml @@ -2,7 +2,7 @@ openapi: 3.0.3 info: title: Dedicated Network - Networks API description: | - This API allows for requesting a Dedicated Network, which provides a set of capabilities and connectivity performance targets. The Dedicated Network may be requested for a particular geographical location and at a particular time window. Depending on the requested start time for the dedicated network, the network may first enter a _reserved_ state. + This API allows for requesting a Dedicated Network, which provides a set of capabilities and connectivity performance targets. The Dedicated Network may be requested for a particular geographical location and at a particular time window. Depending on the requested start time for the dedicated network, the network may first enter a _reserved_ state. license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html From b3b98058bac3add665f11a2cb7b07764391d25a0 Mon Sep 17 00:00:00 2001 From: Thorsten Lohmar <thorsten.lohmar@ericsson.com> Date: Tue, 18 Feb 2025 18:23:53 +0100 Subject: [PATCH 15/15] Correcting a typo --- code/API_definitions/dedicated-network-accesses.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/API_definitions/dedicated-network-accesses.yaml b/code/API_definitions/dedicated-network-accesses.yaml index 487e09d..e4bd43f 100644 --- a/code/API_definitions/dedicated-network-accesses.yaml +++ b/code/API_definitions/dedicated-network-accesses.yaml @@ -2,7 +2,7 @@ openapi: 3.0.3 info: title: Dedicated Network - Network Accesses API description: | - This API allows for requesting network access for devices. A device is identified by the CAMARA _device object_, containing either a n MSIDSN or a Network Access Identifier. + This API allows for requesting network access for devices. A device is identified by the CAMARA _device object_, containing either an MSIDSN or a Network Access Identifier. license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html