Merge remote-tracking branch 'origin/Bugfix_SDAP_delete_entity' into integration_2023_w27
This commit is contained in:
@@ -468,23 +468,74 @@ nr_sdap_entity_t *nr_sdap_get_entity(ue_id_t ue_id, int pdusession_id)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void delete_nr_sdap_entity(ue_id_t ue_id)
|
bool nr_sdap_delete_entity(ue_id_t ue_id, int pdusession_id)
|
||||||
{
|
{
|
||||||
nr_sdap_entity_t *entityPtr, *entityPrev = NULL;
|
nr_sdap_entity_t *entityPtr = sdap_info.sdap_entity_llist;
|
||||||
entityPtr = sdap_info.sdap_entity_llist;
|
nr_sdap_entity_t *entityPrev = NULL;
|
||||||
|
bool ret = false;
|
||||||
|
int upperBound = 0;
|
||||||
|
|
||||||
if (entityPtr->ue_id == ue_id) {
|
if (entityPtr == NULL && (pdusession_id) * (pdusession_id - NGAP_MAX_PDU_SESSION) > 0) {
|
||||||
|
LOG_W(SDAP, "SDAP entities not established or Invalid range of pdusession_id [0, 256].\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
LOG_D(SDAP, "Deleting SDAP entity for UE %lx and PDU Session id %d\n", ue_id, entityPtr->pdusession_id);
|
||||||
|
|
||||||
|
if (entityPtr->ue_id == ue_id && entityPtr->pdusession_id == pdusession_id) {
|
||||||
sdap_info.sdap_entity_llist = sdap_info.sdap_entity_llist->next_entity;
|
sdap_info.sdap_entity_llist = sdap_info.sdap_entity_llist->next_entity;
|
||||||
free(entityPtr);
|
free(entityPtr);
|
||||||
|
LOG_D(SDAP, "Successfully deleted Entity.\n");
|
||||||
|
ret = true;
|
||||||
} else {
|
} else {
|
||||||
while (entityPtr->ue_id != ue_id && entityPtr->next_entity != NULL) {
|
while ((entityPtr->ue_id != ue_id || entityPtr->pdusession_id != pdusession_id) && entityPtr->next_entity != NULL
|
||||||
|
&& upperBound < SDAP_MAX_NUM_OF_ENTITIES) {
|
||||||
entityPrev = entityPtr;
|
entityPrev = entityPtr;
|
||||||
entityPtr = entityPtr->next_entity;
|
entityPtr = entityPtr->next_entity;
|
||||||
|
upperBound++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entityPtr->ue_id != ue_id) {
|
if (entityPtr->ue_id == ue_id && entityPtr->pdusession_id == pdusession_id) {
|
||||||
entityPrev->next_entity = entityPtr->next_entity;
|
entityPrev->next_entity = entityPtr->next_entity;
|
||||||
free(entityPtr);
|
free(entityPtr);
|
||||||
|
LOG_D(SDAP, "Successfully deleted Entity.\n");
|
||||||
|
ret = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LOG_W(SDAP, "Entity does not exist or it was not found.\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool nr_sdap_delete_ue_entities(ue_id_t ue_id)
|
||||||
|
{
|
||||||
|
nr_sdap_entity_t *entityPtr = sdap_info.sdap_entity_llist;
|
||||||
|
nr_sdap_entity_t *entityPrev = NULL;
|
||||||
|
int upperBound = 0;
|
||||||
|
bool ret = false;
|
||||||
|
|
||||||
|
if (entityPtr == NULL && (ue_id) * (ue_id - SDAP_MAX_UE_ID) > 0) {
|
||||||
|
LOG_W(SDAP, "SDAP entities not established or Invalid range of ue_id [0, 65536]\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle scenario where ue_id matches the head of the list */
|
||||||
|
while (entityPtr != NULL && entityPtr->ue_id == ue_id && upperBound < NGAP_MAX_DRBS_PER_UE) {
|
||||||
|
sdap_info.sdap_entity_llist = entityPtr->next_entity;
|
||||||
|
free(entityPtr);
|
||||||
|
entityPtr = sdap_info.sdap_entity_llist;
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (entityPtr != NULL && upperBound < SDAP_MAX_NUM_OF_ENTITIES) {
|
||||||
|
if (entityPtr->ue_id != ue_id) {
|
||||||
|
entityPrev = entityPtr;
|
||||||
|
entityPtr = entityPtr->next_entity;
|
||||||
|
} else {
|
||||||
|
entityPrev->next_entity = entityPtr->next_entity;
|
||||||
|
free(entityPtr);
|
||||||
|
entityPtr = entityPrev->next_entity;
|
||||||
|
LOG_D(SDAP, "Successfully deleted Entity.\n");
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,8 @@
|
|||||||
#define SDAP_CTRL_PDU_MAP_DEF_DRB (0)
|
#define SDAP_CTRL_PDU_MAP_DEF_DRB (0)
|
||||||
#define SDAP_CTRL_PDU_MAP_RULE_DRB (1)
|
#define SDAP_CTRL_PDU_MAP_RULE_DRB (1)
|
||||||
#define SDAP_MAX_PDU (9000)
|
#define SDAP_MAX_PDU (9000)
|
||||||
|
#define SDAP_MAX_NUM_OF_ENTITIES (NGAP_MAX_DRBS_PER_UE * MAX_MOBILES_PER_ENB)
|
||||||
|
#define SDAP_MAX_UE_ID (65536)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The values of QoS Flow ID (QFI) and Reflective QoS Indication,
|
* The values of QoS Flow ID (QFI) and Reflective QoS Indication,
|
||||||
@@ -167,7 +169,21 @@ nr_sdap_entity_t *new_nr_sdap_entity(int is_gnb, bool has_sdap_rx, bool has_sdap
|
|||||||
/* Entity Handling Related Functions */
|
/* Entity Handling Related Functions */
|
||||||
nr_sdap_entity_t *nr_sdap_get_entity(ue_id_t ue_id, int pdusession_id);
|
nr_sdap_entity_t *nr_sdap_get_entity(ue_id_t ue_id, int pdusession_id);
|
||||||
|
|
||||||
/* Entity Handling Related Functions */
|
/**
|
||||||
void delete_nr_sdap_entity(ue_id_t ue_id);
|
* @brief Function to delete a single SDAP Entity based on the ue_id and pdusession_id.
|
||||||
|
* @note 1. SDAP entities may have the same ue_id.
|
||||||
|
* @note 2. SDAP entities may have the same pdusession_id, but not with the same ue_id.
|
||||||
|
* @note 3. The combination of ue_id and pdusession_id, is unique for each SDAP entity.
|
||||||
|
* @param[in] ue_id Unique identifier for the User Equipment. ID Range [0, 65536].
|
||||||
|
* @param[in] pdusession_id Unique identifier for the Packet Data Unit Session. ID Range [0, 256].
|
||||||
|
* @return True, if successfully deleted entity, false otherwise.
|
||||||
|
*/
|
||||||
|
bool nr_sdap_delete_entity(ue_id_t ue_id, int pdusession_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Function to delete all SDAP Entities based on the ue_id.
|
||||||
|
* @param[in] ue_id Unique identifier for the User Equipment. ID Range [0, 65536].
|
||||||
|
* @return True, it deleted at least one entity, false otherwise.
|
||||||
|
*/
|
||||||
|
bool nr_sdap_delete_ue_entities(ue_id_t ue_id);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user