add Diameter Rx Interface (PCRF - P-CSCF)

This commit is contained in:
Sukchan Lee 2018-01-03 21:45:14 +09:00
parent 9544a79c2c
commit e4bec187fd
6 changed files with 221 additions and 2 deletions

View File

@ -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 = \

View File

@ -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;
}

View File

@ -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);

67
lib/fd/rx/dict_init.c Normal file
View File

@ -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;
}

73
lib/fd/rx/rx_dict.h Normal file
View File

@ -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__ */

36
lib/fd/rx/rx_message.h Normal file
View File

@ -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__ */