Testing commit to force a Reestablishment 1s after CONNECT

master
Ismael Gomez 7 years ago
parent 7e77329aa3
commit f3f4528a2f

@ -109,7 +109,7 @@ uint8_t security_generate_k_up( uint8_t *k_enb,
uint8_t security_128_eia1( uint8_t *key, uint8_t security_128_eia1( uint8_t *key,
uint32_t count, uint32_t count,
uint8_t bearer, uint32_t bearer,
uint8_t direction, uint8_t direction,
uint8_t *msg, uint8_t *msg,
uint32_t msg_len, uint32_t msg_len,
@ -117,7 +117,7 @@ uint8_t security_128_eia1( uint8_t *key,
uint8_t security_128_eia2( uint8_t *key, uint8_t security_128_eia2( uint8_t *key,
uint32_t count, uint32_t count,
uint8_t bearer, uint32_t bearer,
uint8_t direction, uint8_t direction,
uint8_t *msg, uint8_t *msg,
uint32_t msg_len, uint32_t msg_len,

@ -126,7 +126,7 @@ uint8_t security_generate_k_up( uint8_t *k_enb,
uint8_t security_128_eia1( uint8_t *key, uint8_t security_128_eia1( uint8_t *key,
uint32_t count, uint32_t count,
uint8_t bearer, uint32_t bearer,
uint8_t direction, uint8_t direction,
uint8_t *msg, uint8_t *msg,
uint32_t msg_len, uint32_t msg_len,
@ -151,7 +151,7 @@ uint8_t security_128_eia1( uint8_t *key,
uint8_t security_128_eia2( uint8_t *key, uint8_t security_128_eia2( uint8_t *key,
uint32_t count, uint32_t count,
uint8_t bearer, uint32_t bearer,
uint8_t direction, uint8_t direction,
uint8_t *msg, uint8_t *msg,
uint32_t msg_len, uint32_t msg_len,

@ -184,6 +184,7 @@ void rrc::run_thread() {
} }
} }
} }
uint32_t rest_cnt=0;
/* /*
@ -238,6 +239,10 @@ void rrc::run_tti(uint32_t tti) {
} }
break; break;
case RRC_STATE_CONNECTED: case RRC_STATE_CONNECTED:
rest_cnt++;
if (rest_cnt == 1000) {
send_con_restablish_request(LIBLTE_RRC_CON_REEST_REQ_CAUSE_OTHER_FAILURE);
}
if (ho_start) { if (ho_start) {
ho_start = false; ho_start = false;
if (!ho_prepare()) { if (!ho_prepare()) {
@ -1171,12 +1176,18 @@ void rrc::send_con_restablish_request(LIBLTE_RRC_CON_REEST_REQ_CAUSE_ENUM cause)
bzero(&ul_ccch_msg, sizeof(LIBLTE_RRC_UL_CCCH_MSG_STRUCT)); bzero(&ul_ccch_msg, sizeof(LIBLTE_RRC_UL_CCCH_MSG_STRUCT));
uint16_t crnti; uint16_t crnti;
uint16_t pci;
uint32_t cellid;
if (cause == LIBLTE_RRC_CON_REEST_REQ_CAUSE_HANDOVER_FAILURE) { if (cause == LIBLTE_RRC_CON_REEST_REQ_CAUSE_HANDOVER_FAILURE) {
crnti = ho_src_rnti; crnti = ho_src_rnti;
pci = ho_src_cell.get_pci();
cellid = ho_src_cell.get_cell_id();
} else { } else {
mac_interface_rrc::ue_rnti_t uernti; mac_interface_rrc::ue_rnti_t uernti;
mac->get_rntis(&uernti); mac->get_rntis(&uernti);
crnti = uernti.crnti; crnti = uernti.crnti;
pci = serving_cell->get_pci();
cellid = serving_cell->get_cell_id();
} }
// Compute shortMAC-I // Compute shortMAC-I
@ -1185,36 +1196,38 @@ void rrc::send_con_restablish_request(LIBLTE_RRC_CON_REEST_REQ_CAUSE_ENUM cause)
bzero(varShortMAC_packed, 16); bzero(varShortMAC_packed, 16);
uint8_t *msg_ptr = varShortMAC; uint8_t *msg_ptr = varShortMAC;
// ASN.1 encode byte-aligned VarShortMAC-Input // ASN.1 encode VarShortMAC-Input
liblte_rrc_pack_cell_identity_ie(serving_cell->get_cell_id(), &msg_ptr); liblte_rrc_pack_cell_identity_ie(cellid, &msg_ptr);
msg_ptr = &varShortMAC[4]; liblte_rrc_pack_phys_cell_id_ie(pci, &msg_ptr);
liblte_rrc_pack_phys_cell_id_ie(phy->get_current_pci(), &msg_ptr);
msg_ptr = &varShortMAC[4+2];
liblte_rrc_pack_c_rnti_ie(crnti, &msg_ptr); liblte_rrc_pack_c_rnti_ie(crnti, &msg_ptr);
srslte_bit_pack_vector(varShortMAC, varShortMAC_packed, (4+2+4)*8);
rrc_log->info("Generated varShortMAC: cellId=0x%x, PCI=%d, rnti=%d\n", // byte align (already zero-padded)
serving_cell->get_cell_id(), serving_cell->get_pci(), crnti); uint32_t N_bits = (uint32_t) (msg_ptr-varShortMAC);
uint32_t N_bytes = ((N_bits-1)/8+1);
srslte_bit_pack_vector(varShortMAC, varShortMAC_packed, N_bytes*8);
rrc_log->info("Encoded varShortMAC: cellId=0x%x, PCI=%d, rnti=0x%x (%d bytes, %d bits)\n",
cellid, pci, crnti, N_bytes, N_bits);
// Compute MAC-I // Compute MAC-I
uint8_t mac_key[4]; uint8_t mac_key[4];
switch(integ_algo) { switch(integ_algo) {
case INTEGRITY_ALGORITHM_ID_128_EIA1: case INTEGRITY_ALGORITHM_ID_128_EIA1:
security_128_eia1(&k_rrc_int[16], security_128_eia1(&k_rrc_int[16],
1, 0xffffffff, // 32-bit all to ones
1, 0x1f, // 5-bit all to ones
1, 1, // 1-bit to one
varShortMAC_packed, varShortMAC_packed,
10, N_bytes,
mac_key); mac_key);
break; break;
case INTEGRITY_ALGORITHM_ID_128_EIA2: case INTEGRITY_ALGORITHM_ID_128_EIA2:
security_128_eia2(&k_rrc_int[16], security_128_eia2(&k_rrc_int[16],
1, 0xffffffff, // 32-bit all to ones
1, 0x1f, // 5-bit all to ones
1, 1, // 1-bit to one
varShortMAC_packed, varShortMAC_packed,
10, N_bytes,
mac_key); mac_key);
break; break;
default: default:
@ -1224,8 +1237,8 @@ void rrc::send_con_restablish_request(LIBLTE_RRC_CON_REEST_REQ_CAUSE_ENUM cause)
// Prepare ConnectionRestalishmentRequest packet // Prepare ConnectionRestalishmentRequest packet
ul_ccch_msg.msg_type = LIBLTE_RRC_UL_CCCH_MSG_TYPE_RRC_CON_REEST_REQ; ul_ccch_msg.msg_type = LIBLTE_RRC_UL_CCCH_MSG_TYPE_RRC_CON_REEST_REQ;
ul_ccch_msg.msg.rrc_con_reest_req.ue_id.c_rnti = crnti; ul_ccch_msg.msg.rrc_con_reest_req.ue_id.c_rnti = crnti;
ul_ccch_msg.msg.rrc_con_reest_req.ue_id.phys_cell_id = phy->get_current_pci(); ul_ccch_msg.msg.rrc_con_reest_req.ue_id.phys_cell_id = pci;
ul_ccch_msg.msg.rrc_con_reest_req.ue_id.short_mac_i = mac_key[1] << 8 | mac_key[0]; ul_ccch_msg.msg.rrc_con_reest_req.ue_id.short_mac_i = mac_key[2] << 8 | mac_key[3];
ul_ccch_msg.msg.rrc_con_reest_req.cause = cause; ul_ccch_msg.msg.rrc_con_reest_req.cause = cause;
rrc_log->info("Initiating RRC Connection Reestablishment Procedure\n"); rrc_log->info("Initiating RRC Connection Reestablishment Procedure\n");
@ -1510,7 +1523,7 @@ void rrc::con_reconfig_failed()
if (security_is_activated) { if (security_is_activated) {
// Start the Reestablishment Procedure // Start the Reestablishment Procedure
send_con_restablish_request(LIBLTE_RRC_CON_REEST_REQ_CAUSE_OTHER_FAILURE); send_con_restablish_request(LIBLTE_RRC_CON_REEST_REQ_CAUSE_RECONFIG_FAILURE);
} else { } else {
go_idle = true; go_idle = true;
} }

Loading…
Cancel
Save