1. 04 Aug, 2014 1 commit
    • Kirk Webb's avatar
      Add support for disabling dhcp for an experiment/user/group · ca561d42
      Kirk Webb authored
      In support of the collaboration effort with CHPC, I've added a check
      and actions for a new feature, ExternalNodeManagment.  When swapping in,
      the swapper, group, and experiment are checked for the feature.  Since
      there doesn't appear to be a way to ask for an experiment feature in the
      parser, I'm punting for now and just letting the experiment inherit this
      feature from the user and/or project/group.
      
      The effect of this feature is that nodes will be omitted from the
      dhcpd.conf file when allocated to a marked experiment, and put back
      in when freed from that experiment.
      
      We will also use this feature to force nodes to reboot even when they
      are in PXEWAIT during the OS setup phase.  Ultimately the point is for
      something else to take over the boot process and manage the experiment's
      nodes for the duration of the experiment.
      ca561d42
  2. 05 Jun, 2013 1 commit
  3. 14 May, 2013 1 commit
    • Leigh B Stoller's avatar
      Add new script to do arp lockdown on boss. · f5cc889a
      Leigh B Stoller authored
      The other version is only for the client side (subboss,ops), but does
      not work on real boss. Also hooked into tbswap so that the arps are
      updated during swapin/swapout. Also change tmcd to return arp
      directives for all containers, not just on shared nodes.
      f5cc889a
  4. 27 Nov, 2012 1 commit
    • Leigh B Stoller's avatar
      Start saving the virtual and physical state after each swapin/swapmod · 229d2bcc
      Leigh B Stoller authored
      so that we can do post-mortem debugging. I'm adding this so I can
      track down the current snmpit failures, but might useful later too.
      
      Sadly, mysql dump files have no table metadata so once the schema
      changes, these files will become less useful if we ever want to load
      them into a running DB. It would be nie to dump them in a format that
      allows this, but will be a bunch more work.
      229d2bcc
  5. 26 Nov, 2012 1 commit
  6. 01 Oct, 2012 1 commit
  7. 26 Sep, 2012 1 commit
  8. 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
  9. 04 Sep, 2012 1 commit
  10. 27 Aug, 2012 1 commit
  11. 01 Aug, 2012 1 commit
    • Leigh B Stoller's avatar
      This commit adds some simple support for using the Infiniband on the · 997b21b5
      Leigh B Stoller authored
      Probe Cluster. The problem is that the IFB is a shared network that
      every node attaches to, which can looks like an ethernet device that
      can ifconfig'ed. In other words, one big lan.
      
      But we still want the user to be able to create a lan so that they can
      interact with it in thei NS file like any other network.
      
      The NS syntax is:
      
      	set lan2 [$ns make-lan "node1 node2 node3" * 0ms]
      	tb-set-switch-fabric $lan2 "infiniband"
      
      The switch fabric tells the backend to do IP assignment for the
      specific global network. Yes, I tried to be a little but general
      purpose. Lets see how this actually turns out.
      
      This first commit treats the fabric as a single big lan on the same
      subnet.
      
      NOTE 1: Since the unroutable IP space is kinda small, but the Probe
      Cluster is really big, we can easily run out of bits if we tried to do
      assignment on virtual topos. Instead, fabrics get their IP allocation
      at swapin time, and the allocations are deleted when the experiment is
      swapped out. The rationale is that the number of swapped in
      experiments is much much smaller then the number of possible topos
      that can be loaded into the DB. Still might run out, but less likely.
      
      The primary impact of above is that IP assignments can change from
      one swap to another, but this is easy to deal with if the user is
      scripting their experiment; the IP allocation is available via the
      XMLRPC interface.
      
      NOTE 2: The current code allocates from a single big network, which
      makes it easy for users to mess each other up if they start doing
      things by hand. Ultimately, we want each lan in each experinent to use
      their own subnet, but that is going to take more work, so lets do it
      in the second phase.
      
      The definition of "network fabrics" is in the new network_fabrics
      tables. As an example for probe:
      
      	INSERT INTO `network_fabrics` set
      		idx=NULL,
      		name='ifband',
      		created=now(),
      		ipalloc=1, ipalloc_onenet=1,
      		ipalloc_subnet='192.168.0.0',ipalloc_netmask='255.255.0.0'
      997b21b5
  12. 23 Jul, 2012 1 commit
  13. 26 Jun, 2012 1 commit
  14. 06 Jun, 2012 1 commit
  15. 04 Jun, 2012 3 commits
  16. 30 Apr, 2012 1 commit
    • Mike Hibler's avatar
      More minor cleanups exposed by FBSD9 install. · ffb52cd0
      Mike Hibler authored
      Bogus param list for AddPerExperimentSwitchStack; can't have scalar args
      after a list arg.
      
      Missing mailing list TBERRORSEMAIL in defs-elabinelab. Caused redundant
      "testbed-ops" addresses in /etc/aliases.
      
      Weed out said redundant mailing list names when creating aliases during
      ops-install.
      
      named.reload script has gone away. Use rndc instead.
      ffb52cd0
  17. 24 Apr, 2012 1 commit
  18. 11 Apr, 2012 1 commit
    • Leigh B Stoller's avatar
      So this commit allows a vlan to be "shared" bewteen experiments. By · dae29101
      Leigh B Stoller authored
      shared, I mean that an experiment can request that a port be put into
      a vlan belonging to another experiment. This started out as a hack to
      support openflow enabled vlans in Geni, but then I got a request to
      make it a little more general purpose. You all know how that goes.
      
      Okay, say you have an experiment E1 in some project and that
      experiment has a link or lan call "lan0". You want other experiments
      to be able to stick ports in that vlan. On boss, you would do this
      after E1 is swapped in:
      
      boss> wap sharevlan -o testbed,E1 lan0 mysharedlan
      
      The -o option says to make the vlan open to anyone; without that
      option, only admins can swap in an experiment that requests a port in
      lan0.  The token "mysharedlan" is just a level of indirection for the
      NS file (or rspec).
      
      Next you create a new experiment E2, and in your NS file:
      
      	$ns make-portinvlan $n1 "mysharedlan"
      
      which says to create a lan with a interface on node n1, in the vlan
      named by the token mysharedlan. The token keeps specific pid/eids out
      of the NS file. 
      
      When E2 is swapped in, assign does its thing, and the selected port is
      added to the members list for lan0 in testbed,E1 and then we call
      snmpit with the syncvlansfromtables (-X) option to get the port added.
      
      When E2 is swapped out, we undo the members list and call snmpit with
      the -X option again.
      
      The access issue is a bit of hack of course (open or admins) but I did
      not want to invent a new permission mechanism (yet).
      
      And of course, this is still a work in progress.
      dae29101
  19. 01 Feb, 2012 1 commit
  20. 28 Nov, 2011 1 commit
  21. 11 Nov, 2011 1 commit
  22. 22 Sep, 2011 1 commit
    • Leigh B Stoller's avatar
      Changes to "panic" mode. · 5c1ced81
      Leigh B Stoller authored
      * Any experiment can now be paniced; formerlly, only firewalled
        experiments could be paniced. There are new options in the admin
        menu section of the Show Experiment page. ProtoGeni experiments can
        also be paniced.
      
        At the moment, this is an admin-only option. Should it be?
      
      * There are now two levels of panic. The first level (and the default)
        is to throw all the machines into the Admin MFS and reboot them.
      
        Level 2 (OH NO!) disables the control network. Not sure we need two
        levels, but hey, it was easy.
      
      * Admins can swapout a paniced experiment. There is new code in tbswap
        to watch for a paniced experiment, and zaps the disks.
      
      * Add menu option to clear the panic. Also admin-only. 
      
      * Minor tweaks to Show Experiment when experiment is paniced.
      5c1ced81
  23. 20 Jun, 2011 1 commit
    • Leigh B Stoller's avatar
      "Improvements" to protogeni tunnels and UpdateSliver(); previously we · b9b443a6
      Leigh B Stoller authored
      were tearing down and recreating tunnels during UpdateSliver(), cause
      Experiment->RemovePhysicalState() assumes that all physical state is
      created in the mapper, but in Protogeni tunnels are created outside
      the mapper, and so we were losing the tunnels. My original hack was to
      notice that and recreate them. But then I added sliver ids to tunnel
      interfaces, and if the tunnels are recreated, the sliver ids are going
      to change, and that will annoy users. So this change deals with this
      by preventing protogeni tunnels from getting removed by the mapper.
      b9b443a6
  24. 18 May, 2011 1 commit
    • David Johnson's avatar
      Bug fixes and per-experiment VLAN removal. · 8fbe1ab3
      David Johnson authored
      Now that we have logical wires, we *must* actually make sure that the
      VLANs created on the per-experiment switch are removed at swapout (i.e.,
      are at least removed from the vlans table), so that any logical wires can
      be safely removed.  For now, we actually invoke snmpit to remove them.
      This is probably a bad idea, because who knows what state the user left
      the switch in prior to swapout.
      
      The bugfixes are just me forgetting that \ does not continue a line in
      perl :).
      8fbe1ab3
  25. 17 May, 2011 1 commit
    • David Johnson's avatar
      Add per-experiment switch support. · ea496d44
      David Johnson authored
      Per-experiment switch stacks only come into being if the experiment
      actually has a switch allocated to it.  If not, tbswap and snmpit
      should function unchanged.  If there is a per-experiment stack that needs
      configuration, we first invoke normal snmpit in the normal place, but we
      use the new snmpit option `--skip-supplied' in combination with -S to skip
      the per-experiment stack.  We then configure the per-experiment stack by
      itself with -S after os_setup has completed.
      
      There are some new functions in the db backend stuff to create, modify,
      and remove per-experiment switches.
      
      There is some new code in snmpit to do the --skip-supplied filtering.  I
      also put all the -S, -i, and --skip-supplied stuff into portstats...
      because we also can't call portstats on a per-experiment switch in tbswap;
      otherwise it will hang and/or fail.
      ea496d44
  26. 12 May, 2011 1 commit
  27. 11 Apr, 2011 1 commit
  28. 04 Apr, 2011 1 commit
    • David Johnson's avatar
      Add dynamic, per-experiment blobs. Add tables for client side service blobs. · 40039320
      David Johnson authored
      Per-experiment blobs can be created by the parser, and are inserted into
      the blobs table at swapin based on what's in virt_blobs.  We go to some
      effort to keep any existing filename<->uuid mapping in teh blobs table
      so that any caching already done by the server and client in a previous
      download of a blob remains intact.  We also remove blobs on experiment
      modify that are no longer necessary.  Finally, we remove dynamic blobs
      at swapout.
      40039320
  29. 02 Feb, 2011 1 commit
  30. 07 Dec, 2010 1 commit
  31. 25 Oct, 2010 1 commit
    • Leigh B Stoller's avatar
      New module, called Emulab Features. The basic usage (see tbswap) is: · 1d430992
      Leigh B Stoller authored
      use EmulabFeatures;
      
      if (EmulabFeatures->FeatureEnabled("NewMapper", $user, $group, $experiment)) {
         # Do something
      }
      else {
         # Do something else.
      }
      
      where $user, $group, and $experiment is the current Emulab user, group, and
      experiment the script is operating as. Any of them can be undef. Note that
      features can easily be globally enabled or disabled (bypassing user/group
      check). See below.
      
      There are two scripts to deal with features. The easy one is the script to
      grant (or revoke) feature usage to a particular user or group or experiment:
      
      boss> wap grantfeature -u stoller NewMapper
      boss> wap grantfeature -p geni NewMapper
      boss> wap grantfeature -e geni,myexp NewMapper
      
      Add -r to revoke the feature.
      
      The other script is for managing features. To create a new feature:
      
      boss> wap emulabfeature create NewFeature 'A pithy description'
      
      which adds the feature to the emulab_features DB table. Use "delete"
      to remove a feature from the DB.
      
      You can globally enable and disable features for all users/groups (the
      user/group checks are bypassed). Global disable overrides global
      enable. There are actually two different flags. Lots of rope, I mean
      flexibility.
      
      boss> wap emulabfeature enable NewFeature 1
      boss> wap emulabfeature enable NewFeature 0
      
      boss> wap emulabfeature disable NewFeature 1
      boss> wap emulabfeature disable NewFeature 0
      
      To display a list of all features and associated settings:
      
      boss> wap emulabfeature list
      
      To show the details (including the users and groups) of a specific
      feature:
      
      boss> wap emulabfeature show NewFeature
      
      Oh, if a test is made in the code for a feature, and that feature is
      not in the emulab_features table (as might be the case on other
      Emulab's), the feature is "disabled".
      1d430992
  32. 22 Oct, 2010 2 commits
  33. 11 Oct, 2010 3 commits
    • Leigh B Stoller's avatar
      Work on an optimization to the perl code. Maybe you have noticed, but · 92f83e48
      Leigh B Stoller authored
      starting any one of our scripts can take a second or two. That time is
      spent including and compiling 10000s of thousands of lines of perl
      code, both from our libraries and from the perl libraries.
      
      Mostly this is just a maintenance thing; we just never thought about
      it much and we have a lot more code these days.
      
      So I have done two things.
      
      1) I have used SelfLoader() on some of our biggest perl modules.
         SelfLoader delays compilation until code is used. This is not as
         good as AutoLoader() though, and so I did it with just a few 
         modules (the biggest ones).
      
      2) Mostly I reorganized things:
      
        a) Split libdb into an EmulabConstants module and all the rest of
           the code, which is slowly getting phased out.
      
        b) Move little things around to avoid including libdb or Experiment
           (the biggest files).
      
        c) Change "use foo" in many places to a "require foo" in the
           function that actually uses that module. This was really a big
           win cause we have dozens of cases where we would include a
           module, but use it in only one place and typically not all.
      
      Most things are now starting up in 1/3 the time. I am hoping this will
      help to reduce the load spiking we see on boss, and also help with the
      upcoming Geni tutorial (which kill boss last time).
      92f83e48
    • Jonathon Duerig's avatar
      Bugfix: Fix typo to ClemsonGENI clause · 40a1c96e
      Jonathon Duerig authored
      40a1c96e
    • Jonathon Duerig's avatar
      98fe4b13
  34. 27 Sep, 2010 1 commit
  35. 20 Sep, 2010 1 commit