1. 04 Feb, 2005 1 commit
    • Timothy Stack's avatar
      · 6f545cf0
      Timothy Stack authored
      Some more robot integration.
      
      	* event/lib/event.h, event/lib/event.c: Add some
      	event_notification creation functions that get used in
      	event-sched.
      
      	* event/sched/event-sched.c, event/sched/rpc.h,
      	event/sched/rpc.cc: Sync the start of event time with the
      	robots reaching their initial positions.  This is done by
      	creating a master event-sequence that takes care of sending
      	the SETDEST events and then starting the Simulator timeline.
      
      	* mote/tbuisp.in: Use node_reboot instead of ssh'ing in.
      
      	* robots/GNUmakefile.in: Don't build tbsetdest if ulsshxmlrpcpp is
      	not available.
      
      	* robots/emc/loclistener.in: Clear the destination values for a
      	node when it reaches its destination.
      
      	* robots/primotion/garcia-pilot.cc,
      	robots/primotion/pilotClient.cc: Some cleanup and debugging.
      
      	* robots/primotion/wheelManager.cc: Check the rear sensors for
      	obstructions and then decide which way to pivot.
      
      	* robots/rmcd/pilotConnection.h, robots/rmcd/pilotConnection.c,
      	robots/rmcd/rclip.h: Even more tweaking.
      
      	* robots/tbsetdest/tbsetdest.cc: Don't generate points that are
      	outside the camera bounds or inside an obstacle.
      
      	* robots/vmcd/visionTrack.c, robots/vmcd/vmcd.h,
      	robots/vmcd/vmcd.c:  Add more debugging output.
      
      	* tbsetup/os_setup.in: Removed the robot hack used when deciding
      	which nodes to reconfig/reboot.  Added a robot hack to avoid
      	rebooting a robot whose mote is being os_load'd, since it would
      	interrupt tbuisp which does the reboot anyways.  Also fixed a
      	small typo.
      
      	* tbsetup/ns2ir/node.tcl, tbsetup/ns2ir/sim.tcl.in: Oops, forgot
      	to convert degrees to radians.
      
      	* tbsetup/ns2ir/topography.tcl: When checking for node destination
      	points in obstacles, include the implicit exclusion zone.
      
      	* tmcd/common/bootsubnodes: Add empty "mote" case.
      
      	* tmcd/linux-sg/GNUmakefile.in: Make some of the /etc subdirs when
      	doing the install.
      
      	* tmcd/linux-sg/rc.stargate: Start garcia-pilot.
      
      	* vis/floormap.in: Add options for showing the camera bounds,
      	obstacle exclusion zones, and displaying vnames instead of pnames.
      
      	* www/ledpipe.php3: Finally figured out how to use a socket
      	instead of popening a perl script.
      
      	* www/robotmap.php3: Add checkboxes for displaying/not displaying
      	the camera bounds and obstacle exclusion zones.  Add a legend
      	showing what actual vs. destination points are.  Pass pid/eid
      	through to vis/floormap if it is given.
      
      	* www/showexp.php3: Add a "Robot Map" link to experiments that
      	have allocated garcias.
      
      	* www/floormap/map_legend_node.gif,
      	www/floormap/map_legend_node_dst.gif: Icons used by the robot map
      	legend.
      
      	* www/floormap/robots-4.jpg: Added an obstacle around the entryway
      	so people are slightly less likely to trip over the robots.  Added
      	a coordinate system legend to the top left corner.
      
      	* www/tutorial/mobilewireless.php3: Add links to David's movie of
      	the robot making its way around the pillar.
      
      	* www/tutorial/robot_anim.gif: A nifty gifanim clip of the robot
      	movie.
      
      	* xmlrpc/emulabserver.py.in: Pull the camera data from the DB,
      	instead of returning hardcoded stuff.
      6f545cf0
  2. 25 Jan, 2005 3 commits
  3. 24 Jan, 2005 1 commit
    • Timothy Stack's avatar
      · 3c1a5bad
      Timothy Stack authored
      Robot related stuff: power via e-mail, client-install fixups, checking
      coords against camera boundaries.
      
      	* configure, configure.in: Add tbsetup/power_mail.pm to the list
      	of template files.
      
      	* doc/cross-compiling.txt: More stargate notes.
      
      	* event/sched/rpc.cc: Updates for the addition of the cameras
      	table.
      
      	* robots/GNUmakefile.in, robots/emc/GNUmakefile.in,
      	robots/mtp/GNUmakefile.in, robots/rmcd/GNUmakefile.in,
      	robots/tbsetdest/GNUmakefile.in, robots/vmcd/GNUmakefile.in:
      	client-install fixups.
      
      	* tbsetup/GNUmakefile.in: Add power_mail.pm.
      
      	* tbsetup/os_setup.in: Don't skip reboot of robots anymore.
      
      	* tbsetup/power.in: Add special case for a power_id of "mail",
      	which calls into the power_mail.pm backend.
      
      	* tbsetup/power_mail.pm.in: E-mail backend for power, it sends an
      	e-mail to tbops and waits for the outlets.last_power value to be
      	updated from the power.php3 web page.
      
      	* tbsetup/ns2ir/parse-ns.in: Add the contents of the cameras table
      	to the TBCOMPAT namespace.
      
      	* tbsetup/ns2ir/sim.tcl.in: More checking of "setdest" inputs.
      
      	* tbsetup/ns2ir/topography.tcl: Update the checkdest method to
      	check destination points against the camera list.
      
      	* www/powertime.php3: Webpage used to update the last power time
      	for nodes.
      
      	* www/shownode.php3: Add "Update Power Time" menu button.
      3c1a5bad
  4. 22 Jan, 2005 1 commit
  5. 17 Jan, 2005 2 commits
    • Timothy Stack's avatar
      · 1e18722e
      Timothy Stack authored
      More robot tweaks:
      
      	* event/sched/event-sched.c: Start rmcd, then vmcd.
      
      	* event/sched/rpc.cc: Add camera dimensions to the config file.
      
      	* robots/emc/emcd.c: Add camera dimensions to the config file and
      	destroy vmc's position_list when it disconnects.
      
      	* robots/mtp/mtp.x, robots/mtp/mtp.c: Add dimensions to the camera
      	config and add a command_id field to the update_position packet.
      
      	* robots/primotion/garcia-pilot.cc: Move the decl of the acpGarcia
      	object below daemon(3) since it doesn't seem to like it when the
      	parent process dies and fix the log file creation.
      
      	* robots/primotion/pilotClient.cc: Pass the command_id back in any
      	update_position packets.
      
      	* robots/rmcd/rmcd.c: Use the command-id to distinguish between
      	STOPs for the sake of a GOTO and a wiggle.
      
      	* robots/vmcd/visionTrack.h, robots/vmcd/visionTrack.c: Only
      	coalesce packets from different cameras (duh) and mess with the
      	tolerances a little more.
      
      	* xmlrpc/emulabserver.py.in: Add some rough camera dimensions.
      1e18722e
    • Timothy Stack's avatar
      · bf489797
      Timothy Stack authored
      More robot integration and some event system updates.
      
      	* configure, configure.in: Detect rsync for loghole and add
      	utils/loghole to the list of template files.
      
      	* db/libdb.pm.in, db/xmlconvert.in: Add virt_node_startloc to the
      	list of virtual tables.
      
      	* event/lib/event.h, event/lib/event.c, event/lib/tbevent.py.tail:
      	Add event_stop_main function to break out of the event_main()
      	loop.  Add timeline to the address tuple.
      
      	* event/sched/GNUmakefile.in, event/sched/error-record.h,
      	event/sched/error-record.c, event/sched/event-sched.8,
      	event/sched/event-sched.h, event/sched/event-sched.c,
      	event/sched/group-agent.h, event/sched/group-agent.c,
      	event/sched/listNode.h, event/sched/listNode.c,
      	event/sched/local-agent.h, event/sched/local-agent.c,
      	event/sched/node-agent.h, event/sched/node-agent.cc,
      	event/sched/queue.c, event/sched/rpc.h, event/sched/rpc.cc,
      	event/sched/simulator-agent.h, event/sched/simulator-agent.c,
      	event/sched/timeline-agent.h, event/sched/timeline-agent.c:
      	Updated event scheduler, not completely finished, but well enough
      	along for the robots.
      
      	* lib/libtb/GNUmakefile.in, lib/libtb/popenf.h,
      	lib/libtb/popenf.c, lib/libtb/systemf.h, lib/libtb/systemf.c: Add
      	some handy versions of system/popen that take format arguments.
      
      	* lib/libtb/tbdefs.h, lib/libtb/tbdefs.c: Add some more event and
      	object types.
      
      	* tbsetup/assign_wrapper.in: Add the virt_node_startloc building
      	to desires string for a node.
      
      	* tbsetup/ptopgen.in: Add a node's location to the feature list.
      
      	* tbsetup/tbreport.in: Display the timeline/sequence an event is a
      	part of.
      
      	* tbsetup/ns2ir/GNUmakefile.in: Add timeline, sequence, and
      	topography files.
      
      	* tbsetup/ns2ir/node.tcl: Add initial position for nodes and allow
      	them to be attached to "topographys".
      
      	* tbsetup/ns2ir/parse-ns.in: Make a hwtype_class array with a
      	node_type's class.  Make an 'areas' array that holds the
      	buildings where nodes are located.  Make an 'obstacles' table
      	with any obstacles in the building.
      
      	* tbsetup/ns2ir/parse.tcl.in: Move named-args function from
      	tb_compat.tcl to here.  Add reltime-to-secs function that converts
      	time given in a format like "10h2m1s" to a seconds value, used in
      	"$ns at" so its easier to write time values.  Add "K", "Kb", and
      	"Kbps" as possible units for bandwidth (only the lowercase
      	versions were available before).
      
      	* tbsetup/ns2ir/program.tcl: Add "dir" and "timeout" attributes,
      	although they don't go anywhere at the moment.
      
      	* tbsetup/ns2ir/sequence.tcl, tbsetup/ns2ir/timeline.tcl,
      	tbsetup/ns2ir/topography.tcl: Initial versions.
      
      	* tbsetup/ns2ir/sim.tcl.in: Add support for timelines and
      	sequences.  Add 'node-config' method to change the default
      	configuration for nodes produced by the Simulator object.  Send an
      	initial MODIFY event to any trafgen objects so their configuration
      	gets through, even when there are no start/stop events.  Move
      	event parsing to the 'make_event' method.
      
      	* utils/loghole.1, utils/loghole.in: Loghole utility, used for
      	retrieving logs from experimental nodes and creating archives of
      	the logs.
      
      	* xmlrpc/emulabclient.py.in: Escape any strange characters in the
      	output field.
      
      	* xmlrpc/emulabserver.py.in: Add virt_node_startloc to the list of
      	virtual_tables.  Add emulab.vision_config and
      	emulab.obstacle_config methods for getting information pertaining
      	to the robots.  Change the OSID listing to include more fields.
      	Add a "physical" aspect to experiment.info to get information
      	about the physical nodes.  Add parent field to the events in the
      	array returned by eventlist.  Add sshdescription to get extra
      	information needed to log into a vnode.  Add node.statewait so you
      	can wait for nodes to come up.
      bf489797
  6. 07 Nov, 2004 1 commit
    • Timothy Stack's avatar
      · f95e336d
      Timothy Stack authored
      Change to the SSL version of the event scheduler.
      
        * db/libdb.py.in, xmlrpc/emulabserver.py.in: Only add the testbed
          library path to sys.path if it is not already there.
      
        * event/sched/GNUmakefile.in: Make the SSL version of the scheduler
          the default instead of the SSH version and statically link the
          executable.
      
        * event/sched/event-sched.c: Pass the default SSL port number (3069)
          to RPC_init.
      
        * event/sched/rpc.cc: Bring the SSL code up to date: read the cert
          from the user's home directory, make the connection persistent,
          and use TBROOT as the request path, so the development version of
          the XML-RPC library is used when appropriate.
      
        * xmlrpc/sslxmlrpc_server.py.in: Updated to let the user select from
          a set of allowed library paths where the 'emulabserver' module
          should be imported from.  Import the 'emulabserver' module after the
          fork so we always get the latest version of the module.  Twiddled
          the necessary bits to turn on persistent connection support.
      f95e336d
  7. 29 Oct, 2004 1 commit
    • Timothy Stack's avatar
      · c61858c7
      Timothy Stack authored
      Make the hurting stop.  Make sshxmlrpc auto-detect things, fails over
      properly, and dump useful information when it is unable to deal with
      the peer.
      
        * xmlrpc/sshxmlrpc.py: Major update.  It now tries to autoconfigure
          itself by scanning the path for "ssh" and "plink.exe" (although I
          haven't actually tried it on windows).  Environment variables can
          now be used to turn on debugging and set the command to use for
          doing the ssh.  Before running ssh, it will check for an agent or
          a passphrase-less key and prints a warning if it finds neither.
          The last five lines read from the server, as well as the standard
          error output, are stored so they can be dumped later; helpful for
          figuring out what is actually being run on the other side.  The
          protocol layer between ssh and xml-rpc will now respond to a
          "probe" header so that clients can figure out who they are talking
          too.  The server side will now properly detect a closed connection
          and not write anything, which means no more annoying "Write to
          stdout failed" messages.  You can now pass additional options to
          ssh and set the identity.  The module can be run standalone, with
          the default action being to probe the peer:
      
            $ ./sshxmlrpc.py ssh://boss/xmlrpc
            Probe results for: ssh://boss/xmlrpc
              response time=1.49 s
            Response Headers
              date: Wed Oct 27 16:10:58 2004
      	content-length: 0
      	probe: /usr/testbed/devel/stack/lib/sshxmlrpc.py
      	probe-response: EmulabServer
      
        * xmlrpc/sshxmlrpc_server.py.in: Set the value returned by a "probe"
          to the name of the invoked module.  This way, the other side can
          figure out who they are talking to (e.g. EmulabServer
          vs. experiment vs. fs vs. osid).
      
        * event/sched/event-sched.c, event/sched/rpc.cc, event/sched/rpc.h,
          xmlrpc/script_wrapper.py.in: Multiple paths (e.g. xmlrpc,
          $prefix/sbin/sshxmlrpc_server.py) are now probed before giving up.
          Force the use of the user's default identity and protocol one.
          For event-sched, a single connection is now made at startup and
          dropped before going into the event loop.
      
        * event/sched/GNUmakefile.in: Add a dependency for the install
          target and add -I$(OBJDIR) to the CXXFLAGS.
      
        * install/ports/ulsshxmlrpcpp/Makefile,
          install/ports/ulsshxmlrpcpp/distinfo,
          install/ports/ulsshxmlrpcpp/pkg-descr: Bump version number to 1.1
          and tweak the description.
      
        * config.h.in, configure, configure.in: Add a "#define TBROOT" that
          has the install prefix.
      c61858c7
  8. 24 Sep, 2004 2 commits
  9. 23 Sep, 2004 1 commit
  10. 08 Sep, 2004 1 commit
  11. 30 Aug, 2004 1 commit
    • Leigh B. Stoller's avatar
      The bulk of the event system changes. · 9aa6b5ca
      Leigh B. 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
  12. 05 Aug, 2004 1 commit
  13. 15 Jul, 2004 1 commit
    • Leigh B. Stoller's avatar
      Overview: Add Event Groups: · ed964507
      Leigh B. Stoller authored
      	set g1 [new EventGroup $ns]
      	$g1 add  $link0 $link1
      	$ns at 60.0 "$g1 down"
      
      See the new advanced tutorial section on event groups for a better
      example.
      
      Changed tbreport to dump the event groups table when in summary mode.
      At the same time, I changed tbreport to use the recently added
      virt_lans:vnode and ip slots, decprecating virt_nodes:ips in one more
      place. I also changed the web interface to always dump the event and
      event group summaries.
      
      The parser gets a new file (event.tcl), and the "at" method deals with
      event group events by expanding them inline into individual events
      sent to each member. For some agents, this is unavoidable; traffic
      generators get the initial params in the event, so it is not possible
      to send a single event to all members of the group. Same goes for
      program objects, although program objects do default to the initial
      command now, at least on new images.
      
      Changed the event scheduler to load the event groups table. The
      current operation is that the scheduler expands events sent to a
      group, into a set of distinct events sent to each member of the
      group. At some point we proably want to optimize this by telling the
      agents (running on the nodes) what groups they are members of.
      
      Other News: Added a "mustdelay" slot to the virt_lans table so the
      parser can tell assign_wrapper that a link needs to be delayed, say if
      there are events or if the link is red/gred. Previously,
      assign_wrapper tried to figure this out by looking at the event list,
      etc. I have removed that code; see database-migrate for instructions
      on how to initialize this slot in existing experiments. assign_wrapper
      is free to ignore or insert delays anyway, but having the parser do
      this makes more sense.
      
      I also made some "rename" changes to the parser wrt queues and lans
      and links. Not really necessary, but I got sidetracked (for several
      hours!) trying to understand that rename stuff a little better, and
      now I do.
      ed964507
  14. 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
  15. 16 Jun, 2004 1 commit
  16. 09 Jan, 2004 1 commit
    • 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
  17. 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
  18. 18 Nov, 2003 1 commit
    • Leigh B. Stoller's avatar
      Minor additions for Shashi: · def28c32
      Leigh B. Stoller authored
      * Make the NS file an optional argument to swapexp modify; when not
        given the prerun phase is skipped. Instead, go directly to tbswap
        (run assign, etc).
      
      * Add NSESWAP event so that Shashi can fire off the above modify using
        tevc from an experimental node.
      
      	tevc -e pid/eid now ns nseswap
      
      * Change event scheduler to react to above event, and fire off:
      
      	nseswap pid eid
      
        as the user. The script should do its thing, and *exec* swapexp with
        the proper args as quickly as possible (so that the event scheduler
        is not hung up for too long. The script is invoked as the user,
        since the event scheduler is running as the user.
      def28c32
  19. 05 Nov, 2003 1 commit
    • Leigh B. Stoller's avatar
      Middle part of the event system changes. The main part of this change · 54bc15c4
      Leigh B. Stoller authored
      is to add HMACs to events to ensure they that events cannot be
      injected into an experiment by an unauthorized client.
      
      * The frontend now generates a secret key for each experiment and
        stores that into a file and in the DB.
      
      * Each of the event clients, as well as the event producers
        (scheduler, tevc) have a new -k option to specify the name of the
        file. Two new event library functions were added for clients to give
        the key:
      
          event_handle_t
          event_register_withkeyfile(char *name, int threaded, char *keyfile);
      
          event_handle_t
          event_register_withkeydata(char *name, int threaded,
      	   		       unsigned char *keydata, int keylen);
      
      * When the library is in possesion of a key, it will generate an HMAC
        and attach it to outgoing notifications. A client receiving a
        notification will compute an HMAC and compare it against the HMAC in
        the notification. If they do not compare, the notification is
        dropped with a warning message printed (the client callback never
        gets the notification). If the client has not provided a key, then
        the HMAC in the incoming notification is ignored.
      
      * The scheduler also takes a -k option, and will compute HMACs for all
        of the static events ahead of time. That keeps it off the critical
        path.
      
      * The tevc client also takes a -k option. However, tevc will always
        try to find the keyfile (default path) so that it can attach the
        HMAC to dynamic events before sending them to the scheduler (which
        will check to make sure it matches). The scheduler will not accept
        dynamic events without unless the HMAC is present and matches.
      
      * I have rebuilt the elvin librarys, removing all of the X goop and
        the SSL goop. Smaller binaries. So, I had to add -lcrypto to all of
        the client makefiles to that programs link.
      
      * The program-agent got a few more changes. The command string is no
        longer passed inside the event; it comes in when the program agent
        is started, via a config file generated from tmcd data. This gets
        rid of our mostly insecure remote execution facility.
      54bc15c4
  20. 01 Aug, 2003 1 commit
  21. 01 May, 2003 2 commits
    • Leigh B. Stoller's avatar
      Fix minor bug. · 758ff8f8
      Leigh B. Stoller authored
      758ff8f8
    • Leigh B. Stoller's avatar
      Add the long desired halt/swap event directives. You can now put this · 5116cd33
      Leigh B. Stoller authored
      in your NS file:
      
      	$ns at 2000.0 "$ns halt"
      or
      	$ns at 2000.0 "$ns swapout"
      
      The first causes the experiment to terminate, the later causes it to
      swap out. I know some wiseass is going to ask for a swapin event!
      You can also send these events from tevc:
      
      	tevc -e testbed/stopme now ns halt
      or
      	tevc -e testbed/stopme now ns swapout
      
      Does it need to be said that this is insecure? That we could get swap
      wars going on as people try to get nodes for their experiments by
      swapping out someone else? Well, if that happens we will apply the big
      hammer and squash their nuts.
      
      Details: I added an SIMULATOR "agent", and HALT/SWAPOUT event types in
      the usual places. In the event scheduler, SIMULATOR events are treated
      specially (not actually sent anywhere), but handled internally. Very
      convenient, cause the scheduler runs as the person who swapped the
      experiment in, and so I just run either swapexp or endexp, right from
      the scheduler. At some point we need to give the permission issue some
      thought.
      5116cd33
  22. 15 Apr, 2003 1 commit
  23. 28 Feb, 2003 1 commit
    • Leigh B. Stoller's avatar
      Allow for the vnode in the virt_agents entries to be a "wildcard" · 494c0610
      Leigh B. Stoller authored
      (okay, a "*") in which case it means to not insert a specific node_id
      into the event, but rather leave it to the subscribers to specify
      what they need (in the case of the delay agent pid/eid/lan/lan-vnode.
      The new assign_wrapper inserts these entries like this. Old stuff will
      continue to work of course.
      494c0610
  24. 12 Sep, 2002 1 commit
  25. 10 Jul, 2002 1 commit
  26. 07 Jun, 2002 1 commit
  27. 23 May, 2002 1 commit
  28. 06 May, 2002 2 commits
  29. 05 May, 2002 1 commit
  30. 23 Apr, 2002 1 commit
    • Leigh B. Stoller's avatar
      Fix original source error; A dynamic event with a shorter timeout did not · fec09f29
      Leigh B. Stoller authored
      interupt the current next up event cause Ian's code just grabbed it
      off the queue and went into select. I converted this code to use a
      condition variable and a timed wait. If a new event comes in, signal
      the waiter who can recheck to see of the head of the queue has
      changed. Seems to work, but not well tested. This bug reported by Rob!
      fec09f29
  31. 22 Mar, 2002 1 commit
    • Leigh B. Stoller's avatar
      Add code to the parser to populate a new virt_agents table, which · 2917542a
      Leigh B. Stoller authored
      provides a mapping from an object ($cbr0) to the node on which the
      agent is running ($nodeA). It also includes the type of agent
      (TRAFGEN, LINK, etc). There were a number of reasons for adding this
      table:
      
      * To avoid a series of specialized table lookups in the event
        scheduler to map from a name (link0) to the node on which the agent
        is running. Previously, it was looking the delays table and the
        virt_trafgens table. Well, now it just needs to look at this one
        table and store the mapping internally. When a dynamic event comes
        in, we can figure out where to send it easily.
      
      * For NSE traffic generation. Unlike the simple TG based CBRs, Shashi
        wants to be able to send events to any of the objects in the config
        (udp0, telnet0, ftp0, etc). Well, the virt_trafgens table certainly
        does not store that info, and it would have been painful to work
        this into it. For every agent/application, just add an entry in the
        virt_agents table and the scheduler knows where to send the events.
      
      * It nicely supports the new program object; just plug an entry in the
        virt_agents table.
      
      Okay, there is one messy aspect; delays nodes! Delay nodes are not
      computed until after assign wrapper runs, so in addition to munging
      the static event list in assign_wrapper, we now munge the virt_agents
      table as well. Not much to do about this; delay nodes are handled
      outside the normal path everywhere.
      2917542a
  32. 18 Mar, 2002 1 commit
    • Leigh B. Stoller's avatar
      First cut at dynamic events. Current status is this: · bf806164
      Leigh B. Stoller authored
      1. The tevc client can run on either a client node or on users. The
         command line syntax is like this:
      
      	Usage: ./tevc [-s server] [-c] event
      	       ./tevc [-s server] -e pid/eid time objname event [args ...]
      	       time: 'now' or '+seconds' or [[[[yy]mm]dd]HH]MMss
      	Examples:
      	       ./tevc -e pid/eid now cbr0 set interval_=0.2
      	       ./tevc -e pid/eid +10 cbr0 start
      	       ./tevc -e pid/eid +20 cbr0 stop
      
         The -s arg defaults to BOSSNODE when not given. Only root can send
         TBCONTROL events (-c), but that part of tevc is probably going to be
         killed off when we convert to sending TBCONTROL via tmcc/tmcd (Rob
         is working on that). The -e option is required for dynamic events,
         and is not defaulted yet.
      
      2. There is no real checking of arguments. The event is sent over to
         the scheduler, which tries to map it into an agent running on a
         node. If the map fails (say, no such trafgen, or no delay node on
         that link), or if the event makes no sense for that agent, the
         event fails and the user never hears about it. The solution for
         this is a back channel so that the scheduler can generate an error
         condition that the user sees.
      
      3. To facilitate better checking, I think we need to change the DB
         tables so that there is a mapping between the type of agent
         (object) and the kinds of events it can take. This would replace
         the flat event_eventtypes table. The event_scheduler could load
         this table at init time so that it can do a quick check on dynamic
         events when they arrive and return an error when we support error
         values.
      
      4. The scheduler initialization phase tries to determine what agents
         are valid for an experiment (thats where you can send events) so
         that when a user sends an event to cbr3, the event scheduler can
         determine what/where that is. My method for determining this is
         totally ad-hoc right now; read the virt_trafgens and delays table.
         These are the only two types of configurable agents we support.
         This is rather bogus! I think assign_wrapper or some other script
         in the front end needs to collect this data into a single table for
         the scheduler to read. Not sure yet; needs more thought. Anyway, I
         build a mapping table that can be searched when a dynamic event
         comes in; this avoids a DB table lookup in the critical path.
      bf806164
  33. 07 Mar, 2002 1 commit
    • Leigh B. Stoller's avatar
      Isolate the pain of building threaded (and statically linked) event · 4dad8ebe
      Leigh B. Stoller authored
      system programs. Build two versions of the event library, one for non
      threaded programs and another (libevent_r.a) for threaded versions.
      Remove all that -pthread goo from all of the makefiles, except for the
      scheduler (which is threaded); it gets linked as before, but with
      -levent_r instead. If you try and use the threaded API without the
      proper link, the library will print an error message and quit.
      4dad8ebe
  34. 06 Mar, 2002 1 commit