Starting to create structure for modify bearer response

This commit is contained in:
Pedro Alvarez 2017-12-06 12:50:25 +00:00
parent 489865fa22
commit d972549124
4 changed files with 31 additions and 13 deletions

View File

@ -74,6 +74,8 @@ typedef union gtpc_msg_choice
{
struct gtpc_create_session_request create_session_request;
struct gtpc_create_session_response create_session_response;
struct gtpc_modify_bearer_request modify_bearer_request;
//struct gtpc_modify_bearer_response modify_bearer_response;
} gtpc_msg_choice_t;
/****************************************************************************

View File

@ -53,14 +53,14 @@ typedef struct {
} spgw_args_t;
typedef struct {
typedef struct spgw_tunnel_ctx {
uint64_t imsi;
in_addr_t ue_ipv4;
struct srslte::gtpc_f_teid_ie up_ctrl_fteid;
struct srslte::gtpc_f_teid_ie up_user_fteid;
struct srslte::gtpc_f_teid_ie dw_ctrl_fteid;
struct srslte::gtpc_f_teid_ie dw_user_fteid;
} spgw_ue_ctx;
} spgw_tunnel_ctx_t;
class spgw:
public thread
@ -73,6 +73,7 @@ public:
void run_thread();
void handle_create_session_request(struct srslte::gtpc_create_session_request *cs_req, struct srslte::gtpc_pdu *cs_resp_pdu);
void handle_modify_bearer_request(struct srslte::gtpc_pdu *mb_req_pdu, struct srslte::gtpc_pdu *mb_resp_pdu);
private:
@ -101,8 +102,8 @@ private:
uint64_t m_next_ctrl_teid;
uint64_t m_next_user_teid;
std::map<uint32_t,spgw_ue_ctx*> m_teid_to_ue_ctx; //Map control TEID to ue_ctx. Usefull to get reply ctrl TEID
std::map<in_addr_t,gtpc_f_teid_ie> m_ip_to_teid; //Map IP to User-plane TEID for downlink traffic
std::map<uint32_t,spgw_tunnel_ctx*> m_teid_to_tunnel_ctx; //Map control TEID to tunnel ctx. Usefull to get reply ctrl TEID, UE IP, etc.
std::map<in_addr_t,srslte::gtpc_f_teid_ie> m_ip_to_teid; //Map IP to User-plane TEID for downlink traffic
/*Logs*/
srslte::log_filter *m_spgw_log;

View File

@ -176,7 +176,7 @@ mme_gtpc::send_modify_bearer_request(erab_ctx_t *erab_ctx)
header->teid = sgw_ctrl_fteid->teid;
header->type = srslte::GTPC_MSG_TYPE_MODIFY_BEARER_REQUEST;
srslte::gtpc_modify_bearer_request *mb_req = &mb_req_pdu.modify_bearer_request;
srslte::gtpc_modify_bearer_request *mb_req = &mb_req_pdu.choice.modify_bearer_request;
mb_req->eps_bearer_context_to_modify.ebi = erab_ctx->erab_id;
mb_req->eps_bearer_context_to_modify.s1_u_enb_f_teid.ipv4 = enb_fteid->ipv4;
mb_req->eps_bearer_context_to_modify.s1_u_enb_f_teid.teid = enb_fteid->teid;

View File

@ -323,11 +323,11 @@ spgw::handle_create_session_request(struct srslte::gtpc_create_session_request *
in_addr_t ue_ip = get_new_ue_ipv4();
//Save the UE IP to User TEID map //TODO!!!
struct sgw_ue_ctx *ue_ctx = new sgw_ue_ctx;
sgw_ue_ctx->imsi = cs_req->imsi;
sgw_ue_ctx->ul_user_fteid.teid = spgw_uplink_user_teid;
sgw_ue_ctx->ul_ctrl_fteid = spgw_uplink_ctrl_teid;
sgw_ue_ctx->ue_ipv4 = ue_ip;
spgw_tunnel_ctx_t *tunnel_ctx = new spgw_tunnel_ctx_t;
tunnel_ctx->imsi = cs_req->imsi;
tunnel_ctx->up_user_fteid.teid = spgw_uplink_user_teid;
tunnel_ctx->up_ctrl_fteid.teid = spgw_uplink_ctrl_teid;
tunnel_ctx->ue_ipv4 = ue_ip;
//Create session response message
//Setup GTP-C header
@ -363,13 +363,28 @@ spgw::handle_modify_bearer_request(struct srslte::gtpc_pdu *mb_req_pdu, struct s
{
m_spgw_log->info("Received Modified Bearer Request\n");
//Get control tunnel info from
//Setting up Modify bearer request PDU
//Get control tunnel info from mb_req PDU
uint32_t ctrl_teid = mb_req_pdu->header.teid;
std::map<uint32_t,spgw_tunnel_ctx_t*>::iterator tunnel_it = m_teid_to_tunnel_ctx.find(ctrl_teid);
if(tunnel_it == m_teid_to_tunnel_ctx.end())
{
m_spgw_log->warning("Could not find TEID %d to modify",ctrl_teid);
return;
}
spgw_tunnel_ctx_t *tunnel_ctx = tunnel_it->second;
//Store user DW link TEID
srslte::gtpc_modify_bearer_request *mb_req = &mb_req_pdu->choice.modify_bearer_request;
tunnel_ctx->dw_user_fteid = mb_req->eps_bearer_context_to_modify.s1_u_enb_f_teid;
//Set up actual tunnel
//TODO!!!
//Setting up Modify bearer response PDU
//Header
srslte::gtpc_header *header = &mb_req_pdu->header;
header->piggyback = false;
header->teid_present = true;
header->teid = ; //
header->teid = tunnel_ctx->dw_ctrl_fteid.teid; //
header->type = srslte::GTPC_MSG_TYPE_MODIFY_BEARER_RESPONSE;
//PDU