update it

This commit is contained in:
Sukchan Lee
2025-10-15 17:27:02 +09:00
parent 51b967f4f9
commit 75c12a52d0
10 changed files with 103 additions and 39 deletions

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;