mirror of
https://github.com/open5gs/open5gs.git
synced 2025-10-23 07:41:57 +00:00
update it
This commit is contained in:
@@ -133,6 +133,7 @@ typedef struct ogs_gtp_xact_s {
|
||||
#define OGS_GTP_DELETE_SEND_RELEASE_WITH_S1_REMOVE_AND_UNLINK 6
|
||||
#define OGS_GTP_DELETE_HANDLE_PDN_CONNECTIVITY_REQUEST 7
|
||||
#define OGS_GTP_DELETE_IN_PATH_SWITCH_REQUEST 8
|
||||
#define OGS_GTP_DELETE_SEND_TAU_ACCEPT 9
|
||||
|
||||
int delete_action;
|
||||
|
||||
|
@@ -90,22 +90,27 @@ typedef struct ogs_nas_additional_information_s {
|
||||
* O TLV 4 */
|
||||
typedef struct ogs_nas_eps_bearer_context_status_s {
|
||||
uint8_t length;
|
||||
ED8(uint8_t ebi7:1;,
|
||||
uint8_t ebi6:1;,
|
||||
uint8_t ebi5:1;,
|
||||
uint8_t ebi4:1;,
|
||||
uint8_t ebi3:1;,
|
||||
uint8_t ebi2:1;,
|
||||
uint8_t ebi1:1;,
|
||||
uint8_t ebi0:1;)
|
||||
ED8(uint8_t ebi15:1;,
|
||||
uint8_t ebi14:1;,
|
||||
uint8_t ebi13:1;,
|
||||
uint8_t ebi12:1;,
|
||||
uint8_t ebi11:1;,
|
||||
uint8_t ebi10:1;,
|
||||
uint8_t ebi9:1;,
|
||||
uint8_t ebi8:1;)
|
||||
union {
|
||||
struct {
|
||||
ED8(uint8_t ebi7:1;,
|
||||
uint8_t ebi6:1;,
|
||||
uint8_t ebi5:1;,
|
||||
uint8_t ebi4:1;,
|
||||
uint8_t ebi3:1;,
|
||||
uint8_t ebi2:1;,
|
||||
uint8_t ebi1:1;,
|
||||
uint8_t ebi0:1;)
|
||||
ED8(uint8_t ebi15:1;,
|
||||
uint8_t ebi14:1;,
|
||||
uint8_t ebi13:1;,
|
||||
uint8_t ebi12:1;,
|
||||
uint8_t ebi11:1;,
|
||||
uint8_t ebi10:1;,
|
||||
uint8_t ebi9:1;,
|
||||
uint8_t ebi8:1;)
|
||||
};
|
||||
uint16_t value;
|
||||
};
|
||||
} __attribute__ ((packed)) ogs_nas_eps_bearer_context_status_t;
|
||||
|
||||
typedef struct ogs_nas_mobile_identity_imeisv_s {
|
||||
|
@@ -726,11 +726,74 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e,
|
||||
S1AP_ProcedureCode_id_InitialContextSetup);
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
} else {
|
||||
} else if (!(message->emm.tracking_area_update_request.
|
||||
presencemask &
|
||||
OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_EPS_BEARER_CONTEXT_STATUS_TYPE)) {
|
||||
ogs_debug("[%s] No EPS Bearer Context Status "
|
||||
"in TAU request", mme_ue->imsi_bcd);
|
||||
r = nas_eps_send_tau_accept(mme_ue,
|
||||
S1AP_ProcedureCode_id_downlinkNASTransport);
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
} else {
|
||||
/* ----------------------------------------------------------------------
|
||||
* TAU: Handle EPS Bearer Context Status mismatch before TAU ACCEPT
|
||||
* - Applied only when active_flag == 0.
|
||||
* - Compare UE's BCS (bit0=ebi0 ... bit15=ebi15) with MME sessions.
|
||||
* - If UE does not report default bearer EBI, delete that session first.
|
||||
* ---------------------------------------------------------------------- */
|
||||
sgw_ue_t *sgw_ue = NULL;
|
||||
mme_sess_t *sess = NULL;
|
||||
mme_bearer_t *def = NULL;
|
||||
|
||||
uint16_t mask;
|
||||
uint8_t ebi;
|
||||
int deleted = 0;
|
||||
|
||||
mask = message->emm.tracking_area_update_request.
|
||||
eps_bearer_context_status.value;
|
||||
|
||||
ogs_list_for_each(&mme_ue->sess_list, sess) {
|
||||
def = mme_default_bearer_in_sess(sess);
|
||||
if (!def) {
|
||||
ogs_warn("[%s] No default bearer; "
|
||||
"skip session", mme_ue->imsi_bcd);
|
||||
continue;
|
||||
}
|
||||
|
||||
ebi = def->ebi;
|
||||
if (ebi > 15) {
|
||||
ogs_warn("[%s] Invalid EBI=%u; skip",
|
||||
mme_ue->imsi_bcd, ebi);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* If UE's BCS bit for this EBI is 0,
|
||||
* delete the session */
|
||||
if (!(mask & (1 << ebi))) {
|
||||
ogs_warn("[%s] BCS mismatch: UE missing "
|
||||
"EBI=%u", mme_ue->imsi_bcd, ebi);
|
||||
sgw_ue = sgw_ue_find_by_id(mme_ue->sgw_ue_id);
|
||||
ogs_assert(sgw_ue);
|
||||
|
||||
mme_gtp_send_delete_session_request(
|
||||
enb_ue, sgw_ue, sess,
|
||||
OGS_GTP_DELETE_SEND_TAU_ACCEPT);
|
||||
|
||||
deleted++;
|
||||
}
|
||||
}
|
||||
|
||||
if (deleted > 0) {
|
||||
ogs_info("[%s] Deleted %d session(s) due "
|
||||
"to BCS mismatch",
|
||||
mme_ue->imsi_bcd, deleted);
|
||||
} else {
|
||||
r = nas_eps_send_tau_accept(mme_ue,
|
||||
S1AP_ProcedureCode_id_downlinkNASTransport);
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
}
|
||||
}
|
||||
} else if (e->s1ap_code ==
|
||||
S1AP_ProcedureCode_id_uplinkNASTransport) {
|
||||
|
@@ -304,7 +304,7 @@ static void test4_func(abts_case *tc, void *data)
|
||||
test_ue->tau_request_param.ue_network_capability = 1;
|
||||
test_ue->tau_request_param.last_visited_registered_tai = 1;
|
||||
test_ue->tau_request_param.drx_parameter = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 1;
|
||||
test_ue->tau_request_param.ebcs_value = 0x20; /* EBI:5 */
|
||||
test_ue->tau_request_param.ms_network_capability = 1;
|
||||
test_ue->tau_request_param.tmsi_status = 1;
|
||||
test_ue->tau_request_param.mobile_station_classmark_2 = 1;
|
||||
|
@@ -1065,7 +1065,7 @@ static void test3_func(abts_case *tc, void *data)
|
||||
test_ue->tau_request_param.ue_network_capability = 1;
|
||||
test_ue->tau_request_param.last_visited_registered_tai = 1;
|
||||
test_ue->tau_request_param.drx_parameter = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 0x20; /* EBI:5 */
|
||||
test_ue->tau_request_param.ms_network_capability = 1;
|
||||
test_ue->tau_request_param.tmsi_status = 1;
|
||||
test_ue->tau_request_param.mobile_station_classmark_2 = 1;
|
||||
@@ -1165,7 +1165,7 @@ static void test3_func(abts_case *tc, void *data)
|
||||
test_ue->tau_request_param.ue_network_capability = 1;
|
||||
test_ue->tau_request_param.last_visited_registered_tai = 1;
|
||||
test_ue->tau_request_param.drx_parameter = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 0x20; /* EBI:5 */
|
||||
test_ue->tau_request_param.ms_network_capability = 1;
|
||||
test_ue->tau_request_param.tmsi_status = 1;
|
||||
test_ue->tau_request_param.mobile_station_classmark_2 = 1;
|
||||
|
@@ -241,7 +241,7 @@ static void test1_func(abts_case *tc, void *data)
|
||||
test_ue->tau_request_param.ue_network_capability = 1;
|
||||
test_ue->tau_request_param.last_visited_registered_tai = 1;
|
||||
test_ue->tau_request_param.drx_parameter = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 0x20; /* EBI:5 */
|
||||
test_ue->tau_request_param.ms_network_capability = 1;
|
||||
test_ue->tau_request_param.tmsi_status = 1;
|
||||
test_ue->tau_request_param.mobile_station_classmark_2 = 1;
|
||||
@@ -287,7 +287,7 @@ static void test1_func(abts_case *tc, void *data)
|
||||
test_ue->tau_request_param.ue_network_capability = 1;
|
||||
test_ue->tau_request_param.last_visited_registered_tai = 1;
|
||||
test_ue->tau_request_param.drx_parameter = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 0x20; /* EBI:5 */
|
||||
test_ue->tau_request_param.ms_network_capability = 1;
|
||||
test_ue->tau_request_param.tmsi_status = 1;
|
||||
test_ue->tau_request_param.mobile_station_classmark_2 = 1;
|
||||
@@ -527,7 +527,7 @@ static void test2_func(abts_case *tc, void *data)
|
||||
test_ue->tau_request_param.ue_network_capability = 1;
|
||||
test_ue->tau_request_param.last_visited_registered_tai = 1;
|
||||
test_ue->tau_request_param.drx_parameter = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 0x20; /* EBI:5 */
|
||||
test_ue->tau_request_param.ms_network_capability = 1;
|
||||
test_ue->tau_request_param.tmsi_status = 1;
|
||||
test_ue->tau_request_param.mobile_station_classmark_2 = 1;
|
||||
|
@@ -177,7 +177,7 @@ typedef struct test_attach_request_param_s {
|
||||
typedef struct test_tau_request_param_s {
|
||||
struct {
|
||||
ED8(uint8_t ue_network_capability:1;,
|
||||
uint8_t eps_bearer_context_status:1;,
|
||||
uint8_t reserved:1;,
|
||||
uint8_t guti:1;,
|
||||
uint8_t last_visited_registered_tai:1;,
|
||||
uint8_t drx_parameter:1;,
|
||||
@@ -200,6 +200,7 @@ typedef struct test_tau_request_param_s {
|
||||
uint8_t device_properties:1;,
|
||||
uint8_t spare2:6;)
|
||||
};
|
||||
uint8_t eps_bearer_context_status;
|
||||
} __attribute__ ((packed)) test_tau_request_param_t;
|
||||
|
||||
typedef struct test_service_request_param_s {
|
||||
|
@@ -649,20 +649,12 @@ ogs_pkbuf_t *testemm_build_tau_request(
|
||||
}
|
||||
|
||||
if (test_ue->tau_request_param.eps_bearer_context_status) {
|
||||
test_sess_t *sess = NULL;
|
||||
test_bearer_t *bearer = NULL;
|
||||
|
||||
tau_request->presencemask |=
|
||||
OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_EPS_BEARER_CONTEXT_STATUS_PRESENT;
|
||||
eps_bearer_context_status->length = 2;
|
||||
|
||||
ogs_list_for_each(&test_ue->sess_list, sess) {
|
||||
ogs_list_for_each(&sess->bearer_list, bearer) {
|
||||
if (bearer->ebi == 5) eps_bearer_context_status->ebi5 = 1;
|
||||
else if (bearer->ebi == 6) eps_bearer_context_status->ebi6 = 1;
|
||||
else if (bearer->ebi == 7) eps_bearer_context_status->ebi7 = 1;
|
||||
}
|
||||
}
|
||||
eps_bearer_context_status->value =
|
||||
test_ue->tau_request_param.eps_bearer_context_status;
|
||||
}
|
||||
|
||||
if (test_ue->tau_request_param.ms_network_capability) {
|
||||
|
@@ -215,7 +215,7 @@ static void test_simple_func(abts_case *tc, void *data)
|
||||
test_ue->tau_request_param.ue_network_capability = 1;
|
||||
test_ue->tau_request_param.last_visited_registered_tai = 1;
|
||||
test_ue->tau_request_param.drx_parameter = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 0x20; /* EBI:5 */
|
||||
test_ue->tau_request_param.ms_network_capability = 1;
|
||||
test_ue->tau_request_param.tmsi_status = 1;
|
||||
test_ue->tau_request_param.mobile_station_classmark_2 = 1;
|
||||
@@ -493,7 +493,7 @@ static void test_no_active_flag_func(abts_case *tc, void *data)
|
||||
test_ue->tau_request_param.ue_network_capability = 1;
|
||||
test_ue->tau_request_param.last_visited_registered_tai = 1;
|
||||
test_ue->tau_request_param.drx_parameter = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 0x20; /* EBI:5 */
|
||||
test_ue->tau_request_param.ms_network_capability = 1;
|
||||
test_ue->tau_request_param.tmsi_status = 1;
|
||||
test_ue->tau_request_param.mobile_station_classmark_2 = 1;
|
||||
@@ -773,7 +773,7 @@ static void test_integrity_unprotected_func(abts_case *tc, void *data)
|
||||
test_ue->tau_request_param.ue_network_capability = 1;
|
||||
test_ue->tau_request_param.last_visited_registered_tai = 1;
|
||||
test_ue->tau_request_param.drx_parameter = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 0x20; /* EBI:5 */
|
||||
test_ue->tau_request_param.ms_network_capability = 1;
|
||||
test_ue->tau_request_param.tmsi_status = 1;
|
||||
test_ue->tau_request_param.mobile_station_classmark_2 = 1;
|
||||
@@ -1289,7 +1289,8 @@ static void test_uplink_transport_func(abts_case *tc, void *data)
|
||||
test_ue->tau_request_param.ue_network_capability = 1;
|
||||
test_ue->tau_request_param.last_visited_registered_tai = 1;
|
||||
test_ue->tau_request_param.drx_parameter = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status =
|
||||
0x60; /* EBI:5, EBI:6 */
|
||||
test_ue->tau_request_param.ms_network_capability = 1;
|
||||
test_ue->tau_request_param.tmsi_status = 1;
|
||||
test_ue->tau_request_param.mobile_station_classmark_2 = 1;
|
||||
|
@@ -393,7 +393,8 @@ static void test1_func(abts_case *tc, void *data)
|
||||
test_ue->tau_request_param.ue_network_capability = 1;
|
||||
test_ue->tau_request_param.last_visited_registered_tai = 1;
|
||||
test_ue->tau_request_param.drx_parameter = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status = 1;
|
||||
test_ue->tau_request_param.eps_bearer_context_status =
|
||||
0x60; /* EBI:5, EBI:6 */
|
||||
test_ue->tau_request_param.ms_network_capability = 1;
|
||||
test_ue->tau_request_param.tmsi_status = 1;
|
||||
test_ue->tau_request_param.mobile_station_classmark_2 = 1;
|
||||
|
Reference in New Issue
Block a user