diff --git a/lib/fd/gx/dict_init.c b/lib/fd/gx/dict_init.c index e7994f3c0..5fd84d0e0 100644 --- a/lib/fd/gx/dict_init.c +++ b/lib/fd/gx/dict_init.c @@ -29,6 +29,8 @@ struct dict_object *gx_qos_information = NULL; struct dict_object *gx_qos_class_identifier = NULL; struct dict_object *gx_max_requested_bandwidth_ul = NULL; struct dict_object *gx_max_requested_bandwidth_dl = NULL; +struct dict_object *gx_min_requested_bandwidth_ul = NULL; +struct dict_object *gx_min_requested_bandwidth_dl = NULL; struct dict_object *gx_guaranteed_bitrate_ul = NULL; struct dict_object *gx_guaranteed_bitrate_dl = NULL; struct dict_object *gx_allocation_retention_priority = NULL; @@ -94,6 +96,8 @@ int gx_dict_init(void) CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "QoS-Class-Identifier" , &gx_qos_class_identifier); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Max-Requested-Bandwidth-UL" , &gx_max_requested_bandwidth_ul); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Max-Requested-Bandwidth-DL" , &gx_max_requested_bandwidth_dl); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Min-Requested-Bandwidth-UL" , &gx_min_requested_bandwidth_ul); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Min-Requested-Bandwidth-DL" , &gx_min_requested_bandwidth_dl); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Guaranteed-Bitrate-UL" , &gx_guaranteed_bitrate_ul); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Guaranteed-Bitrate-DL" , &gx_guaranteed_bitrate_dl); CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Allocation-Retention-Priority" , &gx_allocation_retention_priority); diff --git a/lib/fd/rx/dict_init.c b/lib/fd/rx/dict_init.c index 48baab6e0..c33d89390 100644 --- a/lib/fd/rx/dict_init.c +++ b/lib/fd/rx/dict_init.c @@ -15,6 +15,8 @@ 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_min_requested_bandwidth_ul = NULL; +struct dict_object *rx_min_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; @@ -46,6 +48,8 @@ int rx_dict_init(void) 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, "Min-Requested-Bandwidth-UL" , &rx_min_requested_bandwidth_ul); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Min-Requested-Bandwidth-DL" , &rx_min_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); diff --git a/lib/fd/rx/rx_dict.h b/lib/fd/rx/rx_dict.h index d70f26306..781d9e467 100644 --- a/lib/fd/rx/rx_dict.h +++ b/lib/fd/rx/rx_dict.h @@ -17,9 +17,19 @@ extern struct dict_object *rx_cmd_aaa; extern struct dict_object *rx_media_component_description; extern struct dict_object *rx_media_component_number; +#define RX_MEDIA_TYPE_AUDIO 0 +#define RX_MEDIA_TYPE_VIDEO 1 +#define RX_MEDIA_TYPE_DATA 2 +#define RX_MEDIA_TYPE_APPLICATION 3 +#define RX_MEDIA_TYPE_CONTROL 4 +#define RX_MEDIA_TYPE_TEXT 5 +#define RX_MEDIA_TYPE_MESSAGE 6 +#define RX_MEDIA_TYPE_OTHER 0xFFFFFFFF 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_min_requested_bandwidth_ul; +extern struct dict_object *rx_min_requested_bandwidth_dl; extern struct dict_object *rx_rr_bandwidth; extern struct dict_object *rx_rs_bandwidth; #define RX_FLOW_STATUS_ENABLED_UPLINK 0 @@ -30,6 +40,9 @@ 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; +#define RX_FLOW_USAGE_NO_INFORMATION 0 +#define RX_FLOW_USAGE_RTCP 1 +#define RX_FLOW_USAGE_AF_SIGNALLING 2 extern struct dict_object *rx_flow_usage; extern struct dict_object *rx_flow_description; extern struct dict_object *rx_subscription_id; diff --git a/test/rx/pcscf_fd_path.c b/test/rx/pcscf_fd_path.c index 7b6f3d9f5..0b28d2f9c 100644 --- a/test/rx/pcscf_fd_path.c +++ b/test/rx/pcscf_fd_path.c @@ -39,11 +39,7 @@ void pcscf_rx_send_aar(const char *ip) struct msg *req = NULL; struct avp *avp; -#if 0 struct avp *avpch1, *avpch2; -#else - struct avp *avpch1; -#endif union avp_value val; struct sess_state *sess_data = NULL, *svg; struct session *session = NULL; @@ -156,6 +152,141 @@ void pcscf_rx_send_aar(const char *ip) d_assert(ret == 0, return,); } + /* Set Media-Component-Description */ + ret = fd_msg_avp_new(rx_media_component_description, 0, &avp); + d_assert(ret == 0, return,); + + ret = fd_msg_avp_new(rx_media_component_number, 0, &avpch1); + d_assert(ret == 0, return,); + 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); + d_assert(ret == 0, return,); + + ret = fd_msg_avp_new(rx_media_type, 0, &avpch1); + d_assert(ret == 0, return,); + 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); + d_assert(ret == 0, return,); + + ret = fd_msg_avp_new(rx_max_requested_bandwidth_dl, 0, &avpch1); + d_assert(ret == 0, return,); + val.i32 = 96000; + 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_max_requested_bandwidth_ul, 0, &avpch1); + d_assert(ret == 0, return,); + val.i32 = 96000; + 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_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); + + ret = fd_msg_avp_new(rx_flow_number, 0, &avpch2); + d_assert(ret == 0, return,); + val.i32 = 1; + ret = fd_msg_avp_setvalue (avpch2, &val); + d_assert(ret == 0, return,); + ret = fd_msg_avp_add (avpch1, MSG_BRW_LAST_CHILD, avpch2); + d_assert(ret == 0, return,); + + ret = fd_msg_avp_new(rx_flow_description, 0, &avpch2); + d_assert(ret == 0, return,); + #define TEST_RX_FLOW_DESC1 \ + "permit out 17 from 172.20.166.84 to 172.18.128.20 20001" + val.os.data = (c_uint8_t *)TEST_RX_FLOW_DESC1; + val.os.len = strlen(TEST_RX_FLOW_DESC1); + ret = fd_msg_avp_setvalue (avpch2, &val); + d_assert(ret == 0, return,); + ret = fd_msg_avp_add (avpch1, MSG_BRW_LAST_CHILD, avpch2); + d_assert(ret == 0, return,); + + ret = fd_msg_avp_new(rx_flow_description, 0, &avpch2); + d_assert(ret == 0, return,); + #define TEST_RX_FLOW_DESC2 \ + "permit in 17 from 172.18.128.20 to 172.20.166.84 20360" + val.os.data = (c_uint8_t *)TEST_RX_FLOW_DESC2; + val.os.len = strlen(TEST_RX_FLOW_DESC2); + ret = fd_msg_avp_setvalue (avpch2, &val); + d_assert(ret == 0, return,); + ret = fd_msg_avp_add (avpch1, MSG_BRW_LAST_CHILD, avpch2); + 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 #2 */ + ret = fd_msg_avp_new(rx_media_sub_component, 0, &avpch1); + + ret = fd_msg_avp_new(rx_flow_number, 0, &avpch2); + d_assert(ret == 0, return,); + val.i32 = 2; + ret = fd_msg_avp_setvalue (avpch2, &val); + d_assert(ret == 0, return,); + ret = fd_msg_avp_add (avpch1, MSG_BRW_LAST_CHILD, avpch2); + d_assert(ret == 0, return,); + + ret = fd_msg_avp_new(rx_flow_usage, 0, &avpch2); + d_assert(ret == 0, return,); + val.i32 = RX_FLOW_USAGE_RTCP; + ret = fd_msg_avp_setvalue (avpch2, &val); + d_assert(ret == 0, return,); + ret = fd_msg_avp_add (avpch1, MSG_BRW_LAST_CHILD, avpch2); + d_assert(ret == 0, return,); + + ret = fd_msg_avp_new(rx_flow_description, 0, &avpch2); + d_assert(ret == 0, return,); + #define TEST_RX_FLOW_DESC3 \ + "permit out 17 from 172.20.166.84 to 172.18.128.20 20002" + val.os.data = (c_uint8_t *)TEST_RX_FLOW_DESC3; + val.os.len = strlen(TEST_RX_FLOW_DESC3); + ret = fd_msg_avp_setvalue (avpch2, &val); + d_assert(ret == 0, return,); + ret = fd_msg_avp_add (avpch1, MSG_BRW_LAST_CHILD, avpch2); + d_assert(ret == 0, return,); + + ret = fd_msg_avp_new(rx_flow_description, 0, &avpch2); + d_assert(ret == 0, return,); + #define TEST_RX_FLOW_DESC4 \ + "permit in 17 from 172.18.128.20 to 172.20.166.84 20361" + val.os.data = (c_uint8_t *)TEST_RX_FLOW_DESC4; + val.os.len = strlen(TEST_RX_FLOW_DESC4); + ret = fd_msg_avp_setvalue (avpch2, &val); + d_assert(ret == 0, return,); + ret = fd_msg_avp_add (avpch1, MSG_BRW_LAST_CHILD, avpch2); + 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_add(req, MSG_BRW_LAST_CHILD, avp); + d_assert(ret == 0, return,); + ret = clock_gettime(CLOCK_REALTIME, &sess_data->ts); d_assert(ret == 0, return,);