Skip to content

1. CCC Control Acknowledgements

1.1 CccXappRicControlAcknowledgePublisherPubData

The CccXappRicControlAcknowledgePublisherPubData message provides information about the successful processing and execution of a previously issued CCC (Cell Configuration and Control) Request.

This message is sent by the E2 node to acknowledge that the requested control action, such as modifying cell parameters or applying new configurations, has been accepted and executed correctly by the RAN.

Receiving this acknowledgment is crucial for validating that the CCC commands sent by the xApp have been successfully implemented, ensuring that no further corrective actions are needed for the given request.

1.2 Examples

Info

To receive a CCC Acknowledgement message, the following NATS subject must be used:

e2-t.E2SM-CCC-CONTROL-ACKNOWLEDGE
This subject is responsible for receiving the acknowledgment message after the RAN successfully executes a control action.

Below is a Python example demonstrating how to receive and handle a CCC Control Acknowledgement.

Example

Receive CCC Control Acknowledgement example:

# Add Accelleran xapp library
from xapp_lib import xapp_lib
# Add protobuf definitions
from xapp_lib.proto_pb2.accelleran.e2 import genCcc_pb2
# Add function to deserialize protobuf message to a dict
from google.protobuf.json_format import MessageToDict

def e2sm_ccc_control_acknowledge(encoded_data):
    data = genCcc_pb2.CccXappRicControlAcknowledgePublisherPubData()
    data.ParseFromString(encoded_data)
    return data.RicControlAcknowledge

msgList = [
    ("E2SM-CCC-CONTROL-ACKNOWLEDGE", e2sm_ccc_control_acknowledge),
]

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()

    # Listen for control acknowledgements
    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 Control Acknowledgement Response
    for _ in range(10):
        data = xapp.nats().recv_data()
        subject = extract_subject(data[0])
        decoded_resp = decoder(subject, data[1])
        logging.info("Received acknowledgment: {data}".format(data=decoded_resp))

1.3 Schema

This section provides the JSON schema for the E2 CCC Control Acknowledgment Response, which outlines the expected structure and data types.

E2 CCC Control Acknowledgements schema
{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "$ref": "#/definitions/CccXappRicControlAcknowledgePublisherPubData",
    "definitions": {
        "CccXappRicControlAcknowledgePublisherPubData": {
            "properties": {
                "RicControlAcknowledge": {
                    "$ref": "#/definitions/PBE2apMsgData.RicControlAcknowledge",
                    "additionalProperties": true,
                    "description": "See RicControlAcknowledge 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 Ric Control Acknowledge Publisher Pub Data",
            "description": "* Publisher : CccXappRicControlAcknowledgePublisher Topic : E2SM-CCC-CONTROL-ACKNOWLEDGE.RIC_REQUESTOR=*.RIC_INSTANCE=* Description : Publishes the E2 control acknowledge received from the               E2 Termination node to the xAPP"
        },
        "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.RicCallProcessId": {
            "properties": {
                "items": {
                    "items": {
                        "type": "integer"
                    },
                    "type": "array",
                    "description": "Carries max 4096 elements of type uint32"
                }
            },
            "additionalProperties": true,
            "type": "object",
            "title": "Ric Call Process Id"
        },
        "PBE2apMsgData.RicControlAcknowledge": {
            "properties": {
                "GlobalE2NodeId": {
                    "$ref": "#/definitions/PBE2apMsgData.GlobalE2NodeId",
                    "additionalProperties": true
                },
                "RicRequestId": {
                    "$ref": "#/definitions/PBE2apMsgData.RicRequestId",
                    "additionalProperties": true
                },
                "RanFunctionId": {
                    "type": "integer"
                },
                "RicCallProcessId": {
                    "$ref": "#/definitions/PBE2apMsgData.RicCallProcessId",
                    "additionalProperties": true
                },
                "RicControlOutcome": {
                    "$ref": "#/definitions/PBE2apMsgData.RicControlOutcome",
                    "additionalProperties": true
                }
            },
            "additionalProperties": true,
            "type": "object",
            "title": "Ric Control Acknowledge"
        },
        "PBE2apMsgData.RicControlOutcome": {
            "properties": {
                "items": {
                    "items": {
                        "type": "integer"
                    },
                    "type": "array",
                    "description": "Carries max 4096 elements of type uint32"
                }
            },
            "additionalProperties": true,
            "type": "object",
            "title": "Ric Control Outcome"
        },
        "PBE2apMsgData.RicRequestId": {
            "properties": {
                "RicRequestorId": {
                    "type": "integer"
                },
                "RicInstanceId": {
                    "type": "integer"
                }
            },
            "additionalProperties": true,
            "type": "object",
            "title": "Ric Request Id"
        }
    }
}