add Diameter Rx Interface (PCRF - P-CSCF)
This commit is contained in:
parent
9544a79c2c
commit
e4bec187fd
|
@ -6,11 +6,14 @@ libfd_la_SOURCES = \
|
|||
fd_message.h fd_logger.h fd_lib.h \
|
||||
libapp_sip.c fd_message.c fd_logger.c fd_init.c \
|
||||
\
|
||||
s6a/s6a_dict.h s6a/s6a_message.h \
|
||||
s6a/dict_init.c \
|
||||
\
|
||||
gx/gx_dict.h gx/gx_message.h \
|
||||
gx/dict_init.c gx/gx_message.c \
|
||||
\
|
||||
s6a/s6a_dict.h s6a/s6a_message.h \
|
||||
s6a/dict_init.c \
|
||||
rx/rx_dict.h rx/rx_message.h \
|
||||
rx/dict_init.c \
|
||||
$(NULL)
|
||||
|
||||
libfd_la_DEPENDENCIES = \
|
||||
|
|
|
@ -9,6 +9,8 @@ struct dict_object *gx_application = NULL;
|
|||
|
||||
struct dict_object *gx_cmd_ccr = NULL;
|
||||
struct dict_object *gx_cmd_cca = NULL;
|
||||
struct dict_object *gx_cmd_rar = NULL;
|
||||
struct dict_object *gx_cmd_raa = NULL;
|
||||
|
||||
struct dict_object *gx_cc_request_type = NULL;
|
||||
struct dict_object *gx_cc_request_number = NULL;
|
||||
|
@ -51,6 +53,17 @@ struct dict_object *gx_flow_description = NULL;
|
|||
struct dict_object *gx_flow_status = NULL;
|
||||
struct dict_object *gx_precedence = NULL;
|
||||
struct dict_object *gx_flows = NULL;
|
||||
struct dict_object *gx_specific_action = NULL;
|
||||
struct dict_object *gx_abort_cause = NULL;
|
||||
struct dict_object *gx_media_component_description = NULL;
|
||||
struct dict_object *gx_media_component_number = NULL;
|
||||
struct dict_object *gx_media_type = NULL;
|
||||
struct dict_object *gx_rr_bandwidth = NULL;
|
||||
struct dict_object *gx_rs_bandwidth = NULL;
|
||||
struct dict_object *gx_codec_data = NULL;
|
||||
struct dict_object *gx_media_sub_component = NULL;
|
||||
struct dict_object *gx_flow_number = NULL;
|
||||
struct dict_object *gx_flow_usage = NULL;
|
||||
|
||||
int gx_dict_init(void)
|
||||
{
|
||||
|
@ -60,6 +73,8 @@ int gx_dict_init(void)
|
|||
|
||||
CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Credit-Control-Request", &gx_cmd_ccr);
|
||||
CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Credit-Control-Answer", &gx_cmd_cca);
|
||||
CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Re-Auth-Request", &gx_cmd_rar);
|
||||
CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Re-Auth-Answer", &gx_cmd_raa);
|
||||
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "CC-Request-Type", &gx_cc_request_type);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "CC-Request-Number", &gx_cc_request_number);
|
||||
|
@ -105,5 +120,17 @@ int gx_dict_init(void)
|
|||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Precedence", &gx_precedence);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Flows", &gx_flows);
|
||||
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Specific-Action", &gx_specific_action);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Abort-Cause", &gx_abort_cause);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Media-Component-Description", &gx_media_component_description);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Media-Component-Number", &gx_media_component_number);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Media-Type", &gx_media_type);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "RR-Bandwidth" , &gx_rr_bandwidth);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "RS-Bandwidth" , &gx_rs_bandwidth);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Codec-Data", &gx_codec_data);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Media-Sub-Component", &gx_media_sub_component);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Flow-Number", &gx_flow_number);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Flow-Usage", &gx_flow_usage);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,8 @@ extern struct dict_object *gx_application;
|
|||
|
||||
extern struct dict_object *gx_cmd_ccr;
|
||||
extern struct dict_object *gx_cmd_cca;
|
||||
extern struct dict_object *gx_cmd_rar;
|
||||
extern struct dict_object *gx_cmd_raa;
|
||||
|
||||
extern struct dict_object *gx_cc_request_type;
|
||||
extern struct dict_object *gx_cc_request_number;
|
||||
|
@ -91,6 +93,17 @@ extern struct dict_object *gx_flow_description;
|
|||
extern struct dict_object *gx_flow_status;
|
||||
extern struct dict_object *gx_precedence;
|
||||
extern struct dict_object *gx_flows;
|
||||
extern struct dict_object *gx_specific_action;
|
||||
extern struct dict_object *gx_abort_cause;
|
||||
extern struct dict_object *gx_media_component_description;
|
||||
extern struct dict_object *gx_media_component_number;
|
||||
extern struct dict_object *gx_media_type;
|
||||
extern struct dict_object *gx_rr_bandwidth;
|
||||
extern struct dict_object *gx_rs_bandwidth;
|
||||
extern struct dict_object *gx_codec_data;
|
||||
extern struct dict_object *gx_media_sub_component;
|
||||
extern struct dict_object *gx_flow_number;
|
||||
extern struct dict_object *gx_flow_usage;
|
||||
|
||||
int gx_dict_init(void);
|
||||
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
#define TRACE_MODULE _rx_dict
|
||||
|
||||
#include "rx_dict.h"
|
||||
|
||||
#define CHECK_dict_search( _type, _criteria, _what, _result ) \
|
||||
CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) );
|
||||
|
||||
struct dict_object *rx_application = NULL;
|
||||
|
||||
struct dict_object *rx_cmd_aar = NULL;
|
||||
struct dict_object *rx_cmd_aaa = NULL;
|
||||
|
||||
struct dict_object *rx_media_component_description = NULL;
|
||||
struct dict_object *rx_media_component_number = NULL;
|
||||
struct dict_object *rx_media_type = NULL;
|
||||
struct dict_object *rx_max_requested_bandwidth_ul = NULL;
|
||||
struct dict_object *rx_max_requested_bandwidth_dl = NULL;
|
||||
struct dict_object *rx_rr_bandwidth = NULL;
|
||||
struct dict_object *rx_rs_bandwidth = NULL;
|
||||
struct dict_object *rx_flow_status = NULL;
|
||||
struct dict_object *rx_codec_data = NULL;
|
||||
struct dict_object *rx_media_sub_component = NULL;
|
||||
struct dict_object *rx_flow_number = NULL;
|
||||
struct dict_object *rx_flow_usage = NULL;
|
||||
struct dict_object *rx_flow_description = NULL;
|
||||
struct dict_object *rx_subscription_id = NULL;
|
||||
struct dict_object *rx_subscription_id_type = NULL;
|
||||
struct dict_object *rx_subscription_id_data = NULL;
|
||||
struct dict_object *rx_specific_action = NULL;
|
||||
struct dict_object *rx_framed_ip_address = NULL;
|
||||
struct dict_object *rx_framed_ipv6_prefix = NULL;
|
||||
struct dict_object *rx_ip_can_type = NULL;
|
||||
struct dict_object *rx_rat_type = NULL;
|
||||
|
||||
int rx_dict_init(void)
|
||||
{
|
||||
application_id_t id = RX_APPLICATION_ID;
|
||||
|
||||
CHECK_dict_search(DICT_APPLICATION, APPLICATION_BY_ID, (void *)&id, &rx_application);
|
||||
|
||||
CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "AA-Request", &rx_cmd_aar);
|
||||
CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "AA-Answer", &rx_cmd_aaa);
|
||||
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Media-Component-Description", &rx_media_component_description);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Media-Component-Number", &rx_media_component_number);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Media-Type", &rx_media_type);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Max-Requested-Bandwidth-UL" , &rx_max_requested_bandwidth_ul);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Max-Requested-Bandwidth-DL" , &rx_max_requested_bandwidth_dl);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "RR-Bandwidth" , &rx_rr_bandwidth);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "RS-Bandwidth" , &rx_rs_bandwidth);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Flow-Status", &rx_flow_status);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Codec-Data", &rx_codec_data);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Media-Sub-Component", &rx_media_sub_component);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Flow-Number", &rx_flow_number);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Flow-Usage", &rx_flow_usage);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Flow-Description", &rx_flow_description);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscription-Id", &rx_subscription_id);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscription-Id-Type", &rx_subscription_id_type);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscription-Id-Data", &rx_subscription_id_data);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Specific-Action", &rx_specific_action);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Framed-IP-Address", &rx_framed_ip_address);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Framed-IPv6-Prefix", &rx_framed_ipv6_prefix);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "IP-CAN-Type", &rx_ip_can_type);
|
||||
CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "RAT-Type", &rx_rat_type);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
#ifndef __RX_DICT_H__
|
||||
#define __RX_DICT_H__
|
||||
|
||||
#include "freeDiameter/freeDiameter-host.h"
|
||||
#include "freeDiameter/libfdcore.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define RX_APPLICATION_ID 16777236
|
||||
|
||||
extern struct dict_object *rx_application;
|
||||
|
||||
extern struct dict_object *rx_cmd_aar;
|
||||
extern struct dict_object *rx_cmd_aaa;
|
||||
|
||||
extern struct dict_object *rx_media_component_description;
|
||||
extern struct dict_object *rx_media_component_number;
|
||||
extern struct dict_object *rx_media_type;
|
||||
extern struct dict_object *rx_max_requested_bandwidth_ul;
|
||||
extern struct dict_object *rx_max_requested_bandwidth_dl;
|
||||
extern struct dict_object *rx_rr_bandwidth;
|
||||
extern struct dict_object *rx_rs_bandwidth;
|
||||
#define RX_FLOW_STATUS_ENABLED_UPLINK 0
|
||||
#define RX_FLOW_STATUS_ENABLED_DOWNLINK 1
|
||||
#define RX_FLOW_STATUS_ENABLED 2
|
||||
#define RX_FLOW_STATUS_DISABLED 3
|
||||
extern struct dict_object *rx_flow_status;
|
||||
extern struct dict_object *rx_codec_data;
|
||||
extern struct dict_object *rx_media_sub_component;
|
||||
extern struct dict_object *rx_flow_number;
|
||||
extern struct dict_object *rx_flow_usage;
|
||||
extern struct dict_object *rx_flow_description;
|
||||
extern struct dict_object *rx_subscription_id;
|
||||
#define RX_SUBSCRIPTION_ID_TYPE_END_USER_E164 0
|
||||
#define RX_SUBSCRIPTION_ID_TYPE_END_USER_IMSI 1
|
||||
#define RX_SUBSCRIPTION_ID_TYPE_END_USER_SIP_URI 2
|
||||
#define RX_SUBSCRIPTION_ID_TYPE_END_USER_NAI 3
|
||||
extern struct dict_object *rx_subscription_id_type;
|
||||
extern struct dict_object *rx_subscription_id_data;
|
||||
extern struct dict_object *rx_specific_action;
|
||||
extern struct dict_object *rx_framed_ip_address;
|
||||
extern struct dict_object *rx_framed_ipv6_prefix;
|
||||
#define RX_IP_CAN_TYPE_3GPP_GPRS 0
|
||||
#define RX_IP_CAN_TYPE_DOCSIS 1
|
||||
#define RX_IP_CAN_TYPE_xDSL 2
|
||||
#define RX_IP_CAN_TYPE_WiMAX 3
|
||||
#define RX_IP_CAN_TYPE_3GPP2 4
|
||||
#define RX_IP_CAN_TYPE_3GPP_EPS 5
|
||||
#define RX_IP_CAN_TYPE_Non_3GPP_EPS 6
|
||||
extern struct dict_object *rx_ip_can_type;
|
||||
#define RX_RAT_TYPE_WLAN 0
|
||||
#define RX_RAT_TYPE_VIRTUAL 1
|
||||
#define RX_RAT_TYPE_UTRAN 1000
|
||||
#define RX_RAT_TYPE_GERAN 1001
|
||||
#define RX_RAT_TYPE_GAN 1002
|
||||
#define RX_RAT_TYPE_HSPA_EVOLUTION 1003
|
||||
#define RX_RAT_TYPE_EUTRAN 1004
|
||||
#define RX_RAT_TYPE_EUTRAN_NB_IoT 1005
|
||||
#define RX_RAT_TYPE_CDMA2000_1X 2000
|
||||
#define RX_RAT_TYPE_HRPD 2001
|
||||
#define RX_RAT_TYPE_UMB 2002
|
||||
#define RX_RAT_TYPE_EHRPD 2003
|
||||
extern struct dict_object *rx_rat_type;
|
||||
|
||||
int rx_dict_init(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __RX_DICT_H__ */
|
|
@ -0,0 +1,36 @@
|
|||
#ifndef __RX_MESSAGE_H__
|
||||
#define __RX_MESSAGE_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include "3gpp_types.h"
|
||||
|
||||
typedef struct _rx_message_t {
|
||||
#define RX_CMD_CODE_AA 265
|
||||
c_uint16_t cmd_code;
|
||||
|
||||
/* Result-Code AVP */
|
||||
#define RX_DIAMETER_ERROR_USER_UNKNOWN 5030
|
||||
|
||||
/* Experimental-Result-Codes */
|
||||
#define RX_DIAMETER_ERROR_LATE_OVERLAPPING_REQUEST 5453
|
||||
#define RX_DIAMETER_ERROR_TIMED_OUT_REQUEST 5454
|
||||
#define RX_DIAMETER_ERROR_INITIAL_PARAMETERS 5140
|
||||
#define RX_DIAMETER_ERROR_TRIGGER_EVENT 5141
|
||||
#define RX_DIAMETER_PCC_RULE_EVENT 5142
|
||||
#define RX_DIAMETER_ERROR_BEARER_NOT_AUTHORIZED 5143
|
||||
#define RX_DIAMETER_ERROR_TRAFFIC_MAPPING_INFO_REJECTED 5144
|
||||
#define RX_DIAMETER_ERROR_CONFLICTING_REQUEST 5147
|
||||
#define RX_DIAMETER_ADC_RULE_EVENT 5148
|
||||
#define RX_DIAMETER_ERROR_NBIFOM_NOT_AUTHORIZED 5149
|
||||
c_uint32_t result_code;
|
||||
|
||||
} rx_message_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __RX_MESSAGE_H__ */
|
Loading…
Reference in New Issue