Commit 228ca89f authored by Guido Casati's avatar Guido Casati

Fix GTP-U TEID logging: prevent negative values and use hexadecimal format

Problem:
- GTP-U logs showed negative TEID values (e.g., -1943516315) due to signed/unsigned
conversion. Due to wrong conversion from uint32_t to int and overflow caused negative values.
- TEID values were inconsistently formatted across different log statements, due to
mixed use of %d, %u, %x formats for TEID logging. Made debugging and troubleshooting difficult

Changes:
1. Fixed signed/unsigned conversion bug: use teid_t. Prevents overflow when TEID values exceed int range.
2. Standardized TEID logging format: all TEID values now use '0x%x' hexadecimal format.
   Consistent 'TEID' capitalization throughout
parent c5b21d42
...@@ -292,7 +292,7 @@ static int gtpv1uCreateAndSendMsg(gtpv1u_bearer_t *bearer, ...@@ -292,7 +292,7 @@ static int gtpv1uCreateAndSendMsg(gtpv1u_bearer_t *bearer,
DevAssert(bearer->ip.ss_family == AF_INET); DevAssert(bearer->ip.ss_family == AF_INET);
struct sockaddr_in *to = (struct sockaddr_in *)&bearer->ip; struct sockaddr_in *to = (struct sockaddr_in *)&bearer->ip;
LOG_D(GTPU, LOG_D(GTPU,
"Peer IP:" IPV4_ADDR " port:%u outgoing teid:%x\n", "Peer IP:" IPV4_ADDR " port:%u outgoing TEID:0x%x\n",
IPV4_ADDR_FORMAT(to->sin_addr.s_addr), IPV4_ADDR_FORMAT(to->sin_addr.s_addr),
htons(to->sin_port), htons(to->sin_port),
bearer->teid_outgoing); bearer->teid_outgoing);
...@@ -332,7 +332,7 @@ static void _gtpv1uSendDirect(instance_t instance, ...@@ -332,7 +332,7 @@ static void _gtpv1uSendDirect(instance_t instance,
} }
LOG_D(GTPU, LOG_D(GTPU,
"[%ld] sending a packet to UE:RAB:teid %lx/%x/%x, len %lu, oldseq %d, oldnum %d\n", "[%ld] sending a packet to UE:RAB:TEID %lx/%d/0x%x, len %lu, oldseq %d, oldnum %d\n",
instance, instance,
ue_id, ue_id,
bearer_id, bearer_id,
...@@ -492,7 +492,7 @@ static void gtpv1uEndTunnel(instance_t instance, gtpv1u_enb_end_marker_req_t *re ...@@ -492,7 +492,7 @@ static void gtpv1uEndTunnel(instance_t instance, gtpv1u_enb_end_marker_req_t *re
} }
LOG_D(GTPU, LOG_D(GTPU,
"[%ld] sending a end packet packet to UE:RAB:teid %lx/%x/%x\n", "[%ld] sending a end packet packet to UE:RAB:TEID %lx/%d/0x%x\n",
instance, instance,
ue_id, ue_id,
bearer_id, bearer_id,
...@@ -641,7 +641,7 @@ void GtpuUpdateTunnelOutgoingAddressAndTeid(instance_t instance, ...@@ -641,7 +641,7 @@ void GtpuUpdateTunnelOutgoingAddressAndTeid(instance_t instance,
struct sockaddr_in *sa4 = (struct sockaddr_in *)sockaddr; struct sockaddr_in *sa4 = (struct sockaddr_in *)sockaddr;
struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)sockaddr; struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)sockaddr;
LOG_I(GTPU, LOG_I(GTPU,
"[%ld] UE ID %ld: Update tunnel TEID incoming %x outgoing %x to remote IPv4 %s, IPv6 %s, port %d\n", "[%ld] UE ID %ld: Update tunnel TEID incoming 0x%x outgoing 0x%x to remote IPv4 %s, IPv6 %s, port %d\n",
instance, instance,
ue_id, ue_id,
ptr2->second.teid_incoming, ptr2->second.teid_incoming,
...@@ -676,7 +676,7 @@ teid_t newGtpuCreateTunnel(instance_t instance, ...@@ -676,7 +676,7 @@ teid_t newGtpuCreateTunnel(instance_t instance,
teid_t incoming_teid = gtpv1uNewTeid(); teid_t incoming_teid = gtpv1uNewTeid();
while (globGtp.te2ue_mapping.find(incoming_teid) != globGtp.te2ue_mapping.end()) { while (globGtp.te2ue_mapping.find(incoming_teid) != globGtp.te2ue_mapping.end()) {
LOG_W(GTPU, "[%ld] generated a random Teid that exists, re-generating (%x)\n", instance, incoming_teid); LOG_W(GTPU, "[%ld] generated a random TEID that exists, re-generating (0x%x)\n", instance, incoming_teid);
incoming_teid = gtpv1uNewTeid(); incoming_teid = gtpv1uNewTeid();
}; };
...@@ -721,7 +721,7 @@ teid_t newGtpuCreateTunnel(instance_t instance, ...@@ -721,7 +721,7 @@ teid_t newGtpuCreateTunnel(instance_t instance,
char ip4[INET_ADDRSTRLEN]; char ip4[INET_ADDRSTRLEN];
char ip6[INET6_ADDRSTRLEN]; char ip6[INET6_ADDRSTRLEN];
LOG_I(GTPU, LOG_I(GTPU,
"[%ld] UE ID %ld: Create tunnel TEID incoming %x outgoing %x to remote IPv4 %s, IPv6 %s, port %d\n", "[%ld] UE ID %ld: Create tunnel TEID incoming 0x%x outgoing 0x%x to remote IPv4 %s, IPv6 %s, port %d\n",
instance, instance,
ue_id, ue_id,
bearer.teid_incoming, bearer.teid_incoming,
...@@ -825,7 +825,7 @@ int gtpv1u_create_ngu_tunnel(const instance_t instance, ...@@ -825,7 +825,7 @@ int gtpv1u_create_ngu_tunnel(const instance_t instance,
gtpCallbackSDAP callBackSDAP) gtpCallbackSDAP callBackSDAP)
{ {
LOG_D(GTPU, LOG_D(GTPU,
"[%ld] Start create tunnels for ue id %lu, num_tunnels %d, sgw_S1u_teid %x\n", "[%ld] Start create tunnels for ue id %lu, num_tunnels %d, TEID 0x%x\n",
instance, instance,
create_tunnel_req->ue_id, create_tunnel_req->ue_id,
create_tunnel_req->num_tunnels, create_tunnel_req->num_tunnels,
...@@ -909,7 +909,7 @@ int newGtpuDeleteOneTunnel(instance_t instance, ue_id_t ue_id, int rb_id) ...@@ -909,7 +909,7 @@ int newGtpuDeleteOneTunnel(instance_t instance, ue_id_t ue_id, int rb_id)
pthread_mutex_unlock(&globGtp.gtp_lock); pthread_mutex_unlock(&globGtp.gtp_lock);
return !GTPNOK; return !GTPNOK;
} }
int teid = rb_it->second.teid_incoming; teid_t teid = rb_it->second.teid_incoming;
globGtp.te2ue_mapping.erase(teid); globGtp.te2ue_mapping.erase(teid);
ue_it->second.bearers.erase(rb_id); ue_it->second.bearers.erase(rb_id);
pthread_mutex_unlock(&globGtp.gtp_lock); pthread_mutex_unlock(&globGtp.gtp_lock);
...@@ -1043,7 +1043,7 @@ static int Gtpv1uHandleEchoReq(int h, uint8_t *msgBuf, uint32_t msgBufLen, const ...@@ -1043,7 +1043,7 @@ static int Gtpv1uHandleEchoReq(int h, uint8_t *msgBuf, uint32_t msgBufLen, const
} }
uint16_t seq = ntohs(*(uint16_t *)(msgHdr + 1)); uint16_t seq = ntohs(*(uint16_t *)(msgHdr + 1));
LOG_D(GTPU, "[%d] Received a echo request, TEID: %d, seq: %hu\n", h, msgHdr->teid, seq); LOG_D(GTPU, "[%d] Received a echo request, TEID: 0x%x, seq: %hu\n", h, msgHdr->teid, seq);
uint8_t recovery[2] = {14, 0}; uint8_t recovery[2] = {14, 0};
gtpv1u_bearer_t bearer = create_bearer(h, addr, ntohl(msgHdr->teid), seq); gtpv1u_bearer_t bearer = create_bearer(h, addr, ntohl(msgHdr->teid), seq);
return gtpv1uCreateAndSendMsg(&bearer, return gtpv1uCreateAndSendMsg(&bearer,
...@@ -1061,10 +1061,11 @@ static int Gtpv1uHandleError(int h, uint8_t *msgBuf, uint32_t msgBufLen, const s ...@@ -1061,10 +1061,11 @@ static int Gtpv1uHandleError(int h, uint8_t *msgBuf, uint32_t msgBufLen, const s
if (msgBufLen < sizeof(Gtpv1uError)) if (msgBufLen < sizeof(Gtpv1uError))
LOG_E(GTPU, "Received GTP error indication with truncated size %u (mini size: %lu)\n", msgBufLen,sizeof(Gtpv1uError)+4); LOG_E(GTPU, "Received GTP error indication with truncated size %u (mini size: %lu)\n", msgBufLen,sizeof(Gtpv1uError)+4);
Gtpv1uError *msg = ( Gtpv1uError *)msgBuf; Gtpv1uError *msg = ( Gtpv1uError *)msgBuf;
LOG_E(GTPU, "Received GTP error indication: \n" LOG_E(GTPU,
" TEID %u (must be 0 from TS 29.281)\n" "Received GTP error indication: \n"
" TV id for TEID %u (must be 16)\n" " TEID 0x%x (must be 0 from TS 29.281)\n"
" TEID in error %u (should be a TEID we sent)\n" " TV id for TEID 0x%x (must be 16)\n"
" TEID in error 0x%x (should be a TEID we sent)\n"
" TV id for GTP addr %u (should be 133)\n" " TV id for GTP addr %u (should be 133)\n"
" len for addr of UPF %u (should be IPv4 or IPv6 len)" " len for addr of UPF %u (should be IPv4 or IPv6 len)"
" (TS 29.281 Sec 7.3.1 Error Handling not implemented)\n", " (TS 29.281 Sec 7.3.1 Error Handling not implemented)\n",
...@@ -1103,7 +1104,7 @@ static int Gtpv1uHandleEndMarker(int h, uint8_t *msgBuf, uint32_t msgBufLen, con ...@@ -1103,7 +1104,7 @@ static int Gtpv1uHandleEndMarker(int h, uint8_t *msgBuf, uint32_t msgBufLen, con
auto tunnel = globGtp.te2ue_mapping.find(ntohl(msgHdr->teid)); auto tunnel = globGtp.te2ue_mapping.find(ntohl(msgHdr->teid));
if (tunnel == globGtp.te2ue_mapping.end()) { if (tunnel == globGtp.te2ue_mapping.end()) {
LOG_E(GTPU, "[%d] Received a incoming packet on unknown teid (%x) Dropping!\n", h, msgHdr->teid); LOG_E(GTPU, "[%d] Received a incoming packet on unknown TEID (0x%x) Dropping!\n", h, msgHdr->teid);
pthread_mutex_unlock(&globGtp.gtp_lock); pthread_mutex_unlock(&globGtp.gtp_lock);
return GTPNOK; return GTPNOK;
} }
...@@ -1132,7 +1133,7 @@ static int Gtpv1uHandleEndMarker(int h, uint8_t *msgBuf, uint32_t msgBufLen, con ...@@ -1132,7 +1133,7 @@ static int Gtpv1uHandleEndMarker(int h, uint8_t *msgBuf, uint32_t msgBufLen, con
if (!tunnel->second.callBack(&ctxt, srb_flag, rb_id, mui, confirm, 0, NULL, mode, &sourceL2Id, &destinationL2Id)) if (!tunnel->second.callBack(&ctxt, srb_flag, rb_id, mui, confirm, 0, NULL, mode, &sourceL2Id, &destinationL2Id))
LOG_E(GTPU, "[%d] down layer refused incoming packet\n", h); LOG_E(GTPU, "[%d] down layer refused incoming packet\n", h);
LOG_D(GTPU, "[%d] Received END marker packet for: teid:%x\n", h, ntohl(msgHdr->teid)); LOG_D(GTPU, "[%d] Received END marker packet for: TEID:0x%x\n", h, ntohl(msgHdr->teid));
return !GTPNOK; return !GTPNOK;
} }
...@@ -1149,7 +1150,7 @@ static int Gtpv1uHandleGpdu(int h, uint8_t *msgBuf, uint32_t msgBufLen, const st ...@@ -1149,7 +1150,7 @@ static int Gtpv1uHandleGpdu(int h, uint8_t *msgBuf, uint32_t msgBufLen, const st
auto tunnel = globGtp.te2ue_mapping.find(ntohl(msgHdr->teid)); auto tunnel = globGtp.te2ue_mapping.find(ntohl(msgHdr->teid));
if (tunnel == globGtp.te2ue_mapping.end()) { if (tunnel == globGtp.te2ue_mapping.end()) {
LOG_E(GTPU, "[%d] Received a incoming packet on unknown teid (%x) Dropping!\n", h, ntohl(msgHdr->teid)); LOG_E(GTPU, "[%d] Received a incoming packet on unknown TEID (0x%x) Dropping!\n", h, ntohl(msgHdr->teid));
pthread_mutex_unlock(&globGtp.gtp_lock); pthread_mutex_unlock(&globGtp.gtp_lock);
return GTPNOK; return GTPNOK;
} }
...@@ -1282,7 +1283,7 @@ static int Gtpv1uHandleGpdu(int h, uint8_t *msgBuf, uint32_t msgBufLen, const st ...@@ -1282,7 +1283,7 @@ static int Gtpv1uHandleGpdu(int h, uint8_t *msgBuf, uint32_t msgBufLen, const st
1); 1);
} }
LOG_D(GTPU, "[%d] Received a %d bytes packet for: teid:%x\n", h, msgBufLen - offset, ntohl(msgHdr->teid)); LOG_D(GTPU, "[%d] Received a %d bytes packet for: TEID:0x%x\n", h, msgBufLen - offset, ntohl(msgHdr->teid));
return !GTPNOK; return !GTPNOK;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment