remove INVALID ASSERT in SGW

This commit is contained in:
Sukchan Lee 2018-01-26 06:52:30 +09:00
parent c6bfed6628
commit 9451928786
4 changed files with 24 additions and 12 deletions

View File

@ -186,6 +186,7 @@ static void common_register_state(fsm_t *s, event_t *e)
d_trace(3, "[EMM] Tracking area update complete\n"); d_trace(3, "[EMM] Tracking area update complete\n");
d_trace(5, " IMSI[%s]\n", mme_ue->imsi_bcd); d_trace(5, " IMSI[%s]\n", mme_ue->imsi_bcd);
#if 0 /* UE will send UE context release request */
enb_ue = mme_ue->enb_ue; enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param"); d_assert(enb_ue, return, "Null param");
@ -193,6 +194,7 @@ static void common_register_state(fsm_t *s, event_t *e)
S1ap_Cause_PR_nas, S1ap_CauseNas_normal_release, S1ap_Cause_PR_nas, S1ap_CauseNas_normal_release,
S1AP_UE_CTX_REL_NO_ACTION, 0); S1AP_UE_CTX_REL_NO_ACTION, 0);
d_assert(rv == CORE_OK, return, "s1ap send error"); d_assert(rv == CORE_OK, return, "s1ap send error");
#endif
return; return;
} }
case NAS_EMM_STATUS: case NAS_EMM_STATUS:

View File

@ -2710,7 +2710,7 @@ status_t mme_m_tmsi_pool_generate()
int i, j; int i, j;
int index = 0; int index = 0;
d_trace(5, "M-TMSI Pool try to generate...\n"); d_trace(9, "M-TMSI Pool try to generate...\n");
for (i = 0; index < MAX_POOL_OF_UE; i++) for (i = 0; index < MAX_POOL_OF_UE; i++)
{ {
mme_m_tmsi_t *m_tmsi = NULL; mme_m_tmsi_t *m_tmsi = NULL;
@ -2719,21 +2719,27 @@ status_t mme_m_tmsi_pool_generate()
m_tmsi = &self.m_tmsi.pool[index]; m_tmsi = &self.m_tmsi.pool[index];
rv = core_generate_random_bytes((c_uint8_t *)m_tmsi, sizeof(*m_tmsi)); rv = core_generate_random_bytes((c_uint8_t *)m_tmsi, sizeof(*m_tmsi));
d_assert(rv == CORE_OK, return CORE_ERROR, "Cannot generate random"); d_assert(rv == CORE_OK, return CORE_ERROR, "Cannot generate random");
/* for mapped-GUTI */
*m_tmsi |= 0xc0000000;
*m_tmsi &= 0xff00ffff;
for (j = 0; j < index; j++) for (j = 0; j < index; j++)
{ {
if (*m_tmsi == self.m_tmsi.pool[j]) if (*m_tmsi == self.m_tmsi.pool[j])
{ {
conflict = 1; conflict = 1;
d_warn("[M-TMSI CONFLICT] %d:0x%x == %d:0x%x", d_trace(11, "[M-TMSI CONFLICT] %d:0x%x == %d:0x%x\n",
index, *m_tmsi, j, self.m_tmsi.pool[j]); index, *m_tmsi, j, self.m_tmsi.pool[j]);
break; break;
} }
} }
if (conflict == 1) continue; if (conflict == 1) continue;
index++; index++;
} }
self.m_tmsi.size = index; self.m_tmsi.size = index;
d_trace(5, "M-TMSI Pool generate...done\n"); d_trace(9, "M-TMSI Pool generate...done\n");
return CORE_OK; return CORE_OK;
} }

View File

@ -149,8 +149,8 @@ static int _gtpv1_u_recv_cb(sock_id sock, void *data)
if (!subnet) if (!subnet)
{ {
d_print_hex(pkbuf->payload, pkbuf->len); d_trace_hex(9, pkbuf->payload, pkbuf->len);
d_warn("[DROP] Cannot find subnet V:%d, IPv4:%p, IPv6:%p", d_trace(9, "[DROP] Cannot find subnet V:%d, IPv4:%p, IPv6:%p\n",
ip_h->ip_v, sess->ipv4, sess->ipv6); ip_h->ip_v, sess->ipv4, sess->ipv6);
goto cleanup; goto cleanup;
} }

View File

@ -169,14 +169,15 @@ static int _gtpv1_u_recv_cb(sock_id sock, void *data)
s1u_tunnel = sgw_s1u_tunnel_in_bearer(bearer); s1u_tunnel = sgw_s1u_tunnel_in_bearer(bearer);
d_assert(s1u_tunnel, pkbuf_free(pkbuf); return 0, "Null param"); d_assert(s1u_tunnel, pkbuf_free(pkbuf); return 0, "Null param");
d_assert(s1u_tunnel->gnode, pkbuf_free(pkbuf); return 0,);
d_assert(s1u_tunnel->gnode->sock, pkbuf_free(pkbuf); return 0,);
d_trace(3, "[SGW] SEND GPU-U to ENB[%s]: TEID[0x%x]\n",
CORE_ADDR(sock_remote_addr(s1u_tunnel->gnode->sock), buf),
s1u_tunnel->remote_teid);
if (s1u_tunnel->remote_teid) if (s1u_tunnel->remote_teid)
{ {
d_assert(s1u_tunnel->gnode, pkbuf_free(pkbuf); return 0,);
d_assert(s1u_tunnel->gnode->sock, pkbuf_free(pkbuf); return 0,);
d_trace(3, "[SGW] SEND GPU-U to ENB[%s]: TEID[0x%x]\n",
CORE_ADDR(sock_remote_addr(s1u_tunnel->gnode->sock), buf),
s1u_tunnel->remote_teid);
/* If there is buffered packet, send it first */ /* If there is buffered packet, send it first */
for (i = 0; i < bearer->num_buffered_pkt; i++) for (i = 0; i < bearer->num_buffered_pkt; i++)
{ {
@ -206,17 +207,20 @@ static int _gtpv1_u_recv_cb(sock_id sock, void *data)
d_assert(bearer->sess->sgw_ue, pkbuf_free(pkbuf); return 0, d_assert(bearer->sess->sgw_ue, pkbuf_free(pkbuf); return 0,
"SGW_UE is NULL"); "SGW_UE is NULL");
d_trace(3, "[SGW] SEND GPU-U to ENB : STATE[0x%x]\n",
SGW_GET_UE_STATE(sgw_ue));
sgw_ue = bearer->sess->sgw_ue; sgw_ue = bearer->sess->sgw_ue;
if ((SGW_GET_UE_STATE(sgw_ue) & SGW_S1U_INACTIVE)) if ((SGW_GET_UE_STATE(sgw_ue) & SGW_S1U_INACTIVE))
{ {
d_trace(9, " SGW-S1U Inactive\n"); d_trace(5, " SGW-S1U Inactive\n");
if ( !(SGW_GET_UE_STATE(sgw_ue) & SGW_DL_NOTI_SENT)) if ( !(SGW_GET_UE_STATE(sgw_ue) & SGW_DL_NOTI_SENT))
{ {
event_t e; event_t e;
status_t rv; status_t rv;
d_trace(9, " EVENT DL Data Notification\n"); d_trace(5, " EVENT DL Data Notification\n");
event_set(&e, SGW_EVT_LO_DLDATA_NOTI); event_set(&e, SGW_EVT_LO_DLDATA_NOTI);
event_set_param1(&e, (c_uintptr_t)bearer->index); event_set_param1(&e, (c_uintptr_t)bearer->index);
rv = sgw_event_send(&e); rv = sgw_event_send(&e);