diff --git a/openair2/COMMON/gtpv1_u_messages_types.h b/openair2/COMMON/gtpv1_u_messages_types.h index 7758395ee43fd2274cfbefdf998348c518c4e9f8..84ae0f17dbe5ad700ed7be7f8c897ad33b627c4c 100644 --- a/openair2/COMMON/gtpv1_u_messages_types.h +++ b/openair2/COMMON/gtpv1_u_messages_types.h @@ -133,39 +133,39 @@ typedef struct gtpv1u_enb_data_forwarding_req_s { } gtpv1u_enb_data_forwarding_req_t; typedef struct gtpv1u_enb_data_forwarding_ind_s { - uint32_t frame; - uint8_t enb_flag; - rb_id_t rb_id; - uint32_t muip; - uint32_t confirmp; - uint32_t sdu_size; - uint8_t *sdu_p; - uint8_t mode; - uint16_t rnti; - uint8_t module_id; - uint8_t eNB_index; + uint32_t frame; + uint8_t enb_flag; + rb_id_t rb_id; + uint32_t muip; + uint32_t confirmp; + uint32_t sdu_size; + uint8_t *sdu_p; + uint8_t mode; + uint16_t rnti; + uint8_t module_id; + uint8_t eNB_index; } gtpv1u_enb_data_forwarding_ind_t; typedef struct gtpv1u_enb_end_marker_req_s { - uint8_t *buffer; - uint32_t length; - uint32_t offset; ///< start of message offset in buffer - rnti_t rnti; - rb_id_t rab_id; + uint8_t *buffer; + uint32_t length; + uint32_t offset; ///< start of message offset in buffer + rnti_t rnti; + rb_id_t rab_id; } gtpv1u_enb_end_marker_req_t; typedef struct gtpv1u_enb_end_marker_ind_s { - uint32_t frame; - uint8_t enb_flag; - rb_id_t rb_id; - uint32_t muip; - uint32_t confirmp; - uint32_t sdu_size; - uint8_t *sdu_p; - uint8_t mode; - uint16_t rnti; - uint8_t module_id; - uint8_t eNB_index; + uint32_t frame; + uint8_t enb_flag; + rb_id_t rb_id; + uint32_t muip; + uint32_t confirmp; + uint32_t sdu_size; + uint8_t *sdu_p; + uint8_t mode; + uint16_t rnti; + uint8_t module_id; + uint8_t eNB_index; } gtpv1u_enb_end_marker_ind_t; typedef struct { @@ -177,7 +177,7 @@ typedef struct { typedef struct gtpv1u_gnb_create_tunnel_req_s { - rnti_t rnti; + ue_id_t ue_id; int num_tunnels; //teid_t upf_NGu_teid[NR_GTPV1U_MAX_BEARERS_PER_UE]; ///< Tunnel Endpoint Identifier teid_t outgoing_teid[NR_GTPV1U_MAX_BEARERS_PER_UE]; @@ -191,20 +191,20 @@ typedef struct gtpv1u_gnb_create_tunnel_req_s { typedef struct gtpv1u_gnb_create_tunnel_resp_s { uint8_t status; ///< Status of S1U endpoint creation (Failed = 0xFF or Success = 0x0) - rnti_t rnti; + ue_id_t ue_id; int num_tunnels; teid_t gnb_NGu_teid[NR_GTPV1U_MAX_BEARERS_PER_UE]; ///< Tunnel Endpoint Identifier pdusessionid_t pdusession_id[NR_GTPV1U_MAX_BEARERS_PER_UE]; transport_layer_addr_t gnb_addr; } gtpv1u_gnb_create_tunnel_resp_t; typedef struct gtpv1u_gnb_delete_tunnel_req_s { - rnti_t rnti; + ue_id_t ue_id; uint8_t num_pdusession; pdusessionid_t pdusession_id[NR_GTPV1U_MAX_BEARERS_PER_UE]; } gtpv1u_gnb_delete_tunnel_req_t; typedef struct gtpv1u_gnb_delete_tunnel_resp_s { - rnti_t rnti; + ue_id_t ue_id; uint8_t status; ///< Status of NGU endpoint deleteion (Failed = 0xFF or Success = 0x0) teid_t gnb_NGu_teid; ///< local NGU Tunnel Endpoint Identifier to be deleted } gtpv1u_gnb_delete_tunnel_resp_t; @@ -212,13 +212,13 @@ typedef struct gtpv1u_gnb_tunnel_data_req_s { uint8_t *buffer; uint32_t length; uint32_t offset; ///< start of message offset in buffer - rnti_t rnti; + ue_id_t ue_id; pdusessionid_t pdusession_id; } gtpv1u_gnb_tunnel_data_req_t; typedef struct gtpv1u_DU_buffer_report_req_s { uint32_t buffer_availability; - rnti_t rnti; + ue_id_t ue_id; pdusessionid_t pdusession_id; } gtpv1u_DU_buffer_report_req_t; diff --git a/openair2/COMMON/platform_types.h b/openair2/COMMON/platform_types.h index f2297219936779186ef88ea245bc0016e6871221..336ea143eabdaf7490807aa4b19fbd2d7874f696 100644 --- a/openair2/COMMON/platform_types.h +++ b/openair2/COMMON/platform_types.h @@ -49,7 +49,7 @@ typedef uint32_t slot_t; typedef uint16_t module_id_t; typedef uint8_t slice_id_t; typedef uint8_t eNB_index_t; -typedef uint16_t ue_id_t; +typedef uint64_t ue_id_t; typedef int16_t smodule_id_t; typedef long rb_id_t; typedef long srb_id_t; diff --git a/openair3/ocp-gtpu/gtp_itf.cpp b/openair3/ocp-gtpu/gtp_itf.cpp index af2a0ee9e8c3e9ed84a563088a89581551c390b0..978a86290deb1a91142980073338771e9b72c9f9 100644 --- a/openair3/ocp-gtpu/gtp_itf.cpp +++ b/openair3/ocp-gtpu/gtp_itf.cpp @@ -113,13 +113,13 @@ typedef struct { } teidData_t; typedef struct { - rnti_t rnti; + ue_id_t ue_id; ebi_t incoming_rb_id; gtpCallback callBack; teid_t outgoing_teid; gtpCallbackSDAP callBackSDAP; int pdusession_id; -} rntiData_t; +} ueidData_t; class gtpEndPoint { public: @@ -127,8 +127,8 @@ class gtpEndPoint { uint8_t foundAddr[20]; int foundAddrLen; int ipVersion; - map<int,teidData_t> ue2te_mapping; - map<int,rntiData_t> te2ue_mapping; + map<uint64_t,teidData_t> ue2te_mapping; + map<uint64_t,ueidData_t> te2ue_mapping; // we use the same port number for source and destination address // this allow using non standard gtp port number (different from 2152) // and so, for example tu run 4G and 5G cores on one system @@ -141,7 +141,7 @@ class gtpEndPoints { public: pthread_mutex_t gtp_lock=PTHREAD_MUTEX_INITIALIZER; // the instance id will be the Linux socket handler, as this is uniq - map<int, gtpEndPoint> instances; + map<uint64_t, gtpEndPoint> instances; ~gtpEndPoints() { // automatically close all sockets on quit @@ -317,22 +317,22 @@ static void gtpv1uSend(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req, b static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req, bool seqNumFlag, bool npduNumFlag) { uint8_t *buffer=req->buffer+req->offset; size_t length=req->length; - rnti_t rnti=req->rnti; + ue_id_t ue_id=req->ue_id; int rab_id=req->pdusession_id; pthread_mutex_lock(&globGtp.gtp_lock); getInstRetVoid(compatInst(instance)); - getRntiRetVoid(inst, rnti); + getRntiRetVoid(inst, ue_id); map<int, gtpv1u_bearer_t>::iterator ptr2=ptrRnti->second.bearers.find(rab_id); if ( ptr2 == ptrRnti->second.bearers.end() ) { - LOG_D(GTPU,"GTP-U instance: %ld sending a packet to a non existant RNTI:RAB: %x/%x\n", instance, rnti, rab_id); + LOG_D(GTPU,"GTP-U instance: %ld sending a packet to a non existant UE ID:RAB: %lu/%x\n", instance, ue_id, rab_id); pthread_mutex_unlock(&globGtp.gtp_lock); return; } - LOG_D(GTPU,"[%ld] GTP-U sending a packet to RNTI:RAB:teid %x/%x/%x, len %lu, oldseq %d, oldnum %d\n", - instance, rnti, rab_id,ptr2->second.teid_outgoing,length, ptr2->second.seqNum,ptr2->second.npduNum ); + LOG_D(GTPU,"[%ld] GTP-U sending a packet to UE ID:RAB:teid %lu/%x/%x, len %lu, oldseq %d, oldnum %d\n", + instance, ue_id, rab_id,ptr2->second.teid_outgoing,length, ptr2->second.seqNum,ptr2->second.npduNum ); if(seqNumFlag) ptr2->second.seqNum++; @@ -404,16 +404,16 @@ static void fillDlDeliveryStatusReport(extensionHeader_t *extensionHeader, uint3 } static void gtpv1uSendDlDeliveryStatus(instance_t instance, gtpv1u_DU_buffer_report_req_t *req){ - rnti_t rnti=req->rnti; + ue_id_t ue_id=req->ue_id; int rab_id=req->pdusession_id; pthread_mutex_lock(&globGtp.gtp_lock); getInstRetVoid(compatInst(instance)); - getRntiRetVoid(inst, rnti); + getRntiRetVoid(inst, ue_id); map<int, gtpv1u_bearer_t>::iterator ptr2=ptrRnti->second.bearers.find(rab_id); if ( ptr2 == ptrRnti->second.bearers.end() ) { - LOG_D(GTPU,"GTP-U instance: %ld sending a packet to a non existant RNTI:RAB: %x/%x\n", instance, rnti, rab_id); + LOG_D(GTPU,"GTP-U instance: %ld sending a packet to a non existant UE ID:RAB: %lu/%x\n", instance, ue_id, rab_id); pthread_mutex_unlock(&globGtp.gtp_lock); return; } @@ -422,8 +422,8 @@ static void gtpv1uSendDlDeliveryStatus(instance_t instance, gtpv1u_DU_buffer_rep extensionHeader = (extensionHeader_t *) calloc(1, sizeof(extensionHeader_t)); fillDlDeliveryStatusReport(extensionHeader, req->buffer_availability,0); - LOG_I(GTPU,"[%ld] GTP-U sending DL Data Delivery status to RNTI:RAB:teid %x/%x/%x, oldseq %d, oldnum %d\n", - instance, rnti, rab_id,ptr2->second.teid_outgoing, ptr2->second.seqNum,ptr2->second.npduNum ); + LOG_I(GTPU,"[%ld] GTP-U sending DL Data Delivery status to UE ID:RAB:teid %lu/%x/%x, oldseq %d, oldnum %d\n", + instance, ue_id, rab_id,ptr2->second.teid_outgoing, ptr2->second.seqNum,ptr2->second.npduNum ); // copy to release the mutex gtpv1u_bearer_t tmp=ptr2->second; pthread_mutex_unlock(&globGtp.gtp_lock); @@ -579,15 +579,15 @@ instance_t gtpv1Init(openAddr_t context) { return id; } -void GtpuUpdateTunnelOutgoingTeid(instance_t instance, rnti_t rnti, ebi_t bearer_id, teid_t newOutgoingTeid) { +void GtpuUpdateTunnelOutgoingTeid(instance_t instance, ue_id_t ue_id, ebi_t bearer_id, teid_t newOutgoingTeid) { pthread_mutex_lock(&globGtp.gtp_lock); getInstRetVoid(compatInst(instance)); - getRntiRetVoid(inst, rnti); + getRntiRetVoid(inst, ue_id); map<int, gtpv1u_bearer_t>::iterator ptr2=ptrRnti->second.bearers.find(bearer_id); if ( ptr2 == ptrRnti->second.bearers.end() ) { - LOG_E(GTPU,"[%ld] Update tunnel for a existing rnti %x, but wrong bearer_id %u\n", instance, rnti, bearer_id); + LOG_E(GTPU,"[%ld] Update tunnel for a existing ue id %lu, but wrong bearer_id %u\n", instance, ue_id, bearer_id); pthread_mutex_unlock(&globGtp.gtp_lock); return; } @@ -599,7 +599,7 @@ void GtpuUpdateTunnelOutgoingTeid(instance_t instance, rnti_t rnti, ebi_t bearer } teid_t newGtpuCreateTunnel(instance_t instance, - rnti_t rnti, + ue_id_t ue_id, int incoming_bearer_id, int outgoing_bearer_id, teid_t outgoing_teid, @@ -610,10 +610,10 @@ teid_t newGtpuCreateTunnel(instance_t instance, gtpCallbackSDAP callBackSDAP) { pthread_mutex_lock(&globGtp.gtp_lock); getInstRetInt(compatInst(instance)); - auto it=inst->ue2te_mapping.find(rnti); + auto it=inst->ue2te_mapping.find(ue_id); if ( it != inst->ue2te_mapping.end() && it->second.bearers.find(outgoing_bearer_id) != it->second.bearers.end()) { - LOG_W(GTPU,"[%ld] Create a config for a already existing GTP tunnel (rnti %x)\n", instance, rnti); + LOG_W(GTPU,"[%ld] Create a config for a already existing GTP tunnel (ue id %lu)\n", instance, ue_id); inst->ue2te_mapping.erase(it); } @@ -624,7 +624,7 @@ teid_t newGtpuCreateTunnel(instance_t instance, incoming_teid=gtpv1uNewTeid(); }; - inst->te2ue_mapping[incoming_teid].rnti=rnti; + inst->te2ue_mapping[incoming_teid].ue_id=ue_id; inst->te2ue_mapping[incoming_teid].incoming_rb_id= incoming_bearer_id; @@ -636,7 +636,7 @@ teid_t newGtpuCreateTunnel(instance_t instance, inst->te2ue_mapping[incoming_teid].pdusession_id = (uint8_t)outgoing_bearer_id; - gtpv1u_bearer_t *tmp=&inst->ue2te_mapping[rnti].bearers[outgoing_bearer_id]; + gtpv1u_bearer_t *tmp=&inst->ue2te_mapping[ue_id].bearers[outgoing_bearer_id]; int addrs_length_in_bytes = remoteAddr.length / 8; @@ -667,9 +667,9 @@ teid_t newGtpuCreateTunnel(instance_t instance, pthread_mutex_unlock(&globGtp.gtp_lock); char ip4[INET_ADDRSTRLEN]; char ip6[INET6_ADDRSTRLEN]; - LOG_I(GTPU, "[%ld] Created tunnel for RNTI %x, teid for DL: %x, teid for UL %x to remote IPv4: %s, IPv6 %s\n", + LOG_I(GTPU, "[%ld] Created tunnel for UE ID %lu, teid for DL: %x, teid for UL %x to remote IPv4: %s, IPv6 %s\n", instance, - rnti, + ue_id, tmp->teid_incoming, tmp->teid_outgoing, inet_ntop(AF_INET,(void *)&tmp->outgoing_ip_addr, ip4,INET_ADDRSTRLEN ), @@ -680,9 +680,9 @@ teid_t newGtpuCreateTunnel(instance_t instance, int gtpv1u_create_s1u_tunnel(instance_t instance, const gtpv1u_enb_create_tunnel_req_t *create_tunnel_req, gtpv1u_enb_create_tunnel_resp_t *create_tunnel_resp) { - LOG_D(GTPU, "[%ld] Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %x\n", + LOG_D(GTPU, "[%ld] Start create tunnels for UE ID %lu, num_tunnels %d, sgw_S1u_teid %x\n", instance, - create_tunnel_req->rnti, + create_tunnel_req->ue_id, create_tunnel_req->num_tunnels, create_tunnel_req->sgw_S1u_teid[0]); pthread_mutex_lock(&globGtp.gtp_lock); @@ -699,7 +699,7 @@ int gtpv1u_create_s1u_tunnel(instance_t instance, create_tunnel_req->eps_bearer_id[i]); int incoming_rb_id=create_tunnel_req->eps_bearer_id[i]-4; teid_t teid = newGtpuCreateTunnel(compatInst(instance), - create_tunnel_req->rnti, + create_tunnel_req->ue_id, incoming_rb_id, create_tunnel_req->eps_bearer_id[i], create_tunnel_req->sgw_S1u_teid[i], @@ -709,7 +709,7 @@ int gtpv1u_create_s1u_tunnel(instance_t instance, pdcp_data_req, NULL); create_tunnel_resp->status=0; - create_tunnel_resp->rnti=create_tunnel_req->rnti; + create_tunnel_resp->ue_id=create_tunnel_req->ue_id; create_tunnel_resp->num_tunnels=create_tunnel_req->num_tunnels; create_tunnel_resp->enb_S1u_teid[i]=teid; create_tunnel_resp->eps_bearer_id[i] = create_tunnel_req->eps_bearer_id[i]; @@ -722,8 +722,8 @@ int gtpv1u_create_s1u_tunnel(instance_t instance, int gtpv1u_update_s1u_tunnel( const instance_t instance, - const gtpv1u_enb_create_tunnel_req_t *const create_tunnel_req, - const rnti_t prior_rnti + const gtpv1u_enb_create_tunnel_req_t *const create_tunnel_req, + const rnti prior_rnti ) { LOG_D(GTPU, "[%ld] Start update tunnels for old RNTI %x, new RNTI %x, num_tunnels %d, sgw_S1u_teid %x, eps_bearer_id %x\n", instance, @@ -743,7 +743,7 @@ int gtpv1u_update_s1u_tunnel( auto it=inst->ue2te_mapping.find(prior_rnti); if ( it != inst->ue2te_mapping.end() ) { - LOG_W(GTPU,"[%ld] Update a not existing tunnel, start create the new one (new rnti %x, old rnti %x)\n", instance, create_tunnel_req->rnti, prior_rnti); + LOG_W(GTPU,"[%ld] Update a not existing tunnel, start create the new one (new ue id %lu, old ue id %lu)\n", instance, create_tunnel_req->rnti, prior_rnti); pthread_mutex_unlock(&globGtp.gtp_lock); gtpv1u_enb_create_tunnel_resp_t tmp; (void)gtpv1u_create_s1u_tunnel(instance, create_tunnel_req, &tmp); @@ -759,9 +759,9 @@ int gtpv1u_update_s1u_tunnel( int gtpv1u_create_ngu_tunnel( const instance_t instance, const gtpv1u_gnb_create_tunnel_req_t *const create_tunnel_req, gtpv1u_gnb_create_tunnel_resp_t *const create_tunnel_resp) { - LOG_D(GTPU, "[%ld] Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %x\n", + LOG_D(GTPU, "[%ld] Start create tunnels for ue id %lu, num_tunnels %d, sgw_S1u_teid %x\n", instance, - create_tunnel_req->rnti, + create_tunnel_req->ue_id, create_tunnel_req->num_tunnels, create_tunnel_req->outgoing_teid[0]); pthread_mutex_lock(&globGtp.gtp_lock); @@ -773,7 +773,7 @@ int gtpv1u_create_ngu_tunnel( const instance_t instance, pthread_mutex_unlock(&globGtp.gtp_lock); for (int i = 0; i < create_tunnel_req->num_tunnels; i++) { teid_t teid = newGtpuCreateTunnel(instance, - create_tunnel_req->rnti, + create_tunnel_req->ue_id, create_tunnel_req->incoming_rb_id[i], create_tunnel_req->pdusession_id[i], create_tunnel_req->outgoing_teid[i], @@ -783,7 +783,7 @@ int gtpv1u_create_ngu_tunnel( const instance_t instance, pdcp_data_req, sdap_data_req); create_tunnel_resp->status=0; - create_tunnel_resp->rnti=create_tunnel_req->rnti; + create_tunnel_resp->ue_id=create_tunnel_req->ue_id; create_tunnel_resp->num_tunnels=create_tunnel_req->num_tunnels; create_tunnel_resp->gnb_NGu_teid[i]=teid; memcpy(create_tunnel_resp->gnb_addr.buffer,addr,sizeof(addr)); @@ -796,7 +796,7 @@ int gtpv1u_create_ngu_tunnel( const instance_t instance, int gtpv1u_update_ngu_tunnel( const instance_t instanceP, const gtpv1u_gnb_create_tunnel_req_t *const create_tunnel_req_pP, - const rnti_t prior_rnti + const ue_id_t prior_ue_id; ) { AssertFatal( false, "to be developped\n"); return GTPNOK; @@ -809,12 +809,12 @@ int gtpv1u_create_x2u_tunnel( AssertFatal( false, "to be developped\n"); } -int newGtpuDeleteAllTunnels(instance_t instance, rnti_t rnti) { - LOG_D(GTPU, "[%ld] Start delete tunnels for RNTI %x\n", - instance, rnti); +int newGtpuDeleteAllTunnels(instance_t instance, ue_id_t ue_id) { + LOG_D(GTPU, "[%ld] Start delete tunnels for ue id %lu\n", + instance, ue_id); pthread_mutex_lock(&globGtp.gtp_lock); getInstRetInt(compatInst(instance)); - getRntiRetInt(inst, rnti); + getRntiRetInt(inst, ue_id); int nb=0; @@ -827,30 +827,30 @@ int newGtpuDeleteAllTunnels(instance_t instance, rnti_t rnti) { inst->ue2te_mapping.erase(ptrRnti); pthread_mutex_unlock(&globGtp.gtp_lock); - LOG_I(GTPU, "[%ld] Deleted all tunnels for RNTI %x (%d tunnels deleted)\n", instance, rnti, nb); + LOG_I(GTPU, "[%ld] Deleted all tunnels for ue id %x (%d tunnels deleted)\n", instance, ue_id, nb); return !GTPNOK; } -// Legacy delete tunnel finish by deleting all the rnti +// Legacy delete tunnel finish by deleting all the ue id // so the list of bearer provided is only a design bug int gtpv1u_delete_s1u_tunnel( const instance_t instance, const gtpv1u_enb_delete_tunnel_req_t *const req_pP) { return newGtpuDeleteAllTunnels(instance, req_pP->rnti); } -int newGtpuDeleteTunnels(instance_t instance, rnti_t rnti, int nbTunnels, pdusessionid_t *pdusession_id) { - LOG_D(GTPU, "[%ld] Start delete tunnels for RNTI %x\n", - instance, rnti); +int newGtpuDeleteTunnels(instance_t instance, ue_id_t ue_id, int nbTunnels, pdusessionid_t *pdusession_id) { + LOG_D(GTPU, "[%ld] Start delete tunnels for ue id %lu\n", + instance, ue_id); pthread_mutex_lock(&globGtp.gtp_lock); getInstRetInt(compatInst(instance)); - getRntiRetInt(inst, rnti); + getRntiRetInt(inst, ue_id); int nb=0; for (int i=0; i<nbTunnels; i++) { auto ptr2=ptrRnti->second.bearers.find(pdusession_id[i]); if ( ptr2 == ptrRnti->second.bearers.end() ) { - LOG_E(GTPU,"[%ld] GTP-U instance: delete of not existing tunnel RNTI:RAB: %x/%x\n", instance, rnti,pdusession_id[i]); + LOG_E(GTPU,"[%ld] GTP-U instance: delete of not existing tunnel UE ID:RAB: %x/%x\n", instance, ud_id, pdusession_id[i]); } else { inst->te2ue_mapping.erase(ptr2->second.teid_incoming); nb++; @@ -858,11 +858,11 @@ int newGtpuDeleteTunnels(instance_t instance, rnti_t rnti, int nbTunnels, pduses } if (ptrRnti->second.bearers.size() == 0 ) - // no tunnels on this rnti, erase the ue entry + // no tunnels on this ue id, erase the ue entry inst->ue2te_mapping.erase(ptrRnti); pthread_mutex_unlock(&globGtp.gtp_lock); - LOG_I(GTPU, "[%ld] Deleted all tunnels for RNTI %x (%d tunnels deleted)\n", instance, rnti, nb); + LOG_I(GTPU, "[%ld] Deleted all tunnels for ue id %lu (%d tunnels deleted)\n", instance, ue_id, nb); return !GTPNOK; } @@ -874,7 +874,7 @@ int gtpv1u_delete_x2u_tunnel( const instance_t instanceP, int gtpv1u_delete_ngu_tunnel( const instance_t instance, gtpv1u_gnb_delete_tunnel_req_t *req) { - return newGtpuDeleteTunnels(instance, req->rnti, req->num_pdusession, req->pdusession_id); + return newGtpuDeleteTunnels(instance, req->ue_id, req->num_pdusession, req->pdusession_id); } static int Gtpv1uHandleEchoReq(int h,