1. CCC Subscription Delete Request¶
1.1 CccXappSubscriptionDeleteResponsePublisherPubData¶
The CccXappSubscriptionDeleteResponsePublisherPubData handles the response from the E2 Node when a Cell Configuration and Control (CCC) subscription deletion request is processed.
This response contains details indicating whether the subscription was successfully deleted, or if any errors occurred during the deletion process.
It ensures that the RIC and the xApp maintain synchronization regarding the status of CCC subscription deletions, which is critical for managing cell configurations and resources effectively.
1.2 Examples¶
Info
To receive a CCC Subscription Delete response, the following NATS subject must be used:
e2-t.E2SM-CCC-SUBSCRIPTION-DELETE-RESP
The following Python example demonstrates how to receive a CCC subscription delete response.
Example
Receive CCC Subscription Delete response:
# Add Accelleran xapp library
from xapp_lib import xapp_lib
# Add protobuf definitions
from xapp_lib.proto_pb2.accelleran.e2 import genXappCcc_pb2
# Add function to serialize json dict in protobuf
from google.protobuf.json_format import ParseDict
def e2sm_ccc_subscription_delete_resp(encoded_data):
data = genXappCcc_pb2.CccXappSubscriptionDeleteResponsePublisherPubData()
data.ParseFromString(encoded_data)
return data.BaseSubscriptionDeleteResponseData
msgList = [
("E2SM-CCC-SUBSCRIPTION-DELETE-RESP", e2sm_ccc_subscription_delete_resp),
]
def get_subject_list(req_id, ins_id):
subjects = []
for msg in msgList:
subjects.append(
"e2-t."
+ msg[0]
+ ".RIC_REQUESTOR="
+ str(req_id)
+ ".RIC_INSTANCE="
+ str(ins_id)
)
return subjects
def decoder(subject, encoded_data):
item = [item for item in msgList if item[0] == subject and item[1] is not None]
if not item:
logging.error(f"Subject not supported: {subject}. Cannot decode the message.")
return None
return dict(item)[subject](encoded_data)
def extract_subject(input_string):
components = input_string.split(".")
for component in components:
for subject, _ in msgList:
if subject in component:
return subject
return None
def main():
### Use xApp Builder to create the xApp
builder = xapp_lib.XAppBuilder("../..", absolute=False)
builder.metadata("core/xapp_metadata.json")
builder.endpoints("config/xapp_endpoints.json")
builder.config("config/xapp_config.json")
builder.readme("README.md")
xapp = builder.build()
# Get xApp request id
req_id = xapp.id
# Get xApp instance id
node_a_ins_id = xapp.transaction_id_gen.get()
# Listen for E2 CCC Subscription Delete responses
e2_node_a_subjects = get_subject_list(req_id, node_a_ins_id)
xapp.nats(endpoint="NATS_URL_5G").subscribe(e2_node_a_subjects)
# Reception of E2 CCC subscription delete response
for _ in range(10):
data = xapp.nats().recv_data()
subject = extract_subject(data[0])
decoded_resp = decoder(subject, data[1])
logging.info("Received message: {data}".format(data=decoded_resp))
1.3 Schema¶
This section provides the JSON schema for the E2 CCC Subscription Delete Response, which outlines the expected structure and data types.
E2 CCC Subscription Delete Response schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"$ref": "#/definitions/CccXappSubscriptionDeleteResponsePublisherPubData",
"definitions": {
"CccXappSubscriptionDeleteResponsePublisherPubData": {
"properties": {
"BaseSubscriptionDeleteResponseData": {
"$ref": "#/definitions/PBE2apMsgData.BaseSubscriptionDeleteResponseData",
"additionalProperties": true,
"description": "See BaseSubscriptionDeleteResponseData for detailed description of this field"
},
"tlpublishTime": {
"type": "string",
"description": "Contains the time of publishing in EPOCH milliseconds"
},
"spanContext": {
"type": "string",
"description": "Contains an opentracing spancontext",
"format": "binary",
"binaryEncoding": "base64"
}
},
"additionalProperties": true,
"type": "object",
"title": "Ccc Xapp Subscription Delete Response Publisher Pub Data",
"description": "* Publisher : CccXappSubscriptionDeleteResponsePublisher Topic : E2SM-CCC-SUBSCRIPTION-DELETE-RESP.RIC_REQUESTOR=*.RIC_INSTANCE=* Description : Publishes the E2 subscription delete response received from the E2 Termination node to the xAPP"
},
"PBE2apMsgData.BaseSubscriptionDeleteResponseData": {
"properties": {
"RequestId": {
"$ref": "#/definitions/PBE2apMsgData.RicRequestId",
"additionalProperties": true
},
"RanFunctionName": {
"type": "string"
},
"RanFunctionId": {
"type": "integer"
},
"NodeId": {
"$ref": "#/definitions/PBE2apMsgData.GlobalE2NodeId",
"additionalProperties": true
}
},
"additionalProperties": true,
"type": "object",
"title": "Base Subscription Delete Response Data"
},
"PBE2apMsgData.GlobalE2NodeId": {
"properties": {
"GlobalGnbId": {
"$ref": "#/definitions/PBE2apMsgData.GlobalGnbId",
"additionalProperties": true
},
"OptionalGnbCuUpId": {
"type": "string"
},
"OptionalGnbDuId": {
"type": "string"
}
},
"additionalProperties": true,
"type": "object",
"title": "Global E 2 Node Id",
"description": "*O-RAN.WG3.E2AP-v02.00 9.2.6 Global E2 Node ID"
},
"PBE2apMsgData.GlobalGnbId": {
"properties": {
"PlmnIdentity": {
"$ref": "#/definitions/PBE2apMsgData.PlmnIdentity",
"additionalProperties": true
},
"GnbId": {
"$ref": "#/definitions/PBE2apMsgData.GnbId",
"additionalProperties": true
}
},
"additionalProperties": true,
"type": "object",
"title": "Global Gnb Id"
},
"PBE2apMsgData.GnbId": {
"properties": {
"Value": {
"type": "integer"
},
"Length": {
"type": "integer",
"description": "Number of bits used in the gnbId. This may vary from 22 to 32"
}
},
"additionalProperties": true,
"type": "object",
"title": "Gnb Id"
},
"PBE2apMsgData.PlmnIdentity": {
"properties": {
"Data": {
"items": {
"type": "integer"
},
"type": "array"
}
},
"additionalProperties": true,
"type": "object",
"title": "Plmn Identity",
"description": "*O-RAN.WG3.E2SM-R003-v03.00 6.2.3.1 PLMN Identity"
},
"PBE2apMsgData.RicRequestId": {
"properties": {
"RicRequestorId": {
"type": "integer"
},
"RicInstanceId": {
"type": "integer"
}
},
"additionalProperties": true,
"type": "object",
"title": "Ric Request Id"
}
}
}