Fix non-SCTP socket communication for P5 messages between PNF and VNF.

Switches the used socket type in pnf_interface.c and vnf_interface.c.
These values must always be the same in both components so the same socket type is used in both
This commit is contained in:
Rúben Soares Silva
2025-06-26 16:57:08 +01:00
parent ca940e62f9
commit f986f6843a
3 changed files with 140 additions and 54 deletions
+45 -12
View File
@@ -1935,7 +1935,20 @@ int pnf_connect(pnf_t* pnf)
socketConnected = 1;
}
}
} else {
int error;
socklen_t len = sizeof(error);
if (getsockopt(pnf->p5_sock, SOL_SOCKET, SO_ERROR, &error, &len) < 0) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "After getsockopt errno: %d\n", errno);
return -1;
} else {
// If error is zero, the socket is connected
if (error == 0) {
socketConnected = 1;
}
}
}
NFAPI_TRACE(NFAPI_TRACE_NOTE, "Socket %s\n", socketConnected ? "CONNECTED" : "NOT_CONNECTED");
return socketConnected;
@@ -2132,15 +2145,23 @@ int pnf_nr_read_dispatch_message(pnf_t* pnf)
{
int flags = MSG_PEEK;
message_size = sctp_recvmsg(pnf->p5_sock,
header_buffer,
header_buffer_size,
/*(struct sockaddr*)&addr, &addr_len*/ 0,
0,
&sndrcvinfo,
&flags);
if (pnf->sctp) {
message_size = sctp_recvmsg(pnf->p5_sock,
header_buffer,
header_buffer_size,
/*(struct sockaddr*)&addr, &addr_len*/
0,
0,
&sndrcvinfo,
&flags);
} else {
message_size = recv(pnf->p5_sock,
header_buffer,
header_buffer_size,
flags);
}
if (message_size == -1) {
if (message_size < NFAPI_NR_P5_HEADER_LENGTH) {
NFAPI_TRACE(NFAPI_TRACE_INFO, "PNF Failed to peek sctp message size errno:%d\n", errno);
return 0;
}
@@ -2172,8 +2193,20 @@ int pnf_nr_read_dispatch_message(pnf_t* pnf)
int flags = 0;
(void)memset(&sndrcvinfo, 0, sizeof(struct sctp_sndrcvinfo));
int recvmsg_result =
sctp_recvmsg(pnf->p5_sock, read_buffer, message_size, (struct sockaddr*)&addr, &addr_len, &sndrcvinfo, &flags);
ssize_t recvmsg_result = 0;
if (pnf->sctp) {
recvmsg_result = sctp_recvmsg(pnf->p5_sock,
read_buffer,
message_size,
(struct sockaddr *)&addr,
&addr_len,
&sndrcvinfo,
&flags);
} else {
if ((recvmsg_result = recv(pnf->p5_sock, read_buffer, message_size, flags))<=0) {
recvmsg_result = -1;
}
}
if (recvmsg_result == -1) {
NFAPI_TRACE(NFAPI_TRACE_INFO, "Failed to read sctp message size errno:%d\n", errno);
} else {
@@ -2204,7 +2237,7 @@ int pnf_nr_read_dispatch_message(pnf_t* pnf)
*/
// handle now if complete message in one or more segments
if ((flags & 0x80) == 0x80) {
if ((flags & 0x80) == 0x80 || !pnf->sctp) {
pnf_nr_handle_p5_message(pnf, read_buffer, message_size);
} else {
NFAPI_TRACE(NFAPI_TRACE_WARN, "sctp_recvmsg: unhandled mode with flags 0x%x\n", flags);