diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c b/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c index 1a3bd8c872..b35339ce6d 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c +++ b/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c @@ -220,7 +220,7 @@ nwGtpv1uCreateAndSendMsg( NwGtpv1uStackT *thiz, NwU32T peerIp, NwU16T peerPort, rc = thiz->udp.udpDataReqCallback(thiz->udp.hUdp, pMsg->msgBuf, - pMsg->msgLen, + pMsg->msgLen + NW_GTPV1U_EPC_MIN_HEADER_SIZE, peerIp, peerPort); diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c b/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c index fc50c81601..cc7c723325 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c +++ b/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c @@ -47,6 +47,7 @@ #include "UTIL/LOG/log.h" #define NW_GTPV1U_EPC_SPECIFIC_HEADER_SIZE (12) /**< Size of GTPv1u EPC specific header */ +#define NW_GTPV1U_EPC_MIN_HEADER_SIZE (8) #ifdef __cplusplus extern "C" { @@ -143,7 +144,9 @@ nwGtpv1uGpduMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, memcpy(pMsg->msgBuf + pMsg->msgLen, tpdu, tpduLength); pMsg->msgLen += tpduLength; - pMsg->msgLen -= 8; + pMsg->msgLen = pMsg->msgLen - ((pMsg->seqNumFlag || pMsg->npduNumFlag + || pMsg->extHdrFlag ) ? + NW_GTPV1U_EPC_SPECIFIC_HEADER_SIZE : (NW_GTPV1U_EPC_SPECIFIC_HEADER_SIZE - 4)); *phMsg = (NwGtpv1uMsgHandleT) pMsg; return NW_GTPV1U_OK;