1. CCC Indications¶
1.1 CccXappIndicationPublisherPubData¶
The CccXappIndicationPublisherPubData represents the message that contains Cell Configuration and Control (CCC) indications.
These indications provide real-time control data from the E2 nodes, allowing xApps to analyze and adjust network behavior based on the specific control strategies subscribed through the E2 interface.
This message is typically sent in response to an active E2 CCC subscription, delivering data that can be used to implement or modify control actions based on the parameters defined in the subscription request.
1.2 Examples¶
Warning
E2 CCC Subscription Request must be issued first before receiving E2 CCC Indications.
Please check for CCC Subscription Request for more details.
Info
To receive a CCC Indication, the following NATS subject must be used:
e2-t.E2SM-CCC-INDICATION
The following Python example demonstrates how to receive a CCC Indication.
Example
Receive CCC Indication:
# 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_indication(encoded_data):
data = genXappCcc_pb2.CccXappIndicationPublisherPubData()
data.ParseFromString(encoded_data)
return data.E2smCccIndicationData
msgList = [
("E2SM-CCC-INDICATION", e2sm_ccc_indication),
]
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] != 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()
# E2 CCC Subscription Request must be issued first before receiving E2 CCC Indications
# Please check E2 CCC Subscription Request section
# Listen for E2 CCC Indication 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 Indication
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 RC Indications, which outlines the expected structure and data types.
E2 CCC Indications schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"$ref": "#/definitions/CccXappIndicationPublisherPubData",
"definitions": {
"CccXappIndicationPublisherPubData": {
"properties": {
"E2smCccIndicationData": {
"$ref": "#/definitions/PBXAppCccData.E2smCccIndicationData",
"additionalProperties": true,
"description": "See E2smCccIndicationData 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 Indication Publisher Pub Data",
"description": "* Publisher : CccXappIndicationPublisher Topic : E2SM-CCC-INDICATION.RIC_REQUESTOR=*.RIC_INSTANCE=* Description : Publishes E2 Subscription Delete Request initiated by the XAPP to the SMCCC"
},
"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"
},
"PBXAppCccData.E2smCccIndicationData": {
"properties": {
"NodeId": {
"$ref": "#/definitions/PBE2apMsgData.GlobalE2NodeId",
"additionalProperties": true
},
"RanFunctionName": {
"type": "string"
},
"RanFunctionId": {
"type": "integer"
},
"IndicationHeader": {
"type": "string"
},
"IndicationMessage": {
"type": "string"
}
},
"additionalProperties": true,
"type": "object",
"title": "E 2 Sm Ccc Indication Data"
}
}
}