Follow up on #4102

This commit is contained in:
Sukchan Lee 2025-10-27 21:31:21 +09:00
parent 02118685a4
commit 9c40cf8494
3 changed files with 41 additions and 4 deletions

View file

@ -610,12 +610,11 @@ ED3(uint8_t type:4;,
* See subclause 10.5.3.13 and 10.5.4.33 in 3GPP TS 24.008 [13]. */
#define OGS_NAS_SERVICE_CATEGORY_POLICE 0x01
#define OGS_NAS_SERVICE_CATEGORY_AMBULANCE 0x02
#define OGS_NAS_SERVICE_CATEGORY_FIRE_BRIGARDE 0x04
#define OGS_NAS_SERVICE_CATEGORY_FIRE_BRIGADE 0x04
#define OGS_NAS_SERVICE_CATEGORY_MARINE_GUARD 0x08
#define OGS_NAS_SERVICE_CATEGORY_MOUNTAIN_RESCUE 0x10
#define OGS_NAS_SERVICE_CATEGORY_MANUAL_ECALL 0x20
#define OGS_NAS_SERVICE_CATEGORY_AUTOMATICALLY_ECALL 0x40
#define OGS_NAS_MAX_EMERGENCY_NUMBER_LIST_LEN 48
typedef struct ogs_nas_emergency_number_item_s {
uint8_t length;
ED2(uint8_t spare:3;,

View file

@ -162,6 +162,7 @@ void mme_context_final(void)
mme_vlr_remove_all();
mme_sgsn_remove_all();
mme_hssmap_remove_all();
mme_emerg_remove_all();
ogs_assert(self.enb_addr_hash);
ogs_hash_destroy(self.enb_addr_hash);
@ -2599,7 +2600,7 @@ int mme_context_parse_config(void)
OGS_NAS_SERVICE_CATEGORY_AMBULANCE;
} else if (strstr(v, "fire")) {
categories |=
OGS_NAS_SERVICE_CATEGORY_FIRE_BRIGARDE;
OGS_NAS_SERVICE_CATEGORY_FIRE_BRIGADE;
} else if (strstr(v, "marine")) {
categories |=
OGS_NAS_SERVICE_CATEGORY_MARINE_GUARD;
@ -5274,16 +5275,26 @@ static void stats_remove_mme_session(void)
ogs_info("[Removed] Number of MME-Sessions is now %d", num_of_mme_sess);
}
/*--------------------------------------------------------------
* Emergency Number (EMERG) Management Functions
*-------------------------------------------------------------*/
mme_emerg_t *mme_emerg_add(uint8_t categories, const char *digits)
{
mme_emerg_t *emerg = NULL;
ogs_pool_id_calloc(&mme_emerg_pool, &emerg);
ogs_assert(emerg);
/* Try to allocate an emergency entry from the pool */
if (!emerg) {
ogs_error("Failed to allocate mme_emerg_t from mme_emerg_pool");
return NULL;
}
/* Set attributes */
emerg->categories = categories;
emerg->digits = digits;
/* Add to the golbal emergency list */
ogs_list_add(&self.emerg_list, emerg);
ogs_debug("Added Emergency Number %s (categories 0x%02x)",
@ -5291,3 +5302,28 @@ mme_emerg_t *mme_emerg_add(uint8_t categories, const char *digits)
return emerg;
}
void mme_emerg_remove(mme_emerg_t *emerg)
{
if (!emerg)
return;
/* Remove from the list */
ogs_list_remove(&self.emerg_list, emerg);
/* Release object back to the pool */
ogs_pool_id_free(&mme_emerg_pool, emerg);
ogs_debug("Emergency number entry removed");
}
void mme_emerg_remove_all(void)
{
mme_emerg_t *emerg, *tmp;
/* Iterate safely and free all entries */
ogs_list_for_each_safe(&self.emerg_list, tmp, emerg)
ogs_pool_id_free(&mme_emerg_pool, emerg);
ogs_debug("All emergency number entries removed");
}

View file

@ -1242,6 +1242,8 @@ void mme_ue_save_memento(mme_ue_t *mme_ue, mme_ue_memento_t *memento);
void mme_ue_restore_memento(mme_ue_t *mme_ue, const mme_ue_memento_t *memento);
mme_emerg_t *mme_emerg_add(uint8_t categories, const char *digits);
void mme_emerg_remove(mme_emerg_t *emerg);
void mme_emerg_remove_all(void);
#ifdef __cplusplus
}