diff --git a/nfapi/open-nFAPI/vnf/inc/vnf_p7.h b/nfapi/open-nFAPI/vnf/inc/vnf_p7.h index 3684997c22..92623b41b8 100644 --- a/nfapi/open-nFAPI/vnf/inc/vnf_p7.h +++ b/nfapi/open-nFAPI/vnf/inc/vnf_p7.h @@ -27,7 +27,7 @@ typedef struct { uint8_t* buffer; - uint16_t length; + uint32_t length; } vnf_p7_rx_message_segment_t; typedef struct vnf_p7_rx_message vnf_p7_rx_message_t; diff --git a/nfapi/open-nFAPI/vnf/public_inc/nfapi_vnf_interface.h b/nfapi/open-nFAPI/vnf/public_inc/nfapi_vnf_interface.h index 77f0358e40..6fd7d733eb 100644 --- a/nfapi/open-nFAPI/vnf/public_inc/nfapi_vnf_interface.h +++ b/nfapi/open-nFAPI/vnf/public_inc/nfapi_vnf_interface.h @@ -669,8 +669,8 @@ typedef struct nfapi_vnf_p7_config uint8_t checksum_enabled; /*! The maxium size of a P7 segement. If a message is large that this it - * will be segemented */ - uint16_t segment_size; + * will be segmented. Note: u32 to cover 4G and 5G. */ + uint32_t segment_size; uint16_t max_num_segments; /*! Configuration option for the p7 pack unpack functions*/ diff --git a/nfapi/open-nFAPI/vnf/src/vnf_p7.c b/nfapi/open-nFAPI/vnf/src/vnf_p7.c index 0caebd2130..3d2975d03c 100644 --- a/nfapi/open-nFAPI/vnf/src/vnf_p7.c +++ b/nfapi/open-nFAPI/vnf/src/vnf_p7.c @@ -501,7 +501,7 @@ int vnf_nr_p7_pack_and_send_p7_msg(vnf_p7_t* vnf_p7, nfapi_nr_p7_message_header_ // segmenting the transmit int msg_body_len = len - NFAPI_NR_P7_HEADER_LENGTH ; - int seg_body_len = vnf_p7->_public.segment_size - NFAPI_NR_P7_HEADER_LENGTH ; + uint32_t seg_body_len = vnf_p7->_public.segment_size - NFAPI_NR_P7_HEADER_LENGTH ; int segment_count = (msg_body_len / (seg_body_len)) + ((msg_body_len % seg_body_len) ? 1 : 0); int segment = 0; @@ -511,19 +511,21 @@ int vnf_nr_p7_pack_and_send_p7_msg(vnf_p7_t* vnf_p7, nfapi_nr_p7_message_header_ for(segment = 0; segment < segment_count; ++segment) { uint8_t last = 0; - uint16_t size = vnf_p7->_public.segment_size - NFAPI_NR_P7_HEADER_LENGTH; + uint32_t size = vnf_p7->_public.segment_size - NFAPI_NR_P7_HEADER_LENGTH; if(segment + 1 == segment_count) { last = 1; size = (msg_body_len) - (seg_body_len * segment); } - uint16_t segment_size = size + NFAPI_NR_P7_HEADER_LENGTH; + uint32_t segment_size = size + NFAPI_NR_P7_HEADER_LENGTH; // Update the header with the m and segement memcpy(&tx_buffer[0], buffer, NFAPI_NR_P7_HEADER_LENGTH); // set the segment length + tx_buffer[4] = (segment_size & 0xFF000000) >> 24; + tx_buffer[5] = (segment_size & 0xFF0000) >> 16; tx_buffer[6] = (segment_size & 0xFF00) >> 8; tx_buffer[7] = (segment_size & 0xFF);