refine it

This commit is contained in:
Sukchan Lee 2017-12-06 17:58:38 +09:00
parent 10becbb998
commit 82b84d760c
14 changed files with 37 additions and 54 deletions

View File

@ -10,6 +10,13 @@
extern "C" {
#endif /* __cplusplus */
#define SETUP_GTP_NODE(__cTX, __gNODE) \
do { \
d_assert((__cTX), break, "Null param"); \
d_assert((__gNODE), break, "Null param"); \
(__cTX)->gnode = __gNODE; \
} while(0)
/**
* This structure represents the commonalities of GTP node such as MME, SGW,
* PGW gateway. Some of members may not be used by the specific type of node */

View File

@ -1536,8 +1536,14 @@ mme_ue_t* mme_ue_add(enb_ue_t *enb_ue)
list_init(&mme_ue->sess_list);
mme_ue->mme_s11_teid = mme_ue->index;
CONNECT_SGW_GTP_NODE(mme_ue);
if (mme_self()->sgw == NULL)
mme_self()->sgw = list_first(&mme_self()->sgw_list);
SETUP_GTP_NODE(mme_ue, mme_self()->sgw);
mme_self()->sgw = list_next(mme_self()->sgw);
/* Create t3413 timer */
mme_ue->t3413 = timer_create(&self.tm_service, MME_EVT_EMM_T3413,
self.t3413_value * 1000);

View File

@ -327,16 +327,7 @@ struct _mme_ue_t {
c_uint8_t response;
} gtp_counter[MAX_NUM_OF_GTP_COUNTER];
#define CONNECT_SGW_GTP_NODE(__mME) \
do { \
d_assert((__mME), break, "Null param"); \
(__mME)->sgw = self.sgw; \
d_assert(((__mME)->sgw), break, "Null param"); \
self.sgw = list_next((__mME)->sgw); \
if (!self.sgw) self.sgw = list_first(&mme_self()->sgw_list); \
d_assert(self.sgw, break, "Null param"); \
} while(0)
gtp_node_t *sgw;
gtp_node_t *gnode;
};
#define MME_HAVE_SGW_S1U_PATH(__sESS) \

View File

@ -93,9 +93,6 @@ status_t mme_gtp_open()
d_assert(mme_self()->gtpc_addr || mme_self()->gtpc_addr6,
return CORE_ERROR, "No GTP Server");
mme_self()->sgw = list_first(&mme_self()->sgw_list);
d_assert(mme_self()->sgw, return CORE_ERROR,);
for (gnode = list_first(&mme_self()->pgw_list);
gnode; gnode = list_next(gnode))
{
@ -170,7 +167,7 @@ status_t mme_gtp_send_create_session_request(mme_sess_t *sess)
d_assert(rv == CORE_OK, return CORE_ERROR,
"S11 build error");
xact = gtp_xact_local_create(mme_ue->sgw, &h, pkbuf);
xact = gtp_xact_local_create(mme_ue->gnode, &h, pkbuf);
d_assert(xact, return CORE_ERROR, "Null param");
rv = gtp_xact_commit(xact);
@ -203,7 +200,7 @@ status_t mme_gtp_send_modify_bearer_request(
&pkbuf, h.type, bearer, uli_presence);
d_assert(rv == CORE_OK, return CORE_ERROR, "S11 build error");
xact = gtp_xact_local_create(mme_ue->sgw, &h, pkbuf);
xact = gtp_xact_local_create(mme_ue->gnode, &h, pkbuf);
d_assert(xact, return CORE_ERROR, "Null param");
rv = gtp_xact_commit(xact);
@ -231,7 +228,7 @@ status_t mme_gtp_send_delete_session_request(mme_sess_t *sess)
rv = mme_s11_build_delete_session_request(&s11buf, h.type, sess);
d_assert(rv == CORE_OK, return CORE_ERROR, "S11 build error");
xact = gtp_xact_local_create(mme_ue->sgw, &h, s11buf);
xact = gtp_xact_local_create(mme_ue->gnode, &h, s11buf);
d_assert(xact, return CORE_ERROR, "Null param");
GTP_XACT_STORE_SESSION(xact, sess);
@ -320,7 +317,7 @@ status_t mme_gtp_send_release_access_bearers_request(mme_ue_t *mme_ue)
rv = mme_s11_build_release_access_bearers_request(&pkbuf, h.type);
d_assert(rv == CORE_OK, return CORE_ERROR, "S11 build error");
xact = gtp_xact_local_create(mme_ue->sgw, &h, pkbuf);
xact = gtp_xact_local_create(mme_ue->gnode, &h, pkbuf);
d_assert(xact, return CORE_ERROR, "Null param");
rv = gtp_xact_commit(xact);
@ -347,7 +344,7 @@ status_t mme_gtp_send_create_indirect_data_forwarding_tunnel_request(
&pkbuf, h.type, mme_ue);
d_assert(rv == CORE_OK, return CORE_ERROR, "S11 build error");
xact = gtp_xact_local_create(mme_ue->sgw, &h, pkbuf);
xact = gtp_xact_local_create(mme_ue->gnode, &h, pkbuf);
d_assert(xact, return CORE_ERROR, "Null param");
rv = gtp_xact_commit(xact);
@ -373,7 +370,7 @@ status_t mme_gtp_send_delete_indirect_data_forwarding_tunnel_request(
pkbuf = pkbuf_alloc(TLV_MAX_HEADROOM, 0);
d_assert(pkbuf, return CORE_ERROR, "S11 build error");
xact = gtp_xact_local_create(mme_ue->sgw, &h, pkbuf);
xact = gtp_xact_local_create(mme_ue->gnode, &h, pkbuf);
d_assert(xact, return CORE_ERROR, "Null param");
rv = gtp_xact_commit(xact);

View File

@ -376,7 +376,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
d_assert(mme_ue, pkbuf_free(pkbuf); break,
"No UE Context(TEID:%d)", message.h.teid);
rv = gtp_xact_receive(mme_ue->sgw, &message.h, &xact);
rv = gtp_xact_receive(mme_ue->gnode, &message.h, &xact);
if (rv != CORE_OK)
{
pkbuf_free(pkbuf);

View File

@ -813,7 +813,7 @@ pgw_sess_t *pgw_sess_find_or_add_by_message(gtp_message_t *gtp_message)
d_assert(sess, return NULL, "No Session Context");
/* Setup GTP Node between PGW and SGW */
CONNECT_SGW_GTP_NODE(sess, sgw);
SETUP_GTP_NODE(sess, sgw);
}
return sess;

View File

@ -93,13 +93,7 @@ typedef struct _pgw_sess_t {
list_t bearer_list;
/* Related Context */
#define CONNECT_SGW_GTP_NODE(__sESS, __gNODE) \
do { \
d_assert((__sESS), return NULL, "Null param"); \
d_assert((__gNODE), return NULL, "Null param"); \
(__sESS)->sgw = (__gNODE); \
} while(0)
gtp_node_t *sgw;
gtp_node_t *gnode;
} pgw_sess_t;
typedef struct _pgw_bearer_t {

View File

@ -92,7 +92,7 @@ void pgw_gx_handle_cca_initial_request(
rv = pgw_s5c_build_create_bearer_request(&pkbuf, h.type, bearer);
d_assert(rv == CORE_OK, return, "S11 build error");
xact = gtp_xact_local_create(sess->sgw, &h, pkbuf);
xact = gtp_xact_local_create(sess->gnode, &h, pkbuf);
d_assert(xact, return, "Null param");
rv = gtp_xact_commit(xact);

View File

@ -91,7 +91,7 @@ void pgw_state_operational(fsm_t *s, event_t *e)
pkbuf_free(recvbuf); pkbuf_free(copybuf); break,
"No Session Context");
rv = gtp_xact_receive(sess->sgw, &message->h, &xact);
rv = gtp_xact_receive(sess->gnode, &message->h, &xact);
if (rv != CORE_OK)
{
pkbuf_free(recvbuf);

View File

@ -555,7 +555,7 @@ sgw_ue_t *sgw_ue_find_or_add_by_message(gtp_message_t *gtp_message)
req->bearer_contexts_to_be_created.eps_bearer_id.u8);
d_assert(sgw_ue, return NULL,);
CONNECT_MME_GTP_NODE(sgw_ue, mme);
SETUP_GTP_NODE(sgw_ue, mme);
}
return sgw_ue;

View File

@ -63,13 +63,7 @@ typedef struct _sgw_ue_t {
list_t sess_list;
#define CONNECT_MME_GTP_NODE(__sGW, __gNODE) \
do { \
d_assert((__sGW), return NULL, "Null param"); \
d_assert((__gNODE), return NULL, "Null param"); \
(__sGW)->mme = (__gNODE); \
} while(0)
gtp_node_t *mme;
gtp_node_t *gnode;
} sgw_ue_t;
typedef struct _sgw_sess_t {
@ -92,13 +86,7 @@ typedef struct _sgw_sess_t {
list_t bearer_list;
/* Related Context */
#define CONNECT_PGW_GTP_NODE(__sESS, __gNODE) \
do { \
d_assert((__sESS), return, "Null param"); \
d_assert((__gNODE), return, "Null param"); \
(__sESS)->pgw = __gNODE; \
} while(0)
gtp_node_t *pgw;
gtp_node_t *gnode;
sgw_ue_t *sgw_ue;
} sgw_sess_t;

View File

@ -115,7 +115,7 @@ void sgw_s11_handle_create_session_request(gtp_xact_t *s11_xact,
}
/* Setup GTP Node */
CONNECT_PGW_GTP_NODE(sess, pgw);
SETUP_GTP_NODE(sess, pgw);
/* Remove PGW-S5C */
req->pgw_s5_s8_address_for_control_plane_or_pmip.presence = 0;
@ -145,7 +145,7 @@ void sgw_s11_handle_create_session_request(gtp_xact_t *s11_xact,
rv = gtp_build_msg(&pkbuf, gtp_message);
d_assert(rv == CORE_OK, return, "gtp build failed");
s5c_xact = gtp_xact_local_create(sess->pgw, &gtp_message->h, pkbuf);
s5c_xact = gtp_xact_local_create(sess->gnode, &gtp_message->h, pkbuf);
d_assert(s5c_xact, return, "Null param");
gtp_xact_associate(s11_xact, s5c_xact);
@ -281,7 +281,7 @@ void sgw_s11_handle_delete_session_request(gtp_xact_t *s11_xact,
rv = gtp_build_msg(&pkbuf, gtp_message);
d_assert(rv == CORE_OK, return, "gtp build failed");
s5c_xact = gtp_xact_local_create(sess->pgw, &gtp_message->h, pkbuf);
s5c_xact = gtp_xact_local_create(sess->gnode, &gtp_message->h, pkbuf);
d_assert(s5c_xact, return, "Null param");
gtp_xact_associate(s11_xact, s5c_xact);
@ -515,7 +515,7 @@ void sgw_s11_handle_lo_dldata_notification(sgw_bearer_t *bearer)
rv = gtp_build_msg(&pkbuf, &gtp_message);
d_assert(rv == CORE_OK, return, "gtp build failed");
xact = gtp_xact_local_create(sgw_ue->mme, &gtp_message.h, pkbuf);
xact = gtp_xact_local_create(sgw_ue->gnode, &gtp_message.h, pkbuf);
d_assert(xact, return, "Null param");
rv = gtp_xact_commit(xact);

View File

@ -262,7 +262,7 @@ void sgw_s5c_handle_create_bearer_request(gtp_xact_t *s5c_xact,
rv = gtp_build_msg(&pkbuf, gtp_message);
d_assert(rv == CORE_OK, return, "gtp build failed");
s11_xact = gtp_xact_local_create(sgw_ue->mme, &gtp_message->h, pkbuf);
s11_xact = gtp_xact_local_create(sgw_ue->gnode, &gtp_message->h, pkbuf);
d_assert(s11_xact, return, "Null param");
gtp_xact_associate(s5c_xact, s11_xact);

View File

@ -72,7 +72,7 @@ void sgw_state_operational(fsm_t *s, event_t *e)
sgw_ue = sgw_ue_find_by_teid(message.h.teid);
d_assert(sgw_ue, pkbuf_free(pkbuf); break, "No Session Context");
rv = gtp_xact_receive(sgw_ue->mme, &message.h, &xact);
rv = gtp_xact_receive(sgw_ue->gnode, &message.h, &xact);
if (rv != CORE_OK)
{
pkbuf_free(pkbuf);
@ -137,7 +137,7 @@ void sgw_state_operational(fsm_t *s, event_t *e)
sess = sgw_sess_find_by_teid(message.h.teid);
d_assert(sess, pkbuf_free(pkbuf); break, "No Session Context");
rv = gtp_xact_receive(sess->pgw, &message.h, &xact);
rv = gtp_xact_receive(sess->gnode, &message.h, &xact);
if (rv != CORE_OK)
{
pkbuf_free(pkbuf);