From: Ashwin Sridharan Date: Wed, 18 Dec 2019 15:35:45 +0000 (-0500) Subject: Call Process ID and Control Request Acknowledge IEs are made optional X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=8a198a45af798bc7c9525a2663d397377d01ab01;p=ric-app%2Fadmin.git Call Process ID and Control Request Acknowledge IEs are made optional XaPP does not add the Control Request Acknowledge IE now when responding Signed-off-by: Ashwin Sridharan Change-Id: I9e9e7cef293059dbc4467dd8fb8814c00cf432ad --- diff --git a/src/E2AP-c/e2ap_control.cc b/src/E2AP-c/e2ap_control.cc index 036d704..198ccdd 100644 --- a/src/E2AP-c/e2ap_control.cc +++ b/src/E2AP-c/e2ap_control.cc @@ -25,11 +25,11 @@ #include -// Set up the initiating message and also allocate protocolIEs in container -// Note : this bypasses requirement to use ASN_SEQUENCE_ADD. We can directly -// assign pointers to the array in ProtocolIE. However, this also leaves us on the -// hook to manually clear the memory - +// Set up memory allocations for each IE for encoding +// We are responsible for memory management for each IE for encoding +// Hence destructor should clear out memory +// When decoding, we rely on asn1c macro (ASN_STRUCT_FREE to be called +// for releasing memory by external calling function) ric_control_request::ric_control_request(void){ e2ap_pdu_obj = 0; @@ -128,13 +128,13 @@ bool ric_control_request::set_fields(E2N_InitiatingMessage_t *initMsg, ric_contr } E2N_RICcontrolRequest_t * ric_control_request = &(initMsg->value.choice.RICcontrolRequest); - ric_control_request->protocolIEs.list.count = 0; + ric_control_request->protocolIEs.list.count = 0; // reset // for(i = 0; i < NUM_CONTROL_REQUEST_IES;i++){ // memset(&(IE_array[i]), 0, sizeof(RICcontrolRequest_IEs_t)); // } - + // Mandatory IE ie_index = 0; E2N_RICcontrolRequest_IEs_t *ies_ricreq = &IE_array[ie_index]; ies_ricreq->criticality = E2N_Criticality_reject; @@ -145,6 +145,7 @@ bool ric_control_request::set_fields(E2N_InitiatingMessage_t *initMsg, ric_contr ricrequest_ie->ricRequestSequenceNumber = dinput.req_seq_no; ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + // Mandatory IE ie_index = 1; E2N_RICcontrolRequest_IEs_t *ies_ranfunc = &IE_array[ie_index]; ies_ranfunc->criticality = E2N_Criticality_reject; @@ -155,15 +156,7 @@ bool ric_control_request::set_fields(E2N_InitiatingMessage_t *initMsg, ric_contr ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); - // ie_index = 2; - // RICcontrolRequest_IEs_t *ies_riccallprocessid = &IE_array[ie_index]; - // ies_riccallprocessid->criticality = E2N_Criticality_reject; - // ies_riccallprocessid->id = E2N_ProtocolIE_ID_id_RICcallProcessID; - // ies_riccallprocessid->value.present = E2N_RICcontrolRequest_IEs__value_PR_RICcallProcessID; - // RICcallProcessID_t *riccallprocessid_ie = &ies_riccallprocessid->value.choice.RICcallProcessID; - // riccallprocessid_ie->buf = dinput.call_process_id; - // riccallprocessid_ie->size = dinput.call_process_id_size; - + // Mandatory IE ie_index = 2; E2N_RICcontrolRequest_IEs_t *ies_richead = &IE_array[ie_index]; ies_richead->criticality = E2N_Criticality_reject; @@ -173,7 +166,8 @@ bool ric_control_request::set_fields(E2N_InitiatingMessage_t *initMsg, ric_contr richeader_ie->buf = dinput.control_header; richeader_ie->size = dinput.control_header_size; ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); - + + // Mandatory IE ie_index = 3; E2N_RICcontrolRequest_IEs_t *ies_indmsg = &IE_array[ie_index]; ies_indmsg->criticality = E2N_Criticality_reject; @@ -184,15 +178,19 @@ bool ric_control_request::set_fields(E2N_InitiatingMessage_t *initMsg, ric_contr ricmsg_ie->size = dinput.control_msg_size; ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + // Optional IE ie_index = 4; - E2N_RICcontrolRequest_IEs_t *ies_indtyp = &IE_array[ie_index]; - ies_indtyp->criticality = E2N_Criticality_reject; - ies_indtyp->id = E2N_ProtocolIE_ID_id_RICcontrolAckRequest; - ies_indtyp->value.present = E2N_RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest; - E2N_RICcontrolAckRequest_t *ricackreq_ie = &ies_indtyp->value.choice.RICcontrolAckRequest; - *ricackreq_ie = dinput.control_ack; - ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + if (dinput.control_ack >= 0){ + E2N_RICcontrolRequest_IEs_t *ies_indtyp = &IE_array[ie_index]; + ies_indtyp->criticality = E2N_Criticality_reject; + ies_indtyp->id = E2N_ProtocolIE_ID_id_RICcontrolAckRequest; + ies_indtyp->value.present = E2N_RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest; + E2N_RICcontrolAckRequest_t *ricackreq_ie = &ies_indtyp->value.choice.RICcontrolAckRequest; + *ricackreq_ie = dinput.control_ack; + ASN_SEQUENCE_ADD(&(ric_control_request->protocolIEs), &(IE_array[ie_index])); + } + // Optional IE ie_index = 5; if(dinput.call_process_id_size > 0){ E2N_RICcontrolRequest_IEs_t *ies_callprocid = &IE_array[ie_index]; diff --git a/src/E2AP-c/e2ap_control_helper.hpp b/src/E2AP-c/e2ap_control_helper.hpp index 904e836..11f668c 100644 --- a/src/E2AP-c/e2ap_control_helper.hpp +++ b/src/E2AP-c/e2ap_control_helper.hpp @@ -32,7 +32,7 @@ typedef struct ric_control_helper ric_control_helper; struct ric_control_helper{ - ric_control_helper(void):req_id(1), req_seq_no(1), func_id(0), action_id(1), control_ack(1), cause(0), sub_cause(0), control_status(1), control_msg(0), control_msg_size(0), control_header(0), control_header_size(0), call_process_id(0), call_process_id_size(0){}; + ric_control_helper(void):req_id(1), req_seq_no(1), func_id(0), action_id(1), control_ack(-1), cause(0), sub_cause(0), control_status(1), control_msg(0), control_msg_size(0), control_header(0), control_header_size(0), call_process_id(0), call_process_id_size(0){}; long int req_id, req_seq_no, func_id, action_id, control_ack, cause, sub_cause, control_status; diff --git a/src/E2AP-c/e2ap_indication.cc b/src/E2AP-c/e2ap_indication.cc index 5dd17c2..d0b262e 100644 --- a/src/E2AP-c/e2ap_indication.cc +++ b/src/E2AP-c/e2ap_indication.cc @@ -25,11 +25,11 @@ #include -// Set up the initiating message and also allocate protocolIEs in container -// Note : this bypasses requirement to use ASN_SEQUENCE_ADD. We can directly -// assign pointers to the array in ProtocolIE. However, this also leaves us on the -// hook to manually clear the memory - +// Set up memory allocations for each IE for encoding +// We are responsible for memory management for each IE for encoding +// Hence destructor should clear out memory +// When decoding, we rely on asn1c macro (ASN_STRUCT_FREE to be called +// for releasing memory by external calling function) ric_indication::ric_indication(void){ e2ap_pdu_obj = 0; diff --git a/src/E2AP-c/subscription/subscription_request.cc b/src/E2AP-c/subscription/subscription_request.cc index 0f2836d..9b2f897 100644 --- a/src/E2AP-c/subscription/subscription_request.cc +++ b/src/E2AP-c/subscription/subscription_request.cc @@ -20,7 +20,13 @@ #include "subscription_request.hpp" - + + +// Set up memory allocations for each IE for encoding +// We are responsible for memory management for each IE for encoding +// Hence destructor should clear out memory +// When decoding, we rely on asn1c macro (ASN_STRUCT_FREE to be called +// for releasing memory by external calling function) subscription_request::subscription_request(void){ _name = "default"; diff --git a/src/message_processor_class.cc b/src/message_processor_class.cc index b5b421a..1cdc0d7 100644 --- a/src/message_processor_class.cc +++ b/src/message_processor_class.cc @@ -213,7 +213,7 @@ bool message_processor::operator()(rmr_mbuf_t *message){ control_data.req_id = indication_data.req_id; control_data.req_seq_no = indication_data.req_seq_no; control_data.func_id = indication_data.func_id; - control_data.control_ack = 1; // no ack required + //control_data.control_ack = 0; // no ack required control_data.call_process_id = indication_data.call_process_id; control_data.call_process_id_size = indication_data.call_process_id_size; res = control_request_processor.encode_e2ap_control_request(message->payload, &mlen, control_data);