Skip to content

Instantly share code, notes, and snippets.

@xu3kev
Created June 23, 2012 13:18
Show Gist options
  • Save xu3kev/2978283 to your computer and use it in GitHub Desktop.
Save xu3kev/2978283 to your computer and use it in GitHub Desktop.

Revisions

  1. xu3kev revised this gist Jun 23, 2012. 1 changed file with 201 additions and 0 deletions.
    201 changes: 201 additions & 0 deletions cbrgen.tcl
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,201 @@
    #
    # Copyright (c) 1999 by the University of Southern California
    # All rights reserved.
    #
    # This program is free software; you can redistribute it and/or
    # modify it under the terms of the GNU General Public License,
    # version 2, as published by the Free Software Foundation.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License along
    # with this program; if not, write to the Free Software Foundation, Inc.,
    # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
    #
    # The copyright of this module includes the following
    # linking-with-specific-other-licenses addition:
    #
    # In addition, as a special exception, the copyright holders of
    # this module give you permission to combine (via static or
    # dynamic linking) this module with free software programs or
    # libraries that are released under the GNU LGPL and with code
    # included in the standard release of ns-2 under the Apache 2.0
    # license or under otherwise-compatible licenses with advertising
    # requirements (or modified versions of such code, with unchanged
    # license). You may copy and distribute such a system following the
    # terms of the GNU GPL for this module and the licenses of the
    # other code concerned, provided that you include the source code of
    # that other code when and as the GNU GPL requires distribution of
    # source code.
    #
    # Note that people who make modified versions of this module
    # are not obligated to grant this special exception for their
    # modified versions; it is their choice whether to do so. The GNU
    # General Public License gives permission to release a modified
    # version without this exception; this exception also makes it
    # possible to release a modified version which carries forward this
    # exception.

    # Traffic source generator from CMU's mobile code.
    #
    # $Header: /cvsroot/nsnam/ns-2/indep-utils/cmu-scen-gen/cbrgen.tcl,v 1.4 2005/09/16 03:05:39 tomh Exp $

    # ======================================================================
    # Default Script Options
    # ======================================================================
    set opt(nn) 0 ;# Number of Nodes
    set opt(seed) 0.0
    set opt(mc) 0
    set opt(pktsize) 512

    set opt(rate) 0
    set opt(interval) 0.0 ;# inverse of rate
    set opt(type) ""

    # ======================================================================

    proc usage {} {
    global argv0

    puts "\nusage: $argv0 \[-type cbr|tcp\] \[-nn nodes\] \[-seed seed\] \[-mc connections\] \[-rate rate\]\n"
    }

    proc getopt {argc argv} {
    global opt
    lappend optlist nn seed mc rate type

    for {set i 0} {$i < $argc} {incr i} {
    set arg [lindex $argv $i]
    if {[string range $arg 0 0] != "-"} continue

    set name [string range $arg 1 end]
    set opt($name) [lindex $argv [expr $i+1]]
    }
    }

    proc create-cbr-connection { src dst } {
    global rng cbr_cnt opt

    set stime [$rng uniform 0.0 20.0]

    puts "#\n# $src connecting to $dst at time $stime\n#"

    ##puts "set cbr_($cbr_cnt) \[\$ns_ create-connection \
    ##CBR \$node_($src) CBR \$node_($dst) 0\]";
    puts "set udp_($cbr_cnt) \[new Agent/UDP\]"
    puts "\$ns_ attach-agent \$node_($src) \$udp_($cbr_cnt)"
    puts "set null_($cbr_cnt) \[new Agent/Null\]"
    puts "\$ns_ attach-agent \$node_($dst) \$null_($cbr_cnt)"
    puts "set cbr_($cbr_cnt) \[new Application/Traffic/CBR\]"
    puts "\$cbr_($cbr_cnt) set packetSize_ $opt(pktsize)"
    puts "\$cbr_($cbr_cnt) set interval_ $opt(interval)"
    puts "\$cbr_($cbr_cnt) set random_ 1"
    puts "\$cbr_($cbr_cnt) set maxpkts_ 10000"
    puts "\$cbr_($cbr_cnt) attach-agent \$udp_($cbr_cnt)"
    puts "\$ns_ connect \$udp_($cbr_cnt) \$null_($cbr_cnt)"

    puts "\$ns_ at $stime \"\$cbr_($cbr_cnt) start\""

    incr cbr_cnt
    }

    proc create-tcp-connection { src dst } {
    global rng cbr_cnt opt

    set stime [$rng uniform 0.0 20.0]

    puts "#\n# $src connecting to $dst at time $stime\n#"

    puts "set tcp_($cbr_cnt) \[\$ns_ create-connection \
    TCP \$node_($src) TCPSink \$node_($dst) 0\]";
    puts "\$tcp_($cbr_cnt) set window_ 32"
    puts "\$tcp_($cbr_cnt) set packetSize_ $opt(pktsize)"

    puts "set ftp_($cbr_cnt) \[\$tcp_($cbr_cnt) attach-source FTP\]"


    puts "\$ns_ at $stime \"\$ftp_($cbr_cnt) start\""

    incr cbr_cnt
    }

    # ======================================================================

    getopt $argc $argv

    if { $opt(type) == "" } {
    usage
    exit
    } elseif { $opt(type) == "cbr" } {
    if { $opt(nn) == 0 || $opt(seed) == 0.0 || $opt(mc) == 0 || $opt(rate) == 0 } {
    usage
    exit
    }

    set opt(interval) [expr 1 / $opt(rate)]
    if { $opt(interval) <= 0.0 } {
    puts "\ninvalid sending rate $opt(rate)\n"
    exit
    }
    }

    puts "#\n# nodes: $opt(nn), max conn: $opt(mc), send interval: $opt(interval), seed: $opt(seed)\n#"

    set rng [new RNG]
    $rng seed $opt(seed)

    set u [new RandomVariable/Uniform]
    $u set min_ 0
    $u set max_ 100
    $u use-rng $rng

    set cbr_cnt 0
    set src_cnt 0

    for {set i 0} {$i < $opt(nn) } {incr i} {

    set x [$u value]

    if {$x < 50} {continue;}

    incr src_cnt

    # set dst [expr ($i+1) % [expr $opt(nn) + 1] ]
    set dst [expr ($i+1) % [expr $opt(nn) ] ]
    #if { $dst == 0 } {
    #set dst [expr $dst + 1]
    #}

    if { $opt(type) == "cbr" } {
    create-cbr-connection $i $dst
    } else {
    create-tcp-connection $i $dst
    }

    if { $cbr_cnt == $opt(mc) } {
    break
    }

    if {$x < 75} {continue;}

    # set dst [expr ($i+2) % [expr $opt(nn) + 1] ]
    set dst [expr ($i+2) % [expr $opt(nn)] ]
    #if { $dst == 0 } {
    #set dst [expr $dst + 1]
    #}

    if { $opt(type) == "cbr" } {
    create-cbr-connection $i $dst
    } else {
    create-tcp-connection $i $dst
    }

    if { $cbr_cnt == $opt(mc) } {
    break
    }
    }

    puts "#\n#Total sources/connections: $src_cnt/$cbr_cnt\n#"
  2. xu3kev created this gist Jun 23, 2012.
    6 changes: 6 additions & 0 deletions generate movement
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,6 @@
    #!/bin/bash
    j=20;
    for((i=10;i<=90;i+=10,j+=10))
    do
    ./setdest -v 2 -n 50 -s 2 -m $i -M $j -t 100 -P 1 -p 0 -x 250 -y 250 > movement/v2_$i
    done
    6 changes: 6 additions & 0 deletions generate traffic
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,6 @@
    #!/bin/bash
    for((i=1;i<=10;i++))
    do
    echo $i
    ns cbrgen.tcl -type cbr -nn 50 -seed $i -mc 50 -rate 50.0 > traffic/traffic2_$i
    done