Diameter Gx Code Refine
This commit is contained in:
parent
58f501d397
commit
2059341d4f
|
@ -5,15 +5,15 @@
|
|||
|
||||
#include "gx_message.h"
|
||||
|
||||
void gx_cca_message_free(gx_cca_message_t *cca_message)
|
||||
void gx_message_free(gx_message_t *gx_message)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
d_assert(cca_message, return, "Null param");
|
||||
d_assert(gx_message, return, "Null param");
|
||||
|
||||
for (i = 0; i < cca_message->num_of_pcc_rule; i++)
|
||||
for (i = 0; i < gx_message->num_of_pcc_rule; i++)
|
||||
{
|
||||
pcc_rule_t *pcc_rule = &cca_message->pcc_rule[i];
|
||||
pcc_rule_t *pcc_rule = &gx_message->pcc_rule[i];
|
||||
|
||||
for (j = 0; j < pcc_rule->num_of_flow; j++)
|
||||
{
|
||||
|
|
|
@ -7,18 +7,6 @@ extern "C" {
|
|||
|
||||
#include "3gpp_types.h"
|
||||
|
||||
typedef struct _gx_cca_message_t {
|
||||
#define GX_CC_REQUEST_TYPE_INITIAL_REQUEST 1
|
||||
#define GX_CC_REQUEST_TYPE_UPDATE_REQUEST 2
|
||||
#define GX_CC_REQUEST_TYPE_TERMINATION_REQUEST 3
|
||||
#define GX_CC_REQUEST_TYPE_EVENT_REQUEST 4
|
||||
c_uint32_t cc_request_type;
|
||||
|
||||
pdn_t pdn;
|
||||
pcc_rule_t pcc_rule[MAX_NUM_OF_PCC_RULE];
|
||||
int num_of_pcc_rule;
|
||||
} gx_cca_message_t;
|
||||
|
||||
typedef struct _gx_message_t {
|
||||
#define GX_CMD_CODE_CREDIT_CONTROL 272
|
||||
c_uint16_t cmd_code;
|
||||
|
@ -36,10 +24,18 @@ typedef struct _gx_message_t {
|
|||
#define GX_DIAMETER_ERROR_NBIFOM_NOT_AUTHORIZED 5149
|
||||
c_uint32_t result_code;
|
||||
|
||||
gx_cca_message_t cca_message;
|
||||
#define GX_CC_REQUEST_TYPE_INITIAL_REQUEST 1
|
||||
#define GX_CC_REQUEST_TYPE_UPDATE_REQUEST 2
|
||||
#define GX_CC_REQUEST_TYPE_TERMINATION_REQUEST 3
|
||||
#define GX_CC_REQUEST_TYPE_EVENT_REQUEST 4
|
||||
c_uint32_t cc_request_type;
|
||||
|
||||
pdn_t pdn;
|
||||
pcc_rule_t pcc_rule[MAX_NUM_OF_PCC_RULE];
|
||||
int num_of_pcc_rule;
|
||||
} gx_message_t;
|
||||
|
||||
CORE_DECLARE(void) gx_cca_message_free(gx_cca_message_t *cca_message);
|
||||
CORE_DECLARE(void) gx_message_free(gx_message_t *message);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -378,7 +378,7 @@ status_t pcrf_db_final()
|
|||
}
|
||||
|
||||
status_t pcrf_db_pdn_data(
|
||||
c_int8_t *imsi_bcd, c_int8_t *apn, gx_cca_message_t *cca_message)
|
||||
c_int8_t *imsi_bcd, c_int8_t *apn, gx_message_t *gx_message)
|
||||
{
|
||||
status_t rv = CORE_OK;
|
||||
mongoc_cursor_t *cursor = NULL;
|
||||
|
@ -394,7 +394,7 @@ status_t pcrf_db_pdn_data(
|
|||
|
||||
d_assert(imsi_bcd, return CORE_ERROR, "Null param");
|
||||
d_assert(apn, return CORE_ERROR, "Null param");
|
||||
d_assert(cca_message, return CORE_ERROR, "Null param");
|
||||
d_assert(gx_message, return CORE_ERROR, "Null param");
|
||||
|
||||
mutex_lock(self.db_lock);
|
||||
|
||||
|
@ -462,7 +462,7 @@ status_t pcrf_db_pdn_data(
|
|||
d_assert(pdn_index == 0, goto out,
|
||||
"Invalid PDN Index(%d)", pdn_index);
|
||||
|
||||
pdn = &cca_message->pdn;
|
||||
pdn = &gx_message->pdn;
|
||||
bson_iter_recurse(&child1_iter, &child2_iter);
|
||||
while(bson_iter_next(&child2_iter))
|
||||
{
|
||||
|
@ -566,7 +566,7 @@ status_t pcrf_db_pdn_data(
|
|||
"Overflow of PCC RULE number(%d>%d)",
|
||||
pcc_rule_index, MAX_NUM_OF_PCC_RULE);
|
||||
|
||||
pcc_rule = &cca_message->pcc_rule[pcc_rule_index];
|
||||
pcc_rule = &gx_message->pcc_rule[pcc_rule_index];
|
||||
bson_iter_recurse(&child3_iter, &child4_iter);
|
||||
while(bson_iter_next(&child4_iter))
|
||||
{
|
||||
|
@ -748,7 +748,7 @@ status_t pcrf_db_pdn_data(
|
|||
}
|
||||
pcc_rule_index++;
|
||||
}
|
||||
cca_message->num_of_pcc_rule = pcc_rule_index;
|
||||
gx_message->num_of_pcc_rule = pcc_rule_index;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ CORE_DECLARE(status_t) pcrf_db_init(void);
|
|||
CORE_DECLARE(status_t) pcrf_db_final(void);
|
||||
|
||||
CORE_DECLARE(status_t) pcrf_db_pdn_data(
|
||||
c_int8_t *imsi_bcd, c_int8_t *apn, gx_cca_message_t *cca_message);
|
||||
c_int8_t *imsi_bcd, c_int8_t *apn, gx_message_t *gx_message);
|
||||
|
||||
CORE_DECLARE(status_t) pcrf_sess_set_ipv4(const void *key, c_uint8_t *sid);
|
||||
CORE_DECLARE(status_t) pcrf_sess_set_ipv6(const void *key, c_uint8_t *sid);
|
||||
|
|
|
@ -90,7 +90,7 @@ static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
|
|||
union avp_value val;
|
||||
struct sess_state *sess_data = NULL;
|
||||
|
||||
gx_cca_message_t cca_message;
|
||||
gx_message_t gx_message;
|
||||
c_int8_t imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
c_int8_t apn[MAX_APN_LEN+1];
|
||||
int i, j;
|
||||
|
@ -116,7 +116,7 @@ static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
|
|||
}
|
||||
|
||||
/* Initialize Message */
|
||||
memset(&cca_message, 0, sizeof(gx_cca_message_t));
|
||||
memset(&gx_message, 0, sizeof(gx_message_t));
|
||||
|
||||
/* Create answer header */
|
||||
qry = *msg;
|
||||
|
@ -261,7 +261,7 @@ static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
|
|||
core_cpystrn(apn, (char*)hdr->avp_value->os.data,
|
||||
c_min(hdr->avp_value->os.len, MAX_APN_LEN)+1);
|
||||
|
||||
rv = pcrf_db_pdn_data(imsi_bcd, apn, &cca_message);
|
||||
rv = pcrf_db_pdn_data(imsi_bcd, apn, &gx_message);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
d_error("Cannot get data for IMSI(%s)+APN(%s)'\n", imsi_bcd, apn);
|
||||
|
@ -274,9 +274,9 @@ static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
|
|||
/* Set Charging-Rule-Install */
|
||||
int charging_rule_install = 0;
|
||||
|
||||
for (i = 0; i < cca_message.num_of_pcc_rule; i++)
|
||||
for (i = 0; i < gx_message.num_of_pcc_rule; i++)
|
||||
{
|
||||
pcc_rule_t *pcc_rule = &cca_message.pcc_rule[i];
|
||||
pcc_rule_t *pcc_rule = &gx_message.pcc_rule[i];
|
||||
if (pcc_rule->num_of_flow)
|
||||
charging_rule_install = 1;
|
||||
}
|
||||
|
@ -287,9 +287,9 @@ static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
|
|||
d_assert(ret == 0, return EINVAL,);
|
||||
}
|
||||
|
||||
for (i = 0; i < cca_message.num_of_pcc_rule; i++)
|
||||
for (i = 0; i < gx_message.num_of_pcc_rule; i++)
|
||||
{
|
||||
pcc_rule_t *pcc_rule = &cca_message.pcc_rule[i];
|
||||
pcc_rule_t *pcc_rule = &gx_message.pcc_rule[i];
|
||||
|
||||
ret = fd_msg_avp_new(gx_charging_rule_definition, 0, &avpch1);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
|
@ -447,29 +447,29 @@ static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
|
|||
}
|
||||
|
||||
/* Set QoS-Information */
|
||||
if (cca_message.pdn.ambr.downlink || cca_message.pdn.ambr.uplink)
|
||||
if (gx_message.pdn.ambr.downlink || gx_message.pdn.ambr.uplink)
|
||||
{
|
||||
ret = fd_msg_avp_new(gx_qos_information, 0, &avp);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
|
||||
if (cca_message.pdn.ambr.uplink)
|
||||
if (gx_message.pdn.ambr.uplink)
|
||||
{
|
||||
ret = fd_msg_avp_new(gx_apn_aggregate_max_bitrate_ul, 0,
|
||||
&avpch1);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
val.u32 = cca_message.pdn.ambr.uplink;
|
||||
val.u32 = gx_message.pdn.ambr.uplink;
|
||||
ret = fd_msg_avp_setvalue (avpch1, &val);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
ret = fd_msg_avp_add (avp, MSG_BRW_LAST_CHILD, avpch1);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
}
|
||||
|
||||
if (cca_message.pdn.ambr.downlink)
|
||||
if (gx_message.pdn.ambr.downlink)
|
||||
{
|
||||
ret = fd_msg_avp_new(gx_apn_aggregate_max_bitrate_dl, 0,
|
||||
&avpch1);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
val.u32 = cca_message.pdn.ambr.downlink;
|
||||
val.u32 = gx_message.pdn.ambr.downlink;
|
||||
ret = fd_msg_avp_setvalue (avpch1, &val);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
ret = fd_msg_avp_add (avp, MSG_BRW_LAST_CHILD, avpch1);
|
||||
|
@ -486,7 +486,7 @@ static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
|
|||
|
||||
ret = fd_msg_avp_new(gx_qos_class_identifier, 0, &avpch1);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
val.u32 = cca_message.pdn.qos.qci;
|
||||
val.u32 = gx_message.pdn.qos.qci;
|
||||
ret = fd_msg_avp_setvalue (avpch1, &val);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
ret = fd_msg_avp_add (avp, MSG_BRW_LAST_CHILD, avpch1);
|
||||
|
@ -497,7 +497,7 @@ static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
|
|||
|
||||
ret = fd_msg_avp_new(gx_priority_level, 0, &avpch2);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
val.u32 = cca_message.pdn.qos.arp.priority_level;
|
||||
val.u32 = gx_message.pdn.qos.arp.priority_level;
|
||||
ret = fd_msg_avp_setvalue (avpch2, &val);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
ret = fd_msg_avp_add (avpch1, MSG_BRW_LAST_CHILD, avpch2);
|
||||
|
@ -505,7 +505,7 @@ static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
|
|||
|
||||
ret = fd_msg_avp_new(gx_pre_emption_capability, 0, &avpch2);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
val.u32 = cca_message.pdn.qos.arp.pre_emption_capability;
|
||||
val.u32 = gx_message.pdn.qos.arp.pre_emption_capability;
|
||||
ret = fd_msg_avp_setvalue (avpch2, &val);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
ret = fd_msg_avp_add (avpch1, MSG_BRW_LAST_CHILD, avpch2);
|
||||
|
@ -513,7 +513,7 @@ static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
|
|||
|
||||
ret = fd_msg_avp_new(gx_pre_emption_vulnerability, 0, &avpch2);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
val.u32 = cca_message.pdn.qos.arp.pre_emption_vulnerability;
|
||||
val.u32 = gx_message.pdn.qos.arp.pre_emption_vulnerability;
|
||||
ret = fd_msg_avp_setvalue (avpch2, &val);
|
||||
d_assert(ret == 0, return EINVAL,);
|
||||
ret = fd_msg_avp_add (avpch1, MSG_BRW_LAST_CHILD, avpch2);
|
||||
|
@ -574,7 +574,7 @@ static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
|
|||
fd_logger_self()->stats.nb_echoed++;
|
||||
d_assert(pthread_mutex_unlock(&fd_logger_self()->stats_lock) ==0,, );
|
||||
|
||||
gx_cca_message_free(&cca_message);
|
||||
gx_message_free(&gx_message);
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -618,7 +618,7 @@ out:
|
|||
ret = fd_msg_send(msg, NULL, NULL);
|
||||
d_assert(ret == 0,,);
|
||||
|
||||
gx_cca_message_free(&cca_message);
|
||||
gx_message_free(&gx_message);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -431,7 +431,6 @@ static void pgw_gx_cca_cb(void *data, struct msg **msg)
|
|||
pgw_sess_t *sess = NULL;
|
||||
pkbuf_t *gxbuf = NULL, *gtpbuf = NULL;
|
||||
gx_message_t *gx_message = NULL;
|
||||
gx_cca_message_t *cca_message = NULL;
|
||||
c_uint16_t gxbuf_len = 0;
|
||||
|
||||
ret = clock_gettime(CLOCK_REALTIME, &ts);
|
||||
|
@ -465,7 +464,6 @@ static void pgw_gx_cca_cb(void *data, struct msg **msg)
|
|||
/* Set Credit Control Command */
|
||||
memset(gx_message, 0, gxbuf_len);
|
||||
gx_message->cmd_code = GX_CMD_CODE_CREDIT_CONTROL;
|
||||
cca_message = &gx_message->cca_message;
|
||||
|
||||
/* Value of Result Code */
|
||||
ret = fd_msg_search_avp(*msg, fd_result_code, &avp);
|
||||
|
@ -545,7 +543,7 @@ static void pgw_gx_cca_cb(void *data, struct msg **msg)
|
|||
{
|
||||
ret = fd_msg_avp_hdr(avp, &hdr);
|
||||
d_assert(ret == 0, return,);
|
||||
cca_message->cc_request_type = hdr->avp_value->i32;
|
||||
gx_message->cc_request_type = hdr->avp_value->i32;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -568,7 +566,7 @@ static void pgw_gx_cca_cb(void *data, struct msg **msg)
|
|||
case GX_AVP_CODE_CHARGING_RULE_DEFINITION:
|
||||
{
|
||||
pcc_rule_t *pcc_rule =
|
||||
&cca_message->pcc_rule[cca_message->num_of_pcc_rule];
|
||||
&gx_message->pcc_rule[gx_message->num_of_pcc_rule];
|
||||
|
||||
ret = fd_msg_browse(avpch1,
|
||||
MSG_BRW_FIRST_CHILD, &avpch2, NULL);
|
||||
|
@ -760,7 +758,7 @@ static void pgw_gx_cca_cb(void *data, struct msg **msg)
|
|||
fd_msg_browse(avpch2, MSG_BRW_NEXT, &avpch2, NULL);
|
||||
}
|
||||
|
||||
cca_message->num_of_pcc_rule++;
|
||||
gx_message->num_of_pcc_rule++;
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -784,7 +782,7 @@ static void pgw_gx_cca_cb(void *data, struct msg **msg)
|
|||
{
|
||||
ret = fd_msg_avp_hdr(avpch1, &hdr);
|
||||
d_assert(ret == 0, return,);
|
||||
cca_message->pdn.ambr.uplink = hdr->avp_value->u32;
|
||||
gx_message->pdn.ambr.uplink = hdr->avp_value->u32;
|
||||
}
|
||||
ret = fd_avp_search_avp(avp, gx_apn_aggregate_max_bitrate_dl, &avpch1);
|
||||
d_assert(ret == 0, return,);
|
||||
|
@ -792,7 +790,7 @@ static void pgw_gx_cca_cb(void *data, struct msg **msg)
|
|||
{
|
||||
ret = fd_msg_avp_hdr(avpch1, &hdr);
|
||||
d_assert(ret == 0, return,);
|
||||
cca_message->pdn.ambr.downlink = hdr->avp_value->u32;
|
||||
gx_message->pdn.ambr.downlink = hdr->avp_value->u32;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -806,7 +804,7 @@ static void pgw_gx_cca_cb(void *data, struct msg **msg)
|
|||
{
|
||||
ret = fd_msg_avp_hdr(avpch1, &hdr);
|
||||
d_assert(ret == 0, return,);
|
||||
cca_message->pdn.qos.qci = hdr->avp_value->u32;
|
||||
gx_message->pdn.qos.qci = hdr->avp_value->u32;
|
||||
}
|
||||
|
||||
ret = fd_avp_search_avp(avp, gx_allocation_retention_priority, &avpch1);
|
||||
|
@ -819,7 +817,7 @@ static void pgw_gx_cca_cb(void *data, struct msg **msg)
|
|||
{
|
||||
ret = fd_msg_avp_hdr(avpch4, &hdr);
|
||||
d_assert(ret == 0, return,);
|
||||
cca_message->pdn.qos.arp.priority_level = hdr->avp_value->u32;
|
||||
gx_message->pdn.qos.arp.priority_level = hdr->avp_value->u32;
|
||||
}
|
||||
|
||||
ret = fd_avp_search_avp(avpch1, gx_pre_emption_capability, &avpch4);
|
||||
|
@ -828,7 +826,7 @@ static void pgw_gx_cca_cb(void *data, struct msg **msg)
|
|||
{
|
||||
ret = fd_msg_avp_hdr(avpch4, &hdr);
|
||||
d_assert(ret == 0, return,);
|
||||
cca_message->pdn.qos.arp.pre_emption_capability =
|
||||
gx_message->pdn.qos.arp.pre_emption_capability =
|
||||
hdr->avp_value->u32;
|
||||
}
|
||||
|
||||
|
@ -839,7 +837,7 @@ static void pgw_gx_cca_cb(void *data, struct msg **msg)
|
|||
{
|
||||
ret = fd_msg_avp_hdr(avpch4, &hdr);
|
||||
d_assert(ret == 0, return,);
|
||||
cca_message->pdn.qos.arp.pre_emption_vulnerability =
|
||||
gx_message->pdn.qos.arp.pre_emption_vulnerability =
|
||||
hdr->avp_value->u32;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
void pgw_gx_handle_cca_initial_request(
|
||||
gtp_xact_t *xact, pgw_sess_t *sess,
|
||||
gx_cca_message_t *cca_message, gtp_create_session_request_t *req)
|
||||
gx_message_t *gx_message, gtp_create_session_request_t *req)
|
||||
{
|
||||
status_t rv;
|
||||
gtp_header_t h;
|
||||
|
@ -20,7 +20,7 @@ void pgw_gx_handle_cca_initial_request(
|
|||
|
||||
d_assert(xact, return, "Null param");
|
||||
d_assert(sess, return, "Null param");
|
||||
d_assert(cca_message, return, "Null param");
|
||||
d_assert(gx_message, return, "Null param");
|
||||
d_assert(req, return, "Null param");
|
||||
|
||||
/* Send Create Session Request with Creating Default Bearer */
|
||||
|
@ -29,7 +29,7 @@ void pgw_gx_handle_cca_initial_request(
|
|||
h.teid = sess->sgw_s5c_teid;
|
||||
|
||||
rv = pgw_s5c_build_create_session_response(
|
||||
&pkbuf, h.type, sess, cca_message, req);
|
||||
&pkbuf, h.type, sess, gx_message, req);
|
||||
d_assert(rv == CORE_OK, return, "S11 build error");
|
||||
|
||||
rv = gtp_xact_update_tx(xact, &h, pkbuf);
|
||||
|
@ -39,9 +39,9 @@ void pgw_gx_handle_cca_initial_request(
|
|||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||
|
||||
/* Find Dedicated Bearer */
|
||||
for (i = 0; i < cca_message->num_of_pcc_rule; i++)
|
||||
for (i = 0; i < gx_message->num_of_pcc_rule; i++)
|
||||
{
|
||||
pcc_rule_t *pcc_rule = &cca_message->pcc_rule[i];
|
||||
pcc_rule_t *pcc_rule = &gx_message->pcc_rule[i];
|
||||
bearer = pgw_bearer_find_by_qci_arp(sess,
|
||||
pcc_rule->qos.qci,
|
||||
pcc_rule->qos.arp.priority_level,
|
||||
|
@ -104,7 +104,7 @@ void pgw_gx_handle_cca_initial_request(
|
|||
|
||||
void pgw_gx_handle_cca_termination_request(
|
||||
gtp_xact_t *xact, pgw_sess_t *sess,
|
||||
gx_cca_message_t *cca_message, gtp_delete_session_request_t *req)
|
||||
gx_message_t *gx_message, gtp_delete_session_request_t *req)
|
||||
{
|
||||
status_t rv;
|
||||
gtp_header_t h;
|
||||
|
@ -113,7 +113,7 @@ void pgw_gx_handle_cca_termination_request(
|
|||
|
||||
d_assert(xact, return, "Null param");
|
||||
d_assert(sess, return, "Null param");
|
||||
d_assert(cca_message, return, "Null param");
|
||||
d_assert(gx_message, return, "Null param");
|
||||
d_assert(req, return, "Null param");
|
||||
|
||||
/* backup sgw_s5c_teid in session context */
|
||||
|
@ -127,7 +127,7 @@ void pgw_gx_handle_cca_termination_request(
|
|||
h.teid = sgw_s5c_teid;
|
||||
|
||||
rv = pgw_s5c_build_delete_session_response(
|
||||
&pkbuf, h.type, sess, cca_message, req);
|
||||
&pkbuf, h.type, sess, gx_message, req);
|
||||
d_assert(rv == CORE_OK, return, "S11 build error");
|
||||
|
||||
rv = gtp_xact_update_tx(xact, &h, pkbuf);
|
||||
|
|
|
@ -11,10 +11,10 @@ extern "C" {
|
|||
|
||||
CORE_DECLARE(void) pgw_gx_handle_cca_initial_request(
|
||||
gtp_xact_t *xact, pgw_sess_t *sess,
|
||||
gx_cca_message_t *cca_message, gtp_create_session_request_t *req);
|
||||
gx_message_t *gx_message, gtp_create_session_request_t *req);
|
||||
CORE_DECLARE(void) pgw_gx_handle_cca_termination_request(
|
||||
gtp_xact_t *xact, pgw_sess_t *sess,
|
||||
gx_cca_message_t *cca_message, gtp_delete_session_request_t *req);
|
||||
gx_message_t *gx_message, gtp_delete_session_request_t *req);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ static c_int16_t pgw_pco_build(c_uint8_t *pco_buf, tlv_pco_t *tlv_pco);
|
|||
|
||||
status_t pgw_s5c_build_create_session_response(
|
||||
pkbuf_t **pkbuf, c_uint8_t type, pgw_sess_t *sess,
|
||||
gx_cca_message_t *cca_message, gtp_create_session_request_t *req)
|
||||
gx_message_t *gx_message, gtp_create_session_request_t *req)
|
||||
{
|
||||
status_t rv;
|
||||
pgw_bearer_t *bearer = NULL;
|
||||
|
@ -117,7 +117,7 @@ status_t pgw_s5c_build_create_session_response(
|
|||
|
||||
status_t pgw_s5c_build_delete_session_response(
|
||||
pkbuf_t **pkbuf, c_uint8_t type, pgw_sess_t *sess,
|
||||
gx_cca_message_t *cca_message, gtp_delete_session_request_t *req)
|
||||
gx_message_t *gx_message, gtp_delete_session_request_t *req)
|
||||
{
|
||||
status_t rv;
|
||||
|
||||
|
@ -129,7 +129,7 @@ status_t pgw_s5c_build_delete_session_response(
|
|||
c_int16_t pco_len;
|
||||
|
||||
d_assert(sess, return CORE_ERROR, "Null param");
|
||||
d_assert(cca_message, return CORE_ERROR, "Null param");
|
||||
d_assert(gx_message, return CORE_ERROR, "Null param");
|
||||
d_assert(req, return CORE_ERROR, "Null param");
|
||||
|
||||
/* prepare cause */
|
||||
|
|
|
@ -9,10 +9,10 @@ extern "C" {
|
|||
|
||||
CORE_DECLARE(status_t) pgw_s5c_build_create_session_response(
|
||||
pkbuf_t **pkbuf, c_uint8_t type, pgw_sess_t *sess,
|
||||
gx_cca_message_t *cca_message, gtp_create_session_request_t *req);
|
||||
gx_message_t *gx_message, gtp_create_session_request_t *req);
|
||||
CORE_DECLARE(status_t) pgw_s5c_build_delete_session_response(
|
||||
pkbuf_t **pkbuf, c_uint8_t type, pgw_sess_t *sess,
|
||||
gx_cca_message_t *cca_message, gtp_delete_session_request_t *req);
|
||||
gx_message_t *gx_message, gtp_delete_session_request_t *req);
|
||||
|
||||
CORE_DECLARE(status_t) pgw_s5c_build_create_bearer_request(
|
||||
pkbuf_t **pkbuf, c_uint8_t type, pgw_bearer_t *bearer);
|
||||
|
|
|
@ -169,25 +169,24 @@ void pgw_state_operational(fsm_t *s, event_t *e)
|
|||
{
|
||||
case GX_CMD_CODE_CREDIT_CONTROL:
|
||||
{
|
||||
gx_cca_message_t *cca_message = &gx_message->cca_message;
|
||||
if (gx_message->result_code != ER_DIAMETER_SUCCESS)
|
||||
{
|
||||
d_error("Not implemented(%d)", gx_message->result_code);
|
||||
break;
|
||||
}
|
||||
switch(cca_message->cc_request_type)
|
||||
switch(gx_message->cc_request_type)
|
||||
{
|
||||
case GX_CC_REQUEST_TYPE_INITIAL_REQUEST:
|
||||
{
|
||||
pgw_gx_handle_cca_initial_request(
|
||||
xact, sess, cca_message,
|
||||
xact, sess, gx_message,
|
||||
&message->create_session_request);
|
||||
break;
|
||||
}
|
||||
case GX_CC_REQUEST_TYPE_TERMINATION_REQUEST:
|
||||
{
|
||||
pgw_gx_handle_cca_termination_request(
|
||||
xact, sess, cca_message,
|
||||
xact, sess, gx_message,
|
||||
&message->delete_session_request);
|
||||
break;
|
||||
}
|
||||
|
@ -197,7 +196,7 @@ void pgw_state_operational(fsm_t *s, event_t *e)
|
|||
break;
|
||||
}
|
||||
}
|
||||
gx_cca_message_free(cca_message);
|
||||
gx_message_free(gx_message);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -158,7 +158,7 @@ void pcscf_rx_send_aar(const char *ip)
|
|||
|
||||
ret = fd_msg_avp_new(rx_media_component_number, 0, &avpch1);
|
||||
d_assert(ret == 0, return,);
|
||||
val.i32 = RX_MEDIA_TYPE_AUDIO;
|
||||
val.i32 = 1;
|
||||
ret = fd_msg_avp_setvalue (avpch1, &val);
|
||||
d_assert(ret == 0, return,);
|
||||
ret = fd_msg_avp_add (avp, MSG_BRW_LAST_CHILD, avpch1);
|
||||
|
@ -166,7 +166,7 @@ void pcscf_rx_send_aar(const char *ip)
|
|||
|
||||
ret = fd_msg_avp_new(rx_media_type, 0, &avpch1);
|
||||
d_assert(ret == 0, return,);
|
||||
val.i32 = 1;
|
||||
val.i32 = RX_MEDIA_TYPE_AUDIO;
|
||||
ret = fd_msg_avp_setvalue (avpch1, &val);
|
||||
d_assert(ret == 0, return,);
|
||||
ret = fd_msg_avp_add (avp, MSG_BRW_LAST_CHILD, avpch1);
|
||||
|
@ -188,22 +188,6 @@ void pcscf_rx_send_aar(const char *ip)
|
|||
ret = fd_msg_avp_add (avp, MSG_BRW_LAST_CHILD, avpch1);
|
||||
d_assert(ret == 0, return,);
|
||||
|
||||
ret = fd_msg_avp_new(rx_min_requested_bandwidth_dl, 0, &avpch1);
|
||||
d_assert(ret == 0, return,);
|
||||
val.i32 = 2400;
|
||||
ret = fd_msg_avp_setvalue (avpch1, &val);
|
||||
d_assert(ret == 0, return,);
|
||||
ret = fd_msg_avp_add (avp, MSG_BRW_LAST_CHILD, avpch1);
|
||||
d_assert(ret == 0, return,);
|
||||
|
||||
ret = fd_msg_avp_new(rx_min_requested_bandwidth_ul, 0, &avpch1);
|
||||
d_assert(ret == 0, return,);
|
||||
val.i32 = 2400;
|
||||
ret = fd_msg_avp_setvalue (avpch1, &val);
|
||||
d_assert(ret == 0, return,);
|
||||
ret = fd_msg_avp_add (avp, MSG_BRW_LAST_CHILD, avpch1);
|
||||
d_assert(ret == 0, return,);
|
||||
|
||||
/* Set Media-Sub-Component #1 */
|
||||
ret = fd_msg_avp_new(rx_media_sub_component, 0, &avpch1);
|
||||
|
||||
|
|
Loading…
Reference in New Issue