diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/rg_mih_usr.cpp b/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/rg_mih_usr.cpp index 9c191eb3e0efefe8a9a7e109137d81384a745126..776697c3b409db04d3044031651bf1f4f06270fb 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/rg_mih_usr.cpp +++ b/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/rg_mih_usr.cpp @@ -41,6 +41,7 @@ #define NB_OF_RESOURCES 4 // Should not exceed mih_user::_max_link_action_requests //#define SCENARIO_1 // Sequentially activate and deactivate each resource #define SCENARIO_2 // Activate all resources, then deactivate all resources +#define NUM_PARM_REPORT 10 /////////////////////////////////////////////////////////////////////////////// // The scenario coded in this MIH-USER is the following (with eRALlteDummy and NASRGDummy executables) @@ -480,6 +481,10 @@ protected: void send_MIH_Link_Actions_request(const odtone::mih::link_id& link, odtone::mih::link_ac_type type); void receive_MIH_Link_Actions_confirm(odtone::mih::message& msg); + void receive_MIH_Link_Parameters_Report(odtone::mih::message& msg, const boost::system::error_code& ec); + + void send_MIH_Link_Configure_Thresholds_request(odtone::mih::message& msg, const boost::system::error_code& ec); + void receive_MIH_Link_Configure_Thresholds_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); private: odtone::sap::user _mihf; /**< User SAP helper. */ @@ -494,6 +499,9 @@ private: odtone::mih::link_ac_type _last_link_action_type; odtone::uint _current_link_action_request, _nb_of_link_action_requests; + odtone::uint link_threshold_request, link_measures_request, link_measures_counter; + odtone::mih::link_id rcv_link_id; + static const odtone::uint _max_link_action_requests = 4; void receive_MIH_Link_Detected_indication(odtone::mih::message& msg); @@ -513,6 +521,7 @@ mih_user::mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io) _current_link_action_request(0), _nb_of_link_action_requests(NB_OF_RESOURCES) //----------------------------------------------------------------------------- { + odtone::mih::octet_string user_id = cfg.get<odtone::mih::octet_string>(odtone::sap::kConf_MIH_SAP_id); _mihuserid.assign(user_id.c_str()); @@ -539,7 +548,9 @@ mih_user::mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io) _link_id_list.clear(); _subs_evt_list.clear(); - + link_threshold_request = 0; + link_measures_request =0; + link_measures_counter =0; log_(0, "[MSC_NEW]["+getTimeStamp4Log()+"][MIH-USER="+_mihuserid.to_string()+"]\n"); // Send MEDIEVAL specific MIH_User_Register.indication message to the MIH-F @@ -599,13 +610,28 @@ void mih_user::event_handler(odtone::mih::message& msg, const boost::system::err break; case odtone::mih::indication::link_parameters_report: - log_(0, "MIH-User has received a local event \"link_parameters_report\""); + //log_(0, "MIH-User has received a local event \"link_parameters_report\""); + mih_user::receive_MIH_Link_Parameters_Report(msg, ec); + if (link_threshold_request == 0){ + mih_user::send_MIH_Link_Configure_Thresholds_request(msg, ec); + link_threshold_request =1; + } else if (link_threshold_request == 1){ + link_measures_counter ++; + // Stop measures after 5 reports + if (link_measures_counter == NUM_PARM_REPORT){ + mih_user::send_MIH_Link_Configure_Thresholds_request(msg, ec); + } + } break; case odtone::mih::indication::link_pdu_transmit_status: log_(0, "MIH-User has received a local event \"link_pdu_transmit_status\""); break; + case odtone::mih::confirm::link_configure_thresholds: + mih_user::receive_MIH_Link_Configure_Thresholds_confirm(msg, ec); + break; + default: log_(0, "MIH-User has received UNKNOWN local event"); break; @@ -637,8 +663,8 @@ void mih_user::receive_handler(odtone::mih::message& msg, const boost::system::e case odtone::mih::confirm::link_actions: mih_user::receive_MIH_Link_Actions_confirm(msg); - break; + break; default: log_(0, "MIH-User has received UNKNOWN message (", msg.mid(), ")\n"); break; @@ -692,17 +718,19 @@ void mih_user::receive_MIH_Link_Down_indication(odtone::mih::message& msg) log_(0, "MIH_Link_Down.indication - RECEIVED - Begin\n"); odtone::mih::link_tuple_id link; + boost::optional<odtone::mih::link_addr> addr; odtone::mih::link_dn_reason ldr; msg >> odtone::mih::indication() & odtone::mih::tlv_link_identifier(link) + & odtone::mih::tlv_old_access_router(addr) & odtone::mih::tlv_link_dn_reason(ldr); - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Down.indication\\n"+link_down_reason2string(ldr).c_str()+" --->]["+msg.destination().to_string()+"]\n"); +// log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Down.indication\\n"+link_down_reason2string(ldr).c_str()+" --->]["+msg.destination().to_string()+"]\n"); // Display message parameters - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str()); - log_(0, " - LINK_DN_REASON - Link down reason: ", link_down_reason2string(ldr).c_str(), "\n"); +// log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str()); +// log_(0, " - LINK_DN_REASON - Link down reason: ", link_down_reason2string(ldr).c_str(), "\n"); log_(0, "MIH_Link_Down.indication - End\n"); } @@ -732,6 +760,25 @@ void mih_user::receive_MIH_Link_Going_Down_indication(odtone::mih::message& msg) log_(0, "MIH_Link_Going_Down.indication - End\n"); } +//----------------------------------------------------------------------------- +void mih_user::receive_MIH_Link_Parameters_Report(odtone::mih::message& msg, const boost::system::error_code& ec) +//----------------------------------------------------------------------------- +{ + odtone::mih::link_tuple_id link; + odtone::mih::link_param_rpt_list lprl; + + msg >> odtone::mih::indication() + & odtone::mih::tlv_link_identifier(link) + & odtone::mih::tlv_link_param_rpt_list(lprl); + + log_(0, ""); + log_(0, "MIH_Link_Parameters_Report.indication - RECEIVED - Begin"); + log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Parameters_Report.indication --->]["+msg.destination().to_string()+"]\n"); + log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(link).c_str()); + log_(0, "MIH_Link_Parameters_Report.indication - End"); +} + + //----------------------------------------------------------------------------- void mih_user::send_MIH_User_Register_indication(const odtone::mih::config& cfg) //----------------------------------------------------------------------------- @@ -800,6 +847,12 @@ void mih_user::receive_MIH_Capability_Discover_confirm(odtone::mih::message& msg } if (ntal) { log_(0, " - LIST(NET_TYPE_ADDR) - Network Types and Link Address: ", net_type_addr_list2string(ntal).c_str()); + //Store link address + for (odtone::mih::net_type_addr_list::iterator i = ntal->begin(); i != ntal->end(); i++) + { + rcv_link_id.addr = i->addr; + rcv_link_id.type = boost::get<odtone::mih::link_type>(i->nettype.link); + } } log_(0, ""); @@ -1127,6 +1180,129 @@ void mih_user::receive_MIH_Link_Actions_confirm(odtone::mih::message& msg) log_(0, "MIH_Link_Actions.confirm - End\n"); } +//----------------------------------------------------------------------------- +void mih_user::send_MIH_Link_Configure_Thresholds_request(odtone::mih::message& msg, const boost::system::error_code& ec) +//----------------------------------------------------------------------------- +{ + odtone::mih::message m; + + odtone::mih::threshold th; + std::vector<odtone::mih::threshold> thl; + + odtone::mih::link_tuple_id lti; + odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; + + log_(0,""); + log_(0, "send_MIH_Link_Configure_Thresholds_request - Begin"); + + //link_tuple_id + lti.type = rcv_link_id.type; + lti.addr = rcv_link_id.addr; + + //local_l2_3gpp_addr = boost::get<odtone::mih::l2_3gpp_addr>(lti.addr); + + //List of the link threshold parameters + odtone::mih::link_cfg_param_list lcpl; + odtone::mih::link_cfg_param lcp; + odtone::mih::link_param_lte lp; + + //link_param_gen_data_rate = 0, /**< Data rate. */ + //link_param_gen_signal_strength = 1, /**< Signal strength. */ + //link_param_gen_sinr = 2, /**< SINR. */ + //link_param_gen_throughput = 3, /**< Throughput. */ + //link_param_gen_packet_error_rate = 4, /**< Packet error rate. */ + lp = odtone::mih::link_param_lte_bandwidth; + + lcp.type = lp; + + if ( link_measures_request ==0){ + // Set Timer Interval (in ms) + lcp.timer_interval = 3000; + //th_action_normal = 0, /**< Set normal threshold. */ + //th_action_one_shot = 1, /**< Set one-shot threshold. */ + //th_action_cancel = 2 /**< Cancel threshold. */ + lcp.action = odtone::mih::th_action_normal; + link_measures_request = 1; + } else if ( link_measures_request==1){ + // Set Timer Interval (in ms) + lcp.timer_interval = 0; + lcp.action = odtone::mih::th_action_cancel; + link_measures_request = 0; + } + + //above_threshold = 0, /**< Above threshold. */ + //below_threshold = 1, /**< Below threshold. */ + th.threshold_val = 0; + th.threshold_x_dir = odtone::mih::threshold::above_threshold; + + thl.push_back(th); + lcp.threshold_list = thl; + lcpl.push_back(lcp); + + m << odtone::mih::request(odtone::mih::request::link_configure_thresholds) + & odtone::mih::tlv_link_identifier(lti) + & odtone::mih::tlv_link_cfg_param_list(lcpl); + + m.destination(msg.source()); + + log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihuserid.to_string() +"][--- MIH_Link_Configure_Thresholds.request\\nlink="+ + // link_tupple_id2string(lti).c_str() + + link_id2string(lti).c_str()+ + " --->]["+_mihfid.to_string()+"]\n"); + _mihf.async_send(m, boost::bind(&mih_user::event_handler, this, _1, _2)); + + + log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(lti).c_str()); + + log_(0, "\t- LINK CFG PARAM LIST - Length: ", lcpl.size()); + + //if(lp == odtone::mih::link_param_gen_data_rate) {log_(0, "\t Generic link parameter DATA RATE ");} + //if(lp == odtone::mih::link_param_gen_signal_strength) {log_(0, "\t Generic link parameter SIGNAL STRENGTH");} + //if(lp == odtone::mih::link_param_gen_sinr) {log_(0, "\t Generic link parameter SINR");} + //if(lp == odtone::mih::link_param_gen_throughput) {log_(0, "\t Generic link parameter THROUGHPUT");} + if(lp == odtone::mih::link_param_lte_bandwidth) {log_(0, "\t LTE link parameter BANDWIDTH");} + + log_(0, "\t- TIMER INTERVAL - Value: ", lcp.timer_interval); + + if(lcp.action == odtone::mih::th_action_normal) {log_(0, "\t Normal Threshold");} + if(lcp.action == odtone::mih::th_action_one_shot) {log_(0, "\t One Shot Threshold");} + if(lcp.action == odtone::mih::th_action_cancel) {log_(0, "\t Threshold to be canceled");} + + log_(0, "\t Threshold value: ", th.threshold_val); + + if(th.threshold_x_dir == odtone::mih::threshold::below_threshold) {log_(0, "\t Threshold direction BELOW");} + if(th.threshold_x_dir == odtone::mih::threshold::above_threshold) {log_(0, "\t Threshold direction ABOVE");} + + log_(0, "send_MIH_Link_Configure_Thresholds_request - End"); +} + +//----------------------------------------------------------------------------- +void mih_user::receive_MIH_Link_Configure_Thresholds_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) +//----------------------------------------------------------------------------- +{ + log_(0, ""); + log_(0, "receive_MIH_Link_Configure_Thresholds_confirm - Begin"); + + // T odtone::uint iter; + // T odtone::mih::status st; + + //boost::optional<odtone::mih::link_cfg_status_list> lcsl; + // Todtone::mih::link_cfg_status_list lcsl; + // Todtone::mih::link_cfg_status lcp; + //odtone::mih::link_param_gen lp; + + // T odtone::mih::link_tuple_id lti; + + //msg >> odtone::mih::confirm() + // & odtone::mih::tlv_status(st) + // & odtone::mih::tlv_link_identifier(lti) + // & odtone::mih::tlv_link_cfg_status_list(lcsl); + + + log_(0, "receive_MIH_Link_Configure_Thresholds_confirm - End"); + log_(0,""); +} + //----------------------------------------------------------------------------- int main(int argc, char** argv) //----------------------------------------------------------------------------- diff --git a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/mih_usr.cpp b/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/mih_usr.cpp index f1c09fd9845e4747a4ac8520981932e589d86aeb..aa62e08a65c5b18040f5d2f6bd976d425adfd368 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/mih_usr.cpp +++ b/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/mih_usr.cpp @@ -34,6 +34,9 @@ #define THRESHOLD_HIGH_VAL 90 #define THRESHOLD_LOW_VAL 15 +//#define TEST_DEACTIVATION +#define NUM_ACT_DEACT 3 + /////////////////////////////////////////////////////////////////////////////// // The scenario coded in this MIH-USER is the following (with mRALlteDummy and NASUEDummy executables) @@ -452,6 +455,7 @@ private: odtone::mih::id _mihfid; /**< MIHF destination ID. */ odtone::mih::id _mihuserid; /**< MIH_USER ID. */ odtone::uint link_get_parameters_request, link_action_request, link_threshold_request; + odtone::uint link_last_action_sent, link_activate_counter; odtone::mih::net_type_addr rcv_net_type_addr; odtone::mih::link_id rcv_link_id; }; @@ -474,6 +478,8 @@ mih_user::mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io) link_get_parameters_request = 0; link_action_request = 0; link_threshold_request = 0; + link_last_action_sent = 0; + link_activate_counter = 0; m << odtone::mih::indication(odtone::mih::indication::user_register) & odtone::mih::tlv_command_list(supp_cmd); @@ -652,7 +658,14 @@ void mih_user::event_handler(odtone::mih::message& msg, const boost::system::err // monitor signal strength - increase signal strength report now //system ("sendip -d 0x01 -p ipv4 -is 127.0.0.1 -p udp -ud 22222 -us 65535 127.0.0.1"); } - + #ifdef TEST_DEACTIVATION + if ((link_activate_counter<NUM_ACT_DEACT)&&(link_activate_counter > 0)) { + sleep(20); + mih_user::send_MIH_Link_Actions_request(msg, ec); + } + if (link_activate_counter==NUM_ACT_DEACT) + log_(0, "TEST_DEACTIVATION completed \n"); + #endif break; case odtone::mih::confirm::event_unsubscribe: @@ -865,6 +878,13 @@ void mih_user::receive_MIH_Link_Actions_confirm(odtone::mih::message& msg, const & odtone::mih::tlv_status(st) & odtone::mih::tlv_link_action_rsp_list(larl); + #ifdef TEST_DEACTIVATION + if (mih_user::link_last_action_sent==1){ + mih_user::link_activate_counter++; + } + #endif + + log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Actions.confirm\\n"+status2string(st.get())+" --->]["+msg.destination().to_string()+"]\n"); log_(0, "\t- STATUS: ", status2string(st.get()), " " , st.get()); @@ -933,13 +953,33 @@ void mih_user::send_MIH_Link_Actions_request(odtone::mih::message& msg, const bo if(mih_user::link_action_request == 0){ link_act_req.action.type = odtone::mih::link_ac_type_power_up; link_act_req.action.attr.set(odtone::mih::link_ac_attr_scan); + log_(0, "Initial Scan, link_action_request = 0"); //link_act_req.action.param...; - } else if(mih_user::link_action_request == 1) { + } else if((mih_user::link_activate_counter == 0)&&(mih_user::link_action_request == 1)) { link_act_req.action.type = odtone::mih::link_ac_type_power_up; + mih_user::link_last_action_sent=1; + //mih_user::link_activate_counter++; + log_(0, "Initial Activation, link_action_request = 1"); + #ifndef TEST_DEACTIVATION } else if(mih_user::link_action_request == 2) { link_act_req.action.type = odtone::mih::link_ac_type_power_down; + log_(0, "Link Going Down Deactivation, link_action_request = 2"); + #endif } - + #ifdef TEST_DEACTIVATION + else if ((mih_user::link_activate_counter>0)&&(mih_user::link_action_request >= 1)){ + if (mih_user::link_last_action_sent==1){ + link_act_req.action.type = odtone::mih::link_ac_type_power_down; + mih_user::link_last_action_sent=0; + log_(0, "New Deactivation, link_action_request >1"); + } else { + link_act_req.action.type = odtone::mih::link_ac_type_power_up; + mih_user::link_last_action_sent=1; + //mih_user::link_activate_counter++; + log_(0, "New Activation, link_action_request >1"); + } + } + #endif link_act_req.ex_time = 0; lal.push_back(link_act_req);