Multiple TAI List done
This commit is contained in:
parent
5551ecf6cd
commit
cb4893c36b
|
@ -17,8 +17,6 @@ status_t emm_build_attach_accept(
|
|||
nas_eps_attach_result_t *eps_attach_result =
|
||||
&attach_accept->eps_attach_result;
|
||||
nas_gprs_timer_t *t3412_value = &attach_accept->t3412_value;
|
||||
tai0_list_t tai0_list;
|
||||
tai2_list_t tai2_list;
|
||||
int served_tai_index = 0;
|
||||
nas_eps_mobile_identity_t *guti = &attach_accept->guti;
|
||||
nas_gprs_timer_t *t3402_value = &attach_accept->t3402_value;
|
||||
|
@ -43,21 +41,12 @@ status_t emm_build_attach_accept(
|
|||
t3412_value->value = 9;
|
||||
|
||||
served_tai_index = mme_find_served_tai(&mme_ue->tai);
|
||||
if (served_tai_index < 0)
|
||||
{
|
||||
memset(&tai0_list, 0, sizeof(tai0_list_t));
|
||||
memset(&tai2_list, 0, sizeof(tai2_list_t));
|
||||
tai2_list.type = TAI2_TYPE;
|
||||
tai2_list.num = 1;
|
||||
memcpy(&tai2_list.tai[0], &mme_ue->tai, sizeof(tai_t));
|
||||
nas_tai_list_build(&attach_accept->tai_list, &tai0_list, &tai2_list);
|
||||
}
|
||||
else
|
||||
{
|
||||
nas_tai_list_build(&attach_accept->tai_list,
|
||||
&mme_self()->served_tai[served_tai_index].list0,
|
||||
&mme_self()->served_tai[served_tai_index].list2);
|
||||
}
|
||||
d_assert(served_tai_index >= 0 &&
|
||||
served_tai_index < MAX_NUM_OF_SERVED_TAI, return CORE_ERROR,
|
||||
"Cannot find Served TAI. Check 'mme.tai' configuration");
|
||||
nas_tai_list_build(&attach_accept->tai_list,
|
||||
&mme_self()->served_tai[served_tai_index].list0,
|
||||
&mme_self()->served_tai[served_tai_index].list2);
|
||||
|
||||
attach_accept->esm_message_container.buffer = esmbuf->payload;
|
||||
attach_accept->esm_message_container.length = esmbuf->len;
|
||||
|
@ -295,8 +284,7 @@ status_t emm_build_tau_accept(pkbuf_t **emmbuf, mme_ue_t *mme_ue)
|
|||
nas_message_t message;
|
||||
nas_tracking_area_update_accept_t *tau_accept =
|
||||
&message.emm.tracking_area_update_accept;
|
||||
tai0_list_t tai0_list;
|
||||
tai2_list_t tai2_list;
|
||||
int served_tai_index = 0;
|
||||
|
||||
memset(&message, 0, sizeof(message));
|
||||
message.emm.h.protocol_discriminator = NAS_PROTOCOL_DISCRIMINATOR_EMM;
|
||||
|
@ -316,12 +304,13 @@ status_t emm_build_tau_accept(pkbuf_t **emmbuf, mme_ue_t *mme_ue)
|
|||
tau_accept->presencemask |=
|
||||
NAS_TRACKING_AREA_UPDATE_ACCEPT_TAI_LIST_PRESENT;
|
||||
|
||||
memset(&tai0_list, 0, sizeof(tai0_list_t));
|
||||
memset(&tai2_list, 0, sizeof(tai2_list_t));
|
||||
tai2_list.type = TAI2_TYPE;
|
||||
tai2_list.num = 1;
|
||||
memcpy(&tai2_list.tai[0], &mme_ue->tai, sizeof(tai_t));
|
||||
nas_tai_list_build(&tau_accept->tai_list, &tai0_list, &tai2_list);
|
||||
served_tai_index = mme_find_served_tai(&mme_ue->tai);
|
||||
d_assert(served_tai_index >= 0 &&
|
||||
served_tai_index < MAX_NUM_OF_SERVED_TAI, return CORE_ERROR,
|
||||
"Cannot find Served TAI. Check 'mme.tai' configuration");
|
||||
nas_tai_list_build(&tau_accept->tai_list,
|
||||
&mme_self()->served_tai[served_tai_index].list0,
|
||||
&mme_self()->served_tai[served_tai_index].list2);
|
||||
|
||||
/* Set EPS bearer context status */
|
||||
tau_accept->presencemask |=
|
||||
|
|
|
@ -129,8 +129,8 @@ typedef struct _mme_enb_t {
|
|||
sock_id sock; /* eNB S1AP Socket */
|
||||
c_sockaddr_t *addr; /* eNB S1AP Address */
|
||||
|
||||
c_uint8_t num_of_tai;
|
||||
tai_t tai[MAX_NUM_OF_TAI * MAX_NUM_OF_BPLMN];
|
||||
c_uint8_t num_of_supported_ta_list;
|
||||
tai_t supported_ta_list[MAX_NUM_OF_TAI * MAX_NUM_OF_BPLMN];
|
||||
|
||||
list_t enb_ue_list;
|
||||
|
||||
|
|
|
@ -23,8 +23,7 @@ void s1ap_handle_s1_setup_request(mme_enb_t *enb, s1ap_message_t *message)
|
|||
S1ap_S1SetupRequestIEs_t *ies = NULL;
|
||||
pkbuf_t *s1apbuf = NULL;
|
||||
c_uint32_t enb_id;
|
||||
int i,j;
|
||||
int num_of_tai = 0;
|
||||
int i, j;
|
||||
|
||||
d_assert(enb, return, "Null param");
|
||||
d_assert(enb->sock, return, "Null param");
|
||||
|
@ -36,6 +35,7 @@ void s1ap_handle_s1_setup_request(mme_enb_t *enb, s1ap_message_t *message)
|
|||
s1ap_ENB_ID_to_uint32(&ies->global_ENB_ID.eNB_ID, &enb_id);
|
||||
|
||||
/* Parse Supported TA */
|
||||
enb->num_of_supported_ta_list = 0;
|
||||
for (i = 0; i < ies->supportedTAs.list.count; i++)
|
||||
{
|
||||
S1ap_SupportedTAs_Item_t *tai = NULL;
|
||||
|
@ -50,18 +50,20 @@ void s1ap_handle_s1_setup_request(mme_enb_t *enb, s1ap_message_t *message)
|
|||
pLMNidentity =
|
||||
(S1ap_PLMNidentity_t *)tai->broadcastPLMNs.list.array[j];
|
||||
|
||||
memcpy(&enb->tai[num_of_tai].tac, tAC->buf, sizeof(c_uint16_t));
|
||||
enb->tai[num_of_tai].tac = ntohs(enb->tai[num_of_tai].tac);
|
||||
memcpy(&enb->supported_ta_list[enb->num_of_supported_ta_list].tac,
|
||||
tAC->buf, sizeof(c_uint16_t));
|
||||
enb->supported_ta_list[enb->num_of_supported_ta_list].tac =
|
||||
ntohs(enb->supported_ta_list
|
||||
[enb->num_of_supported_ta_list].tac);
|
||||
|
||||
memcpy(&enb->tai[num_of_tai].plmn_id, pLMNidentity->buf,
|
||||
sizeof(plmn_id_t));
|
||||
num_of_tai++;
|
||||
memcpy(&enb->supported_ta_list
|
||||
[enb->num_of_supported_ta_list].plmn_id,
|
||||
pLMNidentity->buf, sizeof(plmn_id_t));
|
||||
enb->num_of_supported_ta_list++;
|
||||
}
|
||||
}
|
||||
|
||||
enb->num_of_tai = num_of_tai;
|
||||
|
||||
if (enb->num_of_tai == 0)
|
||||
if (enb->num_of_supported_ta_list == 0)
|
||||
{
|
||||
d_error("No supported TA exist in s1stup_req messages");
|
||||
}
|
||||
|
@ -99,20 +101,6 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, s1ap_message_t *message)
|
|||
ies = &message->s1ap_InitialUEMessage_IEs;
|
||||
d_assert(ies, return, "Null param");
|
||||
|
||||
tai = &ies->tai;
|
||||
d_assert(tai, return,);
|
||||
pLMNidentity = &tai->pLMNidentity;
|
||||
d_assert(pLMNidentity && pLMNidentity->size == sizeof(plmn_id_t), return,);
|
||||
tAC = &tai->tAC;
|
||||
d_assert(tAC && tAC->size == sizeof(c_uint16_t), return,);
|
||||
|
||||
eutran_cgi = &ies->eutran_cgi;
|
||||
d_assert(eutran_cgi, return,);
|
||||
pLMNidentity = &eutran_cgi->pLMNidentity;
|
||||
d_assert(pLMNidentity && pLMNidentity->size == sizeof(plmn_id_t), return,);
|
||||
cell_ID = &eutran_cgi->cell_ID;
|
||||
d_assert(cell_ID, return,);
|
||||
|
||||
enb_ue = enb_ue_find_by_enb_ue_s1ap_id(enb, ies->eNB_UE_S1AP_ID);
|
||||
if (!enb_ue)
|
||||
{
|
||||
|
@ -154,10 +142,24 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, s1ap_message_t *message)
|
|||
}
|
||||
}
|
||||
|
||||
tai = &ies->tai;
|
||||
d_assert(tai, return,);
|
||||
pLMNidentity = &tai->pLMNidentity;
|
||||
d_assert(pLMNidentity && pLMNidentity->size == sizeof(plmn_id_t), return,);
|
||||
tAC = &tai->tAC;
|
||||
d_assert(tAC && tAC->size == sizeof(c_uint16_t), return,);
|
||||
|
||||
memcpy(&enb_ue->nas.tai.plmn_id, pLMNidentity->buf,
|
||||
sizeof(enb_ue->nas.tai.plmn_id));
|
||||
memcpy(&enb_ue->nas.tai.tac, tAC->buf, sizeof(enb_ue->nas.tai.tac));
|
||||
enb_ue->nas.tai.tac = ntohs(enb_ue->nas.tai.tac);
|
||||
|
||||
eutran_cgi = &ies->eutran_cgi;
|
||||
d_assert(eutran_cgi, return,);
|
||||
pLMNidentity = &eutran_cgi->pLMNidentity;
|
||||
d_assert(pLMNidentity && pLMNidentity->size == sizeof(plmn_id_t), return,);
|
||||
cell_ID = &eutran_cgi->cell_ID;
|
||||
d_assert(cell_ID, return,);
|
||||
memcpy(&enb_ue->nas.e_cgi.plmn_id, pLMNidentity->buf,
|
||||
sizeof(enb_ue->nas.e_cgi.plmn_id));
|
||||
memcpy(&enb_ue->nas.e_cgi.cell_id, cell_ID->buf,
|
||||
|
@ -520,9 +522,10 @@ void s1ap_handle_paging(mme_ue_t *mme_ue)
|
|||
for (hi = mme_enb_first(); hi; hi = mme_enb_next(hi))
|
||||
{
|
||||
enb = mme_enb_this(hi);
|
||||
for (i = 0; i < enb->num_of_tai; i++)
|
||||
for (i = 0; i < enb->num_of_supported_ta_list; i++)
|
||||
{
|
||||
if (!memcmp(&enb->tai[i], &mme_ue->tai, sizeof(tai_t)))
|
||||
if (!memcmp(&enb->supported_ta_list[i],
|
||||
&mme_ue->tai, sizeof(tai_t)))
|
||||
{
|
||||
if (mme_ue->last_paging_msg)
|
||||
s1apbuf = mme_ue->last_paging_msg;
|
||||
|
|
|
@ -141,11 +141,29 @@ mme:
|
|||
# - plmn_id:
|
||||
# mcc: 001
|
||||
# mnc: 01
|
||||
# tac: 12345
|
||||
# tac: [1, 2, 3]
|
||||
# tai:
|
||||
# - plmn_id:
|
||||
# mcc: 002
|
||||
# mnc: 02
|
||||
# tac: 12346
|
||||
# tac: 4
|
||||
# - plmn_id:
|
||||
# mcc: 003
|
||||
# mnc: 03
|
||||
# tac: 5
|
||||
# tai:
|
||||
# - plmn_id:
|
||||
# mcc: 004
|
||||
# mnc: 04
|
||||
# tac: [6, 7]
|
||||
# - plmn_id:
|
||||
# mcc: 005
|
||||
# mnc: 05
|
||||
# tac: 8
|
||||
# - plmn_id:
|
||||
# mcc: 006
|
||||
# mnc: 06
|
||||
# tac: [9, 10]
|
||||
#
|
||||
tai:
|
||||
plmn_id:
|
||||
|
|
|
@ -164,6 +164,7 @@ static void attach_test1(abts_case *tc, void *data)
|
|||
context_self()->db_name, "subscribers");
|
||||
ABTS_PTR_NOTNULL(tc, collection);
|
||||
|
||||
/********** Insert Subscriber in Database */
|
||||
doc = bson_new_from_json((const uint8_t *)json, -1, &error);;
|
||||
ABTS_PTR_NOTNULL(tc, doc);
|
||||
ABTS_TRUE(tc, mongoc_collection_insert(collection,
|
||||
|
@ -528,6 +529,7 @@ static void attach_test2(abts_case *tc, void *data)
|
|||
context_self()->db_name, "subscribers");
|
||||
ABTS_PTR_NOTNULL(tc, collection);
|
||||
|
||||
/********** Insert Subscriber in Database */
|
||||
ABTS_TRUE(tc, mongoc_collection_insert(collection,
|
||||
MONGOC_INSERT_NONE, doc, NULL, &error));
|
||||
bson_destroy(doc);
|
||||
|
@ -808,6 +810,7 @@ static void attach_test3(abts_case *tc, void *data)
|
|||
context_self()->db_name, "subscribers");
|
||||
ABTS_PTR_NOTNULL(tc, collection);
|
||||
|
||||
/********** Insert Subscriber in Database */
|
||||
ABTS_TRUE(tc, mongoc_collection_insert(collection,
|
||||
MONGOC_INSERT_NONE, doc, NULL, &error));
|
||||
bson_destroy(doc);
|
||||
|
|
|
@ -265,6 +265,7 @@ status_t tests1ap_build_setup_req(
|
|||
pkbuf_t **pkbuf, S1ap_ENB_ID_PR present, c_uint32_t enb_id)
|
||||
{
|
||||
int erval = -1;
|
||||
int tac = 12345;
|
||||
|
||||
s1ap_message_t message;
|
||||
S1ap_S1SetupRequestIEs_t *ies;
|
||||
|
@ -281,12 +282,11 @@ status_t tests1ap_build_setup_req(
|
|||
|
||||
supportedTA = (S1ap_SupportedTAs_Item_t *)
|
||||
core_calloc(1, sizeof(S1ap_SupportedTAs_Item_t));
|
||||
#if 0 /* FIXTAI */
|
||||
s1ap_uint16_to_OCTET_STRING(
|
||||
mme_self()->served_tai[0].tac, &supportedTA->tAC);
|
||||
#else
|
||||
s1ap_uint16_to_OCTET_STRING(12345, &supportedTA->tAC);
|
||||
#endif
|
||||
if (mme_self()->served_tai[0].list2.tai[0].tac)
|
||||
tac = mme_self()->served_tai[0].list2.tai[0].tac;
|
||||
else
|
||||
tac = mme_self()->served_tai[0].list0.tai[0].tac[0];
|
||||
s1ap_uint16_to_OCTET_STRING(tac, &supportedTA->tAC);
|
||||
plmnIdentity = (S1ap_PLMNidentity_t *)
|
||||
core_calloc(1, sizeof(S1ap_PLMNidentity_t));
|
||||
s1ap_buffer_to_OCTET_STRING(&mme_self()->served_gummei[0].plmn_id[0],
|
||||
|
@ -319,14 +319,14 @@ status_t tests1ap_build_initial_ue_msg(pkbuf_t **pkbuf, int i)
|
|||
char *payload[TESTS1AP_MAX_MESSAGE] = {
|
||||
"000c405800000500 0800020001001a00 302f177ca0b38802 0741020809101010"
|
||||
"3254869104e060c0 4000050221d011d1 5c0a003103e5e034 9011035758a65d01"
|
||||
"00004300060000f1 105ba00064400800 00f1101079baf000 86400130",
|
||||
"00004300060000f1 1030390064400800 00f1101079baf000 86400130",
|
||||
|
||||
"000c40809c00"
|
||||
"0005000800030002 00001a0073721711 a73a12070741020b f600f11000020100"
|
||||
"00000105e060c040 0100210221d011d1 271a808021100100 0010810600000000"
|
||||
"830600000000000d 00000a005255f501 10225c0a003103e5 c03e1355f501aaaa"
|
||||
"11035758a6200b60 1404ef65233b8878 d290400804026004 00021f025d0107e0"
|
||||
"004300060055f501 1022006440080055 f5010019d0100086 400130",
|
||||
"004300060000f110 3039006440080055 f5010019d0100086 400130",
|
||||
|
||||
"000c40809c00"
|
||||
"0005000800030001 00001a007372178c 3e3cff070741020b f600f11000020100"
|
||||
|
@ -343,16 +343,16 @@ status_t tests1ap_build_initial_ue_msg(pkbuf_t **pkbuf, int i)
|
|||
|
||||
"000c405300000500 080003001100001a 002a2917acba67c4 8207410108091010"
|
||||
"103254866205f0f0 000000000e023cd0 11d1270780000a00 000d00c100430006"
|
||||
"0000f1102b670064 40080000f1109d67 aa500086400130",
|
||||
"0000f11030390064 40080000f1109d67 aa500086400130",
|
||||
|
||||
"000c405300000500 080003002100001a 002a2917bcba67c4 8207410108091010"
|
||||
"103254866205f0f0 000000000e023cd0 11d1270780000a00 000d00c100430006"
|
||||
"0000f1102b670064 40080000f1109d67 aa500086400130",
|
||||
"0000f11030390064 40080000f1109d67 aa500086400130",
|
||||
|
||||
|
||||
"000c"
|
||||
"404c000005000800 020002001a002423 0741710809101010 3254767905f0f000"
|
||||
"0000000e0201d011 d1270780000a0000 0d00c10043000600 00f1102b67006440"
|
||||
"0000000e0201d011 d1270780000a0000 0d00c10043000600 00f1103039006440"
|
||||
"080000f11054f640 100086400130",
|
||||
"",
|
||||
"",
|
||||
|
@ -361,7 +361,7 @@ status_t tests1ap_build_initial_ue_msg(pkbuf_t **pkbuf, int i)
|
|||
"000c"
|
||||
"4068000005000800 020001001a00403f 0741720809101010 3254861002e06000"
|
||||
"210207d011d1271a 8080211001000010 8106000000008306 00000000000d0000"
|
||||
"0a005c0a00901103 4f18a6f15d010000 4300060000f1105b a0006440080000f1"
|
||||
"0a005c0a00901103 4f18a6f15d010000 4300060000f11030 39006440080000f1"
|
||||
"1004615380008640 0130",
|
||||
|
||||
"000c"
|
||||
|
|
Loading…
Reference in New Issue