1. 01 Nov, 2005 1 commit
  2. 25 Oct, 2005 1 commit
  3. 19 Aug, 2005 1 commit
    • Timothy Stack's avatar
      · a1c355a5
      Timothy Stack authored
      Bring linktest in line with the new event system world order and do some
      generic cleanup.  I'm pretty sure I broke backwards compatibility with
      old disk images though...
      
      	* configure, configure.in: Remove linktest.h.in from the list of
      	template files.
      
      	* event/linktest/GNUmakefile.in: Don't make subdirectories for
      	executables since it can mess up the dependencies.  Don't install
      	tb_compat.tcl stuff anymore.  Check for '/usr/local/bin/pathrate'
      	and friends, and print out a warning if they are not found.  Make
      	a version file for the linktest daemon.
      
      	* event/linktest/linktest.c: Only subscribe to the events we care
      	about 'STOP/KILL'.  Subscribe to TIME START events and kill any
      	linktests that are in progress.  Send events through the local
      	elvind instead of running tevc.
      
      	* event/linktest/linktest.pl.in: Don't run the modified NS anymore
      	to generate the topology file, use gentopofile to do that.  Send
      	COMPLETE events to indicate that the tests were finished instead
      	of STOP so it works with event-sequences.  Use emulab-sync to
      	report errors between linktest daemons.  In addition to sending
      	REPORT events, send LOG events to the SIMULATOR agent so the
      	messages end up in the report e-mail.  Fix wait_all so it collects
      	child processes immediately and doesn't leave zombies lying
      	around.  Make the static route test work with topologies that
      	aren't fully connected.  Change ownership of the linktest error
      	files from root to the swapper.  Bump latency tolerance up to
      	2.5ms.
      
      	* event/linktest/ltevent.c: Use event_schedule instead of
      	event_notify so the events go through the scheduler.
      
      	* event/linktest/run_linktest.pl.in: Wait for COMPLETE events
      	insetad of STOPs.
      
      	* event/linktest/linktest.h.in: Removed.
      
      	* event/sched/error-record.c: Include linktest error output in the
      	report e-mail.
      
      	* event/sched/event-sched.c: Linktest now sends COMPLETE events
      	for START events.
      
      	* tbsetup/gentopofile.in, tmcd/common/config/rc.topomap: Piggy
      	back the generation and management of the linktest config file
      	onto the generation of the topomap.
      
      	* tbsetup/ns2ir/sim.tcl.in: Add "linktest" event to the Simulator
      	object that runs linktest at level 3 (latency, static routing, and
      	loss).
      
      	* tmcd/common/libsetup.pm: Add TMLTMAP constant that contains the
      	path to the node local linktest config file.
      
      	* tmcd/common/rc.linktest: Pass '-u' option to the linktest daemon
      	so it knows what user should to change ownership of files to.
      
      	* tmcd/freebsd/jail/mkjail.pl: Copy the linktest config file
      	(ltmap) into the jail.
      a1c355a5
  4. 22 Jun, 2005 1 commit
    • Leigh B. Stoller's avatar
      Added my simplistic link tracing and monitoring. Example usage and · 7942119e
      Leigh B. Stoller authored
      some details can be found in the advanced tutorial that I wrote up.
      See this link:
      
      http://www.emulab.net/tutorial/docwrapper.php3?docname=advanced.html#Tracing
      
      The basic idea is that each virt_lan entry gets a couple of new slots
      describing the type of tracing that is desired.
      
        traced tinyint(1) default '0',
        trace_type enum('header','packet','monitor') NOT NULL default 'header',
        trace_expr tinytext,
        trace_snaplen int(11) NOT NULL default '0',
        trace_endnode tinyint(1) NOT NULL default '0',
      
      There is a new physical table called "traces" that is a little bit
      like the current delays table. A new tmcd command returns the trace
      configuration to the client nodes (tmcd/common/config/rc.trace).
      
      The delays table got a new boolean called "noshaping" that tells the
      delay node to bridge, but not set up any pipes. This allows us to
      capture traffic at the delay node, but without much less overhead on
      the packets.
      
      The pcapper got bloated up to do packet capture and more event stuff.
      I also had to add some mutex locking around calls into the pcap
      library and around malloc, since the current setup used linuxthreads,
      which is not compatable with the standard libc_r library. I was
      getting all kinds of memory corruption, and I am sure that if someone
      breathes on the pcapper again, it will break in some new way.
      7942119e
  5. 04 Apr, 2005 1 commit
    • Timothy Stack's avatar
      · 463ee6b1
      Timothy Stack authored
      Mote and robot related stuff.  The main thing is the addition of relay
      capabilities to capture and related things.
      
      	* GNUmakefile.in: Add the capture and tip subdirectories to the
      	client and client-install targets.
      
      	* configure, configure.in, config.h.in: Detect srandomdev() for
      	capture and add "mote/newmote" script.
      
      	* capture/GNUmakefile.in, capture/capture.c: Add "relay"
      	capabilities to capture.
      
      	* capture/capquery.c: Query the capserver for the relay receiver's
      	port number.
      
      	* capture/capserver.c: Small hack to return the port number
              for a node.
      
      	* db/libdb.pm.in, db/xmlconvert.in: Add virt_tiptunnels table.
      
      	* event/program-agent/program-agent.c: Change log file names to
      	something a little more user-friendly.  Add a "MODIFY" event
      	handler that lets the user set agent attributes (command, tag,
      	timeout) without having to run a program.
      
      	* event/sched/GNUmakefile.in, event/sched/console-agent.cc,
      	event/sched/console-agent.h, event/sched/event-sched.c: Add
      	console agents that can be used to snapshot a section of the
      	capture log file.
      
      	* event/sched/node-agent.cc: Some minor cleanup.
      
      	* event/sched/simulator-agent.cc, event/sched/simulator-agent.h:
      	Add the config data to the report mail.  Add a "RESET" event
      	handler that runs "loghole clean".  Save the report mail in a file
      	so it gets archived with the rest of the logs.
      
      	* lib/libtb/tbdefs.h: Add CONSOLE object type.
      
      	* mote/GNUmakefile.in, mote/newmote: Add newmote script, just a
      	quick hack to add motes to the DB.
      
      	* mote/tbuisp.in: Add another backend for loading motes through
      	their relay capture server.
      
      	* robots/mtp/mtp_dump.c: Dump the min/max values for x and y,
      	handy for figuring out the bounds of the camera.
      
      	* sql/database-fill.sql: Change the RELOAD-MOTE/SHUTDOWN ->
      	ALWAYSUP/SHUTDOWN mode transition to ALWAYSUP/ISUP since stated
      	doesn't seem to run triggers after a state change by a mode
      	transition.
      
      	* tbsetup/tbreport.in: Change the ordering of the eventlist so it
      	displays event-sequences appropriately.
      
      	* tbsetup/ns2ir/GNUmakefile.in, tbsetup/ns2ir/console.tcl,
      	tbsetup/ns2ir/node.tcl, tbsetup/ns2ir/parse.tcl.in,
      	tbsetup/ns2ir/sim.tcl.in: Add a "console" agent that represents
      	the serial console for a node.
      
      	* tbsetup/ns2ir/sequence.tcl: Add an "append" method so it is
      	easier to build sequences dynamically.
      
      	* tbsetup/ns2ir/topography.tcl: Make checkdest available to
      	regular users.
      
      	* tip/GNUmakefile.in, tip/tiptunnel.c: Add support for uploading a
      	file to a relay version of capture and exporting the end
      	connection as a pty.
      
      	* tmcd/decls.h, tmcd/common/libsetup.pm: Bump version number since
      	the dosubnodelist change is not backwards compatible.
      
      	* tmcd/tmcd.c: Make dosubnodelist and dosubconfig callable even
      	when a node isn't allocated.  Add dotiptunnels command that
      	returns which serial consoles are to be mounted on a node.  Add
      	mote version of subconfig that returns information needed to
      	startup the relay version of capture.
      
      	* tmcd/common/bootsubnodes: For motes, startup the relay version
      	of capture (XXX stargate specific).
      
      	* tmcd/common/libsetup.pm, tmcd/common/libtmcc.pm,
      	tmcd/common/config/rc.config, tmcd/common/config/rc.tiptunnels:
      	Client side changes for mounting another nodes serial line.
      
      	* tmcd/common/rc.bootsetup: Always boot the subnodes, even when
      	free.  This is used for motes since their capture needs to be up
      	for reloading at the time.
      
      	* tmcd/linux/ixpboot: Shuffle some code around so the script
      	doesn't fail if the ixp isn't allocated.
      
      	* utils/loghole.in: Add "digest.out" and "report.mail" as global
      	logs to be saved in archives and display the "report.mail" file
      	when showing a loghole archive.
      
      	* xmlrpc/emulabserver.py.in: Scrub more of the return values to
      	get rid of "None"s.
      463ee6b1
  6. 07 Mar, 2005 1 commit
  7. 08 Feb, 2005 1 commit
  8. 02 Feb, 2005 1 commit
    • Kirk Webb's avatar
      · 97e8e31d
      Kirk Webb authored
      oops - hook in rc.stargate.
      97e8e31d
  9. 20 Jan, 2005 1 commit
  10. 18 Jan, 2005 1 commit
  11. 11 Jan, 2005 1 commit
  12. 06 Jan, 2005 1 commit
    • Leigh B. Stoller's avatar
      A bunch of boot changes. Read carefully. · 94ccc3f4
      Leigh B. Stoller authored
      * Add boot_errno to the nodes table so that nodes can report in a
        subcode to indicate what went wrong. At present, we do not report any
        real error codes; that is going to take some time to work out since it
        will reqiure a bunch of changes to the boot scripts.
      
      * Add new table node_bootlogs to store logs provided by the nodes. Not
        a full console log, but a log of the tmcd client side part. We can
        make it a full log if we want though; just means mucking about with
        the boot phase a bit.
      
      * Add new state transition to NORMALv2 and PCVM state machines. "TBFAILED"
        is a new state that is sent (after TBSETUP) if a node fails somewhere in
        the tmcd client side.
      
      * Change TBNodeStateWait() to take a list of states (instead of single
        state) and an optional pass by reference parameter to return the actual
        state that the node landed in. Change all calls to TBNodeStateWait() of
        course.
      
      * Change os_setup (and libreboot in wait mode) to look for both TBFAILED
        and ISUP. If a TBFAILED event is seen, we can terminate the wait early
        and not retry os_setup on physical nodes (although still retry virtual
        nodes). The nice thing about this is that the wait should terminate much
        earlier (rather then waiting for timeout), especially for virtual nodes
        which can take a really long time when there are a couple of hundred.
      
      * Add new routines dobooterrno() and dobootlog() to tmcd. Bump version
        number and increase the buffer size to allow for the larger packets that
        a console log wikk generate (added MAXTMCDPACKET variable, set to 0x4000).
      
      * Add new -f option to tmcc to specify a datafile to send along as the last
        argument to tmcd. This is more pleasing then trying to send a console log
        in on the command line. For example: "tmcc -f /tmp/log BOOTLOG" will send
        a BOOTLOG command along with the contents of /tmp/log.
      
        Also close the write side of the pipe so that server sees EOF on
        read. See aside comment below.
      
      * Changes to rc.bootsetup:
           1. Use perl tricks to capture all output, duping to the console and to
              a log file in /var/emulab/logs.
           2. On any error, send a status code (boot_errno) and the bootlog to
              tmcd.
           3. Generate a TBFAILED state transition.
      
      * Changes to rc.injail:
           1. Same as rc.bootsetup, but do not send log files; that would pummel
              boss. Leave them on the physical node.
      
      * Change vnodesetup (which calls mkjail) to watch for any error and send a
        TBFAILED state transition. This should catch almost all errors, and
        dramatically reduce waiting when something fails.
      
      * Changes to rc.cdboot are essentially the same as rc.bootsetup, although a
        bootlog is sent all the time (success or failure), and I do not generate
        a boot_errno yet. Also, instead of TBFAILED, generate a PXEFAILED state
        since the CDROM is actually operating within the PXEFBSD opmode. I have
        yet to work this into the rest of the system though; waiting to get a new
        CD built and actually experiment with it.
      
      * Add new menu option and web page to display the node bootlog. We store
        only the lastest bootlog, but maybe someday store more then one. Display
        boot_errno on node page.
      
      Aside: I made a big mistake in the tmcd protocol; I did not envision
      passing more then a small amount of data (one fragment) and so I do not
      include a record terminator (ie: close of the write side on the client
      sends EOF) or a size field at the beginning. No big deal since small
      requests are sent in one fragment and the server sees the entire
      thing. Well, with a large console log, that will end up as multiple
      fragments, and the server will often not get the entire thing on the first
      read, and there are no subsequent reads (with no EOF or known size, it
      would block forever). Well, fixing this in a backwards compatable manner
      (for old images) was way too much pain. Instead, tmcc now closes the write
      side, and the server does subsequent reads *only* in the new dobbootlog()
      routine. Note that it *is* possible to fix this in a backwards compatable
      manner, but I did not want to go down that path just yet.
      94ccc3f4
  13. 22 Nov, 2004 1 commit
  14. 11 Nov, 2004 1 commit
  15. 25 Oct, 2004 1 commit
  16. 18 Oct, 2004 1 commit
  17. 14 Oct, 2004 1 commit
  18. 08 Oct, 2004 1 commit
    • Mike Hibler's avatar
      Initial steps toward a hardware-assisted (switch VLAN) firewall implementation. · 0527441a
      Mike Hibler authored
      This checkin adds the necessary NS and client-side changes.
      
      You get such a firewall by creating a firewall object and doing:
      
      	$fw set-type ipfw2-vlan
      
      In addition to the usual firewall setup, it sets the firewall node command
      line to boot "/kernel.fw" which is an IPFW2-enabled kernel with a custom
      bridge hack.
      
      The client-side setup for firewalled nodes is easy: do nothing.
      
      The client-side setup for the firewall is more involved, using vlan devices
      and bridging and all sorts of geeky magic.
      
      Note finally that I don't yet have a decent set of default rules for anything
      other than a completely open firewall.  The rules might be slightly different
      than for the "software" firewall since they are applied at layer2 (and we want
      them just to be applied at layer2 and not multiple times)
      0527441a
  19. 30 Sep, 2004 1 commit
  20. 28 Sep, 2004 1 commit
  21. 24 Sep, 2004 1 commit
  22. 11 Sep, 2004 1 commit
  23. 25 Aug, 2004 1 commit
    • Mike Hibler's avatar
      Firewall support part III: client scripts. · b21e6942
      Mike Hibler authored
      Overview of simply firewall setup.
      
      Experimentor specifies in their ns file:
      
           set fw [new Firewall $ns]
           $fw style <open|closed|basic>
      
      to set up an "open" ("allow any"), "closed" ("deny any"), or "basic"
      (allow ICMP and ssh) firewall.  "basic is the default.  Additional rules
      can be added with:
      
           $fw add-rule <IPFW format rule>
           $fw add-numbered-rule <1-50000> <IPFW format rule>
      
      where the former implicitly numbers rules such that the firewall processes
      them in the order given in the NS file.  The latter allows explicit
      specification of the numbering.  Currently the rules are fixed strings,
      there is no variable substitution.  There is also no syntax checking done
      on the rules at parse time.
      
      We allocate an extra node to the experiment to serve as a firewall.
      Currently that node runs FreeBSD and uses IPFW.  In the initial configuration,
      all other nodes in the experiment will just be setup with a default route
      that points to the firewall node.  So all outbound traffic will pass through
      it.  Inbound traffic will still travel straight to the node.  This should
      prevent nodes from accidentally initiating attacks on the outside world.
      Long term we will of course enforce the firewall on all traffic, that should
      not have any effect on the NS syntax above.
      
      When a node boots, there will be an rc.firewall script that checks to see
      if there is a firewall for the experiment and if so, which node it is.
      This is done with the TMCD "firewallinfo" command which returns:
      
            TYPE=none
      
            TYPE=remote FWIP=N.N.N.N
      
            TYPE=<fwtype> STYLE=<fwstyle> IN_IF=<macaddr> OUT_IF=<macaddr>
            RULENO=<num> RULE="<ipfw command string>"
            RULENO=...
            ...
      
      In the case of no firewall we get back TYPE=none, and we continue as normal.
      Otherwise, there are two types of replies, one for a node that is being
      firewalled (TYPE=remote) and one for a node that is a firewall
      (TYPE=<fwtype> + RULES).
      
      In the TYPE=remote case, the firewall node indicated by FWIP.  This is
      the address we use for the default route.
      
      For TYPE=<fwtype>, we are the firewall, and we get STYLE and IN_IF/OUT_IF
      info.  Here TYPE indicates whether we should use ipfw or whatever.
      For now it is always ipfw.  IN_IF and OUT_IF may someday indicate the
      interfaces to use for the internal and external connections, right now
      both will indicate the control net interface.  So, after ensuring that
      the ipfw modules is loaded, we grab the provided RULE info, which includes
      both per-experiment and default rules, and setup ipfw.
      
      Issues to resolve:
             - synchronization: how to ensure firewall comes up first
             - how to better implement the firewalling
               (i.e., without the cooperation of the nodes)
             - support the equiv of linkdelays (on-node firewalling)?
             - allow firewalls within experiments?
               (ie., on experimental interfaces)
             - dynamic changing of firewall rules via events?
             - how to show firewall state in various web pages
      b21e6942
  24. 11 Aug, 2004 1 commit
  25. 13 Jul, 2004 1 commit
    • Leigh B. Stoller's avatar
      Bump version to 19. Earlier images will get static routes returned · 06a36e3c
      Leigh B. Stoller authored
      from the DB when the routertype is "static" since those images are
      likely to not have ddijk support on them. Newer images will have
      ddijk, and so will compute the routes themselves; do not send them
      back. Note that static-old implies that nodes will get the routes no
      matter what, although old images will probably barf if gets that; I
      don't view this as a problem since very people are going to request
      static-old.
      06a36e3c
  26. 30 Jun, 2004 1 commit
  27. 14 Jun, 2004 1 commit
  28. 08 Jun, 2004 1 commit
  29. 02 Jun, 2004 1 commit
  30. 01 Jun, 2004 1 commit
  31. 28 May, 2004 2 commits
  32. 25 May, 2004 2 commits
  33. 24 May, 2004 2 commits
    • Mike Hibler's avatar
      Take the vnode retry-tmcc hack (rev 1.103) back out now that the problem · e7085add
      Mike Hibler authored
      is addressed in tmcc.c
      e7085add
    • Leigh B. Stoller's avatar
      Add TBDebugTimeStamp and TBDebugTimeStampsOn, copied from · 8f00d8d4
      Leigh B. Stoller authored
      tbsetup/libtestbed.pm.in which we use on boss. I have modified these
      routines in two ways (which need to be merged back into original
      version at some point).
      
      * import/require Time::HiRes module (/usr/ports/devel/p5-Time-HiRes)
        to get higher resolution gettimeofday() function that reports
        microseconds and seconds. Change the output routine to append the
        microseconds to the original HH:MM:SS timestamps that get printed.
      
      * When turning timestamps on dynamically with TBDebugTimeStampsOn(),
        set an environment variable, and read that in so children also know
        to turn them on.
      8f00d8d4
  34. 21 May, 2004 1 commit
  35. 11 May, 2004 1 commit
  36. 09 Apr, 2004 1 commit
    • Leigh B. Stoller's avatar
      First cut at client side configuration of wireless nodes. Redhat only, · c0dcd3b6
      Leigh B. Stoller authored
      no freebsd support.
      
      The primary change is that tmcd now sends down a list of setting to
      apply to each interface, and that list is turned into a hash table,
      and provided to rc.config, which passes them along to the machine
      dependent routine in liblocsetup.
      
      Then in the linux version of liblocsetup there is a bunch of new code
      to configure wireless links using iwconfig and iwpriv, using the
      settings array.
      
      All of this is bound to change once we get more experience with it.
      c0dcd3b6
  37. 17 Mar, 2004 1 commit