[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ns] Problems using TcpApp wit FullTcp



I'm not sure this is going to fix your problem, but it will help. reset is
partially broken in FullTcp. The main problem is that closed_ is defined in
tcp.h and then redefined in tcp-full.h. This *is* wrong. I submitted a bug
report three month ago, but it has not been committed yet. Read my (lengthy)
posting for more details,

http://www.isi.edu/nsnam/archive/ns-users/webarch/2000/msg03812.html

(see also John Heidemann's reply:
http://www.isi.edu/nsnam/archive/ns-users/webarch/2000/msg03859.html)

You may want to contact Tarik Alj ([email protected]). He was
doing real work with FullTcp at that time, while I was just trying to help. He
may have a more mature version of FullTcp.

By the way, someone with writing access should have a look to this and make some
changes. Thanks.

Mark Janssen wrote:

> Hello all,
>
> I am trying to use TcpApp over FullTcp to simulate some application
> behaviour. While doing that I run into a problem while connecting different
> apps. What I would like to accomplish is the following:
>
> I have a linear topology of three nodes with an attached FullTcp agent:
>
> (1)-----------(2)-----------(3)
>
> After that I create three apps and put the TCP agent at the second node in
> the listen state. And connect tcp1 with tcp2 with app1 and app2.
> Now app1 sends a message to app2. This all works great. Now because of this
> message app2 needs to contact app3. So I connect tcp2 with tcp3 and app2
> with app3 and I put tcp3 in listen mode.
> When I now send a message from app2 to app3 I only see ACK packets without
> TCP packets. I suspect this occurs because tcp2 is still in a different
> state then when you create it. I tried to do a "$tcp2 reset" but that
> doesn't solve my problem. Below I have include the tcl script, the ns output
> and the tracefile.
> Unfortunately I couldn't find any information on this in the documentation
> or the list-archive. I have looked at the webcache testsuite. But that only
> test a 2-node setup (with TcpApp and FullTcp) and that works fine.
> Do you have any ideas of how I should accomplish this?
>
> Thanks,
> Mark Janssen
>
> ###begin tcpapp.tcl
> #Create a simulator object
> set ns [new Simulator]
>
> #Open the nam trace file
> set nf [open out.nam w]
> $ns namtrace-all $nf
>
> #Open the trace file
> set f [open out.tr w]
> $ns trace-all $f
>
> #Define a 'finish' procedure
> proc finish {} {
>         global ns nf f
>         $ns flush-trace
>         close $f
>         #Close the trace file
>         close $nf
>         #Execute nam on the trace file
> #        exec nam out.nam &
>         exit 0
> }
>
> set n1 [$ns node]
> set n2 [$ns node]
> set n3 [$ns node]
> $ns duplex-link $n1 $n2 1Mb 80ms DropTail
> $ns duplex-link $n2 $n3 1Mb 80ms DropTail
>
> Application/TcpApp instproc app-recv {src size} {
> global ns
> puts "[$ns now] $self recieves data $size from $src"
> $ns trace-annotate  "$self recieves data $size from $src"
> # $self send 100 "$self send 100 \"$src app-recv $self 100\""
>
> }
>
> set tcp1 [new Agent/TCP/FullTcp]
> set tcp2 [new Agent/TCP/FullTcp]
> set tcp3 [new Agent/TCP/FullTcp]
>
> $ns attach-agent $n1 $tcp1
> $ns attach-agent $n2 $tcp2
> $ns attach-agent $n2 $tcp3
>
> set app1 [new Application/TcpApp $tcp1]
> set app2 [new Application/TcpApp $tcp2]
> set app3 [new Application/TcpApp $tcp3]
>
> $ns connect $tcp1 $tcp2
> $app1 connect $app2
> #Call the finish procedure after 5 seconds of simulation time
> $ns at 0.1 "$tcp2 listen ;  $app1 send 100 \"$app2 app-recv $app1 100\""
> $ns at 4.0 "$ns connect $tcp2 $tcp3 ; $app2 connect $app3; $tcp3 listen;
> $app2 send 100 \"$app3 app-recv $app2 100\""
> $ns at 7.0 "finish"
> #Run the simulation
> $ns run
> ###end tcpapp.tcl
>
> ###begin ns-output
> [mjanssen@mjlaptop myscripts]$ ns tcpapp.tcl
> 0.34207999999999994 _o65 recieves data 100 from _o64
> 4.000000: FullTcpAgent::recv(_o60) got packet lacking ACK (seq 101)
> 4.100000: (_o61) unexpected timeout 3 in state 1
> 4.600000: FullTcpAgent::recv(_o60) got packet lacking ACK (seq 101)
> 4.600000: (_o61) unexpected timeout 3 in state 1
> 5.800000: FullTcpAgent::recv(_o60) got packet lacking ACK (seq 101)
> 5.800000: (_o61) unexpected timeout 3 in state 1
> [mjanssen@mjlaptop myscripts]$
> ###end ns-output
>
> ###begin out.tr
> + 0.1 0 1 tcp 40 ------- 0 0.0 1.0 0 0
> - 0.1 0 1 tcp 40 ------- 0 0.0 1.0 0 0
> r 0.18032 0 1 tcp 40 ------- 0 0.0 1.0 0 0
> + 0.18032 1 0 ack 40 ------- 0 1.0 0.0 0 1
> - 0.18032 1 0 ack 40 ------- 0 1.0 0.0 0 1
> r 0.26064 1 0 ack 40 ------- 0 1.0 0.0 0 1
> + 0.26064 0 1 tcp 40 ------- 0 0.0 1.0 1 2
> - 0.26064 0 1 tcp 40 ------- 0 0.0 1.0 1 2
> + 0.26064 0 1 tcp 140 ------- 0 0.0 1.0 1 3
> - 0.26096 0 1 tcp 140 ------- 0 0.0 1.0 1 3
> r 0.34096 0 1 tcp 40 ------- 0 0.0 1.0 1 2
> r 0.34208 0 1 tcp 140 ------- 0 0.0 1.0 1 3
> v 0.34207999999999994 eval {set sim_annotation {_o65 recieves data 100 from
> _o64}}
> + 0.4 1 0 ack 40 ------- 0 1.0 0.0 1 4
> - 0.4 1 0 ack 40 ------- 0 1.0 0.0 1 4
> r 0.48032 1 0 ack 40 ------- 0 1.0 0.0 1 4
> ###end out.tr

--
______________________________________________________

Felix Hernandez Campos - [email protected]
______________________________________________________

Graduate Student & Research Assistant
Phone#: (919) 962-1948
University of North Carolina at Chapel Hill
Department of Computer Science, Room# 145
CB# 3175, Sitterson Hall
Chapel Hill, NC 27599-3175
______________________________________________________