test/comparison/base-dtn-proactive.conf
changeset 0 2b3e5ec03512
equal deleted inserted replaced
-1:000000000000 0:2b3e5ec03512
       
     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 ######################################