add create indirect data forwarding tunnel response
This commit is contained in:
parent
ff7ef740c0
commit
271ba54423
|
@ -441,7 +441,6 @@ status_t mme_s11_build_create_indirect_data_forwarding_tunnel_request(
|
||||||
bearers[i]->s1_u_enodeb_f_teid.data = &tunnel_teid[i];
|
bearers[i]->s1_u_enodeb_f_teid.data = &tunnel_teid[i];
|
||||||
bearers[i]->s1_u_enodeb_f_teid.len = GTP_F_TEID_IPV4_LEN;
|
bearers[i]->s1_u_enodeb_f_teid.len = GTP_F_TEID_IPV4_LEN;
|
||||||
i++;
|
i++;
|
||||||
printf("DL\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MME_HAVE_UL_INDIRECT_TUNNEL(bearer))
|
if (MME_HAVE_UL_INDIRECT_TUNNEL(bearer))
|
||||||
|
@ -460,7 +459,6 @@ status_t mme_s11_build_create_indirect_data_forwarding_tunnel_request(
|
||||||
bearers[i]->s12_rnc_f_teid.presence = 1;
|
bearers[i]->s12_rnc_f_teid.presence = 1;
|
||||||
bearers[i]->s12_rnc_f_teid.data = &tunnel_teid[i];
|
bearers[i]->s12_rnc_f_teid.data = &tunnel_teid[i];
|
||||||
bearers[i]->s12_rnc_f_teid.len = GTP_F_TEID_IPV4_LEN;
|
bearers[i]->s12_rnc_f_teid.len = GTP_F_TEID_IPV4_LEN;
|
||||||
printf("UL\n");
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -332,3 +332,9 @@ void mme_s11_handle_downlink_data_notification(
|
||||||
rv = gtp_xact_commit(xact);
|
rv = gtp_xact_commit(xact);
|
||||||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
|
||||||
|
gtp_xact_t *xact, mme_ue_t *mme_ue,
|
||||||
|
gtp_create_indirect_data_forwarding_tunnel_response_t *rsp)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
|
@ -24,6 +24,9 @@ CORE_DECLARE(void) mme_s11_handle_release_access_bearers_response(
|
||||||
CORE_DECLARE(void) mme_s11_handle_downlink_data_notification(
|
CORE_DECLARE(void) mme_s11_handle_downlink_data_notification(
|
||||||
gtp_xact_t *xact, mme_ue_t *mme_ue,
|
gtp_xact_t *xact, mme_ue_t *mme_ue,
|
||||||
gtp_downlink_data_notification_t *noti);
|
gtp_downlink_data_notification_t *noti);
|
||||||
|
CORE_DECLARE(void) mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
|
||||||
|
gtp_xact_t *xact, mme_ue_t *mme_ue,
|
||||||
|
gtp_create_indirect_data_forwarding_tunnel_response_t *rsp);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -355,6 +355,11 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
||||||
/* Start T3413 */
|
/* Start T3413 */
|
||||||
tm_start(mme_ue->t3413);
|
tm_start(mme_ue->t3413);
|
||||||
break;
|
break;
|
||||||
|
case GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
|
||||||
|
mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
|
||||||
|
xact, mme_ue,
|
||||||
|
&message.create_indirect_data_forwarding_tunnel_response);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
d_warn("Not implmeneted(type:%d)", message.h.type);
|
d_warn("Not implmeneted(type:%d)", message.h.type);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -724,7 +724,7 @@ sgw_bearer_t* sgw_bearer_add(sgw_sess_t *sess)
|
||||||
|
|
||||||
list_init(&bearer->tunnel_list);
|
list_init(&bearer->tunnel_list);
|
||||||
|
|
||||||
tunnel = sgw_tunnel_add(bearer, GTP_F_TEID_S1_U_ENODEB_GTP_U);
|
tunnel = sgw_tunnel_add(bearer, GTP_F_TEID_S1_U_SGW_GTP_U);
|
||||||
d_assert(tunnel, return NULL, "Tunnel context allocation failed");
|
d_assert(tunnel, return NULL, "Tunnel context allocation failed");
|
||||||
|
|
||||||
return bearer;
|
return bearer;
|
||||||
|
@ -905,7 +905,7 @@ sgw_tunnel_t* sgw_direct_tunnel_in_bearer(sgw_bearer_t *bearer)
|
||||||
tunnel = sgw_tunnel_first(bearer);
|
tunnel = sgw_tunnel_first(bearer);
|
||||||
while(tunnel)
|
while(tunnel)
|
||||||
{
|
{
|
||||||
if (tunnel->interface_type == GTP_F_TEID_S1_U_ENODEB_GTP_U)
|
if (tunnel->interface_type == GTP_F_TEID_S1_U_SGW_GTP_U)
|
||||||
{
|
{
|
||||||
return tunnel;
|
return tunnel;
|
||||||
}
|
}
|
||||||
|
@ -916,44 +916,6 @@ sgw_tunnel_t* sgw_direct_tunnel_in_bearer(sgw_bearer_t *bearer)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
sgw_tunnel_t* sgw_dl_indirect_tunnel_in_bearer(sgw_bearer_t *bearer)
|
|
||||||
{
|
|
||||||
sgw_tunnel_t *tunnel = NULL;
|
|
||||||
|
|
||||||
d_assert(bearer, return NULL, "Null param");
|
|
||||||
|
|
||||||
tunnel = sgw_tunnel_first(bearer);
|
|
||||||
while (tunnel)
|
|
||||||
{
|
|
||||||
if (tunnel->interface_type ==
|
|
||||||
GTP_F_TEID_ENODEB_GTP_U_FOR_DL_DATA_FORWARDING)
|
|
||||||
return tunnel;
|
|
||||||
|
|
||||||
tunnel = sgw_tunnel_next(tunnel);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
sgw_tunnel_t* sgw_ul_indirect_tunnel_in_bearer(sgw_bearer_t *bearer)
|
|
||||||
{
|
|
||||||
sgw_tunnel_t *tunnel = NULL;
|
|
||||||
|
|
||||||
d_assert(bearer, return NULL, "Null param");
|
|
||||||
|
|
||||||
tunnel = sgw_tunnel_first(bearer);
|
|
||||||
while (tunnel)
|
|
||||||
{
|
|
||||||
if (tunnel->interface_type ==
|
|
||||||
GTP_F_TEID_ENODEB_GTP_U_FOR_UL_DATA_FORWARDING)
|
|
||||||
return tunnel;
|
|
||||||
|
|
||||||
tunnel = sgw_tunnel_next(tunnel);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
sgw_tunnel_t* sgw_tunnel_first(sgw_bearer_t *bearer)
|
sgw_tunnel_t* sgw_tunnel_first(sgw_bearer_t *bearer)
|
||||||
{
|
{
|
||||||
d_assert(bearer, return NULL, "Null param");
|
d_assert(bearer, return NULL, "Null param");
|
||||||
|
|
|
@ -223,10 +223,6 @@ CORE_DECLARE(status_t) sgw_tunnel_remove_all(sgw_bearer_t *bearer);
|
||||||
CORE_DECLARE(sgw_tunnel_t*) sgw_tunnel_find(index_t index);
|
CORE_DECLARE(sgw_tunnel_t*) sgw_tunnel_find(index_t index);
|
||||||
CORE_DECLARE(sgw_tunnel_t*) sgw_tunnel_find_by_teid(c_uint32_t teid);
|
CORE_DECLARE(sgw_tunnel_t*) sgw_tunnel_find_by_teid(c_uint32_t teid);
|
||||||
CORE_DECLARE(sgw_tunnel_t*) sgw_direct_tunnel_in_bearer(sgw_bearer_t *bearer);
|
CORE_DECLARE(sgw_tunnel_t*) sgw_direct_tunnel_in_bearer(sgw_bearer_t *bearer);
|
||||||
CORE_DECLARE(sgw_tunnel_t*) sgw_dl_indirect_tunnel_in_bearer(
|
|
||||||
sgw_bearer_t *bearer);
|
|
||||||
CORE_DECLARE(sgw_tunnel_t*) sgw_ul_indirect_tunnel_in_bearer(
|
|
||||||
sgw_bearer_t *bearer);
|
|
||||||
CORE_DECLARE(sgw_tunnel_t*) sgw_tunnel_first(sgw_bearer_t *bearer);
|
CORE_DECLARE(sgw_tunnel_t*) sgw_tunnel_first(sgw_bearer_t *bearer);
|
||||||
CORE_DECLARE(sgw_tunnel_t*) sgw_tunnel_next(sgw_tunnel_t *tunnel);
|
CORE_DECLARE(sgw_tunnel_t*) sgw_tunnel_next(sgw_tunnel_t *tunnel);
|
||||||
|
|
||||||
|
|
|
@ -271,13 +271,13 @@ static int _gtpv1_s1u_recv_cb(net_sock_t *sock, void *data)
|
||||||
|
|
||||||
gnode.addr = tunnel->remote_addr;
|
gnode.addr = tunnel->remote_addr;
|
||||||
gnode.port = GTPV1_U_UDP_PORT;
|
gnode.port = GTPV1_U_UDP_PORT;
|
||||||
if (tunnel->interface_type == GTP_F_TEID_S1_U_ENODEB_GTP_U)
|
if (tunnel->interface_type == GTP_F_TEID_S1_U_SGW_GTP_U)
|
||||||
gnode.sock = sgw_self()->s5u_sock;
|
gnode.sock = sgw_self()->s5u_sock;
|
||||||
else if (tunnel->interface_type ==
|
else if (tunnel->interface_type ==
|
||||||
GTP_F_TEID_ENODEB_GTP_U_FOR_DL_DATA_FORWARDING)
|
GTP_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING)
|
||||||
gnode.sock = sgw_self()->s1u_sock;
|
gnode.sock = sgw_self()->s1u_sock;
|
||||||
else if (tunnel->interface_type ==
|
else if (tunnel->interface_type ==
|
||||||
GTP_F_TEID_ENODEB_GTP_U_FOR_UL_DATA_FORWARDING)
|
GTP_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING)
|
||||||
gnode.sock = sgw_self()->s1u_sock;
|
gnode.sock = sgw_self()->s1u_sock;
|
||||||
else
|
else
|
||||||
d_assert(0, return -1, "Invalid type(%d)",
|
d_assert(0, return -1, "Invalid type(%d)",
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "core_lib.h"
|
#include "core_lib.h"
|
||||||
|
|
||||||
#include "gtp_types.h"
|
#include "gtp_types.h"
|
||||||
|
#include "gtp_conv.h"
|
||||||
|
|
||||||
#include "sgw_event.h"
|
#include "sgw_event.h"
|
||||||
#include "sgw_context.h"
|
#include "sgw_context.h"
|
||||||
|
@ -521,3 +522,120 @@ void sgw_s11_handle_downlink_data_notification_ack(sgw_ue_t *sgw_ue,
|
||||||
d_trace(3, "[GTP] Downlink Data Notification Ack: "
|
d_trace(3, "[GTP] Downlink Data Notification Ack: "
|
||||||
"MME[%d] --> SGW[%d]\n", sgw_ue->mme_s11_teid, sgw_ue->sgw_s11_teid);
|
"MME[%d] --> SGW[%d]\n", sgw_ue->mme_s11_teid, sgw_ue->sgw_s11_teid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sgw_s11_handle_create_indirect_data_forwarding_tunnel_request(
|
||||||
|
gtp_xact_t *s11_xact, sgw_ue_t *sgw_ue,
|
||||||
|
gtp_create_indirect_data_forwarding_tunnel_request_t *req)
|
||||||
|
{
|
||||||
|
status_t rv;
|
||||||
|
gtp_create_indirect_data_forwarding_tunnel_response_t *rsp = NULL;
|
||||||
|
pkbuf_t *pkbuf = NULL;
|
||||||
|
gtp_message_t gtp_message;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sgw_bearer_t *bearer = NULL;
|
||||||
|
sgw_tunnel_t *tunnel = NULL;
|
||||||
|
|
||||||
|
gtp_cause_t cause;
|
||||||
|
tlv_bearer_context_t *req_bearers[GTP_MAX_NUM_OF_INDIRECT_TUNNEL];
|
||||||
|
tlv_bearer_context_t *rsp_bearers[GTP_MAX_NUM_OF_INDIRECT_TUNNEL];
|
||||||
|
gtp_f_teid_t *req_teid = NULL;
|
||||||
|
gtp_f_teid_t rsp_teid[GTP_MAX_NUM_OF_INDIRECT_TUNNEL];
|
||||||
|
|
||||||
|
|
||||||
|
d_assert(sgw_ue, return, "Null param");
|
||||||
|
d_assert(s11_xact, return, "Null param");
|
||||||
|
d_assert(req, return, "Null param");
|
||||||
|
|
||||||
|
rsp = >p_message.create_indirect_data_forwarding_tunnel_response;
|
||||||
|
memset(>p_message, 0, sizeof(gtp_message_t));
|
||||||
|
|
||||||
|
gtp_bearers_in_create_indirect_tunnel_request(&req_bearers, req);
|
||||||
|
gtp_bearers_in_create_indirect_tunnel_response(&rsp_bearers, rsp);
|
||||||
|
|
||||||
|
memset(&cause, 0, sizeof(cause));
|
||||||
|
cause.value = GTP_CAUSE_REQUEST_ACCEPTED;
|
||||||
|
|
||||||
|
rsp->cause.presence = 1;
|
||||||
|
rsp->cause.data = &cause;
|
||||||
|
rsp->cause.len = sizeof(cause);
|
||||||
|
|
||||||
|
for (i = 0; req_bearers[i]->presence; i++)
|
||||||
|
{
|
||||||
|
if (req_bearers[i]->eps_bearer_id.presence == 0)
|
||||||
|
{
|
||||||
|
d_error("No EBI");
|
||||||
|
}
|
||||||
|
|
||||||
|
bearer = sgw_bearer_find_by_ue_ebi(sgw_ue,
|
||||||
|
req_bearers[i]->eps_bearer_id.u8);
|
||||||
|
d_assert(bearer, return, "No Bearer Context");
|
||||||
|
|
||||||
|
if (req_bearers[i]->s1_u_enodeb_f_teid.presence)
|
||||||
|
{
|
||||||
|
req_teid = req_bearers[i]->s1_u_enodeb_f_teid.data;
|
||||||
|
d_assert(req_teid, return,);
|
||||||
|
|
||||||
|
tunnel = sgw_tunnel_add(bearer,
|
||||||
|
GTP_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING);
|
||||||
|
d_assert(tunnel, return, "No Tunnel Context");
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (req_bearers[i]->s12_rnc_f_teid.presence)
|
||||||
|
{
|
||||||
|
req_teid = req_bearers[i]->s12_rnc_f_teid.data;
|
||||||
|
d_assert(req_teid, return,);
|
||||||
|
|
||||||
|
tunnel = sgw_tunnel_add(bearer,
|
||||||
|
GTP_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING);
|
||||||
|
d_assert(tunnel, return, "No Tunnel Context");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
d_assert(0, return, "Not Supported");
|
||||||
|
|
||||||
|
tunnel->remote_teid = ntohl(req_teid->teid);
|
||||||
|
tunnel->remote_addr = req_teid->ipv4_addr;
|
||||||
|
|
||||||
|
d_assert(rsp_bearers[i], return,);
|
||||||
|
rsp_bearers[i]->presence = 1;
|
||||||
|
rsp_bearers[i]->eps_bearer_id.presence = 1;
|
||||||
|
rsp_bearers[i]->eps_bearer_id.u8 = bearer->ebi;
|
||||||
|
|
||||||
|
memset(&rsp_teid[i], 0, sizeof(gtp_f_teid_t));
|
||||||
|
rsp_teid[i].ipv4 = 1;
|
||||||
|
rsp_teid[i].ipv4_addr = tunnel->local_addr;
|
||||||
|
rsp_teid[i].teid = htonl(tunnel->local_teid);
|
||||||
|
rsp_teid[i].interface_type = tunnel->interface_type;
|
||||||
|
|
||||||
|
if (tunnel->interface_type ==
|
||||||
|
GTP_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING)
|
||||||
|
{
|
||||||
|
rsp_bearers[i]->s4_u_sgsn_f_teid.presence = 1;
|
||||||
|
rsp_bearers[i]->s4_u_sgsn_f_teid.data = &rsp_teid[i];
|
||||||
|
rsp_bearers[i]->s4_u_sgsn_f_teid.len = GTP_F_TEID_IPV4_LEN;
|
||||||
|
}
|
||||||
|
else if (tunnel->interface_type ==
|
||||||
|
GTP_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING)
|
||||||
|
{
|
||||||
|
rsp_bearers[i]->s2b_u_epdg_f_teid_5.presence = 1;
|
||||||
|
rsp_bearers[i]->s2b_u_epdg_f_teid_5.data = &rsp_teid[i];
|
||||||
|
rsp_bearers[i]->s2b_u_epdg_f_teid_5.len = GTP_F_TEID_IPV4_LEN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gtp_message.h.type =
|
||||||
|
GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE;
|
||||||
|
gtp_message.h.teid = sgw_ue->mme_s11_teid;
|
||||||
|
|
||||||
|
rv = gtp_build_msg(&pkbuf, >p_message);
|
||||||
|
d_assert(rv == CORE_OK, return, "gtp build failed");
|
||||||
|
|
||||||
|
rv = gtp_xact_update_tx(s11_xact, >p_message.h, pkbuf);
|
||||||
|
d_assert(rv == CORE_OK, return, "gtp_xact_update_tx error");
|
||||||
|
|
||||||
|
rv = gtp_xact_commit(s11_xact);
|
||||||
|
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||||
|
|
||||||
|
d_trace(3, "[GTP] Create Indirect Data Forwarding Tunnel Response : "
|
||||||
|
"MME[%d] --> SGW[%d]\n", sgw_ue->mme_s11_teid, sgw_ue->sgw_s11_teid);
|
||||||
|
}
|
||||||
|
|
|
@ -24,6 +24,10 @@ CORE_DECLARE(void) sgw_s11_handle_release_access_bearers_request(
|
||||||
CORE_DECLARE(void) sgw_s11_handle_lo_dldata_notification(sgw_bearer_t *bearer);
|
CORE_DECLARE(void) sgw_s11_handle_lo_dldata_notification(sgw_bearer_t *bearer);
|
||||||
CORE_DECLARE(void) sgw_s11_handle_downlink_data_notification_ack(
|
CORE_DECLARE(void) sgw_s11_handle_downlink_data_notification_ack(
|
||||||
sgw_ue_t *sgw_ue, gtp_downlink_data_notification_acknowledge_t *ack);
|
sgw_ue_t *sgw_ue, gtp_downlink_data_notification_acknowledge_t *ack);
|
||||||
|
|
||||||
|
CORE_DECLARE(void) sgw_s11_handle_create_indirect_data_forwarding_tunnel_request(
|
||||||
|
gtp_xact_t *s11_xact, sgw_ue_t *sgw_ue,
|
||||||
|
gtp_create_indirect_data_forwarding_tunnel_request_t *req);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
|
@ -93,7 +93,7 @@ void sgw_s5c_handle_create_session_response(gtp_xact_t *s5c_xact,
|
||||||
/* Send Data Plane(UL) : SGW-S1U */
|
/* Send Data Plane(UL) : SGW-S1U */
|
||||||
memset(&sgw_s1u_teid, 0, sizeof(gtp_f_teid_t));
|
memset(&sgw_s1u_teid, 0, sizeof(gtp_f_teid_t));
|
||||||
sgw_s1u_teid.ipv4 = 1;
|
sgw_s1u_teid.ipv4 = 1;
|
||||||
sgw_s1u_teid.interface_type = GTP_F_TEID_S1_U_SGW_GTP_U;
|
sgw_s1u_teid.interface_type = tunnel->interface_type;
|
||||||
sgw_s1u_teid.ipv4_addr = tunnel->local_addr;
|
sgw_s1u_teid.ipv4_addr = tunnel->local_addr;
|
||||||
sgw_s1u_teid.teid = htonl(tunnel->local_teid);
|
sgw_s1u_teid.teid = htonl(tunnel->local_teid);
|
||||||
rsp->bearer_contexts_created.s1_u_enodeb_f_teid.presence = 1;
|
rsp->bearer_contexts_created.s1_u_enodeb_f_teid.presence = 1;
|
||||||
|
@ -242,7 +242,7 @@ void sgw_s5c_handle_create_bearer_request(gtp_xact_t *s5c_xact,
|
||||||
/* Send Data Plane(UL) : SGW-S1U */
|
/* Send Data Plane(UL) : SGW-S1U */
|
||||||
memset(&sgw_s1u_teid, 0, sizeof(gtp_f_teid_t));
|
memset(&sgw_s1u_teid, 0, sizeof(gtp_f_teid_t));
|
||||||
sgw_s1u_teid.ipv4 = 1;
|
sgw_s1u_teid.ipv4 = 1;
|
||||||
sgw_s1u_teid.interface_type = GTP_F_TEID_S1_U_SGW_GTP_U;
|
sgw_s1u_teid.interface_type = tunnel->interface_type;
|
||||||
sgw_s1u_teid.ipv4_addr = tunnel->local_addr;
|
sgw_s1u_teid.ipv4_addr = tunnel->local_addr;
|
||||||
sgw_s1u_teid.teid = htonl(tunnel->local_teid);
|
sgw_s1u_teid.teid = htonl(tunnel->local_teid);
|
||||||
req->bearer_contexts.s1_u_enodeb_f_teid.presence = 1;
|
req->bearer_contexts.s1_u_enodeb_f_teid.presence = 1;
|
||||||
|
|
|
@ -101,6 +101,12 @@ void sgw_state_operational(fsm_t *s, event_t *e)
|
||||||
sgw_s11_handle_downlink_data_notification_ack(sgw_ue,
|
sgw_s11_handle_downlink_data_notification_ack(sgw_ue,
|
||||||
&message.downlink_data_notification_acknowledge);
|
&message.downlink_data_notification_acknowledge);
|
||||||
break;
|
break;
|
||||||
|
case GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
|
||||||
|
sgw_s11_handle_create_indirect_data_forwarding_tunnel_request(
|
||||||
|
xact, sgw_ue,
|
||||||
|
&message.
|
||||||
|
create_indirect_data_forwarding_tunnel_request);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
d_warn("Not implmeneted(type:%d)", message.h.type);
|
d_warn("Not implmeneted(type:%d)", message.h.type);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue