summaryrefslogtreecommitdiffstats
path: root/src/bp_sim.cpp
diff options
context:
space:
mode:
authorHanoh Haim <hhaim@cisco.com>2016-12-26 07:50:05 +0200
committerHanoh Haim <hhaim@cisco.com>2016-12-26 07:50:17 +0200
commit5b7974b82082637c835b181b105fc05193d127bf (patch)
treeb89128bb7d8fc32f1aee3587b69df1e0781a454b /src/bp_sim.cpp
parent82b3ac03ffb239be5ac1fceb01d3f359576edf03 (diff)
add --active-flows option to scale the active flows
Signed-off-by: Hanoh Haim <hhaim@cisco.com>
Diffstat (limited to 'src/bp_sim.cpp')
-rwxr-xr-xsrc/bp_sim.cpp71
1 files changed, 65 insertions, 6 deletions
diff --git a/src/bp_sim.cpp b/src/bp_sim.cpp
index baf891ad..938d8f65 100755
--- a/src/bp_sim.cpp
+++ b/src/bp_sim.cpp
@@ -2502,6 +2502,33 @@ double CCapFileFlowInfo::get_cap_file_length_sec(){
}
+
+void CCapFileFlowInfo::update_ipg_by_factor(double factor,
+ CFlowYamlInfo * flow_info){
+ int i;
+
+ CCalcIpgDiff dtick_util(BUCKET_TIME_SEC);
+
+ for (i=0; i<(int)Size(); i++) {
+ CFlowPktInfo * lp=GetPacket((uint32_t)i);
+
+ /* update dtick from ipg */
+ double dtime=0;
+
+ if ( likely ( lp->m_pkt_indication.m_desc.IsPcapTiming()) ){
+ dtime = lp->m_pkt_indication.m_cap_ipg ;
+ }else{
+ if ( lp->m_pkt_indication.m_desc.IsRtt() ){
+ dtime = flow_info->m_rtt_sec ;
+ }else{
+ dtime = flow_info->m_ipg_sec;
+ }
+ }
+ lp->m_pkt_indication.m_cap_ipg = dtime*factor;
+ lp->m_pkt_indication.m_ticks = dtick_util.do_calc(dtime*factor);
+ }
+}
+
void CCapFileFlowInfo::update_min_ipg(dsec_t min_ipg,
dsec_t override_ipg){
@@ -3252,6 +3279,12 @@ void CFlowGeneratorRec::Dump(FILE *fd){
}
+void CFlowGeneratorRec::updateIpg(double factor){
+ m_flow_info.update_ipg_by_factor(factor,m_info);
+}
+
+
+
void CFlowGeneratorRec::getFlowStats(CFlowStats * stats){
double t_pkt=(double)m_flow_info.Size();
@@ -3260,13 +3293,9 @@ void CFlowGeneratorRec::getFlowStats(CFlowStats * stats){
double mb_sec = (cps*t_bytes*8.0)/(_1Mb_DOUBLE);
double mB_sec = (cps*t_bytes)/(_1Mb_DOUBLE);
- double c_flow_windows_sec=0.0;
+ double c_flow_windows_sec;
- if (m_info->m_cap_mode) {
- c_flow_windows_sec = m_flow_info.get_cap_file_length_sec();
- }else{
- c_flow_windows_sec = t_pkt * m_info->m_ipg_sec;
- }
+ c_flow_windows_sec = m_flow_info.get_cap_file_length_sec();
m_flow_info.get_total_memory(stats->m_memory);
@@ -4888,6 +4917,36 @@ void CFlowGenList::dump_client_config(FILE *fd) {
m_client_config_info.dump(fd);
}
+int CFlowGenList::update_active_flows(uint32_t active_flows){
+ double d_active_flow=(double)active_flows;
+ CFlowStats stats;
+ CFlowStats sum;
+ int i;
+
+ for (i=0; i<(int)m_cap_gen.size(); i++) {
+ CFlowGeneratorRec * lp=m_cap_gen[i];
+ lp->getFlowStats(&stats);
+ sum.Add(stats);
+ }
+
+ if (sum.m_c_flows <10) {
+ /* nothing to do */
+ return (0);
+ }
+ double ipg_factor = d_active_flow/sum.m_c_flows;
+
+ /* calc it again */
+ sum.Clear();
+ for (i=0; i<(int)m_cap_gen.size(); i++) {
+ CFlowGeneratorRec * lp=m_cap_gen[i];
+ lp->updateIpg(ipg_factor);
+ lp->getFlowStats(&stats);
+ sum.Add(stats);
+ }
+
+ return(0);
+}
+
int CFlowGenList::load_from_yaml(std::string file_name,
uint32_t num_threads){
uint8_t idx;