1. KPM Subscription Delete Response¶
1.1 KpmXappSubscriptionDeleteResponsePublisherPubData¶
The KpmXappSubscriptionDeleteResponsePublisherPubData represents the response message in reply to a KPM subscription delete request.
This response indicates whether the deletion of the subscription was successful or if any issues were encountered during the process.
1.2 Examples¶
Info
To receive a KPM Subscription response, the following NATS subject must be used:
e2-t.E2SM-KPIMON-SUBSCRIPTION-DELETE-RESP
The following Python example demonstrates how to receive a KPM subscription delete response.
Example
Receive Kpm Subscription Delete response:
# Add Accelleran xapp library
from xapp_lib import xapp_lib
# Add protobuf definitions
from xapp_lib.proto_pb2.accelleran.e2 import genXappKpm_pb2
# Add function to serialize json dict in protobuf
from google.protobuf.json_format import ParseDict
def e2sm_kpimon_subscription_delete_resp(encoded_data):
data = genKpmXapp_pb2.KpmXappSubscriptionDeleteResponsePublisherPubData()
data.ParseFromString(encoded_data)
return data.BaseSubscriptionDeleteResponseData
msgList = [
("E2SM-KPIMON-SUBSCRIPTION-DELETE-RESP", e2sm_kpimon_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] != 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 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 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 KPM Subscription Delete Response, which outlines the expected structure and data types.
E2 KPM Subscription Delete Response schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"$ref": "#/definitions/KpmXappSubscriptionDeleteResponsePublisherPubData",
"definitions": {
"KpmXappSubscriptionDeleteResponsePublisherPubData": {
"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": "Kpm Xapp Subscription Delete Response Publisher Pub Data",
"description": "* Publisher : KpmXappSubscriptionDeleteResponsePublisher Topic : E2SM-KPIMON-SUBSCRIPTION-DELETE-RESP.RIC_REQUESTOR=*.RIC_INSTANCE=* Description : This publisher will publish 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"
}
}
}