forked from acouzens/open5gs
Update downlink data notification
This commit is contained in:
parent
55c3d5e92e
commit
420953fa32
|
@ -313,6 +313,7 @@ static gtp_xact_t *gtp_xact_find(
|
||||||
case GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE:
|
case GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE:
|
||||||
case GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
|
case GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
|
||||||
case GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
|
case GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
|
||||||
|
case GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE:
|
||||||
xact = list_first(&gnode->remote_list);
|
xact = list_first(&gnode->remote_list);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -325,6 +326,7 @@ static gtp_xact_t *gtp_xact_find(
|
||||||
case GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE:
|
case GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE:
|
||||||
case GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
|
case GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
|
||||||
case GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
|
case GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
|
||||||
|
case GTP_DOWNLINK_DATA_NOTIFICATION_TYPE:
|
||||||
xact = list_first(&gnode->local_list);
|
xact = list_first(&gnode->local_list);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -785,13 +785,15 @@ void emm_handle_service_request(
|
||||||
d_assert(emm_send_to_enb(enb_ue, s1apbuf) == CORE_OK,, "s1ap send error");
|
d_assert(emm_send_to_enb(enb_ue, s1apbuf) == CORE_OK,, "s1ap send error");
|
||||||
}
|
}
|
||||||
|
|
||||||
void emm_handle_downlink_data_notification(mme_bearer_t *bearer)
|
void emm_handle_downlink_data_notification(gtp_xact_t *xact,
|
||||||
|
mme_bearer_t *bearer)
|
||||||
{
|
{
|
||||||
status_t rv;
|
status_t rv;
|
||||||
mme_ue_t *mme_ue = NULL;
|
mme_ue_t *mme_ue = NULL;
|
||||||
mme_sess_t *sess;
|
mme_sess_t *sess;
|
||||||
pkbuf_t *s11buf = NULL;
|
pkbuf_t *s11buf = NULL;
|
||||||
|
|
||||||
|
d_assert(xact, return, "Null param");
|
||||||
d_assert(bearer, return, "Null param");
|
d_assert(bearer, return, "Null param");
|
||||||
mme_ue = bearer->mme_ue;
|
mme_ue = bearer->mme_ue;
|
||||||
d_assert(mme_ue, return, "Null param");
|
d_assert(mme_ue, return, "Null param");
|
||||||
|
@ -803,9 +805,10 @@ void emm_handle_downlink_data_notification(mme_bearer_t *bearer)
|
||||||
rv = mme_s11_build_downlink_data_notification_ack(&s11buf, sess);
|
rv = mme_s11_build_downlink_data_notification_ack(&s11buf, sess);
|
||||||
d_assert(rv == CORE_OK, return, "S11 build error");
|
d_assert(rv == CORE_OK, return, "S11 build error");
|
||||||
|
|
||||||
rv = mme_s11_send_to_sgw(bearer->sgw,
|
d_assert(gtp_xact_commit(xact,
|
||||||
GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE, sess->sgw_s11_teid,
|
GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE,
|
||||||
s11buf);
|
sess->sgw_s11_teid, s11buf) == CORE_OK,
|
||||||
|
return , "xact commit error");
|
||||||
|
|
||||||
/* FIXME : Send s1 paging */
|
/* FIXME : Send s1 paging */
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,8 @@ CORE_DECLARE(void) emm_handle_delete_session_request(mme_ue_t *mme_ue);
|
||||||
CORE_DECLARE(void) emm_handle_delete_session_response(mme_bearer_t *bearer);
|
CORE_DECLARE(void) emm_handle_delete_session_response(mme_bearer_t *bearer);
|
||||||
CORE_DECLARE(void) emm_handle_service_request(
|
CORE_DECLARE(void) emm_handle_service_request(
|
||||||
mme_ue_t *mme_ue, nas_service_request_t *service_request);
|
mme_ue_t *mme_ue, nas_service_request_t *service_request);
|
||||||
CORE_DECLARE(void) emm_handle_downlink_data_notification(mme_bearer_t *bearer);
|
CORE_DECLARE(void) emm_handle_downlink_data_notification(gtp_xact_t *xact,
|
||||||
|
mme_bearer_t *bearer);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,9 +60,12 @@ void emm_state_operational(fsm_t *s, event_t *e)
|
||||||
case GTP_DELETE_SESSION_RESPONSE_TYPE:
|
case GTP_DELETE_SESSION_RESPONSE_TYPE:
|
||||||
emm_handle_delete_session_response(bearer);
|
emm_handle_delete_session_response(bearer);
|
||||||
case GTP_DOWNLINK_DATA_NOTIFICATION_TYPE:
|
case GTP_DOWNLINK_DATA_NOTIFICATION_TYPE:
|
||||||
emm_handle_downlink_data_notification(bearer);
|
{
|
||||||
|
gtp_xact_t *xact = (gtp_xact_t *)event_get_param3(e);
|
||||||
|
emm_handle_downlink_data_notification(xact, bearer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,11 +160,13 @@ void mme_s11_handle_release_access_bearers_response(
|
||||||
}
|
}
|
||||||
|
|
||||||
void mme_s11_handle_downlink_data_notification(
|
void mme_s11_handle_downlink_data_notification(
|
||||||
mme_sess_t *sess, gtp_downlink_data_notification_t *noti)
|
gtp_xact_t *xact, mme_sess_t *sess,
|
||||||
|
gtp_downlink_data_notification_t *noti)
|
||||||
{
|
{
|
||||||
event_t e;
|
event_t e;
|
||||||
mme_bearer_t *bearer = NULL;
|
mme_bearer_t *bearer = NULL;
|
||||||
|
|
||||||
|
d_assert(xact, return, "Null param");
|
||||||
d_assert(sess, return, "Null param");
|
d_assert(sess, return, "Null param");
|
||||||
d_assert(noti, return, "Null param");
|
d_assert(noti, return, "Null param");
|
||||||
|
|
||||||
|
@ -177,5 +179,6 @@ void mme_s11_handle_downlink_data_notification(
|
||||||
event_set(&e, MME_EVT_EMM_BEARER_FROM_S11);
|
event_set(&e, MME_EVT_EMM_BEARER_FROM_S11);
|
||||||
event_set_param1(&e, (c_uintptr_t)bearer->index);
|
event_set_param1(&e, (c_uintptr_t)bearer->index);
|
||||||
event_set_param2(&e, (c_uintptr_t)GTP_DOWNLINK_DATA_NOTIFICATION_TYPE);
|
event_set_param2(&e, (c_uintptr_t)GTP_DOWNLINK_DATA_NOTIFICATION_TYPE);
|
||||||
|
event_set_param3(&e, (c_uintptr_t)xact);
|
||||||
mme_event_send(&e);
|
mme_event_send(&e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,8 @@ CORE_DECLARE(void) mme_s11_handle_delete_session_response(
|
||||||
CORE_DECLARE(void) mme_s11_handle_release_access_bearers_response(
|
CORE_DECLARE(void) mme_s11_handle_release_access_bearers_response(
|
||||||
mme_sess_t *sess, gtp_release_access_bearers_response_t *rsp);
|
mme_sess_t *sess, gtp_release_access_bearers_response_t *rsp);
|
||||||
CORE_DECLARE(void) mme_s11_handle_downlink_data_notification(
|
CORE_DECLARE(void) mme_s11_handle_downlink_data_notification(
|
||||||
mme_sess_t *sess, gtp_downlink_data_notification_t *noti);
|
gtp_xact_t *xact, mme_sess_t *sess,
|
||||||
|
gtp_downlink_data_notification_t *noti);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -329,6 +329,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
||||||
|
|
||||||
case GTP_DOWNLINK_DATA_NOTIFICATION_TYPE:
|
case GTP_DOWNLINK_DATA_NOTIFICATION_TYPE:
|
||||||
mme_s11_handle_downlink_data_notification(
|
mme_s11_handle_downlink_data_notification(
|
||||||
|
xact,
|
||||||
sess, >p_message.downlink_data_notification);
|
sess, >p_message.downlink_data_notification);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -407,3 +407,10 @@ void sgw_handle_lo_dldata_notification(sgw_bearer_t *bearer)
|
||||||
d_trace(3, "[GTP] Downlink Data Notification : "
|
d_trace(3, "[GTP] Downlink Data Notification : "
|
||||||
"SGW[%d] --> MME[%d]\n", sess->sgw_s11_teid, sess->mme_s11_teid);
|
"SGW[%d] --> MME[%d]\n", sess->sgw_s11_teid, sess->mme_s11_teid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sgw_handle_downlink_data_notification_ack(sgw_sess_t *sess,
|
||||||
|
gtp_downlink_data_notification_acknowledge_t *ack)
|
||||||
|
{
|
||||||
|
d_trace(3, "[GTP] Downlink Data Notification Ack: "
|
||||||
|
"MME[%d] --> SGW[%d]\n", sess->mme_s11_teid, sess->sgw_s11_teid);
|
||||||
|
}
|
||||||
|
|
|
@ -27,6 +27,9 @@ CORE_DECLARE(void) sgw_handle_release_access_bearers_request(gtp_xact_t *xact,
|
||||||
sgw_sess_t *sess, gtp_release_access_bearers_request_t *req);
|
sgw_sess_t *sess, gtp_release_access_bearers_request_t *req);
|
||||||
|
|
||||||
CORE_DECLARE(void) sgw_handle_lo_dldata_notification(sgw_bearer_t *bearer);
|
CORE_DECLARE(void) sgw_handle_lo_dldata_notification(sgw_bearer_t *bearer);
|
||||||
|
|
||||||
|
CORE_DECLARE(void) sgw_handle_downlink_data_notification_ack(sgw_sess_t *sess,
|
||||||
|
gtp_downlink_data_notification_acknowledge_t *ack);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
|
@ -125,12 +125,12 @@ static int _gtpv1_s5u_recv_cb(net_sock_t *sock, void *data)
|
||||||
* FIXME : Data buffering required
|
* FIXME : Data buffering required
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if (CHECK_DL_NOTI_SENT(bearer))
|
if (!CHECK_DL_NOTI_SENT(bearer))
|
||||||
{
|
{
|
||||||
event_t e;
|
event_t e;
|
||||||
status_t rv;
|
status_t rv;
|
||||||
|
|
||||||
event_set(&e, SGW_EVT_S5C_SESSION_MSG);
|
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);
|
||||||
if (rv != CORE_OK)
|
if (rv != CORE_OK)
|
||||||
|
|
|
@ -108,7 +108,11 @@ void sgw_state_operational(fsm_t *s, event_t *e)
|
||||||
sgw_handle_release_access_bearers_request(
|
sgw_handle_release_access_bearers_request(
|
||||||
xact, sess,
|
xact, sess,
|
||||||
>p_message.release_access_bearers_request);
|
>p_message.release_access_bearers_request);
|
||||||
|
break;
|
||||||
|
case GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE:
|
||||||
|
sgw_handle_downlink_data_notification_ack(
|
||||||
|
sess,
|
||||||
|
>p_message.downlink_data_notification_acknowledge);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
d_warn("Not implmeneted(type:%d)", type);
|
d_warn("Not implmeneted(type:%d)", type);
|
||||||
|
|
Loading…
Reference in New Issue