mirror of
https://github.com/open5gs/open5gs.git
synced 2026-04-26 10:30:41 +00:00
Follow up on #4102
This commit is contained in:
parent
02118685a4
commit
9c40cf8494
3 changed files with 41 additions and 4 deletions
|
|
@ -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;,
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue