Add newGtpuDeleteOneTunnel() to remove one GTP tunnel
This commit is contained in:
@@ -803,6 +803,32 @@ int gtpv1u_create_x2u_tunnel(
|
||||
AssertFatal( false, "to be developped\n");
|
||||
}
|
||||
|
||||
int newGtpuDeleteOneTunnel(instance_t instance, ue_id_t ue_id, int rb_id)
|
||||
{
|
||||
pthread_mutex_lock(&globGtp.gtp_lock);
|
||||
getInstRetInt(compatInst(instance));
|
||||
map<uint64_t, teidData_t>::iterator ue_it = inst->ue2te_mapping.find(ue_id);
|
||||
if (ue_it == inst->ue2te_mapping.end()) {
|
||||
LOG_E(GTPU, "%s() no such UE %ld\n", __func__, ue_id);
|
||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||
return !GTPNOK;
|
||||
}
|
||||
map<ue_id_t, gtpv1u_bearer_t>::iterator rb_it = ue_it->second.bearers.find(rb_id);
|
||||
if (rb_it == ue_it->second.bearers.end()) {
|
||||
LOG_E(GTPU, "%s() UE %ld has no bearer %d, available\n", __func__, ue_id, rb_id);
|
||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||
return !GTPNOK;
|
||||
}
|
||||
int teid = rb_it->second.teid_incoming;
|
||||
globGtp.te2ue_mapping.erase(teid);
|
||||
ue_it->second.bearers.erase(rb_id);
|
||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||
LOG_I(GTPU, "Deleted tunnel TEID %d (RB %d) for ue id %ld, remaining bearers:\n", teid, rb_id, ue_id);
|
||||
for (auto b: ue_it->second.bearers)
|
||||
LOG_I(GTPU, "bearer %ld\n", b.first);
|
||||
return !GTPNOK;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
@@ -98,6 +98,7 @@ extern "C" {
|
||||
in_addr_t newOutgoingAddr,
|
||||
teid_t newOutgoingTeid);
|
||||
|
||||
int newGtpuDeleteOneTunnel(instance_t instance, ue_id_t ue_id, int rb_id);
|
||||
int newGtpuDeleteAllTunnels(instance_t instance, ue_id_t ue_id);
|
||||
int newGtpuDeleteTunnels(instance_t instance, ue_id_t ue_id, int nbTunnels, pdusessionid_t *pdusession_id);
|
||||
instance_t gtpv1Init(openAddr_t context);
|
||||
|
||||
Reference in New Issue
Block a user