update it
This commit is contained in:
parent
3059914d39
commit
21839551cc
|
@ -10,7 +10,7 @@ libmme_la_SOURCES = \
|
|||
nas_conv.h nas_security.h \
|
||||
emm_handler.h \
|
||||
esm_handler.h esm_build.h \
|
||||
mme_s11_path.h mme_s11_build.h \
|
||||
mme_s11_path.h mme_s11_build.h mme_s11_handler.h \
|
||||
mme_sm.h
|
||||
|
||||
nodist_libmme_la_SOURCES = \
|
||||
|
@ -20,7 +20,7 @@ nodist_libmme_la_SOURCES = \
|
|||
mme_s6a_handler.c \
|
||||
nas_conv.c nas_security.c emm_sm.c emm_handler.c \
|
||||
esm_sm.c esm_handler.c esm_build.c \
|
||||
mme_s11_path.c mme_s11_build.c \
|
||||
mme_s11_path.c mme_s11_build.c mme_s11_handler.c \
|
||||
mme_sm.c
|
||||
|
||||
libmme_la_DEPENDENCIES = \
|
||||
|
|
|
@ -522,6 +522,24 @@ mme_esm_t* mme_esm_find_by_pti(mme_ue_t *ue, c_uint8_t pti)
|
|||
return esm;
|
||||
}
|
||||
|
||||
mme_esm_t* mme_esm_find_by_ebi(mme_ue_t *ue, c_uint8_t ebi)
|
||||
{
|
||||
mme_esm_t *esm = NULL;
|
||||
|
||||
d_assert(ue, return NULL, "Null param");
|
||||
|
||||
esm = mme_esm_first(ue);
|
||||
while (esm)
|
||||
{
|
||||
if (ebi == esm->ebi)
|
||||
break;
|
||||
|
||||
esm = mme_esm_next(esm);
|
||||
}
|
||||
|
||||
return esm;
|
||||
}
|
||||
|
||||
mme_esm_t* mme_esm_first(mme_ue_t *ue)
|
||||
{
|
||||
d_assert(ue, return NULL, "Null param");
|
||||
|
|
|
@ -222,6 +222,7 @@ CORE_DECLARE(status_t) mme_esm_remove(mme_esm_t *esm);
|
|||
CORE_DECLARE(status_t) mme_esm_remove_all(mme_ue_t *ue);
|
||||
CORE_DECLARE(mme_esm_t*) mme_esm_find(index_t index);
|
||||
CORE_DECLARE(mme_esm_t*) mme_esm_find_by_pti(mme_ue_t *ue, c_uint8_t pti);
|
||||
CORE_DECLARE(mme_esm_t*) mme_esm_find_by_ebi(mme_ue_t *ue, c_uint8_t ebi);
|
||||
CORE_DECLARE(mme_esm_t*) mme_esm_first(mme_ue_t *ue);
|
||||
CORE_DECLARE(mme_esm_t*) mme_esm_next(mme_esm_t *esm);
|
||||
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
#define TRACE_MODULE _mme_s11_handler
|
||||
|
||||
#include "core_debug.h"
|
||||
|
||||
#include "gtp_types.h"
|
||||
|
||||
#include "mme_event.h"
|
||||
#include "mme_context.h"
|
||||
#include "mme_s11_handler.h"
|
||||
|
||||
void mme_s11_handle_create_session_response(
|
||||
mme_ue_t *ue, gtp_create_session_response_t *rsp)
|
||||
{
|
||||
gtp_f_teid_t *sgw_s11_teid = NULL;
|
||||
gtp_f_teid_t *sgw_s1u_teid = NULL;
|
||||
|
||||
mme_esm_t *esm = NULL;
|
||||
|
||||
d_assert(ue, return, "Null param");
|
||||
d_assert(rsp, return, "Null param");
|
||||
|
||||
if (rsp->sender_f_teid_for_control_plane.presence == 0)
|
||||
{
|
||||
d_error("No GTP TEID");
|
||||
return;
|
||||
}
|
||||
if (rsp->bearer_contexts_created.presence == 0)
|
||||
{
|
||||
d_error("No Bearer");
|
||||
return;
|
||||
}
|
||||
if (rsp->bearer_contexts_created.eps_bearer_id.presence == 0)
|
||||
{
|
||||
d_error("No EPS Bearer ID");
|
||||
return;
|
||||
}
|
||||
if (rsp->bearer_contexts_created.s1_u_enodeb_f_teid.presence == 0)
|
||||
{
|
||||
d_error("No GTP TEID");
|
||||
return;
|
||||
}
|
||||
|
||||
esm = mme_esm_find_by_ebi(
|
||||
ue, rsp->bearer_contexts_created.eps_bearer_id.u8);
|
||||
d_assert(esm, return, "No ESM Context");
|
||||
|
||||
/* Receive Control Plane(UL) : SGW-S11 */
|
||||
sgw_s11_teid = rsp->sender_f_teid_for_control_plane.data;
|
||||
ue->sgw_s11_teid = ntohl(sgw_s11_teid->teid);
|
||||
ue->sgw_s11_addr = sgw_s11_teid->ipv4_addr;
|
||||
|
||||
/* Receive Data Plane(UL) : SGW-S1U */
|
||||
sgw_s1u_teid = rsp->bearer_contexts_created.s1_u_enodeb_f_teid.data;
|
||||
esm->sgw_s1u_teid = ntohl(sgw_s1u_teid->teid);
|
||||
esm->sgw_s1u_addr = sgw_s1u_teid->ipv4_addr;
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
#ifndef __MME_HANDLER_H__
|
||||
#define __MME_HANDLER_H__
|
||||
|
||||
#include "gtp_tlv.h"
|
||||
|
||||
#include "mme_context.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
CORE_DECLARE(void) mme_s11_handle_create_session_response(
|
||||
mme_ue_t *ue, gtp_create_session_response_t *rsp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __MME_HANDLER_H__ */
|
|
@ -9,6 +9,7 @@
|
|||
#include "s1ap_path.h"
|
||||
#include "nas_security.h"
|
||||
#include "mme_s11_path.h"
|
||||
#include "mme_s11_handler.h"
|
||||
|
||||
void mme_state_initial(fsm_t *s, event_t *e)
|
||||
{
|
||||
|
@ -247,7 +248,8 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
switch(type)
|
||||
{
|
||||
case GTP_CREATE_SESSION_RESPONSE_TYPE:
|
||||
d_info("receive reponse : %d", teid);
|
||||
mme_s11_handle_create_session_response(
|
||||
ue, >p_message.create_session_response);
|
||||
break;
|
||||
default:
|
||||
d_warn("Not implmeneted(type:%d)", type);
|
||||
|
|
|
@ -119,29 +119,36 @@ void pgw_handle_create_session_request(
|
|||
d_assert(xact, return, "Null param");
|
||||
d_assert(req, return, "Null param");
|
||||
|
||||
if (req->sender_f_teid_for_control_plane.presence == 0)
|
||||
{
|
||||
d_error("No Sender F-TEID for control plance");
|
||||
return;
|
||||
}
|
||||
if (req->access_point_name.presence == 0)
|
||||
{
|
||||
d_error("No APN");
|
||||
return;
|
||||
}
|
||||
|
||||
if (req->protocol_configuration_options.presence == 0)
|
||||
{
|
||||
d_error("No Protocol Configuration Options");
|
||||
return;
|
||||
}
|
||||
|
||||
if (req->bearer_contexts_to_be_created.presence == 0 ||
|
||||
req->bearer_contexts_to_be_created.eps_bearer_id.presence == 0)
|
||||
if (req->sender_f_teid_for_control_plane.presence == 0)
|
||||
{
|
||||
d_error("No TEID");
|
||||
return;
|
||||
}
|
||||
if (req->bearer_contexts_to_be_created.presence == 0)
|
||||
{
|
||||
d_error("No Bearer");
|
||||
return;
|
||||
}
|
||||
if (req->bearer_contexts_to_be_created.eps_bearer_id.presence == 0)
|
||||
{
|
||||
d_error("No EPS Bearer ID");
|
||||
return;
|
||||
}
|
||||
if (req->bearer_contexts_to_be_created.s5_s8_u_sgw_f_teid.presence == 0)
|
||||
{
|
||||
d_error("No TEID");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Generate Control Plane(UL) : PGW-S5C */
|
||||
sess = pgw_sess_add();
|
||||
|
|
|
@ -28,16 +28,19 @@ void sgw_handle_create_session_request(
|
|||
|
||||
if (req->sender_f_teid_for_control_plane.presence == 0)
|
||||
{
|
||||
d_error("No Sender F-TEID for control plance");
|
||||
d_error("No GTP TEID");
|
||||
return;
|
||||
}
|
||||
|
||||
if (req->bearer_contexts_to_be_created.presence == 0 ||
|
||||
req->bearer_contexts_to_be_created.eps_bearer_id.presence == 0)
|
||||
if (req->bearer_contexts_to_be_created.presence == 0)
|
||||
{
|
||||
d_error("No Bearer");
|
||||
return;
|
||||
}
|
||||
if (req->bearer_contexts_to_be_created.eps_bearer_id.presence == 0)
|
||||
{
|
||||
d_error("No EPS Bearer ID");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Generate Control Plane(UL) : SGW-S11 */
|
||||
/* Generate Control Plane(DL) : SGW-S5C */
|
||||
|
@ -111,17 +114,24 @@ void sgw_handle_create_session_response(gtp_xact_t *xact,
|
|||
if (rsp->pgw_s5_s8__s2a_s2b_f_teid_for_pmip_based_interface_or_for_gtp_based_control_plane_interface.
|
||||
presence == 0)
|
||||
{
|
||||
d_error("No PGW F-TEID for GTP-based control plance");
|
||||
d_error("No GTP TEID");
|
||||
return;
|
||||
}
|
||||
|
||||
if (rsp->bearer_contexts_created.presence == 0 ||
|
||||
rsp->bearer_contexts_created.eps_bearer_id.presence == 0 ||
|
||||
rsp->bearer_contexts_created.s5_s8_u_sgw_f_teid.presence == 0)
|
||||
if (rsp->bearer_contexts_created.presence == 0)
|
||||
{
|
||||
d_error("No Bearer");
|
||||
return;
|
||||
}
|
||||
if (rsp->bearer_contexts_created.eps_bearer_id.presence == 0)
|
||||
{
|
||||
d_error("No EPS Bearer ID");
|
||||
return;
|
||||
}
|
||||
if (rsp->bearer_contexts_created.s5_s8_u_sgw_f_teid.presence == 0)
|
||||
{
|
||||
d_error("No GTP TEID");
|
||||
return;
|
||||
}
|
||||
|
||||
bearer = sgw_bearer_find_by_id(sess,
|
||||
rsp->bearer_contexts_created.eps_bearer_id.u8);
|
||||
|
|
Loading…
Reference in New Issue