⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcastmonitor.tcl

📁 NS-2.28的802.11e协议扩展源代码
💻 TCL
字号:
Class McastMonitorMcastMonitor instproc init {} {    $self instvar period_ ns_    set ns_ [Simulator instance]    set period_ 0.03}McastMonitor instproc trace-topo {} {    $self instvar ns_ period_    $self trace-links [$ns_ all-links-list]}McastMonitor instproc trace-links links {    $self instvar pktmon_    foreach l $links {	set pktmon_($l) [new PktInTranMonitor]	$pktmon_($l) attach-link $l	$l add-pktmon $pktmon_($l)    }}McastMonitor instproc filter {header field value} {    $self instvar pktmon_    foreach index [array name pktmon_] {	$pktmon_($index) filter $header $field $value    }}McastMonitor instproc pktintran {} {    $self instvar ns_ pktmon_    set total 0    foreach index [array name pktmon_] {	if {[$index up?] == "up"} {	    incr total [$pktmon_($index) pktintran]	}    }    return $total}McastMonitor instproc print-trace {} {    $self instvar ns_ period_ file_    if [info exists file_] {	puts $file_ "[$ns_ now] [$self pktintran]"    } else {	puts "[$ns_ now] [$self pktintran]"    }    $ns_ at [expr [$ns_ now] + $period_] "$self print-trace"}McastMonitor instproc attach file {    $self instvar file_    set file_ $file}##############################################Pkt In Transit Monitor###################### constructed by### front filter and front counter: keep track of #pkts passed into link### rear filter and rear counter: keep track of #pkts passed out of link### front count - rear count = #pkt in transit###Class PktInTranMonitorPktInTranMonitor instproc init {} {    $self instvar period_ ns_ front_counter_ rear_counter_ front_filter_ rear_filter_     set ns_ [Simulator instance]    set period_ 0.03    set front_counter_ [new PktCounter]    $front_counter_ set pktInTranMonitor_ $self    set front_filter_ [new Filter/MultiField]    $front_filter_ filter-target $front_counter_    set rear_counter_ [new PktCounter]    $rear_counter_ set pktInTranMonitor_ $self    set rear_filter_ [new Filter/MultiField]    $rear_filter_ filter-target $rear_counter_}PktInTranMonitor instproc reset {} {    $self instvar front_counter_ rear_counter_  ns_ next_    $front_counter_ reset    $rear_counter_ reset    if {[info exist next_] && $next_ != 0} {	$next_ reset    }}PktInTranMonitor instproc filter {header field value} {    $self instvar front_filter_ rear_filter_    $front_filter_ filter-field [PktHdr_offset PacketHeader/$header $field] $value    $rear_filter_ filter-field [PktHdr_offset PacketHeader/$header $field] $value}PktInTranMonitor instproc attach-link link {    $self instvar front_filter_ rear_filter_ front_counter_ rear_counter_        set tmp [$link head]    while {[$tmp target] != [$link link]} {        set tmp [$tmp target]    }    $tmp target $front_filter_    $front_filter_ target [$link link]    $front_counter_ target [$link link]    $rear_filter_ target [[$link link] target]    $rear_counter_ target [[$link link] target]    [$link link] target $rear_filter_}PktInTranMonitor instproc attach file {    $self instvar file_    set file_ $file}PktInTranMonitor instproc pktintran {} {    $self instvar front_counter_ rear_counter_     return [expr [$front_counter_ value] - [$rear_counter_ value]]}PktInTranMonitor instproc output {} {    $self instvar front_counter_ rear_counter_ ns_ file_     puts $file_ "[$ns_ now] [expr [$front_counter_ value] - [$rear_counter_ value]]"}    PktInTranMonitor instproc periodical-output {} {    $self instvar period_ ns_    $self output    $ns_ at [expr [$ns_ now] + $period_] "$self periodical-output"}################Simulator instproc all-links-list {} {    $self instvar link_    set links ""    foreach n [array names link_] {	lappend links $link_($n)    }    set links}Link instproc add-pktmon pktmon {    $self instvar pktmon_    if [info exists pktmon_] {	$pktmon set next_ $pktmon_    } else {	$pktmon set next_ 0    }    set pktmon_ $pktmon}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -