File: ns-qsnode.tcl

package info (click to toggle)
ns2 2.35%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 78,756 kB
  • ctags: 27,476
  • sloc: cpp: 172,923; tcl: 107,130; perl: 6,391; sh: 6,143; ansic: 5,846; makefile: 812; awk: 525; csh: 355
file content (99 lines) | stat: -rw-r--r-- 2,934 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#
# Copyright (c) 2001 University of Southern California.
# All rights reserved.                                            
#                                                                
# Redistribution and use in source and binary forms are permitted
# provided that the above copyright notice and this paragraph are
# duplicated in all such forms and that any documentation, advertising
# materials, and other materials related to such distribution and use
# acknowledge that the software was developed by the University of
# Southern California, Information Sciences Institute.  The name of the
# University may not be used to endorse or promote products derived from
# this software without specific prior written permission.
# 
# THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
##
# Quick Start for TCP and IP.
# A scheme for transport protocols to dynamically determine initial 
# congestion window size.
#
# http://www.ietf.org/internet-drafts/draft-amit-quick-start-02.ps
#
# ns-qsnode.tcl
#
# OTcl support procedures required for Quick Start agent
#
# Srikanth Sundarrajan, 2002
# sundarra@usc.edu
#

RtModule/QS instproc register { node } {
	$self next $node

	$self instvar classifier_ 
	# Copy the old classifier and save it.  
	$self set classifier_ [$node entry]

	# Create a new classifer for qs processing and attach qs agent
	$node set qs_classifier_ [new Classifier/QS]
	$node set qs_agent_ [new Agent/QSAgent]
	$node set switch_ [$node set qs_classifier_]

	# Install existing classifier at slot 1, new classifier at slot 0
	$node insert-entry $self [$node set switch_] 1

	[$node set switch_] install 0 [$node set qs_agent_]
	$node attach [$node set qs_agent_]
	[$node set qs_agent_] set old_classifier_ $classifier_

}

Simulator instproc QS { val } {
	if { $val == "ON" } {
		add-packet-header "TCP_QS"
		Node enable-module "QS"
	} else {
		Node disable-module "QS"
		remove-packet-header "TCP_QS"
	}
}

Node instproc qs-agent {} {
	$self instvar qs_agent_
	return $qs_agent_
}

Simulator instproc get-queue { addr daddr } {
	$self instvar routingTable_
    
	set srcid [$self get-node-id-by-addr $addr]
	set dstid [$self get-node-id-by-addr $daddr]
    
	set nexthop [$routingTable_ lookup $srcid $dstid]

	set node1 [$self  get-node-by-addr $addr]
	set node2 [$self  get-node-by-addr $nexthop]
    
	set queue_ [[$self link $node1 $node2] queue]
        
	return $queue_
}       
 
Simulator instproc get-link { addr daddr } {
	$self instvar routingTable_

	set srcid [$self get-node-id-by-addr $addr]
	set dstid [$self get-node-id-by-addr $daddr]

	set nexthop [$routingTable_ lookup $srcid $dstid]

	set node1 [$self  get-node-by-addr $addr]
	set node2 [$self  get-node-by-addr $nexthop]

	set link_ [[$self  link $node1 $node2] link]

	return $link_
}