1. 10 Dec, 2004 1 commit
  2. 09 Dec, 2004 3 commits
    • Leigh B. Stoller's avatar
      By the pervision of TCL, I have hidden the details: · 1c0efe2c
      Leigh B. Stoller authored
      	source tb_compat.tcl
      	set ns [new Simulator]
      
      	tb-elab-in-elab 1
      	tb-set-inner-elab-eid two-simple
      	tb-set-security-level Red
      
      	$ns run
      
      tbsetup/ns2ir/elabinelab.ns has all the goo, which is sourced from the
      NS run subroutine, using "uplevel 1" so that the context is correct.
      You can of course include you own goo, in which case the default goo
      will be skipped.
      1c0efe2c
    • Timothy Stack's avatar
      · 1f16a276
      Timothy Stack authored
      Make the dots move on the robot map web page:
      
      	* configure, configure.in: Add robots/emc/loclistener.
      
      	* event/lib/event.h, event/lib/event.c: Add some helper functions
      	for sending events and parsing args.
      
      	* event/lib/tbevent.py.tail, event/lib/tbevent.py: Add support for
      	clients that register using keyfiles.
      
      	* robots/emc/GNUmakefile.in: Install loclistener on boss.
      
      	* robots/emc/emcd.h, robots/emc/emcd.c: Send update events every
      	two seconds with the node's location.  Fill out a little more of
      	the event callback, not sure what to do with the requested
      	destination though.  Add some code to the vmc callback to store
      	position updates.  Changed the config file format to also include
      	the vname of the robot.
      
      	* robots/emc/loclistener.in: Listen for NODE MODIFY events with
      	coordinates and update the database accordingly.  Kinda sucks, but
      	it works.
      
      	* robots/emc/test_emcd.config: Add vnames to the robots to reflect
      	change in the config file format.
      
      	* tbsetup/ns2ir/node.tcl: Add nodes to the virt_agents table.
      1f16a276
    • Leigh B. Stoller's avatar
      Okay, here is the current development approach for dealing with · 5a4e9df8
      Leigh B. Stoller authored
      ElabinElab experiments that wrap another experiment, either firewalled
      or not. This instead of my security level stuff, that I decided was
      too much of a pain the user, at least for now. New NS syntax:
      
      	tb-set-inner-elab-eid two-simple
      
      In the ElabinElab file, sets the name of an existing experiment in the
      same project. Experiment is parsed, and after the parse we notice in
      tbprerun that we have an inner eid, so we reparse the NS file, only
      this time we pass in the maximum number of nodes needed by the inner
      eid (tbprerun now computes min/max nodes at prerun time, instead of
      later as first part of swapin). This number is used to allocatethe
      appropriate number of inner experimental nodes. Why do it this way?
      Cause the NS parser is the only tool we have for generating the virt
      topology, and I do not want go down the path of inventing a new
      frontend.
      
      Anyway, after the reparse, we now have the proper number of nodes in
      the wrapper experiment. Now its simply a matter of copying over the
      type and fixnode info from the inner experiment to the outer
      experiment.  Why? So that when the outer experiment is swapped in, it
      gets the nodes (of the right type/fixnode) that the inner experiment
      is going to want later, when it is swapped in by the inner emulab!
      
      Another approach would be to make elabinelab and elabinelab_eid
      options to batchexp (and thus the web form and XMLRPC interface) so
      that we can avoid the double parse. I suspect people do not want more
      crap on the web form, so I did not do it this way.
      5a4e9df8
  3. 08 Dec, 2004 1 commit
  4. 06 Dec, 2004 2 commits
    • Leigh B. Stoller's avatar
      Add the little bits for specifying security level: · 5a38a137
      Leigh B. Stoller authored
      	tb-set-security-level Green|Yellow|Orange:Red
      
      Also add a template elabinelab.ns file.
      5a38a137
    • Timothy Stack's avatar
      · abebdbc6
      Timothy Stack authored
      Minor additions to support node mobility events:
      
      	* lib/libtb/tbdefs.h, lib/libtb/tbdefs.c, sql/database-fill.sql:
      	Add SETDEST as an event type and NODE as an object type.
      
      	* tbsetup/ns2ir/node.tcl:
      	Add location (X_, Y_, Z_) and orientation attributes for mobile
      	nodes.
      
      	* tbsetup/ns2ir/sim.tcl:
      	Add a "setdest" event for node types that lets the user move a
      	mobile node.
      abebdbc6
  5. 29 Nov, 2004 1 commit
  6. 08 Oct, 2004 3 commits
    • 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
    • Timothy Stack's avatar
      · ed8262c1
      Timothy Stack authored
      Made a pass over tar file related things:
      
      	* os/install-tarfile: Added support for bzip2 compressed files and
      	fixed the '.tgz' regex (it detected '.tar.tgz' before).  Also
      	binmode'd some file handles to squelch a warning on Redhat 9.
      
      	* tbsetup/fetchtar.proxy.in: Added 'https' as a valid protocol for
      	URLs and 'tar.bz2' as a valid extension.  Changed the wget call to
      	do 'timestamping', which means it should only download files that
      	have changed since the last download.
      
      	* tbsetup/tarfiles_setup.in: More 'https' and '.tar.bz2' stuff.
      	When downloading tarballs, copy the file name extension from the
      	URL onto the local file name so 'install-tarfile' can figure out
      	how to decompress it properly.
      
      	* tbsetup/ns2ir/tb_compat.tcl.in: Added a bunch of checks to the
      	tb-set-node-tarfiles function.
      
      	* www/faq.html, www/tutorial/nscommands.html,
      	www/tutorial/tutorial.html: Flesh out and clean up tarfile related
      	documentation.  Also added anchors for the individual functions so
      	you can link to them from other pages.
      ed8262c1
    • Timothy Stack's avatar
      Use a marker to separate user output from the parser's xml output so · 7f567448
      Timothy Stack authored
      xmlconvert won't choke on it.
      7f567448
  7. 17 Sep, 2004 1 commit
  8. 25 Aug, 2004 1 commit
  9. 11 Aug, 2004 1 commit
    • Leigh B. Stoller's avatar
      Add new per-lan table, which currently is just for Mike: · d09d9696
      Leigh B. Stoller authored
      1.269: Add new table to generate a per virt_lan index for use with
             veth vlan tags. This would be so much easier if the virt_lans
             table had been split into virt_lans and virt_lan_members.
             Anyway, this table might someday become the per-lan table, with a
             table of member settings. This would reduce the incredible amount of
             duplicate info in virt_lans!
      
      	CREATE TABLE virt_lan_lans (
      	  pid varchar(12) NOT NULL default '',
      	  eid varchar(32) NOT NULL default '',
      	  idx int(11) NOT NULL auto_increment,
      	  vname varchar(32) NOT NULL default '',
      	  PRIMARY KEY  (pid,eid,idx),
      	  UNIQUE KEY vname (pid,eid,vname)
      	) TYPE=MyISAM;
      
             This arrangement will provide a unique index per virt_lan, within
             each pid,eid. That is, it starts from 1 for each pid,eid. That is
             necessary since the limit is 16 bits, so a global index would
             quickly overflow. The above table is populated with:
      
      	insert into virt_lan_lans (pid, eid, vname)
                  select distinct pid,eid,vname from virt_lans;
      d09d9696
  10. 10 Aug, 2004 1 commit
  11. 27 Jul, 2004 1 commit
  12. 19 Jul, 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. 12 Jul, 2004 2 commits
  15. 07 Jul, 2004 1 commit
  16. 27 Jun, 2004 1 commit
  17. 08 Jun, 2004 1 commit
    • Leigh B. Stoller's avatar
      Add slots to virt_lans to rationalize the relationship between · 43a804e9
      Leigh B. Stoller authored
      virt_lans and virt_nodes. The intent is to migrate away from
      the convention we use in virt_nodes:ips and virt_lans:member
      to a more acceptable representation (one that does not rely
      on textual conventions like space separated lists of colon
      seperated entities. Instead:
      
      	virt_nodes
      		vname:	nodeA
              virt_lans
      		vname:  link0
      		vport:  0
      		ip:     1.1.1.2
      
      		vname:  link1
      		vport:  1
      		ip:     1.1.2.2
      
      	alter table virt_lans add vnode varchar(32) NOT NULL default '' \
      		after vname;
      	alter table virt_lans add vport tinyint(3) NOT NULL default '0' \
      		after vnode;
              alter table virt_lans add ip varchar(15) NOT NULL default '' \
      		after vport;
      
      Then run this script to update these new fields from the
      existing ips,member slots. This must be run after installing
      the parser changes, or you can just run it again.
      
      	./ipmember.pl
      
      This is a transitional phase; the old slots will be left in place
      until they are no longer used, at which time we will also add a
      unique key to the table (pid,eid,vname,vnode,vport). assign_wrapper
      will be the hardest to change, but other scripts should be easy.
      
      Whats vport about? Rather then rely on IP addresses to form a
      unique key, we use vport (a small integer) so that we can delay the
      IP assignment until later (after initial DB insertion).
      43a804e9
  18. 26 May, 2004 1 commit
  19. 25 May, 2004 1 commit
  20. 10 May, 2004 1 commit
    • Robert Ricci's avatar
      Allow the user to give an estimated bandwidth for links and/or LANs. · 923063cc
      Robert Ricci authored
      This is in addition to the normal bandwidth, and the difference is
      that the estimated bandwidth is not enforced. It's just fed to assign
      for mapping decisions. The idea is to allow for more efficient
      packings by doing non-conservative bandwidth allocation.
      
      Not documented yet, because it might change a little after I made it
      work properly with asymmetric links.
      923063cc
  21. 30 Apr, 2004 1 commit
    • Leigh B. Stoller's avatar
      Small hack requested by Jay to aid in creating wireless nodes; added · 45e5e3c7
      Leigh B. Stoller authored
      new directive for your NS file: tb-use-physnaming(1) which means that
      if you have a line like this:
      
      	set pc6 [$ns node]
      
      and pc6 is an actual name of a physical node, then do an implicit
      "fixnode" to pc6. In other words, pc6 is the name of the node in your
      NS file (virtual topo) *and* will be fixed to the real pc6. Needless
      to say, if pc6 is allocated when you go to swapin, you lose.
      45e5e3c7
  22. 26 Apr, 2004 1 commit
  23. 21 Apr, 2004 1 commit
  24. 20 Apr, 2004 1 commit
    • Leigh B. Stoller's avatar
      Brutal hackery to ensure that the startcmd (a program object) has a · cb735156
      Leigh B. Stoller authored
      well known name so you can control it via the usual event mechanisms
      (ns "at" and tevc). Previously, its name came from an internal
      counter, and because the routine that creates the program object is
      not at "toplevel", the parser would not rename the object. I'm sure
      someone who understands this cruft could do better!
      
      Anyway, now they are named as ${vname}_startcmd.
      cb735156
  25. 12 Apr, 2004 1 commit
    • Leigh B. Stoller's avatar
      The core of the wireless support code. · 86155d03
      Leigh B. Stoller authored
      * ptopgen:
      
         1. Change to using interface_capabilities table to get the default
            speed for an interface type.
      
         2. The wrinkle is that an interface can have multiple speeds,
            depending on the protocol that is requested. In the wireless case the
            table looks like:
      
      	| type             | capkey            | capval               |
      	+------------------+-------------------+----------------------+
      	| ath              | protocols         | 80211a,80211b,80211g |
      	| ath              | 80211a_defspeed   | 54000                |
      	| ath              | 80211b_defspeed   | 11000                |
      	| ath              | 80211g_defspeed   | 54000                |
      
         3. We use the above info to tell us the default speed for links, based
            on the particular protocol.
      
         4. And lastly, create "air" switches for each of 80211a, 80211b, 80211g,
            and specify links from the switches to the nodes that have interfaces
            that support those protocols. At the moment, there is a hardwired
            list of 80211a, 80211b, 80211g in ptopgen, so create 3 new air
            switches and links from each of the nodes to each of the switches.
            Rob says that assign can handle this just fine (using the same
            interface on a node to connect to three different air switches, at
            different speeds).
      
      * assign_wrapper:
      
         1. First off, I had to increase the bogousity factor of how we determine
            that a delay node is required (requires_delay() routine) on a link or
            lan. Using the interface_capabilities table, I determine the default
            speed for each protocol on each interface type.
      
         2. When calling requires_delay() I now the pass the lan so that we can
            get the "protocol" of the link/lan and use that to find the default
            speed. The main reason for all this crud is that if a user specifies
            a bandwidth of 54Mb on a wired ethernet, we want to make sure we
            insert a delay node, but not if the user is using 80211g. As it was,
            delay nodes would be skipped cause there are now nodes with
            interfaces that support those speeds. This change also allows to know
            that a delay node should be inserted on a wireless link, if we ever
            wanted to do something as silly as that!
      
         3. Okay, so now onto the actual wireless support!  Whenever the protocol
            for a lan is not "ethernet" spit out links to fake lan nodes, sorta
            like we used to do with ethernet lans before Rob made all those great
            changes to assign. So, a lan with protocol 80211a will get fake links
            to the 80211a air switch that ptopgen spits out (see above).  We
            currently bypass all delay node processing on wireless lans, and in
            fact we avoid most post-processing (after assign) of wireless lans
            (no vlans, veths, etc). At some point we can bring certain things
            back in (like emulated links) but that will be some time! See
            comments above about ptopgen.
      
         4. Added a section to copy over the virt_lan_settings and
            virt_lan_member_settings to the interface_settings table, for each
            node's interfaces in the mapped experiment. I also make up the ssid
            for the lan, and add the protocol to the settings so that the client
            side knows what it is supposed to do. I also set the acesspoint since
            that requires MAC addresses, and this is easiest place to get and set
            the MAC (all of the nodes in a lan need to know the MAC of the node
            acting as the access point). In the virtual topology, the accesspoint
            is specified as a node name.
      
      * tbsetup/ns2ir:
      
         1. Add tb-set-lan-protocol(lan, protocol) to set the protocol to one of
            ethernet, 80211a, 80211b, 80211g. Defaults to ethernet.
      
         2. Add tb-set-lan-accesspoint(lan, accesspoint) to set the name of the
            access point for a lan. Obviously this makes sense for only wireless
            links; ignored for wired links.
      
         3. Add tb-set-lan-setting(lan, setting, value) to specify a setting that
            applies to the entire lan. At present, these are ignored for wired
            lans. Both setting and value are strings.
      
         4. Add tb-set-node-lan-setting(lan, node, setting, value) to specify a
            setting that applies to a particular node in a lan. At present, these
            are ignored for wired lans. Both setting and value are strings.
      86155d03
  26. 08 Apr, 2004 1 commit
  27. 07 Apr, 2004 2 commits
  28. 25 Feb, 2004 1 commit
  29. 13 Feb, 2004 2 commits
  30. 10 Feb, 2004 1 commit
  31. 03 Feb, 2004 1 commit
  32. 02 Feb, 2004 1 commit