Reduce SGW IP assign to One.
Initially, I've started to update Control Plane related to this issue. Context Accessing is re-arraged based Thread for finding GTP Node Context. [MME] mme_sgw_t : SM thread(Control-Plane) [SGW] sgw_mme_t : Net thread(Data-Plane) sgw_pgw_t : SM thread(Control-Plane) [PGW] pgw_sgw_t : Net thread(Data-Plane)
This commit is contained in:
parent
ee4dd7732e
commit
5d6e63c20e
|
@ -15,7 +15,6 @@ static int _gtpv2_c_recv_cb(net_sock_t *sock, void *data)
|
|||
pkbuf_t *pkbuf = NULL;
|
||||
c_uint32_t addr;
|
||||
c_uint16_t port;
|
||||
mme_sgw_t *sgw = NULL;
|
||||
|
||||
d_assert(sock, return -1, "Null param");
|
||||
|
||||
|
@ -31,19 +30,14 @@ static int _gtpv2_c_recv_cb(net_sock_t *sock, void *data)
|
|||
addr = sock->remote.sin_addr.s_addr;
|
||||
port = ntohs(sock->remote.sin_port);
|
||||
|
||||
sgw = mme_sgw_find(addr, port);
|
||||
d_assert(sgw, return -1, "Can't find SGW from [%s:%d]",
|
||||
INET_NTOP(&addr, buf), port);
|
||||
|
||||
sgw->sock = sock; /* Is it needed? */
|
||||
|
||||
d_trace(10, "S11_PDU is received from SGW[%s:%d]\n",
|
||||
INET_NTOP(&addr, buf), port);
|
||||
d_trace_hex(10, pkbuf->payload, pkbuf->len);
|
||||
|
||||
event_set(&e, MME_EVT_S11_MESSAGE);
|
||||
event_set_param1(&e, (c_uintptr_t)sgw);
|
||||
event_set_param2(&e, (c_uintptr_t)pkbuf);
|
||||
event_set_param1(&e, (c_uintptr_t)addr);
|
||||
event_set_param2(&e, (c_uintptr_t)port);
|
||||
event_set_param3(&e, (c_uintptr_t)pkbuf);
|
||||
rv = mme_event_send(&e);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
|
|
|
@ -329,13 +329,16 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
case MME_EVT_S11_MESSAGE:
|
||||
{
|
||||
status_t rv;
|
||||
gtp_node_t *gnode = (gtp_node_t *)event_get_param1(e);
|
||||
pkbuf_t *pkbuf = (pkbuf_t *)event_get_param2(e);
|
||||
gtp_node_t *gnode = NULL;
|
||||
c_uint32_t addr = (c_uint32_t)event_get_param1(e);
|
||||
c_uint16_t port = (c_uint16_t)event_get_param2(e);
|
||||
pkbuf_t *pkbuf = (pkbuf_t *)event_get_param3(e);
|
||||
gtp_xact_t *xact = NULL;
|
||||
gtp_message_t message;
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
|
||||
d_assert(pkbuf, break, "Null param");
|
||||
gnode = mme_sgw_find(addr, port);
|
||||
d_assert(gnode, pkbuf_free(pkbuf); break, "Null param");
|
||||
|
||||
rv = gtp_xact_receive(gnode, pkbuf, &xact, &message);
|
||||
|
|
|
@ -15,10 +15,11 @@ static int _gtpv2_c_recv_cb(net_sock_t *sock, void *data)
|
|||
{
|
||||
event_t e;
|
||||
status_t rv;
|
||||
gtp_header_t *gtp_h = NULL;
|
||||
pkbuf_t *pkbuf = NULL;
|
||||
c_uint32_t addr;
|
||||
c_uint16_t port;
|
||||
event_e event = (event_e)data;
|
||||
c_uint32_t addr = 0;
|
||||
c_uint16_t port = 0;
|
||||
sgw_mme_t *mme = NULL;
|
||||
|
||||
d_assert(sock, return -1, "Null param");
|
||||
d_assert(data, return -1, "Null param");
|
||||
|
@ -32,39 +33,41 @@ static int _gtpv2_c_recv_cb(net_sock_t *sock, void *data)
|
|||
return -1;
|
||||
}
|
||||
|
||||
gtp_h = (gtp_header_t *)pkbuf->payload;
|
||||
d_assert(gtp_h, return -1, "Null param");
|
||||
|
||||
addr = sock->remote.sin_addr.s_addr;
|
||||
port = ntohs(sock->remote.sin_port);
|
||||
|
||||
event_set(&e, event);
|
||||
event_set_param2(&e, (c_uintptr_t)pkbuf);
|
||||
if (event == SGW_EVT_S11_MESSAGE)
|
||||
mme = sgw_mme_find(addr, port);
|
||||
if (!mme && gtp_h->teid == 0)
|
||||
{
|
||||
sgw_mme_t *mme = sgw_mme_find(addr, port);
|
||||
if (!mme)
|
||||
{
|
||||
mme = sgw_mme_add();
|
||||
d_assert(mme, return -1, "Can't add MME-GTP node");
|
||||
mme = sgw_mme_add();
|
||||
d_assert(mme, return -1, "Can't add MME-GTP node");
|
||||
|
||||
mme->addr = addr;
|
||||
mme->port = port;
|
||||
mme->sock = sock;
|
||||
}
|
||||
mme->addr = addr;
|
||||
mme->port = port;
|
||||
mme->sock = sock;
|
||||
}
|
||||
|
||||
if (mme)
|
||||
{
|
||||
d_trace(10, "S11 PDU received from MME\n");
|
||||
|
||||
event_set(&e, SGW_EVT_S11_MESSAGE);
|
||||
event_set_param1(&e, (c_uintptr_t)mme);
|
||||
}
|
||||
else if (event == SGW_EVT_S5C_MESSAGE)
|
||||
{
|
||||
sgw_pgw_t *pgw = sgw_pgw_find(addr, port);
|
||||
d_assert(pgw, return -1, "Can't add PGW-GTP node");
|
||||
|
||||
d_trace(10, "S5-C PDU received from PGW\n");
|
||||
|
||||
event_set_param1(&e, (c_uintptr_t)pgw);
|
||||
event_set_param2(&e, (c_uintptr_t)pkbuf);
|
||||
|
||||
}
|
||||
else
|
||||
d_assert(0, pkbuf_free(pkbuf); return -1, "Unknown GTP-Node");
|
||||
{
|
||||
d_trace(10, "S5C PDU received from PGW\n");
|
||||
|
||||
event_set(&e, SGW_EVT_S5C_MESSAGE);
|
||||
event_set_param1(&e, (c_uintptr_t)addr);
|
||||
event_set_param2(&e, (c_uintptr_t)port);
|
||||
event_set_param3(&e, (c_uintptr_t)pkbuf);
|
||||
}
|
||||
|
||||
d_trace_hex(10, pkbuf->payload, pkbuf->len);
|
||||
|
||||
|
|
|
@ -121,13 +121,16 @@ void sgw_state_operational(fsm_t *s, event_t *e)
|
|||
case SGW_EVT_S5C_MESSAGE:
|
||||
{
|
||||
status_t rv;
|
||||
gtp_node_t *gnode = (gtp_node_t *)event_get_param1(e);
|
||||
pkbuf_t *pkbuf = (pkbuf_t *)event_get_param2(e);
|
||||
gtp_node_t *gnode = NULL;
|
||||
c_uint32_t addr = (c_uint32_t)event_get_param1(e);
|
||||
c_uint16_t port = (c_uint16_t)event_get_param2(e);
|
||||
pkbuf_t *pkbuf = (pkbuf_t *)event_get_param3(e);
|
||||
gtp_xact_t *xact = NULL;
|
||||
gtp_message_t message;
|
||||
sgw_sess_t *sess = NULL;
|
||||
|
||||
d_assert(pkbuf, break, "Null param");
|
||||
gnode = sgw_pgw_find(addr, port);
|
||||
d_assert(gnode, pkbuf_free(pkbuf); break, "Null param");
|
||||
|
||||
rv = gtp_xact_receive(gnode, pkbuf, &xact, &message);
|
||||
|
|
Loading…
Reference in New Issue