diff --git a/configs/5gc.yaml.in b/configs/5gc.yaml.in index 3c2a50c65..70cae816b 100644 --- a/configs/5gc.yaml.in +++ b/configs/5gc.yaml.in @@ -39,7 +39,7 @@ amf: ciphering_order : [ EEA0, EEA1, EEA2 ] network_name: full: Open5GS - amf_name: amf.open5gs.org + amf_name: open5gs-amf0 smf: sbi: diff --git a/configs/minimal.yaml.in b/configs/minimal.yaml.in index f3cd48c2c..c3b798c45 100644 --- a/configs/minimal.yaml.in +++ b/configs/minimal.yaml.in @@ -43,7 +43,7 @@ amf: ciphering_order : [ EEA0, EEA1, EEA2 ] network_name: full: Open5GS - amf_name: amf.open5gs.org + amf_name: open5gs-amf0 smf: sbi: diff --git a/configs/open5gs/amf.yaml.in b/configs/open5gs/amf.yaml.in index a2fc69599..9f5a3437f 100644 --- a/configs/open5gs/amf.yaml.in +++ b/configs/open5gs/amf.yaml.in @@ -90,7 +90,7 @@ amf: ciphering_order : [ EEA0, EEA1, EEA2 ] network_name: full: Open5GS - amf_name: amf.open5gs.org + amf_name: open5gs-amf0 # # nrf: diff --git a/configs/open5gs/mme.yaml.in b/configs/open5gs/mme.yaml.in index 67f272b80..39b3d637d 100644 --- a/configs/open5gs/mme.yaml.in +++ b/configs/open5gs/mme.yaml.in @@ -197,6 +197,10 @@ logger: # full: Open5GS # short: Next # +# +# +# mme_name: open5gs-mme0 +# mme: freeDiameter: @sysconfdir@/freeDiameter/mme.conf s1ap: @@ -217,6 +221,7 @@ mme: ciphering_order : [ EEA0, EEA1, EEA2 ] network_name: full: Open5GS + mme_name: open5gs-mme0 # # sgw: diff --git a/src/amf/context.h b/src/amf/context.h index 236d2c3e3..aeec359a6 100644 --- a/src/amf/context.h +++ b/src/amf/context.h @@ -48,7 +48,6 @@ typedef struct amf_context_s { ogs_pollset_t *pollset; /* Poll Set for I/O Multiplexing */ OpenAPI_nf_type_e nf_type; - const char *amf_name; /* Served GUMME */ uint8_t num_of_served_guami; @@ -91,6 +90,9 @@ typedef struct amf_context_s { ogs_nas_network_name_t short_name; /* Network short name */ ogs_nas_network_name_t full_name; /* Network Full Name */ + /* AMF Name */ + const char *amf_name; + /* M-TMSI Pool */ OGS_POOL(m_tmsi, amf_m_tmsi_t); diff --git a/src/mme/mme-context.c b/src/mme/mme-context.c index 763617618..a73b796f0 100644 --- a/src/mme/mme-context.c +++ b/src/mme/mme-context.c @@ -1385,6 +1385,8 @@ int mme_context_parse_config() } } while (ogs_yaml_iter_type(&sgsap_array) == YAML_SEQUENCE_NODE); + } else if (!strcmp(mme_key, "mme_name")) { + self.mme_name = ogs_yaml_iter_value(&mme_iter); } else ogs_warn("unknown key `%s`", mme_key); } diff --git a/src/mme/mme-context.h b/src/mme/mme-context.h index bc15573a0..104d7f3c9 100644 --- a/src/mme/mme-context.h +++ b/src/mme/mme-context.h @@ -131,6 +131,16 @@ typedef struct mme_context_s { uint8_t num_of_integrity_order; uint8_t integrity_order[OGS_MAX_NUM_OF_ALGORITHM]; + /* Network Name */ + ogs_nas_network_name_t short_name; /* Network short name */ + ogs_nas_network_name_t full_name; /* Network Full Name */ + + /* MME Name */ + const char *mme_name; + + /* SGW Selection */ + sgw_select_e sgw_selection; + /* S1SetupResponse */ uint8_t relative_capacity; @@ -153,13 +163,6 @@ typedef struct mme_context_s { ogs_timer_mgr_t *timer_mgr; /* Timer Manager */ ogs_pollset_t *pollset; /* Poll Set for I/O Multiplexing */ - /* Network Name */ - ogs_nas_network_name_t short_name; /* Network short name */ - ogs_nas_network_name_t full_name; /* Network Full Name */ - - /* SGW Selection */ - sgw_select_e sgw_selection; - } mme_context_t; typedef struct mme_sgw_s { diff --git a/src/mme/s1ap-build.c b/src/mme/s1ap-build.c index 6125289b9..3cccd3ea3 100644 --- a/src/mme/s1ap-build.c +++ b/src/mme/s1ap-build.c @@ -34,6 +34,7 @@ ogs_pkbuf_t *s1ap_build_setup_rsp(void) S1AP_S1SetupResponseIEs_t *ie = NULL; S1AP_ServedGUMMEIs_t *ServedGUMMEIs = NULL; S1AP_RelativeMMECapacity_t *RelativeMMECapacity = NULL; + S1AP_MMEname_t *MMEname = NULL; memset(&pdu, 0, sizeof (S1AP_S1AP_PDU_t)); pdu.present = S1AP_S1AP_PDU_PR_successfulOutcome; @@ -48,6 +49,17 @@ ogs_pkbuf_t *s1ap_build_setup_rsp(void) S1SetupResponse = &successfulOutcome->value.choice.S1SetupResponse; + if (mme_self()->mme_name) { + ie = CALLOC(1, sizeof(S1AP_S1SetupResponseIEs_t)); + ASN_SEQUENCE_ADD(&S1SetupResponse->protocolIEs, ie); + + ie->id = S1AP_ProtocolIE_ID_id_MMEname; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = S1AP_S1SetupResponseIEs__value_PR_MMEname; + + MMEname = &ie->value.choice.MMEname; + } + ie = CALLOC(1, sizeof(S1AP_S1SetupResponseIEs_t)); ASN_SEQUENCE_ADD(&S1SetupResponse->protocolIEs, ie); @@ -66,6 +78,11 @@ ogs_pkbuf_t *s1ap_build_setup_rsp(void) RelativeMMECapacity = &ie->value.choice.RelativeMMECapacity; + if (MMEname) { + ogs_asn_buffer_to_OCTET_STRING((char*)mme_self()->mme_name, + strlen(mme_self()->mme_name), MMEname); + } + for (i = 0; i < mme_self()->max_num_of_served_gummei; i++) { S1AP_ServedGUMMEIsItem_t *ServedGUMMEIsItem = NULL; ServedGUMMEIsItem = (S1AP_ServedGUMMEIsItem_t *) diff --git a/tests/minimal/minimal-test.c b/tests/minimal/minimal-test.c index b0295b9b8..5f2289617 100644 --- a/tests/minimal/minimal-test.c +++ b/tests/minimal/minimal-test.c @@ -35,9 +35,8 @@ static void test1_func(abts_case *tc, void *data) "0015002d00000300 1b00080002f83910 0001020066001500 000000010002f839" "0001100801020310 0811223300154001 20"; const char *_ng_setup_response = - "2015003d00000400 0100110700616d66 2e6f70656e356773 2e6f726700600008" - "000002f839cafe00 00564001ff005000 100002f839000110 0801020310081122" - "33"; + "2015003a00000400 01000e05806f7065 6e3567732d616d66 3000600008000002" + "f839cafe00005640 01ff005000100002 f839000110080102 031008112233"; const char *_authentication_request = "000b403b00000300 000005c00100009d 000800020001001a 0025240752002008" "0c3818183b522614 162c07601d0d10f1 1b89a2a8de8000ad 0ccf7f55e8b20d";