Skip to content

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
This subject is responsible for receiving the CCC indication message, containing real-time control data from the E2 nodes.

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"
        }
    }
}