Merge remote-tracking branch 'origin/prevent-p7-msg-after-stop-indication' into integration_2026_w05 (!3880)
Prevent the PNF from sending P7 messages after sending a STOP.indication Upon stopping the PNF, when sending the STOP.indication to the VNF, set pnf_p7->terminate to 1. Add a check on the PNF P7 send functions to not send a message after pnf_p7->terminate is set. This prevents the PNF from sending SLOT.indications after stopping, which sometimes was causing the VNF to process a SLOT.indication after it had received the indication to STOP. Also, this MR adds a sanity check on the VNF P7 message handler to ignore any P7 messages it receives after having it's own terminate flag set to 1 This MR closes issue #1045
This commit is contained in:
@@ -1800,6 +1800,9 @@ int nr_stop_request(nfapi_pnf_config_t *config, nfapi_pnf_phy_config_t *phy, nfa
|
|||||||
.header.phy_id = req->header.phy_id};
|
.header.phy_id = req->header.phy_id};
|
||||||
nfapi_nr_stop_indication(config, &resp);
|
nfapi_nr_stop_indication(config, &resp);
|
||||||
has_sent_stop_ind = true;
|
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
|
#ifdef ENABLE_WLS
|
||||||
wls_pnf_close(pnf_p5_init_and_receive_pthread);
|
wls_pnf_close(pnf_p5_init_and_receive_pthread);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -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)
|
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);
|
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
|
// Need to guard against different threads calling the encode function at the same time
|
||||||
|
|||||||
@@ -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)
|
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);
|
UNUSED_VARIABLE(msg_len);
|
||||||
|
if (pnf_p7->terminate) {
|
||||||
|
// don't send any further P7 messages after terminating
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!isFAPIMessageIDValid(msg->message_id)) {
|
if (!isFAPIMessageIDValid(msg->message_id)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2130,6 +2130,10 @@ void vnf_dispatch_p7_message(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
|
|||||||
|
|
||||||
void vnf_nr_handle_p7_message(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
|
void vnf_nr_handle_p7_message(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
|
||||||
{
|
{
|
||||||
|
if (vnf_p7->terminate) {
|
||||||
|
// VNF already terminated, ignore messages ( shouldn't get here, since the PNF doesn't send further messages after terminating as well )
|
||||||
|
return;
|
||||||
|
}
|
||||||
nfapi_nr_p7_message_header_t header;
|
nfapi_nr_p7_message_header_t header;
|
||||||
|
|
||||||
// validate the input params
|
// validate the input params
|
||||||
|
|||||||
Reference in New Issue
Block a user