diff --git a/nfapi/oai_integration/nfapi_pnf.c b/nfapi/oai_integration/nfapi_pnf.c index 8b07bea297..90cc275e39 100644 --- a/nfapi/oai_integration/nfapi_pnf.c +++ b/nfapi/oai_integration/nfapi_pnf.c @@ -1801,6 +1801,9 @@ int nr_stop_request(nfapi_pnf_config_t *config, nfapi_pnf_phy_config_t *phy, nfa .header.phy_id = req->header.phy_id}; nfapi_nr_stop_indication(config, &resp); has_sent_stop_ind = true; + // Upon sending the STOP.indication mark P7 PNF to terminate, to not send any further messages to the VNF + pnf_p7_t *pnf_p7 = (pnf_p7_t *)(p7_config_g); + pnf_p7->terminate = 1; #ifdef ENABLE_WLS wls_pnf_close(pnf_p5_init_and_receive_pthread); #endif diff --git a/nfapi/oai_integration/socket/socket_pnf.c b/nfapi/oai_integration/socket/socket_pnf.c index 6a96247b74..0be068fe22 100644 --- a/nfapi/oai_integration/socket/socket_pnf.c +++ b/nfapi/oai_integration/socket/socket_pnf.c @@ -78,6 +78,10 @@ static int send_p7_msg(pnf_p7_t *pnf_p7, uint8_t *msg, uint32_t len) bool pnf_nr_send_p7_message(pnf_p7_t *pnf_p7, nfapi_nr_p7_message_header_t *header, uint32_t msg_len) { + if (pnf_p7->terminate) { + //don't send any further P7 messages after terminating + return false; + } header->m_segment_sequence = NFAPI_NR_P7_SET_MSS(0, 0, pnf_p7->sequence_number); // Need to guard against different threads calling the encode function at the same time diff --git a/nfapi/oai_integration/wls_integration/wls_pnf.c b/nfapi/oai_integration/wls_integration/wls_pnf.c index e6fd609346..96bfc3fd6b 100644 --- a/nfapi/oai_integration/wls_integration/wls_pnf.c +++ b/nfapi/oai_integration/wls_integration/wls_pnf.c @@ -201,7 +201,10 @@ bool wls_pnf_nr_send_p5_message(pnf_t *pnf, nfapi_nr_p4_p5_message_header_t *msg bool wls_pnf_nr_send_p7_message(pnf_p7_t *pnf_p7, nfapi_nr_p7_message_header_t *msg, uint32_t msg_len) { UNUSED_VARIABLE(msg_len); - + if (pnf_p7->terminate) { + // don't send any further P7 messages after terminating + return false; + } if (!isFAPIMessageIDValid(msg->message_id)) { return false; }