#!/usr/bin/tclsh exec mkdir -p out set rates(wlan) 6000000 #was 1000Kb set rates(umts) 384000 set rates(gprs) 30000 set delays(wlan) 10ms set delays(umts) 150ms set delays(gprs) 300ms proc set_bufs {} { global bufs set bufs(wlan) 7 set bufs(umts) 20 set bufs(gprs) 7 } foreach overbuf {false true} { foreach traf {TCP TFRC} { foreach f_sys {umts gprs} { ;# wlan foreach s_sys {umts gprs} { ;# wlan foreach both {false true} { set_bufs if {$traf!="TCP" && $both} {continue} if {$overbuf} {set bufs(wlan) $bufs(umts); set bufs(gprs) [expr 1.3*$bufs(umts)]} # if {$overbuf && $s_sys == "gprs"} {set bufs(gprs) [expr 1.3*$bufs(umts)]} if {$overbuf && (($f_sys=="wlan") || ($s_sys=="wlan"))} {continue} if {$f_sys==$s_sys} {continue} exec echo "set buf_size $bufs($f_sys)" >tmp.tcl exec echo "set buf_size_after_ho $bufs($s_sys) " >>tmp.tcl exec echo "set line_rate $rates($f_sys)" >>tmp.tcl exec echo "set line_rate_after_ho $rates($s_sys)" >>tmp.tcl exec echo "set prop_delay $delays($f_sys) " >>tmp.tcl exec echo "set prop_delay_after_ho $delays($s_sys)" >>tmp.tcl if {$traf == "TFRC" || $both} {exec echo "set tfrc_send_size 100000" >>tmp.tcl} if {$traf == "TCP"} {exec echo "set tcp_send_size 2000000" >>tmp.tcl} exec ns vho.tcl set fn [join [concat $traf $f_sys $s_sys ovb $overbuf] "_"] if {$both} {set fn [join [concat "TFRC" $fn] "_"]} exec mv out.tr out/$fn. puts "name-$fn" } } } } } set_bufs # # effect of self clocking # exec echo "set tfrc_send_size 100000" >tmp.tcl set f_sys umts set s_sys gprs exec echo "set buf_size $bufs($f_sys)" >>tmp.tcl exec echo "set buf_size_after_ho $bufs($s_sys) " >>tmp.tcl exec echo "set line_rate $rates($f_sys)" >>tmp.tcl exec echo "set line_rate_after_ho $rates($s_sys)" >>tmp.tcl exec echo "set prop_delay $delays($f_sys) " >>tmp.tcl exec echo "set prop_delay_after_ho $delays($s_sys)" >>tmp.tcl exec echo "Agent/TFRC set conservative_ 1" >>tmp.tcl exec ns vho.tcl set fn [join [concat $traf $f_sys $s_sys "sc1"] "_"] exec mv out.tr out/$fn. # # effect of history discounting # exec echo "set tfrc_send_size 100000" >tmp.tcl set f_sys gprs set s_sys umts exec echo "set buf_size $bufs($f_sys)" >>tmp.tcl exec echo "set buf_size_after_ho $bufs($s_sys) " >>tmp.tcl exec echo "set line_rate $rates($f_sys)" >>tmp.tcl exec echo "set line_rate_after_ho $rates($s_sys)" >>tmp.tcl exec echo "set prop_delay $delays($f_sys) " >>tmp.tcl exec echo "set prop_delay_after_ho $delays($s_sys)" >>tmp.tcl exec echo "Agent/TFRCSink set discount_ 0" >>tmp.tcl exec ns vho.tcl set fn [join [concat $traf $f_sys $s_sys "hd0"] "_"] exec mv out.tr out/$fn. # # feedback frequency # foreach f_sys {umts gprs} { if {$f_sys=="umts"} {set s_sys gprs} else {set s_sys umts} exec echo "set tfrc_send_size 100000" >tmp.tcl exec echo "set buf_size $bufs($f_sys)" >>tmp.tcl exec echo "set buf_size_after_ho $bufs($s_sys) " >>tmp.tcl exec echo "set line_rate $rates($f_sys)" >>tmp.tcl exec echo "set line_rate_after_ho $rates($s_sys)" >>tmp.tcl exec echo "set prop_delay $delays($f_sys) " >>tmp.tcl exec echo "set prop_delay_after_ho $delays($s_sys)" >>tmp.tcl exec echo "Agent/TFRCSink set NumFeedback_ 3" >>tmp.tcl exec ns vho.tcl set fn [join [concat $traf $f_sys $s_sys "fb3"] "_"] exec mv out.tr out/$fn. } # # explicit handover notification # foreach f_sys {umts gprs} { if {$f_sys=="umts"} {set s_sys gprs} else {set s_sys umts} exec echo "set tfrc_send_size 100000" >tmp.tcl exec echo "set buf_size $bufs($f_sys)" >>tmp.tcl exec echo "set buf_size_after_ho $bufs($s_sys) " >>tmp.tcl exec echo "set line_rate $rates($f_sys)" >>tmp.tcl exec echo "set line_rate_after_ho $rates($s_sys)" >>tmp.tcl exec echo "set prop_delay $delays($f_sys) " >>tmp.tcl exec echo "set prop_delay_after_ho $delays($s_sys)" >>tmp.tcl exec echo "set ho_hint true" >>tmp.tcl exec ns vho.tcl >tmp.ns set fn [join [concat $traf $f_sys $s_sys "ex"] "_"] exec mv out.tr out/$fn. } exec ns2gp out catch {exec gnuplot ts_plot_all.gp}