empftp.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # Copyright (C) 1999 by USC/ISI
  2. # All rights reserved.                                            
  3. #                                                                
  4. # Redistribution and use in source and binary forms are permitted
  5. # provided that the above copyright notice and this paragraph are
  6. # duplicated in all such forms and that any documentation, advertising
  7. # materials, and other materials related to such distribution and use
  8. # acknowledge that the software was developed by the University of
  9. # Southern California, Information Sciences Institute.  The name of the
  10. # University may not be used to endorse or promote products derived from
  11. # this software without specific prior written permission.
  12. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  13. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  14. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  15. PagePool/EmpFtpTraf set debug_ false
  16. PagePool/EmpFtpTraf set TCPTYPE_ Reno
  17. PagePool/EmpFtpTraf set TCPSINKTYPE_ TCPSink   ;#required for SACK1 Sinks.
  18. PagePool/EmpFtpTraf set FID_ASSIGNING_MODE_ 0 
  19. PagePool/EmpFtpTraf set VERBOSE_ 0
  20. PagePool/EmpFtpTraf instproc send-file { id svr clnt stcp ssnk size color} {
  21. set ns [Simulator instance]
  22. $ns attach-agent $svr $stcp
  23. $ns attach-agent $clnt $ssnk
  24. $ns connect $stcp $ssnk
  25. if {[PagePool/EmpFtpTraf set FID_ASSIGNING_MODE_] == 0} {
  26. # $stcp set fid_ $id
  27. $stcp set fid_ $color
  28. }
  29. $stcp proc done {} "$self done-send $id $clnt $svr $stcp $ssnk $size [$ns now] [$stcp set fid_]"
  30.         puts "req ftp clnt [$clnt id] svr [$svr id] [$ns now] obj $id size $size"
  31. # Send request packets based on empirical distribution
  32. $stcp advanceby $size
  33. }
  34. PagePool/EmpFtpTraf instproc done-send { id clnt svr stcp ssnk size {startTime 0} {fid 0}} {
  35. set ns [Simulator instance]
  36. if {[PagePool/EmpFtpTraf set VERBOSE_] == 1} {
  37. puts "done-send - file:$id srv:[$svr id] clnt:[$clnt id] $size $startTime [$ns now] $fid"
  38. }
  39. # Recycle server-side TCP agents
  40. $ns detach-agent $clnt $ssnk
  41. $ns detach-agent $svr $stcp
  42. $stcp reset
  43. $ssnk reset
  44. $self recycle $stcp $ssnk
  45. }
  46. # XXX Should allow customizable TCP types. Can be easily done via a 
  47. # class variable
  48. PagePool/EmpFtpTraf instproc alloc-tcp { size } {
  49. set tcp [new Agent/TCP/[PagePool/EmpFtpTraf set TCPTYPE_]]
  50.         $tcp set window_ $size
  51. set fidMode [PagePool/EmpFtpTraf set FID_ASSIGNING_MODE_]
  52. if {$fidMode == 1} {
  53. $self instvar maxFid_
  54. $tcp set fid_ $maxFid_
  55. incr maxFid_
  56. } elseif  {$fidMode == 2} {
  57. $self instvar sameFid_
  58. $tcp set fid_ $sameFid_
  59. }
  60. return $tcp
  61. }
  62. PagePool/EmpFtpTraf instproc alloc-tcp-sink {} {
  63. return [new Agent/[PagePool/EmpFtpTraf set TCPSINKTYPE_]]
  64. }