fix 4G DL rb id
This commit is contained in:
@@ -62,7 +62,7 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
rnti_t rnti;
|
rnti_t rnti;
|
||||||
ebi_t rb_id;
|
ebi_t incoming_rb_id;
|
||||||
gtpCallback callBack;
|
gtpCallback callBack;
|
||||||
} rntiData_t;
|
} rntiData_t;
|
||||||
|
|
||||||
@@ -156,14 +156,14 @@ static int gtpv1uCreateAndSendMsg(int h, uint32_t peerIp, uint16_t peerPort, te
|
|||||||
static void gtpv1uSend(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req, bool seqNumFlag, bool npduNumFlag) {
|
static void gtpv1uSend(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req, bool seqNumFlag, bool npduNumFlag) {
|
||||||
uint8_t *buffer=req->buffer+req->offset;
|
uint8_t *buffer=req->buffer+req->offset;
|
||||||
size_t length=req->length;
|
size_t length=req->length;
|
||||||
uint64_t rnti=req->rnti;
|
rnti_t rnti=req->rnti;
|
||||||
int rab_id=req->rab_id;
|
int rab_id=req->rab_id;
|
||||||
pthread_mutex_lock(&globGtp.gtp_lock);
|
pthread_mutex_lock(&globGtp.gtp_lock);
|
||||||
auto inst=&globGtp.instances[compatInst(instance)];
|
auto inst=&globGtp.instances[compatInst(instance)];
|
||||||
auto ptrRnti=inst->ue2te_mapping.find(rnti);
|
auto ptrRnti=inst->ue2te_mapping.find(rnti);
|
||||||
|
|
||||||
if ( ptrRnti==inst->ue2te_mapping.end() ) {
|
if ( ptrRnti==inst->ue2te_mapping.end() ) {
|
||||||
LOG_E(GTPU, "gtpv1uSend failed: while getting ue rnti %lx in hashtable ue_mapping\n", rnti);
|
LOG_E(GTPU, "gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", rnti);
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -171,11 +171,11 @@ static void gtpv1uSend(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req, b
|
|||||||
auto ptr=ptrRnti->second.bearers;
|
auto ptr=ptrRnti->second.bearers;
|
||||||
|
|
||||||
if ( ptr.find(rab_id) == ptr.end() ) {
|
if ( ptr.find(rab_id) == ptr.end() ) {
|
||||||
LOG_E(GTPU,"sending a packet to a non existant RNTI:RAB: %lx/%x\n", rnti, rab_id);
|
LOG_E(GTPU,"sending a packet to a non existant RNTI:RAB: %x/%x\n", rnti, rab_id);
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
return;
|
return;
|
||||||
} else
|
} else
|
||||||
LOG_D(GTPU,"sending a packet to RNTI:RAB:teid %lx/%x/%x, len %lu, oldseq %d, oldnum %d\n",
|
LOG_D(GTPU,"sending a packet to RNTI:RAB:teid %x/%x/%x, len %lu, oldseq %d, oldnum %d\n",
|
||||||
rnti, rab_id,ptr[rab_id].teid_outgoing,length, ptr[rab_id].seqNum,ptr[rab_id].npduNum );
|
rnti, rab_id,ptr[rab_id].teid_outgoing,length, ptr[rab_id].seqNum,ptr[rab_id].npduNum );
|
||||||
|
|
||||||
if(seqNumFlag)
|
if(seqNumFlag)
|
||||||
@@ -197,14 +197,14 @@ 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) {
|
static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req, bool seqNumFlag, bool npduNumFlag) {
|
||||||
uint8_t *buffer=req->buffer+req->offset;
|
uint8_t *buffer=req->buffer+req->offset;
|
||||||
size_t length=req->length;
|
size_t length=req->length;
|
||||||
uint64_t rnti=req->rnti;
|
rnti_t rnti=req->rnti;
|
||||||
int rab_id=req->pdusession_id;
|
int rab_id=req->pdusession_id;
|
||||||
pthread_mutex_lock(&globGtp.gtp_lock);
|
pthread_mutex_lock(&globGtp.gtp_lock);
|
||||||
auto inst=&globGtp.instances[compatInst(instance)];
|
auto inst=&globGtp.instances[compatInst(instance)];
|
||||||
auto ptrRnti=inst->ue2te_mapping.find(rnti);
|
auto ptrRnti=inst->ue2te_mapping.find(rnti);
|
||||||
|
|
||||||
if ( ptrRnti==inst->ue2te_mapping.end() ) {
|
if ( ptrRnti==inst->ue2te_mapping.end() ) {
|
||||||
LOG_E(GTPU, "gtpv1uSend failed: while getting ue rnti %lx in hashtable ue_mapping\n", rnti);
|
LOG_E(GTPU, "gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", rnti);
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -212,11 +212,11 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
|
|||||||
auto ptr=ptrRnti->second.bearers;
|
auto ptr=ptrRnti->second.bearers;
|
||||||
|
|
||||||
if ( ptr.find(rab_id) == ptr.end() ) {
|
if ( ptr.find(rab_id) == ptr.end() ) {
|
||||||
LOG_E(GTPU,"sending a packet to a non existant RNTI:RAB: %lx/%x\n", rnti, rab_id);
|
LOG_E(GTPU,"sending a packet to a non existant RNTI:RAB: %x/%x\n", rnti, rab_id);
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
return;
|
return;
|
||||||
} else
|
} else
|
||||||
LOG_D(GTPU,"sending a packet to RNTI:RAB:teid %lx/%x/%x, len %lu, oldseq %d, oldnum %d\n",
|
LOG_D(GTPU,"sending a packet to RNTI:RAB:teid %x/%x/%x, len %lu, oldseq %d, oldnum %d\n",
|
||||||
rnti, rab_id,ptr[rab_id].teid_outgoing,length, ptr[rab_id].seqNum,ptr[rab_id].npduNum );
|
rnti, rab_id,ptr[rab_id].teid_outgoing,length, ptr[rab_id].seqNum,ptr[rab_id].npduNum );
|
||||||
|
|
||||||
if(seqNumFlag)
|
if(seqNumFlag)
|
||||||
@@ -236,14 +236,14 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void gtpv1uEndTunnel(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req) {
|
static void gtpv1uEndTunnel(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req) {
|
||||||
uint64_t rnti=req->rnti;
|
rnti_t rnti=req->rnti;
|
||||||
int rab_id=req->rab_id;
|
int rab_id=req->rab_id;
|
||||||
pthread_mutex_lock(&globGtp.gtp_lock);
|
pthread_mutex_lock(&globGtp.gtp_lock);
|
||||||
auto inst=&globGtp.instances[compatInst(instance)];
|
auto inst=&globGtp.instances[compatInst(instance)];
|
||||||
auto ptrRnti=inst->ue2te_mapping.find(rnti);
|
auto ptrRnti=inst->ue2te_mapping.find(rnti);
|
||||||
|
|
||||||
if ( ptrRnti==inst->ue2te_mapping.end() ) {
|
if ( ptrRnti==inst->ue2te_mapping.end() ) {
|
||||||
LOG_E(GTPU, "gtpv1uSend failed: while getting ue rnti %lx in hashtable ue_mapping\n", rnti);
|
LOG_E(GTPU, "gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", rnti);
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -251,11 +251,11 @@ static void gtpv1uEndTunnel(instance_t instance, gtpv1u_enb_tunnel_data_req_t *r
|
|||||||
auto ptr=ptrRnti->second.bearers;
|
auto ptr=ptrRnti->second.bearers;
|
||||||
|
|
||||||
if ( ptr.find(rab_id) == ptr.end() ) {
|
if ( ptr.find(rab_id) == ptr.end() ) {
|
||||||
LOG_E(GTPU,"sending a packet to a non existant RNTI:RAB: %lx/%x\n", rnti, rab_id);
|
LOG_E(GTPU,"sending a packet to a non existant RNTI:RAB: %x/%x\n", rnti, rab_id);
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
return;
|
return;
|
||||||
} else
|
} else
|
||||||
LOG_D(GTPU,"sending a end packet packet to RNTI:RAB:teid %lx/%x/%x\n",
|
LOG_D(GTPU,"sending a end packet packet to RNTI:RAB:teid %x/%x/%x\n",
|
||||||
rnti, rab_id,ptr[rab_id].teid_outgoing);
|
rnti, rab_id,ptr[rab_id].teid_outgoing);
|
||||||
|
|
||||||
ocp_gtpv1u_bearer_t tmp=ptr[rab_id];
|
ocp_gtpv1u_bearer_t tmp=ptr[rab_id];
|
||||||
@@ -386,8 +386,8 @@ instance_t ocp_gtpv1Init(openAddr_t context) {
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int bearer_id, teid_t outgoing_teid,
|
teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int incoming_bearer_id, int outgoing_bearer_id, teid_t outgoing_teid,
|
||||||
transport_layer_addr_t remoteAddr, int port, gtpCallback callBack) {
|
transport_layer_addr_t remoteAddr, int port, gtpCallback callBack) {
|
||||||
pthread_mutex_lock(&globGtp.gtp_lock);
|
pthread_mutex_lock(&globGtp.gtp_lock);
|
||||||
auto inst=&globGtp.instances[instance];
|
auto inst=&globGtp.instances[instance];
|
||||||
auto it=inst->ue2te_mapping.find(rnti);
|
auto it=inst->ue2te_mapping.find(rnti);
|
||||||
@@ -400,17 +400,17 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int bearer_id, teid
|
|||||||
uint32_t incoming_teid=gtpv1uNewTeid();
|
uint32_t incoming_teid=gtpv1uNewTeid();
|
||||||
|
|
||||||
while ( inst->te2ue_mapping.find(incoming_teid) != inst->te2ue_mapping.end() ) {
|
while ( inst->te2ue_mapping.find(incoming_teid) != inst->te2ue_mapping.end() ) {
|
||||||
LOG_W(GTPU, "generated a random Teid that exists, re-generating (%u)\n",incoming_teid);
|
LOG_W(GTPU, "generated a random Teid that exists, re-generating (%x)\n",incoming_teid);
|
||||||
incoming_teid=gtpv1uNewTeid();
|
incoming_teid=gtpv1uNewTeid();
|
||||||
};
|
};
|
||||||
|
|
||||||
inst->te2ue_mapping[incoming_teid].rnti=rnti;
|
inst->te2ue_mapping[incoming_teid].rnti=rnti;
|
||||||
|
|
||||||
inst->te2ue_mapping[incoming_teid].rb_id= outgoing_teid;
|
inst->te2ue_mapping[incoming_teid].incoming_rb_id= incoming_bearer_id;
|
||||||
|
|
||||||
inst->te2ue_mapping[incoming_teid].callBack=callBack;
|
inst->te2ue_mapping[incoming_teid].callBack=callBack;
|
||||||
|
|
||||||
auto tmp=&inst->ue2te_mapping[rnti].bearers[bearer_id];
|
auto tmp=&inst->ue2te_mapping[rnti].bearers[outgoing_bearer_id];
|
||||||
|
|
||||||
int addrs_length_in_bytes = remoteAddr.length / 8;
|
int addrs_length_in_bytes = remoteAddr.length / 8;
|
||||||
|
|
||||||
@@ -433,14 +433,15 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int bearer_id, teid
|
|||||||
default:
|
default:
|
||||||
AssertFatal(false, "SGW Address size impossible");
|
AssertFatal(false, "SGW Address size impossible");
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp->teid_incoming = incoming_teid;
|
tmp->teid_incoming = incoming_teid;
|
||||||
tmp->outgoing_port=port;
|
tmp->outgoing_port=port;
|
||||||
tmp->teid_outgoing= outgoing_teid;
|
tmp->teid_outgoing= outgoing_teid;
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
LOG_I(GTPU, "Created tunnel for RNTI %x, teid for DL: %d, teid for UL %d\n",
|
LOG_I(GTPU, "Created tunnel for RNTI %x, bearer: %d/%d teid for DL: %x, teid for UL %x\n",
|
||||||
rnti,
|
rnti,
|
||||||
tmp->teid_incoming,
|
outgoing_bearer_id, incoming_bearer_id,
|
||||||
|
tmp->teid_incoming,
|
||||||
tmp->teid_outgoing);
|
tmp->teid_outgoing);
|
||||||
return incoming_teid;
|
return incoming_teid;
|
||||||
}
|
}
|
||||||
@@ -448,13 +449,18 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int bearer_id, teid
|
|||||||
int ocp_gtpv1u_create_s1u_tunnel(instance_t instance,
|
int ocp_gtpv1u_create_s1u_tunnel(instance_t instance,
|
||||||
const gtpv1u_enb_create_tunnel_req_t *create_tunnel_req,
|
const gtpv1u_enb_create_tunnel_req_t *create_tunnel_req,
|
||||||
gtpv1u_enb_create_tunnel_resp_t *create_tunnel_resp) {
|
gtpv1u_enb_create_tunnel_resp_t *create_tunnel_resp) {
|
||||||
LOG_D(GTPU, "Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %d\n",
|
LOG_D(GTPU, "Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %x\n",
|
||||||
create_tunnel_req->rnti,
|
create_tunnel_req->rnti,
|
||||||
create_tunnel_req->num_tunnels,
|
create_tunnel_req->num_tunnels,
|
||||||
create_tunnel_req->sgw_S1u_teid[0]);
|
create_tunnel_req->sgw_S1u_teid[0]);
|
||||||
|
|
||||||
for (int i = 0; i < create_tunnel_req->num_tunnels; i++) {
|
for (int i = 0; i < create_tunnel_req->num_tunnels; i++) {
|
||||||
|
AssertFatal(create_tunnel_req->eps_bearer_id[i] > 4,
|
||||||
|
"From legacy code not clear, seems impossible (bearer=%d)\n",
|
||||||
|
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,
|
teid_t teid=newGtpuCreateTunnel(compatInst(instance), create_tunnel_req->rnti,
|
||||||
|
incoming_rb_id,
|
||||||
create_tunnel_req->eps_bearer_id[i],
|
create_tunnel_req->eps_bearer_id[i],
|
||||||
create_tunnel_req->sgw_S1u_teid[i],
|
create_tunnel_req->sgw_S1u_teid[i],
|
||||||
create_tunnel_req->sgw_addr[i], 2152,
|
create_tunnel_req->sgw_addr[i], 2152,
|
||||||
@@ -477,7 +483,7 @@ int ocp_gtpv1u_update_s1u_tunnel(
|
|||||||
const gtpv1u_enb_create_tunnel_req_t *const create_tunnel_req,
|
const gtpv1u_enb_create_tunnel_req_t *const create_tunnel_req,
|
||||||
const rnti_t prior_rnti
|
const rnti_t prior_rnti
|
||||||
) {
|
) {
|
||||||
LOG_D(GTPU, "Start update tunnels for old RNTI %x, new RNTI %x, num_tunnels %d, sgw_S1u_teid %d, eps_bearer_id %d\n",
|
LOG_D(GTPU, "Start update tunnels for old RNTI %x, new RNTI %x, num_tunnels %d, sgw_S1u_teid %x, eps_bearer_id %x\n",
|
||||||
prior_rnti,
|
prior_rnti,
|
||||||
create_tunnel_req->rnti,
|
create_tunnel_req->rnti,
|
||||||
create_tunnel_req->num_tunnels,
|
create_tunnel_req->num_tunnels,
|
||||||
@@ -509,13 +515,14 @@ int ocp_gtpv1u_update_s1u_tunnel(
|
|||||||
int gtpv1u_create_ngu_tunnel( const instance_t instance,
|
int gtpv1u_create_ngu_tunnel( const instance_t instance,
|
||||||
const gtpv1u_gnb_create_tunnel_req_t *const create_tunnel_req,
|
const gtpv1u_gnb_create_tunnel_req_t *const create_tunnel_req,
|
||||||
gtpv1u_gnb_create_tunnel_resp_t *const create_tunnel_resp) {
|
gtpv1u_gnb_create_tunnel_resp_t *const create_tunnel_resp) {
|
||||||
LOG_D(GTPU, "Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %d\n",
|
LOG_D(GTPU, "Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %x\n",
|
||||||
create_tunnel_req->rnti,
|
create_tunnel_req->rnti,
|
||||||
create_tunnel_req->num_tunnels,
|
create_tunnel_req->num_tunnels,
|
||||||
create_tunnel_req->upf_NGu_teid[0]);
|
create_tunnel_req->upf_NGu_teid[0]);
|
||||||
|
|
||||||
for (int i = 0; i < create_tunnel_req->num_tunnels; i++) {
|
for (int i = 0; i < create_tunnel_req->num_tunnels; i++) {
|
||||||
teid_t teid=newGtpuCreateTunnel(compatInst(instance), create_tunnel_req->rnti,
|
teid_t teid=newGtpuCreateTunnel(compatInst(instance), create_tunnel_req->rnti,
|
||||||
|
create_tunnel_req->pdusession_id[i],
|
||||||
create_tunnel_req->pdusession_id[i],
|
create_tunnel_req->pdusession_id[i],
|
||||||
create_tunnel_req->upf_NGu_teid[i],
|
create_tunnel_req->upf_NGu_teid[i],
|
||||||
create_tunnel_req->upf_addr[i], 2152,
|
create_tunnel_req->upf_addr[i], 2152,
|
||||||
@@ -560,13 +567,19 @@ int newGtpuDeleteTunnel(instance_t instance, rnti_t rnti) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nb=0;
|
||||||
|
|
||||||
for (auto j=it->second.bearers.begin();
|
for (auto j=it->second.bearers.begin();
|
||||||
j!=it->second.bearers.end();
|
j!=it->second.bearers.end();
|
||||||
++j)
|
++j) {
|
||||||
inst->te2ue_mapping.erase(j->second.teid_incoming);
|
inst->te2ue_mapping.erase(j->second.teid_incoming);
|
||||||
|
nb++;
|
||||||
|
}
|
||||||
|
|
||||||
inst->ue2te_mapping.erase(it);
|
inst->ue2te_mapping.erase(it);
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
|
LOG_I(GTPU, "Deleted all tunnels for RNTI %d (%d tunnels deleted)\n",
|
||||||
|
rnti, nb);
|
||||||
return !GTPNOK;
|
return !GTPNOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -634,7 +647,7 @@ static int Gtpv1uHandleEndMarker(int h,
|
|||||||
auto tunnel=inst->te2ue_mapping.find(ntohl(msgHdr->teid));
|
auto tunnel=inst->te2ue_mapping.find(ntohl(msgHdr->teid));
|
||||||
|
|
||||||
if ( tunnel == inst->te2ue_mapping.end() ) {
|
if ( tunnel == inst->te2ue_mapping.end() ) {
|
||||||
LOG_E(GTPU,"Received a incoming packet on unknown teid (%d) Dropping!\n", msgHdr->teid);
|
LOG_E(GTPU,"Received a incoming packet on unknown teid (%x) Dropping!\n", msgHdr->teid);
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
return GTPNOK;
|
return GTPNOK;
|
||||||
}
|
}
|
||||||
@@ -653,7 +666,7 @@ static int Gtpv1uHandleEndMarker(int h,
|
|||||||
ctxt.configured = 0;
|
ctxt.configured = 0;
|
||||||
ctxt.brOption = 0;
|
ctxt.brOption = 0;
|
||||||
const srb_flag_t srb_flag=SRB_FLAG_NO;
|
const srb_flag_t srb_flag=SRB_FLAG_NO;
|
||||||
const rb_id_t rb_id=tunnel->second.rb_id;
|
const rb_id_t rb_id=tunnel->second.incoming_rb_id;
|
||||||
const mui_t mui=RLC_MUI_UNDEFINED;
|
const mui_t mui=RLC_MUI_UNDEFINED;
|
||||||
const confirm_t confirm=RLC_SDU_CONFIRM_NO;
|
const confirm_t confirm=RLC_SDU_CONFIRM_NO;
|
||||||
const pdcp_transmission_mode_t mode=PDCP_TRANSMISSION_MODE_DATA;
|
const pdcp_transmission_mode_t mode=PDCP_TRANSMISSION_MODE_DATA;
|
||||||
@@ -695,7 +708,7 @@ static int Gtpv1uHandleGpdu(int h,
|
|||||||
auto tunnel=inst->te2ue_mapping.find(ntohl(msgHdr->teid));
|
auto tunnel=inst->te2ue_mapping.find(ntohl(msgHdr->teid));
|
||||||
|
|
||||||
if ( tunnel == inst->te2ue_mapping.end() ) {
|
if ( tunnel == inst->te2ue_mapping.end() ) {
|
||||||
LOG_E(GTPU,"Received a incoming packet on unknown teid (%d) Dropping!\n", msgHdr->teid);
|
LOG_E(GTPU,"Received a incoming packet on unknown teid (%x) Dropping!\n", msgHdr->teid);
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
return GTPNOK;
|
return GTPNOK;
|
||||||
}
|
}
|
||||||
@@ -719,7 +732,7 @@ static int Gtpv1uHandleGpdu(int h,
|
|||||||
ctxt.configured = 0;
|
ctxt.configured = 0;
|
||||||
ctxt.brOption = 0;
|
ctxt.brOption = 0;
|
||||||
const srb_flag_t srb_flag=SRB_FLAG_NO;
|
const srb_flag_t srb_flag=SRB_FLAG_NO;
|
||||||
const rb_id_t rb_id=tunnel->second.rb_id;
|
const rb_id_t rb_id=tunnel->second.incoming_rb_id;
|
||||||
const mui_t mui=RLC_MUI_UNDEFINED;
|
const mui_t mui=RLC_MUI_UNDEFINED;
|
||||||
const confirm_t confirm=RLC_SDU_CONFIRM_NO;
|
const confirm_t confirm=RLC_SDU_CONFIRM_NO;
|
||||||
const sdu_size_t sdu_buffer_size=msgBufLen-offset;
|
const sdu_size_t sdu_buffer_size=msgBufLen-offset;
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ int ocp_gtpv1u_create_x2u_tunnel(
|
|||||||
|
|
||||||
|
|
||||||
// New API
|
// New API
|
||||||
teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int bearer_id, teid_t teid,
|
teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int incoming_bearer_id, int outgoing_rb_id, teid_t teid,
|
||||||
transport_layer_addr_t remoteAddr, int port, gtpCallback callBack);
|
transport_layer_addr_t remoteAddr, int port, gtpCallback callBack);
|
||||||
instance_t ocp_gtpv1Init(openAddr_t context);
|
instance_t ocp_gtpv1Init(openAddr_t context);
|
||||||
void *ocp_gtpv1uTask(void *args);
|
void *ocp_gtpv1uTask(void *args);
|
||||||
|
|||||||
Reference in New Issue
Block a user