|
1 |
|
2 # Start of base-dtn conf file |
|
3 # Use in conjuction with dtn-cmd-half.sh |
|
4 # Needs value of : $id, $maxnodes, $tmp_logdir, $perhop, dtn2testroot, localdir |
|
5 # set id 1 |
|
6 # set maxnodes 4 |
|
7 # set perhop 0 |
|
8 # set tmp_logdir /tmp/$exp/$nodeid |
|
9 # set dtn2testroot /proj/DTN/nsdi/DTN2/test |
|
10 # set localdir ... |
|
11 # set ftplogfile ... |
|
12 |
|
13 |
|
14 set fd_ftplog [open $ftplogfile w] |
|
15 |
|
16 log /daemon INFO "bundle daemon config running for node id $id..." |
|
17 |
|
18 log /daemon INFO "incoming bundles are in $localdir " |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 set tmpdir $tmp_logdir |
|
24 set localhost node-$id |
|
25 |
|
26 set dest node-$maxnodes |
|
27 |
|
28 |
|
29 set tidy [storage set tidy] |
|
30 set port 5000 |
|
31 set region emulab |
|
32 |
|
33 |
|
34 set dbdir "$tmpdir/bundledb" |
|
35 set payloaddir "$tmpdir/bundles" |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 # |
|
41 # pull in the test utilities |
|
42 # |
|
43 |
|
44 source "$dtn2testroot/file-injector.tcl" |
|
45 source "$dtn2testroot/tcl-registration.tcl" |
|
46 |
|
47 foreach dir [list $dbdir $payloaddir ] { |
|
48 if {! [file exists $dir]} { |
|
49 file mkdir $dir |
|
50 } |
|
51 } |
|
52 |
|
53 # clean up |
|
54 if {$tidy} { |
|
55 puts "tidy option set, cleaning payload and local file dirs" |
|
56 foreach dir [list $dbdir $payloaddir] { |
|
57 file delete -force $dir |
|
58 file mkdir $dir |
|
59 } |
|
60 } |
|
61 |
|
62 # validate the directories (XXX/demmer move this into C eventually) |
|
63 foreach dirtype [list dbdir payloaddir] { |
|
64 set dir [set $dirtype] |
|
65 if {! [file exists $dir]} { |
|
66 error "$dirtype directory $dir doesn't exist" |
|
67 } |
|
68 |
|
69 if {[file type $dir] != "directory"} { |
|
70 error "$dirtype directory $dir is not a directory" |
|
71 } |
|
72 |
|
73 if {[glob -nocomplain $dir/*] != {}} { |
|
74 error "$dirtype directory $dir not empty and re-reading state not implemented \ |
|
75 (use the -t option)" |
|
76 } |
|
77 } |
|
78 |
|
79 |
|
80 |
|
81 # initialize storage |
|
82 storage set dbdir $dbdir |
|
83 # XXX/demmer make this "storage type" |
|
84 storage init berkeleydb |
|
85 |
|
86 # set the payload directory and other params |
|
87 param set payload_dir $payloaddir |
|
88 param set tcpcl_ack_blocksz 4096 |
|
89 |
|
90 |
|
91 # param set payload_test_no_remove true |
|
92 # param set tcpcl_test_fragment_size 40960 |
|
93 |
|
94 |
|
95 param set proactive_frag_threshold 40960 |
|
96 |
|
97 |
|
98 # set a local tcp interface |
|
99 #if {$id != 1} { |
|
100 # set localhost node-$id-link-[expr $id - 1] |
|
101 #} |
|
102 |
|
103 set tcp_local_eid bundles://$region/tcp://$localhost:$port/ |
|
104 interface $tcp_local_eid |
|
105 |
|
106 # and a file one |
|
107 # set file_local_eid file://unix/file://$localdir/ |
|
108 # interface $file_local_eid |
|
109 |
|
110 |
|
111 # |
|
112 # set up routing... |
|
113 # Line topology assumed |
|
114 |
|
115 |
|
116 set peer node-[expr $id + 1] |
|
117 |
|
118 # Set up e2e routing for source |
|
119 if {$perhop == 0} { |
|
120 if {$id == 1} { |
|
121 set peer node-$maxnodes |
|
122 } |
|
123 } |
|
124 |
|
125 |
|
126 # No routing next hop for end of the line topology |
|
127 if {$id != $maxnodes} { |
|
128 set tcp_peer_eid bundles://$region/tcp://$peer:$port/ |
|
129 # with a tcp route |
|
130 # route add bundles://$region/bundles://$peer/* $tcp_peer_eid ONDEMAND |
|
131 # route add bundles://$region/bundles://*/* $tcp_peer_eid ONDEMAND |
|
132 route add bundles://$region/bundles://$dest/* $tcp_peer_eid ONDEMAND |
|
133 |
|
134 log /daemon INFO "route added FOR $dest through $tcp_peer_eid" |
|
135 |
|
136 } |
|
137 |
|
138 |
|
139 |
|
140 # |
|
141 # Use the initscript hook to store some code we want run only _after_ |
|
142 # everything else is initialized |
|
143 # |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 proc time {} { |
|
149 return [clock seconds] |
|
150 } |
|
151 |
|
152 proc test_bundle_arrived {regid bundle_info} { |
|
153 |
|
154 array set b $bundle_info |
|
155 global fd_ftplog |
|
156 if ($b(is_admin)) { |
|
157 error "Unexpected admin bundle arrival $b(source) -> b($dest)" |
|
158 } |
|
159 log /daemon INFO "bundle arrival" |
|
160 foreach {key val} [array get b] { |
|
161 if {$key == "payload"} { |
|
162 log /daemon INFO "payload:\t [string range $b(payload) 0 64]" |
|
163 } else { |
|
164 log /daemon INFO "$key:\t $b($key)" |
|
165 } |
|
166 } |
|
167 ## Hack for file tail XXX sushant, check ?? |
|
168 set tmp ":: bundle arrived [file tail $source] --> [file tail $b(dest)] length $b(length)" |
|
169 |
|
170 log /file_injector INFO $tmp |
|
171 puts $fd_ftplog "[time] $tmp" |
|
172 flush $fd_ftplog |
|
173 } |
|
174 |
|
175 |
|
176 |
|
177 |
|
178 # test proc for sending a bundle |
|
179 proc sendbundle {node} { |
|
180 |
|
181 global localhost peer port region |
|
182 set length 1048576 |
|
183 set length 5000 |
|
184 |
|
185 set payload "test bundle payload data\n" |
|
186 |
|
187 while {$length - [string length $payload] > 32} { |
|
188 append payload [format "%4d: 0123456789abcdef\n" [string length $payload]] |
|
189 } |
|
190 while {$length > [string length $payload]} { |
|
191 append payload "." |
|
192 } |
|
193 |
|
194 bundle inject bundles://$region/bundles://$localhost/ \ |
|
195 bundles://$region/bundles://$node/demux \ |
|
196 $payload \ |
|
197 option [list length $length] |
|
198 } |
|
199 |
|
200 |
|
201 ###################################### |
|
202 #For source |
|
203 |
|
204 if {$id == 1} { |
|
205 log /daemon INFO "At source starting file injector start " |
|
206 log /daemon INFO "Local dir is: $localdir , Dest is $dest " |
|
207 |
|
208 test set initscript { |
|
209 file_injector_start $localdir bundles://$region/bundles://$localhost/ \ |
|
210 bundles://$region/bundles://$dest/demux |
|
211 } |
|
212 } |
|
213 |
|
214 if {$id < $maxnodes} { |
|
215 if {$id != 1} { |
|
216 #For intermediate nodes |
|
217 log /daemon INFO "At forwarding nodes registring logging " |
|
218 test set initscript { |
|
219 registration add logger bundles://*/* |
|
220 } |
|
221 } |
|
222 } |
|
223 |
|
224 #For dest nodes |
|
225 |
|
226 if {$id == $maxnodes} { |
|
227 log /daemon INFO "At destination registring initscript " |
|
228 test set initscript { |
|
229 tcl_registration bundles://*/* test_bundle_arrived |
|
230 } |
|
231 } |
|
232 |
|
233 ###################################### |