150 likes | 238 Vues
Learn about Dynamic Source Routing (DSR) key mechanisms, route discovery, source routing, ARP-like behavior, and DSR code recompiling. Follow steps to implement DSR in ns2 and analyze traces using scripts like grep and awk.
E N D
Using DSR in ns2 Rishi Sinha
Objective • Quick introduction to using DSR • Not about wireless simulation as such • Leaves not much in terms of using DSR • DSR code recompiling for various options • DSR code recompiling for various trace messages
DSR characteristics • Reactive • Source-routing • ARP-like behavior • Router object in ns – sends and receives packets from agents and link layer
DSR basic mechanisms • Route discovery – limited • Route discovery – flooding • Source route construction • Route reply • Route error • Salvaging
DSR in ns script $ns_ node-config -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channelType $val(chan) \ -topoInstance $topo \ -agentTrace ON \ -routerTrace ON \ -macTrace OFF \ -movementTrace OFF
The val array set val(chan) Channel/WirelessChannel ;# channel type set val(prop) Propagation/TwoRayGround ;# radio-propagation model set val(netif) Phy/WirelessPhy ;# network interface type set val(mac) Mac/802_11 ;# MAC type set val(ifq) Queue/DropTail/PriQueue ;# interface queue type set val(ll) LL ;# link layer type set val(ant) Antenna/OmniAntenna ;# antenna model set val(ifqlen) 50 ;# max packet in ifq set val(nn) 2 ;# number of mobilenodes set val(rp) DSR ;# routing protocol
DSR code in ns • $NS/dsr/dsragent.cc • Edit to make changes • In $NS: • make depend • make • ns defaults - $NS/tcl/lib/ns-default.tcl
DSR traces using node-config • $ns_ node-config -routerTrace ON • s 128.014398266 _0_ RTR --- 3 DSR 24 [0 0 0 0] ------- [0:255 2:255 32 0] 1 [1 2] [0 2 0 0->0] [0 0 0 0->0] • Send • Time • Node • Router or agent • Packet (event) id • Packet type • Size
DSR traces using DSR code • Unconditional trace () statements • Conditional trace statements – verbose • trace() implementation checks for verbose • So unconditional not output • Make changes in dsragent.cc and recompile ns
Non-verbose output void DSRAgent::trace(char* fmt, ...) { ... if (verbose) { va_start(ap, fmt); vsprintf(logtarget->pt_->buffer(), fmt, ap); logtarget->pt_->dump(); va_end(ap); } }
Non-verbose output • Remove the conditional shown above • SRR 127.93668 _0_ new-request 0 0 #1 -> 2 • SRR 128.00957 _0_ new-request 16 0 #2 -> 2 • SRR 128.021161410 _2_ reply-sent 2 -> 0 #2 (len 3) [(0) 1 2 ]
Verbose output • Let the conditional be • Output will include non-verbose output • Change these lines: • static const int verbose = 0; • static const int verbose_srr = 0;
Verbose output • S$miss 127.93668 _0_ 0 -> 2 • Sdebug 127.93668 _0_ stuck into send buff 0 -> 2 • S$hit 135.40639 _0_ 0 -> 2 [(0) 1 2 ]
DSR options • Timeouts • Time arp_timeout = 30.0e-3; // (sec) arp request timeout • Time rt_rq_period = 0.5; // (sec) length of one backoff period • Time rt_rq_max_period = 10.0; // (sec) maximum time between rt reqs • bool dsragent_snoop_forwarded_errors = true; // give errors we forward to our cache? • bool dsragent_snoop_source_routes = true; // should we snoop on any source routes we see?
Trace file analysis • Using grep and awk to get times of all cache misses: $ cat file.tr > awk ‘$1==“S\$miss”{print $2, $3}’ • Using grep and awk to get times of all drops: $ cat file.tr > awk ‘$1==“SRR” && $4==“dropped”{print $2, $3}’