1. 24 Sep, 2012 1 commit
    • Eric Eide's avatar
      Replace license symbols with {{{ }}}-enclosed license blocks. · 6df609a9
      Eric Eide authored
      This commit is intended to makes the license status of Emulab and
      ProtoGENI source files more clear.  It replaces license symbols like
      "EMULAB-COPYRIGHT" and "GENIPUBLIC-COPYRIGHT" with {{{ }}}-delimited
      blocks that contain actual license statements.
      
      This change was driven by the fact that today, most people acquire and
      track Emulab and ProtoGENI sources via git.
      
      Before the Emulab source code was kept in git, the Flux Research Group
      at the University of Utah would roll distributions by making tar
      files.  As part of that process, the Flux Group would replace the
      license symbols in the source files with actual license statements.
      
      When the Flux Group moved to git, people outside of the group started
      to see the source files with the "unexpanded" symbols.  This meant
      that people acquired source files without actual license statements in
      them.  All the relevant files had Utah *copyright* statements in them,
      but without the expanded *license* statements, the licensing status of
      the source files was unclear.
      
      This commit is intended to clear up that confusion.
      
      Most Utah-copyrighted files in the Emulab source tree are distributed
      under the terms of the Affero GNU General Public License, version 3
      (AGPLv3).
      
      Most Utah-copyrighted files related to ProtoGENI are distributed under
      the terms of the GENI Public License, which is a BSD-like open-source
      license.
      
      Some Utah-copyrighted files in the Emulab source tree are distributed
      under the terms of the GNU Lesser General Public License, version 2.1
      (LGPL).
      6df609a9
  2. 27 Jul, 2011 1 commit
  3. 19 Jul, 2011 1 commit
  4. 18 Oct, 2007 1 commit
    • Mike Hibler's avatar
      Preliminary support for Ubuntu Linux. · 38bc8fa1
      Mike Hibler authored
       * added new tmcd directory with Ubuntu (really, Debian) specifics
       * fixed up GNUmakefiles to not do "-g wheel" when creating directories
       * other, relatively minor tweaks
      38bc8fa1
  5. 20 Oct, 2006 1 commit
    • Mike Hibler's avatar
      Wow, this should make me look important! · afa5e919
      Mike Hibler authored
      Two-day boondoggle to support "/scratch", an optional large, shared filesystem
      for users.  To do this, I needed to find all the instances where /proj is used
      and behave accordingly.  The boondoggle part was the decision to gather up all
      the hardwired instances of shared directory names ("/proj", "/users", etc.)
      so that they are set in a common place (via unexposed configure variables).
      This is a boondoggle because:
      
      1. I didn't change the client-side scripts.  They need a different mechanism
         (e.g., tmcd) to get the info, configure is the wrong way.
      
      2. Even if I had done #1 it is likely--no, certain--that something would
         fail if you tried to rename "/proj" to be "/mike".  These names are just
         too ingrained.
      
      3. We may not even use "/scratch" as it turns out.
      
      Note, I also didn't fix any of the .html documentation.  Anyway, it is done.
      To maintain my illusion in the future you should:
      
      1. Have perl scripts include "use libtestbed" and use the defined PROJROOT(),
         et.al. functions where possible.  If not possible, make sure they run
         through configure and use @PROJROOT_DIR@, etc.
      
      2. Use the configure method for python, C, php and other languages.
      
      3. There are perl (TBValidUserDir) and php (VALIDUSERPATH) functions which
         you should call to determine if an NS, template parameter, tarball or
         other file are in "an acceptable location."  Use these functions where
         possible.  They know about the optional "scratch" filesystem.  Note that
         the perl function is over-engineered to handles cases that don't occur
         in nature.
      afa5e919
  6. 13 Jul, 2006 1 commit
  7. 11 Jul, 2006 1 commit
  8. 30 Aug, 2004 1 commit
    • Leigh Stoller's avatar
      The bulk of the event system changes. · 9aa6b5ca
      Leigh Stoller authored
      * The per-experiment event scheduler now runs on ops instead of boss.
        Boss still runs elvind and uses events internally, but the user part
        of the event system has moved.
      
      * Part of the guts of eventsys_control moved to new script, eventsys.proxy,
        which runs on ops and fires off the event scheduler. The only tricky part
        of this is that the scheduler runs as the user, but killing it has to be
        done as root since a different person might swap out the experiment. So,
        the proxy is a perl wrapper invoked from a root ssh from boss, which
        forks, writes the pid file into /var/run/emulab/evsched/$pid_$eid.pid,
        then flips to the user and execs the event scheduler (which is careful
        not to fork). Obviously, if the kill is done as root, the pid file has to
        be stored someplace the user is not allowed to write.
      
      * The event scheduler has been rewritten to use Tim's C++ interface to the
        sshxmlrpc server on boss. Actually, I reorg'ed the scheduler so that it
        can be built either as a mysql client, or as RPC client. Note that it can
        also be built to use the SSL version of the XMLRPC server, but that will
        not go live until I finish the server stuff up. Also some goo for dealing
        with building the scheduler with C++.
      
      * Changes to several makefiles to install the ops binaries over NFS to
        /usr/testbed/opsdir. Makes life easier, but only if boss and ops are
        running the same OS. For now, using static linking on the event scheduler
        until ops upgraded to same rev as boss.
      
      * All of the event clients got little tweaks for dealing with the new CNAME
        for the event system server (event-sever). Will need to build new images
        at some point. Old images and clients will continue to work cause of an
        inetd hack on boss that uses netcat to transparently redirect elvind
        connections to ops.
      
      * Note that eventdebug needs some explaining. In order to make the inetd
        redirect work, elvind cannot be listening on the standard port. So, the
        boss event system uses an alternate port since there are just a few
        subsystems on boss that use the server, and its easy to propogate changes
        on boss. Anyway, the default for eventdebug is to connect to the standard
        port on localhost, which means it will work as expected on ops, but will
        require -b argument on boss.
      
      * Linktest changes were slightly more involved. No longer run linktest on
        boss when called from the experiment swapin path, but ssh over to ops to
        fire it off. This is done as the user of course, and there are some
        tricks to make it possible to kill a running linktest and its ssh when
        experiment swapin is canceled (or from the command line) by forcing
        allocation of a tty. I will probably revisit this at some point, but I
        did not want to spend a bunch of time on linktest.
      
      * The upgrade path detailed in doc/UPDATING is necessarily complicated and
        bound to cause consternation at remote sites doing an upgrade.
      9aa6b5ca
  9. 24 Jun, 2004 1 commit
    • Mike Hibler's avatar
      Improve the client-side install. With these changes, it should now be · 976133e4
      Mike Hibler authored
      possible to:
      
      	gmake client
      	sudo gmake client-install
      
      on a FBSD4, FBSD5, RHL7.3, and RHL9.0 client node.
      
      There are still some dependencies that are not explicit and which would
      prevent a build/install from working on a "clean" OS.  Two that I know of are:
      you must install our version of the elvin libraries and you must install boost.
      976133e4
  10. 16 Jun, 2004 1 commit
  11. 26 Apr, 2004 1 commit
    • Mike Hibler's avatar
      Cleanup Makefiles: · 297019fb
      Mike Hibler authored
      1. "make clean" will just remove stuff built in the process of a regular build
      2. "make distclean" will also clean out configure generated files.
      
      This is how it was always supposed to be, there was just some bitrot.
      297019fb
  12. 21 Apr, 2004 1 commit
  13. 16 Apr, 2004 1 commit
    • Shashi Guruprasad's avatar
      Fixing a bug that got introduced in 1.19 as a feature ! Decapsulation · a0a933d7
      Shashi Guruprasad authored
      of a live packet into a simulator packet must be performed right at the
      time of capture before introducing the packet into the network. In 1.19,
      I had optimized so that it is decapsulated just before the delivery of the
      packet to the traffic agent which leads to simulation based on a wrong
      packet size (i.e. the size of the encapsulated packet rather than the
      simulated one).
      a0a933d7
  14. 13 Apr, 2004 1 commit
  15. 23 Mar, 2004 1 commit
  16. 15 Mar, 2004 1 commit
  17. 12 Mar, 2004 1 commit
  18. 11 Mar, 2004 1 commit
  19. 21 Jan, 2004 1 commit
  20. 16 Jan, 2004 1 commit
    • Shashi Guruprasad's avatar
      Before this commit, a simulator packet that crosses pnodes was being · eae5072e
      Shashi Guruprasad authored
      decapsulated if it was determinted that the packet was destined to some
      sim node on the same pnode. This was done at the entry point of the
      packet from the live network. However, in the case of disconnected
      partitions, the packet may have to exit the pnode one or more times
      before reaching the final destination. In this case, the decapsulation
      of it early is a waste. This commit remedies that by performing the
      decapsulation in the port classifier of a node just before the packet
      is given to a traffic agent that will consume the packet.
      eae5072e
  21. 15 Jan, 2004 1 commit
    • Shashi Guruprasad's avatar
      One more bugfix. sendpkt() was being called with a wrong length even though · a59ebe6c
      Shashi Guruprasad authored
      the RAW_IP packet being sent had a different ip_len. This happened in the
      case of a nse topology that is disconnected due to how assign maps it. The
      encapsulated simulator packet was decapsulated even though it has to leave
      the physical node again. Under this circumstance, the decapsulated simulator
      packet size was used for RAW_IP send() instead of the size of the encapsulated
      packet.
      a59ebe6c
  22. 12 Jan, 2004 1 commit
    • Shashi Guruprasad's avatar
      Another bug fix. The newly added $ns ip-connect instproc had a bug. The · b113d029
      Shashi Guruprasad authored
      code originally tried to do a normal $ns connect between traffic agents
      attached to simnodes on the same pnode. The problem that I forgot of course
      is that partitioned topology is quite disconnected which means that a
      packet is forced to exit the pnode and come back to it (in many cases).
      In other words, a direct intra pnode path does not exist. The fix is
      to just use the IP address based routes always. A similar problem
      is encountered in pdns as well. However, since IP address based routing
      is not used, there is no simple fix unless I work on it!
      
      The 416 node topology testbed/nse416 is working alright. It mapped to
      20 pnodes and as soon as a whole bunch of traffic started up, 7 pnodes
      couldn't track real-time and caused a modify. Expt modify happened 3
      times but eventually max_retries in my re-swapping code was reached. Need
      more measuring, tuning as well as eventrate based re-swapping.
      b113d029
  23. 09 Jan, 2004 2 commits
    • Shashi Guruprasad's avatar
      Changes to do auto re-swap of expts with simnodes when an nse on a simhost · 375f87c1
      Shashi Guruprasad authored
      (or more than one simhost) is unable to keep up with real-time. It includes
      changes to assign_wrapper to handle swap modify for simnodes, the simple
      algorithm in nseswap that bumps up the nodeweight of simnodes being hosted
      on a simhost that reports "can't keep up with real-time" (aka nse violation),
      ptopgen and sim.tcl to prefer nodes that already have the FBSD-NSE image.
      Also, changes to other files to send out NSESWAP event.
      
      One unrelated change: We now have per-swapin .top files and assign.log
      files along with .ptop files. This helps in debugging across multiple
      swapins since files remain in the form of
      <pid>-<eid>-<process_id>.{top,ptop} and assign-<pid>-<eid>-<process_id>.log
      Also useful for archiving.
      375f87c1
    • Shashi Guruprasad's avatar
  24. 07 Jan, 2004 1 commit
    • Shashi Guruprasad's avatar
      Yet another bugfix + code to call a function that sends NSESWAP event · ac01c40b
      Shashi Guruprasad authored
      when it cannot keep up with real-time.
      
      bug: This affected encapsulated simulator packets that had to cross
      multiple physical nodes before arriving at the destination simulator
      traffic agent. This bug didnt affect live packets from traffic sources
      on real PCs.
      
      The NSESWAP event is now sent via the tevc command. The nse scheduler
      waits for the slop factor (diff between clock and event dispatch time
      that exceeds a threshold) to be crossed multiple times in a second
      before sending the NSESWAP event. Currently 5 times in 1 second.
      However, this needs more careful thought and will get modified later.
      When is it really necessary to declare that an nse is overloaded?
      i.e. what is the right slop factor? How many times can we tolerate
      that the slop factor is exceeded to ensure end-to-end performance
      is within a certain percentage of the expected?
      ac01c40b
  25. 06 Jan, 2004 2 commits
    • Shashi Guruprasad's avatar
      A script make nse patch files · 317d2959
      Shashi Guruprasad authored
      317d2959
    • Shashi Guruprasad's avatar
      Fixed a simple but showstopper bug. This script would flush the routes · 5b8789c3
      Shashi Guruprasad authored
      in every routing table except the main before inserting new ones
      obtained from tmcc. The problem was that even the interface routes
      that were added when the interfaces were brought up are flushed.
      Unfortunately these routes weren't getting added again.
      
      The solution is to toggle the interfaces i.e. disabling and re-enabling
      them again. It has the desired effect of flushing all the routes as well.
      I'm not sure how things worked until now. In all my previous mappings
      of the testbed/nse10 straight-line topology, things mysteriously worked!
      5b8789c3
  26. 05 Jan, 2004 1 commit
    • Shashi Guruprasad's avatar
      nse would fail if there were only rlinks on a simnode. The problem wouldn't · 0807f0e5
      Shashi Guruprasad authored
      occur if a normal duplex link was created first. The reason is coz the
      creation of an rlink would also internally create an IPTap agent and when
      this agent was being attached to the node, classifier entries were being
      added to the port demultiplexer for all the IP addresses of the simnode.
      Unfortunately, if an rlink was created first before anything else, the
      IP address would be set only in the next Tcl statement causing nse to
      exit prematurely.
      0807f0e5
  27. 19 Dec, 2003 1 commit
  28. 15 Dec, 2003 1 commit
    • Shashi Guruprasad's avatar
      Distributed NSE changes. In other words, simulation resources are · d266bd71
      Shashi Guruprasad authored
      now mapped to more than one PC if required. The simnode_capacity
      column in the node_types table determines how many sim nodes can
      be packed on one PC. The packing factor can also be controlled via
      tb-set-colocate-factor to be smaller than simnode_capacity.
      
      - No frontend code changes. To summarize:
        $ns make-simulated {
          ...
        }
        is still the easy way to put a whole bunch of Tcl code to be
        in simulation.
        One unrelated fix in the frontend code is to fix the
        xmlencode() function which prior to this would knock off
        newlines from columns in the XML output. This affected
        nseconfigs since it is one of the few columns with embedded
        newlines. Also changed the event type and event object type
        in traffic.tcl from TRAFGEN/MODIFY to NSE/NSEEVENT.
      
      - More Tcl code in a new directory tbsetup/nseparse
        -> Runs on ops similar to the main parser. This is invoked
           from assign_wrapper in the end if there are simnodes
        -> Partitions the Tcl code into multiple Tcl specifications
           and updates the nseconfigs table via xmlconvert
        -> Comes with a lot of caveats. Arbitrary Tcl code such as user
           specified objects or procedures will not be re-generated. For
           example, if a user wanted a procedure to be included in Tcl
           code for all partitions, there is no way for code in nseparse
           to do that. Besides that, it needs to be tested more thoroughly.
      
      - xmlconvert has a new option -s. When invoked with this option,
        the experiments table is not allowed to be modified. Also,
        virtual tables are just updated (as opposed to deleting
        all rows in the first invocation before inserting new rows)
      
      - nse.patch has all the IP address related changes committed in
        iversion 1.11 + 2 other changes. 1) MTU discovery support in
        the ICMP agent 2) "$ns rlink" mechanism for sim node to real
        node links
      
      - nseinput.tcl includes several client side changes to add IP
        routes in NSE and the kernel routing table for packets crossing
        pnodes. Also made the parsing of tmcc command output more robust
        to new changes. Other client side changes in libsetup.pm and other
        scripts to run nse, are also in this commit
      
      - Besides the expected changes in assign_wrapper for simulated nodes,
        the interfaces and veth_interfaces tables are updated with
        routing table identifiers (rtabid). The tmcd changes are already
        committed. This field is used only by sim hosts on the client side.
        Of course, they can be used by jails as well if desired.
      d266bd71
  29. 24 Nov, 2003 1 commit
  30. 05 Nov, 2003 3 commits
  31. 16 Oct, 2003 1 commit
    • Shashi Guruprasad's avatar
      Distributed nse changes · 1630611a
      Shashi Guruprasad authored
      1) IP address based routes can now be added
         - The IP address is set on a link object
         - An "$ns rlink" is used to instantiate links
           that get cut and cross physical partitions
         - Traffic agents that are across physical
           partitions (i.e. different instances of nse)
           are connected by a new "$ns ip-connect"
           mechanism
         - A new Node instproc "add-route-to-ip" adds
           IP address based routes.
         - Changed ns multicast addressing to use 3 bits
           instead of the default 1
         - Currently, the classifier does a lookup on a
           complete 32 bit IP and if a target to route to
           is not found, uses a 24 bit IP mask. It does not
           try to match IP prefixes of all lengths. I'll add
           that later if necessary
      2) NS packets that cross partitions are encapsulated in
         IPPROTO_ENCAP IP packets.
      3) RAW IP sockets used to inject packets into the network
         now use a rtabid paramater so that packets can be
         routed according to different routing tables
      
      Tested with 2 test cases, one with UDP/CBR traffic
      and another with default NS TCP/FTP traffic. Setup was done
      manually. As I do testbed integration, there may be more changes.
      Here's the test setup:
      
         2.2    2.3   1.2      1.3   3.2      3.3
      n0 --------- n1 ----------- n2 ------------ n3
      
      n0,n1 are on one physical node and n2,n3 are on another. The n1-n2 link
      is cut.
      
      A TCP example:
      
      ---------------------physnode0---------------------
      set ns [new Simulator]
      $ns use-scheduler RealTime
      
      set n0 [$ns node]
      set n1 [$ns node]
      
      $ns duplex-link $n0 $n1 10Mb 5ms DropTail
      [$ns link $n0 $n1] set-ip 10.1.2.2
      [$ns link $n1 $n0] set-ip 10.1.2.3
      
      set rl0 [$ns rlink $n1 10.1.1.3 2Mb 40ms DropTail]
      $rl0 set-ip 10.1.1.2
      
      set tcp0 [new Agent/TCP]
      # The last parameter specifies the port
      $ns attach-agent $n0 $tcp0 20
      $ns ip-connect $tcp0 10.1.3.3 20
      set ftp0 [new Application/FTP]
      $ftp0 attach-agent $tcp0
      
      $n0 add-route-to-ip 10.1.3.3 10.1.2.3
      $n1 add-route-to-ip 10.1.3.3 10.1.1.3
      
      $ns at 1.0 "$ftp0 start"
      $ns at 10.0 "$ftp0 stop"
      -----------------end physnode0---------------------
      
      ---------------------physnode1---------------------
      set ns [new Simulator]
      $ns use-scheduler RealTime
      
      set n2 [$ns node]
      set n3 [$ns node]
      
      $ns duplex-link $n2 $n3 10Mb 5ms DropTail
      [$ns link $n2 $n3] set-ip 10.1.3.2
      [$ns link $n3 $n2] set-ip 10.1.3.3
      
      set rl1 [$ns rlink $n2 10.1.1.2 2Mb 40ms DropTail]
      $rl1 set-ip 10.1.1.3
      
      set tcpsink0 [new Agent/TCPSink]
      $ns attach-agent $n3 $tcpsink0 20
      $ns ip-connect $tcpsink0 10.1.2.2 20
      
      $n3 add-route-to-ip 10.1.2.2 10.1.3.2
      $n2 add-route-to-ip 10.1.2.2 10.1.1.2
      -----------------end physnode1---------------------
      1630611a
  32. 15 Oct, 2003 1 commit
  33. 01 Jul, 2003 1 commit
  34. 06 Jun, 2003 1 commit
  35. 30 Jan, 2003 1 commit
    • Shashi Guruprasad's avatar
      Fixed an error made by ISI during last year's rewriting of the RTSched code · cbe7fc8b
      Shashi Guruprasad authored
      that although appeared to be right was actually causing errors to be
      accumalated. This fixes the high error rates in the bandwidth and loss rate
      numbers reported in OSDI. There are also code optimizations after profiling
      it that reduces the RTSched overhead.
      
      Another source of error was send/consume/request/reply which used to be
      given a very rough estimate of the CPU speed (600 instead of 601.37 Mhz for
      example). The latter comes from the boot up calibration in FreeBSD which
      is supposed to be accurate up to 10 microsecs on a 486.  Using
      600 instead of 601.37 causes an error of 0.22 % in the measurement. That is
      about 1.3 ms for an RTT of 600 ms. This error is worse when send/consume
      are used to calculate throughputs. The longer the period of measurement,
      the worse it becomes.  I have committed changes in them as well. Defining
      the macro CPU_SPEED_IN_KHZ will get you kernels that take CPU_SPEED
      parameters in Khz instead of Mhz. So, you can specify 851940 instead of
      850 for a pc850.
      
      boss:/tftpboot/x86/{send,consume,request,reply}.cpuinkhz lets you specify
      CPU_SPEED in Khz
      cbe7fc8b
  36. 18 Dec, 2002 1 commit