forked from acouzens/open5gs
contine GTP
This commit is contained in:
parent
774a6c6216
commit
4ce91553af
|
@ -26,7 +26,7 @@
|
|||
/*******************************************************************************
|
||||
* This file had been created by gtp_tlv.py script v0.1.0
|
||||
* Please do not modify this file but regenerate it via script.
|
||||
* Created on: 2017-08-31 10:18:49.801691 by acetcom
|
||||
* Created on: 2017-08-31 12:05:13.855408 by acetcom
|
||||
* from 29274-d80.docx
|
||||
******************************************************************************/
|
||||
|
||||
|
@ -2406,12 +2406,34 @@ tlv_desc_t tlv_desc_modify_access_bearers_response =
|
|||
}};
|
||||
|
||||
|
||||
status_t gtp_parse_msg(gtp_message_t *gtp_message, c_uint8_t type, pkbuf_t *pkbuf)
|
||||
status_t gtp_parse_msg(gtp_message_t *gtp_message, pkbuf_t *pkbuf)
|
||||
{
|
||||
status_t rv = CORE_ERROR;
|
||||
gtp_header_t *h = NULL;
|
||||
c_uint16_t size = 0;
|
||||
|
||||
d_assert(gtp_message, return CORE_ERROR, "Null param");
|
||||
d_assert(pkbuf, return CORE_ERROR, "Null param");
|
||||
d_assert(pkbuf->payload, return CORE_ERROR, "Null param");
|
||||
|
||||
h = pkbuf->payload;
|
||||
d_assert(h, return CORE_ERROR, "Null param");
|
||||
|
||||
memset(gtp_message, 0, sizeof(gtp_message_t));
|
||||
switch(type)
|
||||
|
||||
if (h->teid_presence)
|
||||
size = GTPV2C_HEADER_LEN;
|
||||
else
|
||||
size = GTPV2C_HEADER_LEN-GTPV2C_TEID_LEN;
|
||||
|
||||
d_assert(pkbuf_header(pkbuf, -size) == CORE_OK,
|
||||
return CORE_ERROR, "pkbuf_header error");
|
||||
memcpy(>p_message->h, pkbuf->payload - size, size);
|
||||
|
||||
if (h->teid_presence)
|
||||
gtp_message->h.teid = ntohl(gtp_message->h.teid);
|
||||
|
||||
switch(gtp_message->h.type)
|
||||
{
|
||||
case GTP_ECHO_REQUEST_TYPE:
|
||||
rv = tlv_parse_msg(>p_message->echo_request,
|
||||
|
@ -2530,18 +2552,19 @@ status_t gtp_parse_msg(gtp_message_t *gtp_message, c_uint8_t type, pkbuf_t *pkbu
|
|||
&tlv_desc_modify_access_bearers_response, pkbuf, TLV_MODE_T1_L2_I1);
|
||||
break;
|
||||
default:
|
||||
d_warn("Not implmeneted(type:%d)", type);
|
||||
d_warn("Not implmeneted(type:%d)", gtp_message->h.type);
|
||||
break;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
status_t gtp_build_msg(pkbuf_t **pkbuf, c_uint8_t type, gtp_message_t *gtp_message)
|
||||
status_t gtp_build_msg(pkbuf_t **pkbuf, gtp_message_t *gtp_message)
|
||||
{
|
||||
status_t rv = CORE_ERROR;
|
||||
|
||||
switch(type)
|
||||
d_assert(gtp_message, return rv, "Null param");
|
||||
switch(gtp_message->h.type)
|
||||
{
|
||||
case GTP_ECHO_REQUEST_TYPE:
|
||||
rv = tlv_build_msg(pkbuf, &tlv_desc_echo_request,
|
||||
|
@ -2660,7 +2683,7 @@ status_t gtp_build_msg(pkbuf_t **pkbuf, c_uint8_t type, gtp_message_t *gtp_messa
|
|||
>p_message->modify_access_bearers_response, TLV_MODE_T1_L2_I1);
|
||||
break;
|
||||
default:
|
||||
d_warn("Not implmeneted(type:%d)", type);
|
||||
d_warn("Not implmeneted(type:%d)", gtp_message->h.type);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
/*******************************************************************************
|
||||
* This file had been created by gtp_tlv.py script v0.1.0
|
||||
* Please do not modify this file but regenerate it via script.
|
||||
* Created on: 2017-08-31 10:18:49.786605 by acetcom
|
||||
* Created on: 2017-08-31 12:05:13.838521 by acetcom
|
||||
* from 29274-d80.docx
|
||||
******************************************************************************/
|
||||
|
||||
|
@ -1141,9 +1141,9 @@ typedef struct _gtp_message_t {
|
|||
} gtp_message_t;
|
||||
|
||||
CORE_DECLARE(status_t) gtp_parse_msg(
|
||||
gtp_message_t *gtp_message, c_uint8_t type, pkbuf_t *pkbuf);
|
||||
gtp_message_t *gtp_message, pkbuf_t *pkbuf);
|
||||
CORE_DECLARE(status_t) gtp_build_msg(
|
||||
pkbuf_t **pkbuf, c_uint8_t type, gtp_message_t *gtp_message);
|
||||
pkbuf_t **pkbuf, gtp_message_t *gtp_message);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -57,44 +57,6 @@ status_t gtp_xact_final(void)
|
|||
return CORE_OK;
|
||||
}
|
||||
|
||||
static gtp_xact_t *gtp_xact_create(gtp_xact_ctx_t *context,
|
||||
net_sock_t *sock, gtp_node_t *gnode, c_uint8_t org, c_uint32_t xid,
|
||||
c_uint32_t duration, c_uint8_t retry_count)
|
||||
{
|
||||
char buf[INET_ADDRSTRLEN];
|
||||
gtp_xact_t *xact = NULL;
|
||||
|
||||
d_assert(context, return NULL, "Null param");
|
||||
d_assert(sock, return NULL, "Null param");
|
||||
d_assert(gnode, return NULL, "Null param");
|
||||
|
||||
index_alloc(>p_xact_pool, &xact);
|
||||
d_assert(xact, return NULL, "Transaction allocation failed");
|
||||
|
||||
xact->org = org;
|
||||
xact->xid = xid;
|
||||
xact->sock = sock;
|
||||
xact->gnode = gnode;
|
||||
|
||||
xact->tm_wait = event_timer(context->tm_service, context->event,
|
||||
duration, xact->index);
|
||||
d_assert(xact->tm_wait,
|
||||
index_free(>p_xact_pool, xact); return NULL,
|
||||
"Timer allocation failed");
|
||||
xact->retry_count = retry_count;
|
||||
tm_start(xact->tm_wait);
|
||||
|
||||
list_append(xact->org == GTP_LOCAL_ORIGINATOR ?
|
||||
&xact->gnode->local_list : &xact->gnode->remote_list, xact);
|
||||
|
||||
d_trace(3, "[%d] %s Create peer %s:%d\n",
|
||||
xact->xid,
|
||||
xact->org == GTP_LOCAL_ORIGINATOR ? "LOCAL " : "REMOTE",
|
||||
INET_NTOP(&gnode->addr, buf), gnode->port);
|
||||
|
||||
return xact;
|
||||
}
|
||||
|
||||
static status_t gtp_xact_delete(gtp_xact_t *xact)
|
||||
{
|
||||
char buf[INET_ADDRSTRLEN];
|
||||
|
@ -120,44 +82,78 @@ static status_t gtp_xact_delete(gtp_xact_t *xact)
|
|||
return CORE_OK;
|
||||
}
|
||||
|
||||
static void gtp_xact_associate(gtp_xact_t *xact1, gtp_xact_t *xact2)
|
||||
{
|
||||
d_assert(xact1, return, "Null param");
|
||||
d_assert(xact2, return, "Null param");
|
||||
|
||||
d_assert(xact1->assoc_xact == NULL, return, "Already assocaited");
|
||||
d_assert(xact2->assoc_xact == NULL, return, "Already assocaited");
|
||||
|
||||
xact1->assoc_xact = xact2;
|
||||
xact2->assoc_xact = xact1;
|
||||
}
|
||||
|
||||
static void gtp_xact_deassociate(gtp_xact_t *xact1, gtp_xact_t *xact2)
|
||||
{
|
||||
d_assert(xact1, return, "Null param");
|
||||
d_assert(xact2, return, "Null param");
|
||||
|
||||
d_assert(xact1->assoc_xact != NULL, return, "Already deassocaited");
|
||||
d_assert(xact2->assoc_xact != NULL, return, "Already deassocaited");
|
||||
|
||||
xact1->assoc_xact = NULL;
|
||||
xact2->assoc_xact = NULL;
|
||||
}
|
||||
|
||||
gtp_xact_t *gtp_xact_local_create(
|
||||
gtp_xact_ctx_t *context, net_sock_t *sock, gtp_node_t *gnode)
|
||||
{
|
||||
return gtp_xact_create(context, sock, gnode, GTP_LOCAL_ORIGINATOR,
|
||||
NEXT_ID(context->g_xact_id, GTP_MIN_XACT_ID, GTP_MAX_XACT_ID),
|
||||
GTP_XACT_LOCAL_DURATION, GTP_XACT_LOCAL_RETRY_COUNT);
|
||||
char buf[INET_ADDRSTRLEN];
|
||||
gtp_xact_t *xact = NULL;
|
||||
|
||||
d_assert(context, return NULL, "Null param");
|
||||
d_assert(sock, return NULL, "Null param");
|
||||
d_assert(gnode, return NULL, "Null param");
|
||||
|
||||
index_alloc(>p_xact_pool, &xact);
|
||||
d_assert(xact, return NULL, "Transaction allocation failed");
|
||||
|
||||
xact->org = GTP_LOCAL_ORIGINATOR;
|
||||
xact->xid = NEXT_ID(context->g_xact_id, GTP_MIN_XACT_ID, GTP_MAX_XACT_ID);
|
||||
xact->sock = sock;
|
||||
xact->gnode = gnode;
|
||||
|
||||
xact->tm_wait = event_timer(context->tm_service, context->event,
|
||||
GTP_XACT_LOCAL_DURATION, xact->index);
|
||||
d_assert(xact->tm_wait,
|
||||
index_free(>p_xact_pool, xact); return NULL,
|
||||
"Timer allocation failed");
|
||||
xact->retry_count = GTP_XACT_LOCAL_RETRY_COUNT;
|
||||
tm_start(xact->tm_wait);
|
||||
|
||||
list_append(xact->org == GTP_LOCAL_ORIGINATOR ?
|
||||
&xact->gnode->local_list : &xact->gnode->remote_list, xact);
|
||||
|
||||
d_trace(3, "[%d] %s Create peer %s:%d\n",
|
||||
xact->xid,
|
||||
xact->org == GTP_LOCAL_ORIGINATOR ? "LOCAL " : "REMOTE",
|
||||
INET_NTOP(&gnode->addr, buf), gnode->port);
|
||||
|
||||
return xact;
|
||||
}
|
||||
|
||||
gtp_xact_t *gtp_xact_remote_create(gtp_xact_ctx_t *context,
|
||||
net_sock_t *sock, gtp_node_t *gnode, c_uint32_t sqn)
|
||||
{
|
||||
return gtp_xact_create(context, sock, gnode,
|
||||
GTP_REMOTE_ORIGINATOR, GTP_SQN_TO_XID(sqn),
|
||||
GTP_XACT_REMOTE_DURATION, GTP_XACT_REMOTE_RETRY_COUNT);
|
||||
char buf[INET_ADDRSTRLEN];
|
||||
gtp_xact_t *xact = NULL;
|
||||
|
||||
d_assert(context, return NULL, "Null param");
|
||||
d_assert(sock, return NULL, "Null param");
|
||||
d_assert(gnode, return NULL, "Null param");
|
||||
|
||||
index_alloc(>p_xact_pool, &xact);
|
||||
d_assert(xact, return NULL, "Transaction allocation failed");
|
||||
|
||||
xact->org = GTP_REMOTE_ORIGINATOR;
|
||||
xact->xid = GTP_SQN_TO_XID(sqn);
|
||||
xact->sock = sock;
|
||||
xact->gnode = gnode;
|
||||
|
||||
xact->tm_wait = event_timer(context->tm_service, context->event,
|
||||
GTP_XACT_REMOTE_DURATION, xact->index);
|
||||
d_assert(xact->tm_wait,
|
||||
index_free(>p_xact_pool, xact); return NULL,
|
||||
"Timer allocation failed");
|
||||
xact->retry_count = GTP_XACT_REMOTE_RETRY_COUNT;
|
||||
tm_start(xact->tm_wait);
|
||||
|
||||
list_append(xact->org == GTP_LOCAL_ORIGINATOR ?
|
||||
&xact->gnode->local_list : &xact->gnode->remote_list, xact);
|
||||
|
||||
d_trace(3, "[%d] %s Create peer %s:%d\n",
|
||||
xact->xid,
|
||||
xact->org == GTP_LOCAL_ORIGINATOR ? "LOCAL " : "REMOTE",
|
||||
INET_NTOP(&gnode->addr, buf), gnode->port);
|
||||
|
||||
return xact;
|
||||
}
|
||||
|
||||
void gtp_xact_delete_all(gtp_node_t *gnode)
|
||||
|
@ -320,33 +316,29 @@ static gtp_xact_t *gtp_xact_find_by_sqn(
|
|||
return xact;
|
||||
}
|
||||
|
||||
status_t gtp_xact_receive(
|
||||
gtp_xact_ctx_t *context, net_sock_t *sock, gtp_node_t *gnode,
|
||||
gtp_xact_t **xact,
|
||||
c_uint8_t *type, c_uint32_t *teid, gtp_message_t *gtp_message,
|
||||
pkbuf_t *pkbuf)
|
||||
status_t gtp_xact_receive(gtp_xact_ctx_t *context,
|
||||
net_sock_t *sock, gtp_node_t *gnode, pkbuf_t *pkbuf,
|
||||
gtp_xact_t **xact, gtp_message_t *message)
|
||||
{
|
||||
char buf[INET_ADDRSTRLEN];
|
||||
status_t rv;
|
||||
gtp_header_t *h = NULL;
|
||||
gtp_xact_t *new = NULL;
|
||||
gtp_header_t *h = NULL;
|
||||
|
||||
d_assert(context, return CORE_ERROR, "Null param");
|
||||
d_assert(sock, return CORE_ERROR, "Null param");
|
||||
d_assert(gnode, return CORE_ERROR, "Null param");
|
||||
d_assert(pkbuf, return CORE_ERROR, "Null param");
|
||||
|
||||
d_assert(context, goto out1, "Null param");
|
||||
d_assert(sock, goto out1, "Null param");
|
||||
d_assert(gnode, goto out1, "Null param");
|
||||
d_assert(type, goto out1, "Null param");
|
||||
|
||||
d_assert(pkbuf->payload, return CORE_ERROR, "Null param");
|
||||
h = pkbuf->payload;
|
||||
d_assert(h, goto out1, "Null param");
|
||||
d_assert(h, return CORE_ERROR, "Null param");
|
||||
|
||||
new = gtp_xact_find_by_sqn(gnode, h->type, h->sqn);
|
||||
if (!new)
|
||||
{
|
||||
new = gtp_xact_remote_create(context, sock, gnode, h->sqn);
|
||||
}
|
||||
d_assert(new, goto out1, "Null param");
|
||||
d_assert(new, return CORE_ERROR, "Null param");
|
||||
|
||||
d_trace(3, "[%d] %s Receive peer %s:%d\n",
|
||||
new->xid,
|
||||
|
@ -371,7 +363,7 @@ status_t gtp_xact_receive(
|
|||
new->gnode->port,
|
||||
new->org == GTP_LOCAL_ORIGINATOR ? "LOCAL " : "REMOTE");
|
||||
rv = gtp_send(new->sock, new->gnode, new->pkbuf);
|
||||
d_assert(rv == CORE_OK, goto out2, "gtp_send error");
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "gtp_send error");
|
||||
|
||||
pkbuf_free(pkbuf);
|
||||
return CORE_EAGAIN;
|
||||
|
@ -387,32 +379,12 @@ status_t gtp_xact_receive(
|
|||
}
|
||||
}
|
||||
|
||||
if (h->teid_presence)
|
||||
{
|
||||
pkbuf_header(pkbuf, -GTPV2C_HEADER_LEN);
|
||||
*teid = ntohl(h->teid);
|
||||
}
|
||||
else
|
||||
{
|
||||
pkbuf_header(pkbuf, -(GTPV2C_HEADER_LEN-GTPV2C_TEID_LEN));
|
||||
*teid = 0;
|
||||
}
|
||||
|
||||
*type = h->type;
|
||||
|
||||
rv = gtp_parse_msg(gtp_message, *type, pkbuf);
|
||||
rv = gtp_parse_msg(message, pkbuf);
|
||||
d_assert(rv == CORE_OK,
|
||||
pkbuf_free(pkbuf); return CORE_ERROR, "parse error");
|
||||
|
||||
*xact = new;
|
||||
return CORE_OK;
|
||||
|
||||
out2:
|
||||
gtp_xact_delete(new);
|
||||
|
||||
out1:
|
||||
pkbuf_free(pkbuf);
|
||||
return CORE_ERROR;
|
||||
}
|
||||
|
||||
gtp_xact_t *gtp_xact_find(index_t index)
|
||||
|
@ -470,3 +442,28 @@ static gtp_xact_stage_t gtp_xact_get_stage(c_uint8_t type, c_uint32_t sqn)
|
|||
|
||||
return stage;
|
||||
}
|
||||
|
||||
void gtp_xact_associate(gtp_xact_t *xact1, gtp_xact_t *xact2)
|
||||
{
|
||||
d_assert(xact1, return, "Null param");
|
||||
d_assert(xact2, return, "Null param");
|
||||
|
||||
d_assert(xact1->assoc_xact == NULL, return, "Already assocaited");
|
||||
d_assert(xact2->assoc_xact == NULL, return, "Already assocaited");
|
||||
|
||||
xact1->assoc_xact = xact2;
|
||||
xact2->assoc_xact = xact1;
|
||||
}
|
||||
|
||||
void gtp_xact_deassociate(gtp_xact_t *xact1, gtp_xact_t *xact2)
|
||||
{
|
||||
d_assert(xact1, return, "Null param");
|
||||
d_assert(xact2, return, "Null param");
|
||||
|
||||
d_assert(xact1->assoc_xact != NULL, return, "Already deassocaited");
|
||||
d_assert(xact2->assoc_xact != NULL, return, "Already deassocaited");
|
||||
|
||||
xact1->assoc_xact = NULL;
|
||||
xact2->assoc_xact = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -65,13 +65,13 @@ CORE_DECLARE(status_t) gtp_xact_associated_commit(gtp_xact_t *xact,
|
|||
gtp_xact_t *assoc_xact, c_uint8_t type, c_uint32_t teid, pkbuf_t *pkbuf);
|
||||
CORE_DECLARE(status_t) gtp_xact_timeout(index_t index);
|
||||
|
||||
CORE_DECLARE(status_t) gtp_xact_receive(
|
||||
gtp_xact_ctx_t *context, net_sock_t *sock, gtp_node_t *gnode,
|
||||
gtp_xact_t **xact,
|
||||
c_uint8_t *type, c_uint32_t *teid, gtp_message_t *gtp_message,
|
||||
pkbuf_t *pkbuf);
|
||||
CORE_DECLARE(status_t) gtp_xact_receive(gtp_xact_ctx_t *context,
|
||||
net_sock_t *sock, gtp_node_t *gnode, pkbuf_t *pkbuf,
|
||||
gtp_xact_t **xact, gtp_message_t *gtp_message);
|
||||
|
||||
CORE_DECLARE(gtp_xact_t *) gtp_xact_find(index_t index);
|
||||
CORE_DECLARE(void) gtp_xact_associate(gtp_xact_t *xact1, gtp_xact_t *xact2);
|
||||
CORE_DECLARE(void) gtp_xact_deassociate(gtp_xact_t *xact1, gtp_xact_t *xact2);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -531,9 +531,9 @@ f.write(" };\n");
|
|||
f.write("} gtp_message_t;\n\n")
|
||||
|
||||
f.write("""CORE_DECLARE(status_t) gtp_parse_msg(
|
||||
gtp_message_t *gtp_message, c_uint8_t type, pkbuf_t *pkbuf);
|
||||
gtp_message_t *gtp_message, pkbuf_t *pkbuf);
|
||||
CORE_DECLARE(status_t) gtp_build_msg(
|
||||
pkbuf_t **pkbuf, c_uint8_t type, gtp_message_t *gtp_message);
|
||||
pkbuf_t **pkbuf, gtp_message_t *gtp_message);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -610,12 +610,34 @@ for (k, v) in sorted_msg_list:
|
|||
f.write("}};\n\n")
|
||||
f.write("\n")
|
||||
|
||||
f.write("""status_t gtp_parse_msg(gtp_message_t *gtp_message, c_uint8_t type, pkbuf_t *pkbuf)
|
||||
f.write("""status_t gtp_parse_msg(gtp_message_t *gtp_message, pkbuf_t *pkbuf)
|
||||
{
|
||||
status_t rv = CORE_ERROR;
|
||||
gtp_header_t *h = NULL;
|
||||
c_uint16_t size = 0;
|
||||
|
||||
d_assert(gtp_message, return CORE_ERROR, "Null param");
|
||||
d_assert(pkbuf, return CORE_ERROR, "Null param");
|
||||
d_assert(pkbuf->payload, return CORE_ERROR, "Null param");
|
||||
|
||||
h = pkbuf->payload;
|
||||
d_assert(h, return CORE_ERROR, "Null param");
|
||||
|
||||
memset(gtp_message, 0, sizeof(gtp_message_t));
|
||||
switch(type)
|
||||
|
||||
if (h->teid_presence)
|
||||
size = GTPV2C_HEADER_LEN;
|
||||
else
|
||||
size = GTPV2C_HEADER_LEN-GTPV2C_TEID_LEN;
|
||||
|
||||
d_assert(pkbuf_header(pkbuf, -size) == CORE_OK,
|
||||
return CORE_ERROR, "pkbuf_header error");
|
||||
memcpy(>p_message->h, pkbuf->payload - size, size);
|
||||
|
||||
if (h->teid_presence)
|
||||
gtp_message->h.teid = ntohl(gtp_message->h.teid);
|
||||
|
||||
switch(gtp_message->h.type)
|
||||
{
|
||||
""")
|
||||
for (k, v) in sorted_msg_list:
|
||||
|
@ -625,7 +647,7 @@ for (k, v) in sorted_msg_list:
|
|||
f.write(" &tlv_desc_%s, pkbuf, TLV_MODE_T1_L2_I1);\n" % v_lower(k))
|
||||
f.write(" break;\n")
|
||||
f.write(""" default:
|
||||
d_warn("Not implmeneted(type:%d)", type);
|
||||
d_warn("Not implmeneted(type:%d)", gtp_message->h.type);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -634,11 +656,12 @@ f.write(""" default:
|
|||
|
||||
""")
|
||||
|
||||
f.write("""status_t gtp_build_msg(pkbuf_t **pkbuf, c_uint8_t type, gtp_message_t *gtp_message)
|
||||
f.write("""status_t gtp_build_msg(pkbuf_t **pkbuf, gtp_message_t *gtp_message)
|
||||
{
|
||||
status_t rv = CORE_ERROR;
|
||||
|
||||
switch(type)
|
||||
d_assert(gtp_message, return rv, "Null param");
|
||||
switch(gtp_message->h.type)
|
||||
{
|
||||
""")
|
||||
for (k, v) in sorted_msg_list:
|
||||
|
@ -648,7 +671,7 @@ for (k, v) in sorted_msg_list:
|
|||
f.write(" >p_message->%s, TLV_MODE_T1_L2_I1);\n" % v_lower(k))
|
||||
f.write(" break;\n")
|
||||
f.write(""" default:
|
||||
d_warn("Not implmeneted(type:%d)", type);
|
||||
d_warn("Not implmeneted(type:%d)", gtp_message->h.type);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -145,7 +145,8 @@ status_t mme_s11_build_create_session_request(pkbuf_t **pkbuf, mme_sess_t *sess)
|
|||
req->charging_characteristics.data = (c_uint8_t *)"\x54\x00";
|
||||
req->charging_characteristics.len = 2;
|
||||
|
||||
rv = gtp_build_msg(pkbuf, GTP_CREATE_SESSION_REQUEST_TYPE, >p_message);
|
||||
gtp_message.h.type = GTP_CREATE_SESSION_REQUEST_TYPE;
|
||||
rv = gtp_build_msg(pkbuf, >p_message);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "gtp build failed");
|
||||
|
||||
return CORE_OK;
|
||||
|
@ -183,7 +184,8 @@ status_t mme_s11_build_modify_bearer_request(
|
|||
req->bearer_contexts_to_be_modified.s1_u_enodeb_f_teid.len =
|
||||
GTP_F_TEID_IPV4_LEN;
|
||||
|
||||
rv = gtp_build_msg(pkbuf, GTP_MODIFY_BEARER_REQUEST_TYPE, >p_message);
|
||||
gtp_message.h.type = GTP_MODIFY_BEARER_REQUEST_TYPE;
|
||||
rv = gtp_build_msg(pkbuf, >p_message);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "gtp build failed");
|
||||
|
||||
return CORE_OK;
|
||||
|
@ -228,7 +230,8 @@ status_t mme_s11_build_delete_session_request(pkbuf_t **pkbuf, mme_sess_t *sess)
|
|||
req->indication_flags.data = &indication;
|
||||
req->indication_flags.len = sizeof(gtp_indication_t);
|
||||
|
||||
rv = gtp_build_msg(pkbuf, GTP_DELETE_SESSION_REQUEST_TYPE, >p_message);
|
||||
gtp_message.h.type = GTP_DELETE_SESSION_REQUEST_TYPE;
|
||||
rv = gtp_build_msg(pkbuf, >p_message);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "gtp build failed");
|
||||
|
||||
return CORE_OK;
|
||||
|
@ -246,8 +249,8 @@ status_t mme_s11_build_release_access_bearers_request(pkbuf_t **pkbuf)
|
|||
req->originating_node.presence = 1;
|
||||
req->originating_node.u8 = GTP_NODE_TYPE_MME;
|
||||
|
||||
rv = gtp_build_msg(pkbuf,
|
||||
GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE, >p_message);
|
||||
gtp_message.h.type = GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE;
|
||||
rv = gtp_build_msg(pkbuf, >p_message);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "gtp build failed");
|
||||
|
||||
return CORE_OK;
|
||||
|
@ -277,8 +280,8 @@ status_t mme_s11_build_downlink_data_notification_ack(pkbuf_t **pkbuf,
|
|||
ack->cause.data = &cause;
|
||||
ack->cause.len = sizeof(cause);
|
||||
|
||||
rv = gtp_build_msg(pkbuf, GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE,
|
||||
>p_message);
|
||||
gtp_message.h.type = GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE;
|
||||
rv = gtp_build_msg(pkbuf, >p_message);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "gtp build failed");
|
||||
|
||||
return CORE_OK;
|
||||
|
|
|
@ -266,9 +266,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
gtp_node_t *gnode = (gtp_node_t *)event_get_param2(e);
|
||||
pkbuf_t *pkbuf = (pkbuf_t *)event_get_param3(e);
|
||||
gtp_xact_t *xact = NULL;
|
||||
c_uint8_t type;
|
||||
c_uint32_t teid;
|
||||
gtp_message_t gtp_message;
|
||||
gtp_message_t message;
|
||||
mme_sess_t *sess = NULL;
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
|
@ -278,25 +276,25 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
d_assert(gnode, pkbuf_free(pkbuf); break, "Null param");
|
||||
|
||||
rv = gtp_xact_receive(
|
||||
&mme_self()->gtp_xact_ctx, sock, gnode,
|
||||
&xact, &type, &teid, >p_message, pkbuf);
|
||||
&mme_self()->gtp_xact_ctx, sock, gnode, pkbuf,
|
||||
&xact, &message);
|
||||
if (rv != CORE_OK)
|
||||
break;
|
||||
|
||||
sess = mme_sess_find_by_teid(teid);
|
||||
sess = mme_sess_find_by_teid(message.h.teid);
|
||||
d_assert(sess, pkbuf_free(pkbuf); break,
|
||||
"No Session Context(TEID:%d)", teid);
|
||||
"No Session Context(TEID:%d)", message.h.teid);
|
||||
mme_ue = sess->mme_ue;
|
||||
d_assert(mme_ue, pkbuf_free(pkbuf);break, "Null param");
|
||||
enb_ue = mme_ue->enb_ue;
|
||||
d_assert(enb_ue, break, "Null param");
|
||||
|
||||
switch(type)
|
||||
switch(message.h.type)
|
||||
{
|
||||
case GTP_CREATE_SESSION_RESPONSE_TYPE:
|
||||
{
|
||||
mme_s11_handle_create_session_response(
|
||||
sess, >p_message.create_session_response);
|
||||
sess, &message.create_session_response);
|
||||
if (MME_SESSION_IN_ATTACH_STATE(sess))
|
||||
{
|
||||
emm_handle_attach_accept(mme_ue);
|
||||
|
@ -309,12 +307,12 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
}
|
||||
case GTP_MODIFY_BEARER_RESPONSE_TYPE:
|
||||
mme_s11_handle_modify_bearer_response(
|
||||
sess, >p_message.modify_bearer_response);
|
||||
sess, &message.modify_bearer_response);
|
||||
break;
|
||||
case GTP_DELETE_SESSION_RESPONSE_TYPE:
|
||||
{
|
||||
mme_s11_handle_delete_session_response(
|
||||
sess, >p_message.delete_session_response);
|
||||
sess, &message.delete_session_response);
|
||||
|
||||
if (MME_UE_DETACH_INITIATED(mme_ue))
|
||||
{
|
||||
|
@ -357,7 +355,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
case GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE:
|
||||
{
|
||||
mme_s11_handle_release_access_bearers_response(
|
||||
sess, >p_message.release_access_bearers_response);
|
||||
sess, &message.release_access_bearers_response);
|
||||
|
||||
s1ap_handle_release_access_bearers_response(enb_ue);
|
||||
break;
|
||||
|
@ -367,7 +365,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
{
|
||||
mme_s11_handle_downlink_data_notification(
|
||||
xact,
|
||||
sess, >p_message.downlink_data_notification);
|
||||
sess, &message.downlink_data_notification);
|
||||
|
||||
s1ap_handle_paging(mme_ue);
|
||||
/* Start T3413 */
|
||||
|
@ -375,7 +373,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
break;
|
||||
}
|
||||
default:
|
||||
d_warn("Not implmeneted(type:%d)", type);
|
||||
d_warn("Not implmeneted(type:%d)", message.h.type);
|
||||
break;
|
||||
}
|
||||
pkbuf_free(pkbuf);
|
||||
|
|
|
@ -70,9 +70,6 @@ typedef struct _pgw_sess_t {
|
|||
c_uint32_t sgw_s5c_teid;
|
||||
c_uint32_t sgw_s5c_addr;
|
||||
|
||||
/* Last Received GTP Messasge */
|
||||
gtp_message_t last_gtp_message;
|
||||
|
||||
/* IMSI */
|
||||
c_uint8_t imsi[MAX_IMSI_LEN];
|
||||
int imsi_len;
|
||||
|
|
|
@ -17,7 +17,6 @@ void pgw_gx_handle_cca_initial_request(
|
|||
pgw_bearer_t *bearer = NULL;
|
||||
|
||||
gtp_message_t gtp_message;
|
||||
c_uint8_t type = GTP_CREATE_SESSION_RESPONSE_TYPE;
|
||||
gtp_create_session_response_t *rsp = NULL;
|
||||
|
||||
gtp_cause_t cause;
|
||||
|
@ -97,10 +96,11 @@ void pgw_gx_handle_cca_initial_request(
|
|||
rsp->bearer_contexts_created.s5_s8_u_sgw_f_teid.len =
|
||||
GTP_F_TEID_IPV4_LEN;
|
||||
|
||||
rv = gtp_build_msg(&pkbuf, type, >p_message);
|
||||
gtp_message.h.type = GTP_CREATE_SESSION_RESPONSE_TYPE;
|
||||
rv = gtp_build_msg(&pkbuf, >p_message);
|
||||
d_assert(rv == CORE_OK, return, "gtp build failed");
|
||||
|
||||
pgw_s5c_send_to_sgw(xact, type, sess->sgw_s5c_teid, pkbuf);
|
||||
pgw_s5c_send_to_sgw(xact, gtp_message.h.type, sess->sgw_s5c_teid, pkbuf);
|
||||
}
|
||||
void pgw_gx_handle_cca_termination_request(
|
||||
gtp_xact_t *xact, pgw_sess_t *sess,
|
||||
|
@ -110,7 +110,6 @@ void pgw_gx_handle_cca_termination_request(
|
|||
pkbuf_t *pkbuf;
|
||||
|
||||
gtp_message_t gtp_message;
|
||||
c_uint8_t type = GTP_DELETE_SESSION_RESPONSE_TYPE;
|
||||
gtp_delete_session_response_t *rsp = NULL;
|
||||
|
||||
c_uint32_t sgw_s5c_teid;
|
||||
|
@ -157,11 +156,12 @@ void pgw_gx_handle_cca_termination_request(
|
|||
/* Private Extension */
|
||||
|
||||
/* build */
|
||||
rv = gtp_build_msg(&pkbuf, type, >p_message);
|
||||
gtp_message.h.type = GTP_DELETE_SESSION_RESPONSE_TYPE;
|
||||
rv = gtp_build_msg(&pkbuf, >p_message);
|
||||
d_assert(rv == CORE_OK, return, "gtp build failed");
|
||||
|
||||
/* send */
|
||||
pgw_s5c_send_to_sgw(xact, type, sgw_s5c_teid, pkbuf);
|
||||
pgw_s5c_send_to_sgw(xact, gtp_message.h.type, sgw_s5c_teid, pkbuf);
|
||||
}
|
||||
|
||||
static c_int16_t pgw_pco_build(c_uint8_t *pco_buf, tlv_pco_t *tlv_pco)
|
||||
|
|
|
@ -69,9 +69,7 @@ void pgw_state_operational(fsm_t *s, event_t *e)
|
|||
pkbuf_t *copybuf = NULL;
|
||||
c_uint16_t copybuf_len = 0;
|
||||
gtp_xact_t *xact = NULL;
|
||||
c_uint8_t type;
|
||||
c_uint32_t teid;
|
||||
gtp_message_t *gtp_message = NULL;
|
||||
gtp_message_t *message = NULL;
|
||||
pgw_sess_t *sess = NULL;
|
||||
|
||||
d_assert(recvbuf, break, "Null param");
|
||||
|
@ -81,43 +79,39 @@ void pgw_state_operational(fsm_t *s, event_t *e)
|
|||
copybuf_len = sizeof(gtp_message_t);
|
||||
copybuf = pkbuf_alloc(0, copybuf_len);
|
||||
d_assert(copybuf, break, "Null param");
|
||||
gtp_message = copybuf->payload;
|
||||
d_assert(gtp_message, break, "Null param");
|
||||
message = copybuf->payload;
|
||||
d_assert(message, break, "Null param");
|
||||
|
||||
rv = gtp_xact_receive(
|
||||
&pgw_self()->gtp_xact_ctx, sock, gnode,
|
||||
&xact, &type, &teid, gtp_message, recvbuf);
|
||||
&pgw_self()->gtp_xact_ctx, sock, gnode, recvbuf,
|
||||
&xact, message);
|
||||
if (rv != CORE_OK)
|
||||
break;
|
||||
|
||||
if (type == GTP_CREATE_SESSION_REQUEST_TYPE)
|
||||
sess = pgw_sess_find_or_add_by_message(gtp_message);
|
||||
if (message->h.type == GTP_CREATE_SESSION_REQUEST_TYPE)
|
||||
sess = pgw_sess_find_or_add_by_message(message);
|
||||
else
|
||||
sess = pgw_sess_find_by_teid(teid);
|
||||
sess = pgw_sess_find_by_teid(message->h.teid);
|
||||
d_assert(sess, pkbuf_free(recvbuf); break, "No Session Context");
|
||||
|
||||
/* Store Last GTP Message for Session */
|
||||
memcpy(&sess->last_gtp_message,
|
||||
gtp_message, sizeof(gtp_message_t));
|
||||
|
||||
switch(type)
|
||||
switch(message->h.type)
|
||||
{
|
||||
case GTP_CREATE_SESSION_REQUEST_TYPE:
|
||||
pgw_s5c_handle_create_session_request(
|
||||
xact, sess, >p_message->create_session_request);
|
||||
xact, sess, &message->create_session_request);
|
||||
pgw_gx_send_ccr(xact, sess, copybuf,
|
||||
GX_CC_REQUEST_TYPE_INITIAL_REQUEST);
|
||||
break;
|
||||
case GTP_DELETE_SESSION_REQUEST_TYPE:
|
||||
pgw_s5c_handle_delete_session_request(
|
||||
xact, sess, >p_message->delete_session_request);
|
||||
xact, sess, &message->delete_session_request);
|
||||
pgw_gx_send_ccr(xact, sess, copybuf,
|
||||
GX_CC_REQUEST_TYPE_TERMINATION_REQUEST);
|
||||
break;
|
||||
default:
|
||||
pkbuf_free(copybuf);
|
||||
|
||||
d_warn("Not implmeneted(type:%d)", type);
|
||||
d_warn("Not implmeneted(type:%d)", message->h.type);
|
||||
break;
|
||||
}
|
||||
pkbuf_free(recvbuf);
|
||||
|
@ -137,7 +131,7 @@ void pgw_state_operational(fsm_t *s, event_t *e)
|
|||
pkbuf_t *gxbuf = (pkbuf_t *)event_get_param3(e);
|
||||
gx_message_t *gx_message = NULL;
|
||||
pkbuf_t *gtpbuf = (pkbuf_t *)event_get_param4(e);
|
||||
gtp_message_t *gtp_message = NULL;
|
||||
gtp_message_t *message = NULL;
|
||||
|
||||
d_assert(xact_index, return, "Null param");
|
||||
xact = gtp_xact_find(xact_index);
|
||||
|
@ -152,7 +146,7 @@ void pgw_state_operational(fsm_t *s, event_t *e)
|
|||
d_assert(gx_message, return, "Null param");
|
||||
|
||||
d_assert(gtpbuf, return, "Null param");
|
||||
gtp_message = gtpbuf->payload;
|
||||
message = gtpbuf->payload;
|
||||
|
||||
switch(gx_message->cmd_code)
|
||||
{
|
||||
|
@ -170,14 +164,14 @@ void pgw_state_operational(fsm_t *s, event_t *e)
|
|||
{
|
||||
pgw_gx_handle_cca_initial_request(
|
||||
xact, sess, cca_message,
|
||||
>p_message->create_session_request);
|
||||
&message->create_session_request);
|
||||
break;
|
||||
}
|
||||
case GX_CC_REQUEST_TYPE_TERMINATION_REQUEST:
|
||||
{
|
||||
pgw_gx_handle_cca_termination_request(
|
||||
xact, sess, cca_message,
|
||||
>p_message->delete_session_request);
|
||||
&message->delete_session_request);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -72,7 +72,8 @@ void sgw_handle_create_session_request(gtp_xact_t *xact,
|
|||
req->bearer_contexts_to_be_created.s5_s8_u_sgw_f_teid.len =
|
||||
GTP_F_TEID_IPV4_LEN;
|
||||
|
||||
rv = gtp_build_msg(&pkbuf, GTP_CREATE_SESSION_REQUEST_TYPE, gtp_message);
|
||||
gtp_message->h.type = GTP_CREATE_SESSION_REQUEST_TYPE;
|
||||
rv = gtp_build_msg(&pkbuf, gtp_message);
|
||||
d_assert(rv == CORE_OK, return, "gtp build failed");
|
||||
|
||||
d_assert(sgw_s5c_send_to_pgw(xact, GTP_CREATE_SESSION_REQUEST_TYPE, 0,
|
||||
|
@ -161,7 +162,8 @@ void sgw_handle_create_session_response(gtp_xact_t *xact,
|
|||
rsp->bearer_contexts_created.s1_u_enodeb_f_teid.data = &sgw_s1u_teid;
|
||||
rsp->bearer_contexts_created.s1_u_enodeb_f_teid.len = GTP_F_TEID_IPV4_LEN;
|
||||
|
||||
rv = gtp_build_msg(&pkbuf, GTP_CREATE_SESSION_RESPONSE_TYPE, gtp_message);
|
||||
gtp_message->h.type = GTP_CREATE_SESSION_RESPONSE_TYPE;
|
||||
rv = gtp_build_msg(&pkbuf, gtp_message);
|
||||
d_assert(rv == CORE_OK, return, "gtp build failed");
|
||||
|
||||
d_assert(sgw_s11_send_to_mme(xact, GTP_CREATE_SESSION_RESPONSE_TYPE,
|
||||
|
@ -221,7 +223,8 @@ CORE_DECLARE(void) sgw_handle_modify_bearer_request(gtp_xact_t *xact,
|
|||
rsp->cause.data = &cause;
|
||||
rsp->cause.len = sizeof(cause);
|
||||
|
||||
rv = gtp_build_msg(&pkbuf, GTP_MODIFY_BEARER_RESPONSE_TYPE, >p_message);
|
||||
gtp_message.h.type = GTP_MODIFY_BEARER_RESPONSE_TYPE;
|
||||
rv = gtp_build_msg(&pkbuf, >p_message);
|
||||
d_assert(rv == CORE_OK, return, "gtp build failed");
|
||||
|
||||
d_assert(sgw_s11_send_to_mme(xact, GTP_MODIFY_BEARER_RESPONSE_TYPE,
|
||||
|
@ -242,7 +245,8 @@ void sgw_handle_delete_session_request(gtp_xact_t *xact,
|
|||
d_assert(sess, return, "Null param");
|
||||
d_assert(gtp_message, return, "Null param");
|
||||
|
||||
rv = gtp_build_msg(&pkbuf, GTP_DELETE_SESSION_REQUEST_TYPE, gtp_message);
|
||||
gtp_message->h.type = GTP_DELETE_SESSION_REQUEST_TYPE;
|
||||
rv = gtp_build_msg(&pkbuf, gtp_message);
|
||||
d_assert(rv == CORE_OK, return, "gtp build failed");
|
||||
|
||||
d_assert(sgw_s5c_send_to_pgw(xact, GTP_DELETE_SESSION_REQUEST_TYPE,
|
||||
|
@ -297,7 +301,8 @@ void sgw_handle_delete_session_response(gtp_xact_t *xact,
|
|||
cause->value = GTP_CAUSE_INVALID_PEER;
|
||||
}
|
||||
|
||||
rv = gtp_build_msg(&pkbuf, GTP_DELETE_SESSION_RESPONSE_TYPE, gtp_message);
|
||||
gtp_message->h.type = GTP_DELETE_SESSION_RESPONSE_TYPE;
|
||||
rv = gtp_build_msg(&pkbuf, gtp_message);
|
||||
d_assert(rv == CORE_OK, return, "gtp build failed");
|
||||
|
||||
d_assert(sgw_s11_send_to_mme(xact, GTP_DELETE_SESSION_RESPONSE_TYPE,
|
||||
|
@ -343,8 +348,8 @@ void sgw_handle_release_access_bearers_request(gtp_xact_t *xact,
|
|||
rsp->cause.data = &cause;
|
||||
rsp->cause.len = sizeof(cause);
|
||||
|
||||
rv = gtp_build_msg(&pkbuf,
|
||||
GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE, >p_message);
|
||||
gtp_message.h.type = GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE;
|
||||
rv = gtp_build_msg(&pkbuf, >p_message);
|
||||
d_assert(rv == CORE_OK, return, "gtp build failed");
|
||||
|
||||
d_assert(sgw_s11_send_to_mme(xact,
|
||||
|
@ -385,9 +390,8 @@ void sgw_handle_lo_dldata_notification(sgw_bearer_t *bearer)
|
|||
noti->allocation_retention_priority.data = &arp;
|
||||
noti->allocation_retention_priority.len = sizeof(arp);
|
||||
|
||||
|
||||
rv = gtp_build_msg(&pkbuf,
|
||||
GTP_DOWNLINK_DATA_NOTIFICATION_TYPE, >p_message);
|
||||
gtp_message.h.type = GTP_DOWNLINK_DATA_NOTIFICATION_TYPE;
|
||||
rv = gtp_build_msg(&pkbuf, >p_message);
|
||||
d_assert(rv == CORE_OK, return, "gtp build failed");
|
||||
|
||||
xact = gtp_xact_local_create(&sgw_self()->gtp_xact_ctx,
|
||||
|
|
|
@ -60,9 +60,7 @@ void sgw_state_operational(fsm_t *s, event_t *e)
|
|||
gtp_node_t *gnode = (gtp_node_t *)event_get_param2(e);
|
||||
pkbuf_t *pkbuf = (pkbuf_t *)event_get_param3(e);
|
||||
gtp_xact_t *xact = NULL;
|
||||
c_uint8_t type;
|
||||
c_uint32_t teid;
|
||||
gtp_message_t gtp_message;
|
||||
gtp_message_t message;
|
||||
sgw_sess_t *sess = NULL;
|
||||
|
||||
d_assert(pkbuf, break, "Null param");
|
||||
|
@ -70,51 +68,51 @@ void sgw_state_operational(fsm_t *s, event_t *e)
|
|||
d_assert(gnode, pkbuf_free(pkbuf); break, "Null param");
|
||||
|
||||
rv = gtp_xact_receive(
|
||||
&sgw_self()->gtp_xact_ctx, sock, gnode,
|
||||
&xact, &type, &teid, >p_message, pkbuf);
|
||||
&sgw_self()->gtp_xact_ctx, sock, gnode, pkbuf,
|
||||
&xact, &message);
|
||||
if (rv != CORE_OK)
|
||||
break;
|
||||
|
||||
if (type == GTP_CREATE_SESSION_REQUEST_TYPE)
|
||||
sess = sgw_sess_find_or_add_by_message(>p_message);
|
||||
if (message.h.type == GTP_CREATE_SESSION_REQUEST_TYPE)
|
||||
sess = sgw_sess_find_or_add_by_message(&message);
|
||||
else
|
||||
sess = sgw_sess_find_by_teid(teid);
|
||||
sess = sgw_sess_find_by_teid(message.h.teid);
|
||||
d_assert(sess, pkbuf_free(pkbuf); break, "No Session Context");
|
||||
|
||||
switch(type)
|
||||
switch(message.h.type)
|
||||
{
|
||||
case GTP_CREATE_SESSION_REQUEST_TYPE:
|
||||
sgw_handle_create_session_request(
|
||||
xact, sess, >p_message);
|
||||
xact, sess, &message);
|
||||
break;
|
||||
case GTP_CREATE_SESSION_RESPONSE_TYPE:
|
||||
sgw_handle_create_session_response(
|
||||
xact, sess, >p_message);
|
||||
xact, sess, &message);
|
||||
break;
|
||||
case GTP_MODIFY_BEARER_REQUEST_TYPE:
|
||||
sgw_handle_modify_bearer_request(
|
||||
xact, sess, >p_message.modify_bearer_request);
|
||||
xact, sess, &message.modify_bearer_request);
|
||||
break;
|
||||
case GTP_DELETE_SESSION_REQUEST_TYPE:
|
||||
sgw_handle_delete_session_request(
|
||||
xact, sess, >p_message);
|
||||
xact, sess, &message);
|
||||
break;
|
||||
case GTP_DELETE_SESSION_RESPONSE_TYPE:
|
||||
sgw_handle_delete_session_response(
|
||||
xact, sess, >p_message);
|
||||
xact, sess, &message);
|
||||
break;
|
||||
case GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE:
|
||||
sgw_handle_release_access_bearers_request(
|
||||
xact, sess,
|
||||
>p_message.release_access_bearers_request);
|
||||
&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);
|
||||
&message.downlink_data_notification_acknowledge);
|
||||
break;
|
||||
default:
|
||||
d_warn("Not implmeneted(type:%d)", type);
|
||||
d_warn("Not implmeneted(type:%d)", message.h.type);
|
||||
break;
|
||||
}
|
||||
pkbuf_free(pkbuf);
|
||||
|
|
Loading…
Reference in New Issue