update it

This commit is contained in:
Sukchan Lee 2018-01-14 22:02:37 +09:00
parent c1848e03a1
commit d77be669a9
3 changed files with 80 additions and 3 deletions

View File

@ -8,6 +8,74 @@
#include "pgw_s5c_build.h"
#include "pgw_ipfw.h"
static status_t bearer_binding(pgw_sess_t *sess, gx_message_t *gx_message)
{
status_t rv;
int i, j;
d_assert(sess, return CORE_ERROR,);
d_assert(gx_message, return CORE_ERROR,);
for (i = 0; i < gx_message->num_of_pcc_rule; i++)
{
gtp_xact_t *xact = NULL;
gtp_header_t h;
pkbuf_t *pkbuf = NULL;
pcc_rule_t *pcc_rule = &gx_message->pcc_rule[i];
pgw_bearer_t *bearer = pgw_bearer_find_by_qci_arp(sess,
pcc_rule->qos.qci,
pcc_rule->qos.arp.priority_level,
pcc_rule->qos.arp.pre_emption_capability,
pcc_rule->qos.arp.pre_emption_vulnerability);
if (bearer)
{
d_error("CHECK WEBUI : PCC Rule Modification is NOT implemented");
d_error("Please remove Flow in PCC Rule");
return CORE_ERROR;
}
bearer = pgw_bearer_add(sess);
d_assert(bearer, return CORE_ERROR, "Null param");
memcpy(&bearer->qos, &pcc_rule->qos, sizeof(qos_t));
for (j = 0; j < pcc_rule->num_of_flow; j++)
{
flow_t *flow = &pcc_rule->flow[j];
pgw_rule_t rule;
pgw_pf_t *pf = NULL;
d_assert(flow, return CORE_ERROR, "Null param");
d_assert(flow->description, return CORE_ERROR, "Null param");
rv = pgw_compile_packet_filter(&rule, flow->description);
d_assert(rv == CORE_OK, return CORE_ERROR, "Failed to compile packet filter");
pf = pgw_pf_add(bearer, pcc_rule->precedence);
d_assert(pf, return CORE_ERROR, "Null param");
memcpy(&pf->rule, &rule, sizeof(pgw_rule_t));
pf->direction = flow->direction;
}
memset(&h, 0, sizeof(gtp_header_t));
h.type = GTP_CREATE_BEARER_REQUEST_TYPE;
h.teid = sess->sgw_s5c_teid;
rv = pgw_s5c_build_create_bearer_request(&pkbuf, h.type, bearer);
d_assert(rv == CORE_OK, return CORE_ERROR, "S11 build error");
xact = gtp_xact_local_create(sess->gnode, &h, pkbuf);
d_assert(xact, return CORE_ERROR, "Null param");
rv = gtp_xact_commit(xact);
d_assert(rv == CORE_OK, return CORE_ERROR, "xact_commit error");
}
return CORE_OK;
}
void pgw_gx_handle_cca_initial_request(
pgw_sess_t *sess, gx_message_t *gx_message,
gtp_xact_t *xact, gtp_create_session_request_t *req)
@ -136,3 +204,12 @@ void pgw_gx_handle_cca_termination_request(
rv = gtp_xact_commit(xact);
d_assert(rv == CORE_OK, return, "xact_commit error");
}
void pgw_gx_handle_re_auth_request(
pgw_sess_t *sess, gx_message_t *gx_message)
{
status_t rv;
rv = bearer_binding(sess, gx_message);
d_assert(rv == CORE_OK, return,);
}

View File

@ -15,6 +15,8 @@ CORE_DECLARE(void) pgw_gx_handle_cca_initial_request(
CORE_DECLARE(void) pgw_gx_handle_cca_termination_request(
pgw_sess_t *sess, gx_message_t *gx_message,
gtp_xact_t *xact, gtp_delete_session_request_t *req);
CORE_DECLARE(void) pgw_gx_handle_re_auth_request(
pgw_sess_t *sess, gx_message_t *gx_message);
#ifdef __cplusplus
}

View File

@ -204,9 +204,7 @@ void pgw_state_operational(fsm_t *s, event_t *e)
}
case GX_CMD_RE_AUTH:
{
#if 0
pgw_gx_handle_re_auth_request( sess, gx_message);
#endif
pgw_gx_handle_re_auth_request(sess, gx_message);
break;
}
default: