Compare commits

...

3 Commits

Author SHA1 Message Date
Sukchan Lee
6c1f2c4caf Release v2.4.12 2022-11-18 17:21:07 +09:00
Sukchan Lee
0b3ac149af Release v2.4.12 2022-11-18 17:17:03 +09:00
Sukchan Lee
f32ccfbb31 Fixed crash after 48 hours of running (#1893) 2022-11-18 16:44:07 +09:00
26 changed files with 200 additions and 95 deletions

View File

@@ -10,7 +10,7 @@
#
PACKAGE="open5gs"
VERSION="2.4.11"
VERSION="2.4.12"
print_status() {
echo

View File

@@ -26,6 +26,7 @@ static int context_initialized = 0;
static OGS_POOL(nf_instance_pool, ogs_sbi_nf_instance_t);
static OGS_POOL(nf_service_pool, ogs_sbi_nf_service_t);
static OGS_POOL(xact_pool, ogs_sbi_xact_t);
static OGS_POOL(subscription_spec_pool, ogs_sbi_subscription_spec_t);
static OGS_POOL(subscription_data_pool, ogs_sbi_subscription_data_t);
static OGS_POOL(smf_info_pool, ogs_sbi_smf_info_t);
static OGS_POOL(nf_info_pool, ogs_sbi_nf_info_t);
@@ -51,6 +52,9 @@ void ogs_sbi_context_init(void)
ogs_pool_init(&xact_pool, ogs_app()->pool.xact);
ogs_list_init(&self.subscription_spec_list);
ogs_pool_init(&subscription_spec_pool, ogs_app()->pool.subscription);
ogs_list_init(&self.subscription_data_list);
ogs_pool_init(&subscription_data_pool, ogs_app()->pool.subscription);
@@ -77,6 +81,9 @@ void ogs_sbi_context_final(void)
ogs_sbi_subscription_data_remove_all();
ogs_pool_final(&subscription_data_pool);
ogs_sbi_subscription_spec_remove_all();
ogs_pool_final(&subscription_spec_pool);
ogs_pool_final(&xact_pool);
ogs_sbi_nf_instance_remove_all();
@@ -1746,6 +1753,49 @@ ogs_sbi_xact_t *ogs_sbi_xact_cycle(ogs_sbi_xact_t *xact)
return ogs_pool_cycle(&xact_pool, xact);
}
ogs_sbi_subscription_spec_t *ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_e nf_type, const char *service_name)
{
ogs_sbi_subscription_spec_t *subscription_spec = NULL;
ogs_assert(nf_type);
ogs_pool_alloc(&subscription_spec_pool, &subscription_spec);
ogs_assert(subscription_spec);
memset(subscription_spec, 0, sizeof(ogs_sbi_subscription_spec_t));
subscription_spec->subscr_cond.nf_type = nf_type;
if (service_name)
subscription_spec->subscr_cond.service_name = ogs_strdup(service_name);
ogs_list_add(&ogs_sbi_self()->subscription_spec_list, subscription_spec);
return subscription_spec;
}
void ogs_sbi_subscription_spec_remove(
ogs_sbi_subscription_spec_t *subscription_spec)
{
ogs_assert(subscription_spec);
ogs_list_remove(&ogs_sbi_self()->subscription_spec_list, subscription_spec);
if (subscription_spec->subscr_cond.service_name)
ogs_free(subscription_spec->subscr_cond.service_name);
ogs_pool_free(&subscription_spec_pool, subscription_spec);
}
void ogs_sbi_subscription_spec_remove_all(void)
{
ogs_sbi_subscription_spec_t *subscription_spec = NULL;
ogs_sbi_subscription_spec_t *next_subscription_spec = NULL;
ogs_list_for_each_safe(&ogs_sbi_self()->subscription_spec_list,
next_subscription_spec, subscription_spec)
ogs_sbi_subscription_spec_remove(subscription_spec);
}
ogs_sbi_subscription_data_t *ogs_sbi_subscription_data_add(void)
{
ogs_sbi_subscription_data_t *subscription_data = NULL;
@@ -1843,39 +1893,3 @@ ogs_sbi_subscription_data_t *ogs_sbi_subscription_data_find(char *id)
return subscription_data;
}
void ogs_sbi_subscription_data_build_default(
OpenAPI_nf_type_e nf_type, const char *service_name)
{
ogs_sbi_subscription_data_t *subscription_data = NULL;
ogs_sbi_nf_instance_t *nf_instance = NULL, *nrf_instance = NULL;
ogs_sbi_client_t *client = NULL;
ogs_assert(nf_type);
nrf_instance = ogs_sbi_self()->nrf_instance;
if (!nrf_instance) {
ogs_warn("[%s:%s] has no NRF",
OpenAPI_nf_type_ToString(nf_type), service_name);
return;
}
client = nrf_instance->client;
ogs_assert(client);
nf_instance = ogs_sbi_self()->nf_instance;
ogs_assert(nf_instance);
ogs_assert(nf_instance->id);
ogs_assert(nf_instance->nf_type);
subscription_data = ogs_sbi_subscription_data_add();
ogs_assert(subscription_data);
OGS_SBI_SETUP_CLIENT(subscription_data, client);
subscription_data->req_nf_type = nf_instance->nf_type;
if (nf_instance->id)
subscription_data->req_nf_instance_id = ogs_strdup(nf_instance->id);
subscription_data->subscr_cond.nf_type = nf_type;
if (service_name)
subscription_data->subscr_cond.service_name = ogs_strdup(service_name);
}

View File

@@ -57,6 +57,7 @@ typedef struct ogs_sbi_context_s {
ogs_uuid_t uuid;
ogs_list_t nf_instance_list;
ogs_list_t subscription_spec_list;
ogs_list_t subscription_data_list;
ogs_sbi_nf_instance_t *nf_instance; /* SELF NF Instance */
@@ -203,6 +204,16 @@ typedef struct ogs_sbi_nf_service_s {
void *client;
} ogs_sbi_nf_service_t;
typedef struct ogs_sbi_subscription_spec_s {
ogs_lnode_t lnode;
struct {
OpenAPI_nf_type_e nf_type; /* nfType */
char *service_name; /* ServiceName */
} subscr_cond;
} ogs_sbi_subscription_spec_t;
typedef struct ogs_sbi_subscription_data_s {
ogs_lnode_t lnode;
@@ -220,7 +231,7 @@ typedef struct ogs_sbi_subscription_data_s {
struct {
OpenAPI_nf_type_e nf_type; /* nfType */
char *service_name; /* ServiceName */
char *service_name; /* ServiceName */
} subscr_cond;
uint64_t requester_features;
@@ -391,6 +402,12 @@ void ogs_sbi_xact_remove(ogs_sbi_xact_t *xact);
void ogs_sbi_xact_remove_all(ogs_sbi_object_t *sbi_object);
ogs_sbi_xact_t *ogs_sbi_xact_cycle(ogs_sbi_xact_t *xact);
ogs_sbi_subscription_spec_t *ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_e nf_type, const char *service_name);
void ogs_sbi_subscription_spec_remove(
ogs_sbi_subscription_spec_t *subscription_spec);
void ogs_sbi_subscription_spec_remove_all(void);
ogs_sbi_subscription_data_t *ogs_sbi_subscription_data_add(void);
void ogs_sbi_subscription_data_set_id(
ogs_sbi_subscription_data_t *subscription_data, char *id);
@@ -400,8 +417,6 @@ void ogs_sbi_subscription_data_remove_all_by_nf_instance_id(
char *nf_instance_id);
void ogs_sbi_subscription_data_remove_all(void);
ogs_sbi_subscription_data_t *ogs_sbi_subscription_data_find(char *id);
void ogs_sbi_subscription_data_build_default(
OpenAPI_nf_type_e nf_type, const char *service_name);
#ifdef __cplusplus
}

View File

@@ -204,6 +204,7 @@ void ogs_sbi_nf_state_will_register(ogs_fsm_t *s, ogs_event_t *e)
void ogs_sbi_nf_state_registered(ogs_fsm_t *s, ogs_event_t *e)
{
ogs_sbi_nf_instance_t *nf_instance = NULL;
ogs_sbi_client_t *client = NULL;
ogs_sbi_message_t *message = NULL;
ogs_assert(s);
ogs_assert(e);
@@ -217,7 +218,10 @@ void ogs_sbi_nf_state_registered(ogs_fsm_t *s, ogs_event_t *e)
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
if (NF_INSTANCE_TYPE_IS_NRF(nf_instance)) {
ogs_sbi_subscription_data_t *subscription_data = NULL;
ogs_sbi_subscription_spec_t *subscription_spec = NULL;
client = nf_instance->client;
ogs_assert(client);
ogs_info("[%s] NF registered [Heartbeat:%ds]",
ogs_sbi_self()->nf_instance->id,
@@ -233,9 +237,13 @@ void ogs_sbi_nf_state_registered(ogs_fsm_t *s, ogs_event_t *e)
}
ogs_list_for_each(
&ogs_sbi_self()->subscription_data_list, subscription_data) {
ogs_assert(true ==
ogs_nnrf_nfm_send_nf_status_subscribe(subscription_data));
&ogs_sbi_self()->subscription_spec_list, subscription_spec) {
ogs_nnrf_nfm_send_nf_status_subscribe(
client,
ogs_sbi_self()->nf_instance->nf_type,
ogs_sbi_self()->nf_instance->id,
subscription_spec->subscr_cond.nf_type,
subscription_spec->subscr_cond.service_name);
}
}
break;

View File

@@ -232,18 +232,33 @@ bool ogs_nnrf_nfm_send_nf_profile_retrieve(ogs_sbi_nf_instance_t *nf_instance,
}
bool ogs_nnrf_nfm_send_nf_status_subscribe(
ogs_sbi_subscription_data_t *subscription_data)
ogs_sbi_client_t *client,
OpenAPI_nf_type_e req_nf_type, char *req_nf_instance_id,
OpenAPI_nf_type_e subscr_cond_nf_type,
char *subscr_cond_service_name)
{
ogs_sbi_request_t *request = NULL;
ogs_sbi_client_t *client = NULL;
ogs_sbi_subscription_data_t *subscription_data = NULL;
ogs_assert(client);
subscription_data = ogs_sbi_subscription_data_add();
ogs_assert(subscription_data);
request = ogs_nnrf_nfm_build_status_subscribe(subscription_data);
ogs_expect_or_return_val(request, false);
OGS_SBI_SETUP_CLIENT(subscription_data, client);
subscription_data->req_nf_type = req_nf_type;
if (req_nf_instance_id)
subscription_data->req_nf_instance_id = ogs_strdup(req_nf_instance_id);
subscription_data->subscr_cond.nf_type = subscr_cond_nf_type;
if (subscr_cond_service_name)
subscription_data->subscr_cond.service_name =
ogs_strdup(subscr_cond_service_name);
client = subscription_data->client;
ogs_assert(client);
request = ogs_nnrf_nfm_build_status_subscribe(subscription_data);
if (!request) {
ogs_error("No request");
return false;
}
return ogs_sbi_scp_send_request(
client, client->cb, request, subscription_data);

View File

@@ -40,7 +40,10 @@ bool ogs_nnrf_nfm_send_nf_profile_retrieve(ogs_sbi_nf_instance_t *nf_instance,
char *nf_instance_id, void *data);
bool ogs_nnrf_nfm_send_nf_status_subscribe(
ogs_sbi_subscription_data_t *subscription_data);
ogs_sbi_client_t *client,
OpenAPI_nf_type_e req_nf_type, char *req_nf_instance_id,
OpenAPI_nf_type_e subscr_cond_nf_type,
char *subscr_cond_service_name);
bool ogs_nnrf_nfm_send_nf_status_unsubscribe(
ogs_sbi_subscription_data_t *subscription_data);

View File

@@ -16,7 +16,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
project('open5gs', 'c', 'cpp',
version : '2.4.11',
version : '2.4.12',
license : 'AGPL-3.0-or-later',
meson_version : '>= 0.43.0',
default_options : [
@@ -24,7 +24,7 @@ project('open5gs', 'c', 'cpp',
],
)
libogslib_version = '2.4.11'
libogslib_version = '2.4.12'
prefix = get_option('prefix')
bindir = join_paths(prefix, get_option('bindir'))

View File

@@ -574,7 +574,12 @@ void amf_state_operational(ogs_fsm_t *s, amf_event_t *e)
ogs_assert(subscription_data);
ogs_assert(true ==
ogs_nnrf_nfm_send_nf_status_subscribe(subscription_data));
ogs_nnrf_nfm_send_nf_status_subscribe(
subscription_data->client,
ogs_sbi_self()->nf_instance->nf_type,
subscription_data->req_nf_instance_id,
subscription_data->subscr_cond.nf_type,
subscription_data->subscr_cond.service_name));
ogs_info("Subscription validity expired [%s]",
subscription_data->id);

View File

@@ -117,18 +117,18 @@ int amf_sbi_open(void)
ogs_sbi_nf_fsm_init(nf_instance);
}
/* Build Subscription-Data */
ogs_sbi_subscription_data_build_default(
/* Setup Subscription-Data */
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_AUSF, OGS_SBI_SERVICE_NAME_NAUSF_AUTH);
ogs_sbi_subscription_data_build_default(
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_UDM, OGS_SBI_SERVICE_NAME_NUDM_UECM);
ogs_sbi_subscription_data_build_default(
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_UDM, OGS_SBI_SERVICE_NAME_NUDM_SDM);
ogs_sbi_subscription_data_build_default(
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_PCF, OGS_SBI_SERVICE_NAME_NPCF_AM_POLICY_CONTROL);
ogs_sbi_subscription_data_build_default(
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_SMF, OGS_SBI_SERVICE_NAME_NSMF_PDUSESSION);
ogs_sbi_subscription_data_build_default(
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_NSSF, OGS_SBI_SERVICE_NAME_NNSSF_NSSELECTION);
if (ogs_sbi_server_start_all(server_cb) != OGS_OK)

View File

@@ -343,7 +343,12 @@ void ausf_state_operational(ogs_fsm_t *s, ausf_event_t *e)
ogs_assert(subscription_data);
ogs_assert(true ==
ogs_nnrf_nfm_send_nf_status_subscribe(subscription_data));
ogs_nnrf_nfm_send_nf_status_subscribe(
subscription_data->client,
ogs_sbi_self()->nf_instance->nf_type,
subscription_data->req_nf_instance_id,
subscription_data->subscr_cond.nf_type,
subscription_data->subscr_cond.service_name));
ogs_info("Subscription validity expired [%s]",
subscription_data->id);

View File

@@ -114,8 +114,8 @@ int ausf_sbi_open(void)
ogs_sbi_nf_fsm_init(nf_instance);
}
/* Build Subscription-Data */
ogs_sbi_subscription_data_build_default(
/* Setup Subscription-Data */
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_UDM, OGS_SBI_SERVICE_NAME_NUDM_UEAU);
if (ogs_sbi_server_start_all(server_cb) != OGS_OK)

View File

@@ -328,7 +328,12 @@ void bsf_state_operational(ogs_fsm_t *s, bsf_event_t *e)
ogs_assert(subscription_data);
ogs_assert(true ==
ogs_nnrf_nfm_send_nf_status_subscribe(subscription_data));
ogs_nnrf_nfm_send_nf_status_subscribe(
subscription_data->client,
ogs_sbi_self()->nf_instance->nf_type,
subscription_data->req_nf_instance_id,
subscription_data->subscr_cond.nf_type,
subscription_data->subscr_cond.service_name));
ogs_info("Subscription validity expired [%s]",
subscription_data->id);

View File

@@ -244,7 +244,12 @@ void nssf_state_operational(ogs_fsm_t *s, nssf_event_t *e)
ogs_assert(subscription_data);
ogs_assert(true ==
ogs_nnrf_nfm_send_nf_status_subscribe(subscription_data));
ogs_nnrf_nfm_send_nf_status_subscribe(
subscription_data->client,
ogs_sbi_self()->nf_instance->nf_type,
subscription_data->req_nf_instance_id,
subscription_data->subscr_cond.nf_type,
subscription_data->subscr_cond.service_name));
ogs_info("Subscription validity expired [%s]",
subscription_data->id);

View File

@@ -574,7 +574,12 @@ void pcf_state_operational(ogs_fsm_t *s, pcf_event_t *e)
ogs_assert(subscription_data);
ogs_assert(true ==
ogs_nnrf_nfm_send_nf_status_subscribe(subscription_data));
ogs_nnrf_nfm_send_nf_status_subscribe(
subscription_data->client,
ogs_sbi_self()->nf_instance->nf_type,
subscription_data->req_nf_instance_id,
subscription_data->subscr_cond.nf_type,
subscription_data->subscr_cond.service_name));
ogs_info("[%s] Subscription validity expired",
subscription_data->id);

View File

@@ -161,10 +161,10 @@ int pcf_sbi_open(void)
ogs_sbi_nf_fsm_init(nf_instance);
}
/* Build Subscription-Data */
ogs_sbi_subscription_data_build_default(
/* Setup Subscription-Data */
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_BSF, OGS_SBI_SERVICE_NAME_NBSF_MANAGEMENT);
ogs_sbi_subscription_data_build_default(
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_UDR, OGS_SBI_SERVICE_NAME_NUDR_DR);
if (ogs_sbi_server_start_all(server_cb) != OGS_OK)

View File

@@ -52,15 +52,15 @@ int scp_sbi_open(void)
ogs_sbi_nf_fsm_init(nf_instance);
}
/* Build Subscription-Data */
ogs_sbi_subscription_data_build_default(OpenAPI_nf_type_AMF, NULL);
ogs_sbi_subscription_data_build_default(OpenAPI_nf_type_AUSF, NULL);
ogs_sbi_subscription_data_build_default(OpenAPI_nf_type_BSF, NULL);
ogs_sbi_subscription_data_build_default(OpenAPI_nf_type_NSSF, NULL);
ogs_sbi_subscription_data_build_default(OpenAPI_nf_type_PCF, NULL);
ogs_sbi_subscription_data_build_default(OpenAPI_nf_type_SMF, NULL);
ogs_sbi_subscription_data_build_default(OpenAPI_nf_type_UDM, NULL);
ogs_sbi_subscription_data_build_default(OpenAPI_nf_type_UDR, NULL);
/* Setup Subscription-Data */
ogs_sbi_subscription_spec_add(OpenAPI_nf_type_AMF, NULL);
ogs_sbi_subscription_spec_add(OpenAPI_nf_type_AUSF, NULL);
ogs_sbi_subscription_spec_add(OpenAPI_nf_type_BSF, NULL);
ogs_sbi_subscription_spec_add(OpenAPI_nf_type_NSSF, NULL);
ogs_sbi_subscription_spec_add(OpenAPI_nf_type_PCF, NULL);
ogs_sbi_subscription_spec_add(OpenAPI_nf_type_SMF, NULL);
ogs_sbi_subscription_spec_add(OpenAPI_nf_type_UDM, NULL);
ogs_sbi_subscription_spec_add(OpenAPI_nf_type_UDR, NULL);
if (ogs_sbi_server_start_all(request_handler) != OGS_OK)
return OGS_ERROR;

View File

@@ -327,7 +327,12 @@ void scp_state_operational(ogs_fsm_t *s, scp_event_t *e)
ogs_assert(subscription_data);
ogs_assert(true ==
ogs_nnrf_nfm_send_nf_status_subscribe(subscription_data));
ogs_nnrf_nfm_send_nf_status_subscribe(
subscription_data->client,
ogs_sbi_self()->nf_instance->nf_type,
subscription_data->req_nf_instance_id,
subscription_data->subscr_cond.nf_type,
subscription_data->subscr_cond.service_name));
ogs_info("Subscription validity expired [%s]",
subscription_data->id);

View File

@@ -116,12 +116,12 @@ int smf_sbi_open(void)
ogs_sbi_nf_fsm_init(nf_instance);
}
/* Build Subscription-Data */
ogs_sbi_subscription_data_build_default(
/* Setup Subscription-Data */
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_AMF, OGS_SBI_SERVICE_NAME_NAMF_COMM);
ogs_sbi_subscription_data_build_default(
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_PCF, OGS_SBI_SERVICE_NAME_NPCF_SMPOLICYCONTROL);
ogs_sbi_subscription_data_build_default(
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_UDM, OGS_SBI_SERVICE_NAME_NUDM_SDM);
if (ogs_sbi_server_start_all(server_cb) != OGS_OK)

View File

@@ -805,7 +805,12 @@ void smf_state_operational(ogs_fsm_t *s, smf_event_t *e)
ogs_assert(subscription_data);
ogs_assert(true ==
ogs_nnrf_nfm_send_nf_status_subscribe(subscription_data));
ogs_nnrf_nfm_send_nf_status_subscribe(
subscription_data->client,
ogs_sbi_self()->nf_instance->nf_type,
subscription_data->req_nf_instance_id,
subscription_data->subscr_cond.nf_type,
subscription_data->subscr_cond.service_name));
ogs_info("Subscription validity expired [%s]",
subscription_data->id);

View File

@@ -135,8 +135,8 @@ int udm_sbi_open(void)
ogs_sbi_nf_fsm_init(nf_instance);
}
/* Build Subscription-Data */
ogs_sbi_subscription_data_build_default(OpenAPI_nf_type_UDR, NULL);
/* Setup Subscription-Data */
ogs_sbi_subscription_spec_add(OpenAPI_nf_type_UDR, NULL);
if (ogs_sbi_server_start_all(server_cb) != OGS_OK)
return OGS_ERROR;

View File

@@ -385,7 +385,12 @@ void udm_state_operational(ogs_fsm_t *s, udm_event_t *e)
ogs_assert(subscription_data);
ogs_assert(true ==
ogs_nnrf_nfm_send_nf_status_subscribe(subscription_data));
ogs_nnrf_nfm_send_nf_status_subscribe(
subscription_data->client,
ogs_sbi_self()->nf_instance->nf_type,
subscription_data->req_nf_instance_id,
subscription_data->subscr_cond.nf_type,
subscription_data->subscr_cond.service_name));
ogs_info("[%s] Subscription validity expired",
subscription_data->id);

View File

@@ -292,7 +292,12 @@ void udr_state_operational(ogs_fsm_t *s, udr_event_t *e)
ogs_assert(subscription_data);
ogs_assert(true ==
ogs_nnrf_nfm_send_nf_status_subscribe(subscription_data));
ogs_nnrf_nfm_send_nf_status_subscribe(
subscription_data->client,
ogs_sbi_self()->nf_instance->nf_type,
subscription_data->req_nf_instance_id,
subscription_data->subscr_cond.nf_type,
subscription_data->subscr_cond.service_name));
ogs_info("[%s] Subscription validity expired",
subscription_data->id);

View File

@@ -415,7 +415,12 @@ void af_state_operational(ogs_fsm_t *s, af_event_t *e)
ogs_assert(subscription_data);
ogs_assert(true ==
ogs_nnrf_nfm_send_nf_status_subscribe(subscription_data));
ogs_nnrf_nfm_send_nf_status_subscribe(
subscription_data->client,
ogs_sbi_self()->nf_instance->nf_type,
subscription_data->req_nf_instance_id,
subscription_data->subscr_cond.nf_type,
subscription_data->subscr_cond.service_name));
ogs_info("Subscription validity expired [%s]",
subscription_data->id);

View File

@@ -101,8 +101,8 @@ int af_sbi_open(void)
ogs_sbi_nf_fsm_init(nf_instance);
}
/* Build Subscription-Data */
ogs_sbi_subscription_data_build_default(
/* Setup Subscription-Data */
ogs_sbi_subscription_spec_add(
OpenAPI_nf_type_BSF, OGS_SBI_SERVICE_NAME_NBSF_MANAGEMENT);
if (ogs_sbi_server_start_all(server_cb) != OGS_OK)

View File

@@ -1,12 +1,12 @@
{
"name": "open5gs",
"version": "2.4.11",
"version": "2.4.12",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "open5gs",
"version": "2.4.11",
"version": "2.4.12",
"license": "AGPL-3.0",
"dependencies": {
"axios": "^0.16.2",

View File

@@ -1,6 +1,6 @@
{
"name": "open5gs",
"version": "2.4.11",
"version": "2.4.12",
"description": "Open5gs",
"main": "index.js",
"repository": "https://github.com/open5gs/open5gs/webui",