1. 18 Oct, 2016 1 commit
  2. 02 Jun, 2014 1 commit
    • Mike Hibler's avatar
      Support for gathering and storing Infiniband interface GUIDs in the DB. · 12a41b7e
      Mike Hibler authored
      Since GUIDs are 16 bytes and our current interface MACs are only 12 bytes,
      I agonized over whether to grow the mac column to 16 bytes and just treat
      it as a unique identifier (which is all we use that column for anyway).
      However, in the end I just added a new guid column as there were mac columns
      in a variety of other tables and it wasn't clear what the relationship was
      and what I might break.
      
      So, the newnode MFS will now report back a GUID for interfaces it recognizes
      as IB (FreeBSD-specific right now). The boss-side checkin code with stash
      that value in new_interfaces (and later interfaces when added). For possible
      backward compat, it will also generate a MAC address from that (possibly
      Mellanox-specific) so that all entries in the interfaces table will have
      a MAC (yes, it should really be the other way around--all interfaces should
      always have a guid).
      
      End of story. We don't do anything else with IB right now other than stash
      an interface GUID.
      12a41b7e
  3. 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
  4. 29 Jun, 2012 1 commit
  5. 22 May, 2007 1 commit
  6. 27 Feb, 2007 1 commit
  7. 12 Feb, 2007 1 commit
    • Leigh Stoller's avatar
      * Replace the argument processing code in all pages. Currently we rely on · 48acc8e3
      Leigh Stoller authored
        register_globals=1 to turn POST/GET/COOKIES arguments in local variables.
        This is known to be a terrible security risk, and we keep saying we are
        going to fix it, and now I am. In order to accomplish this on a
        transitional basis (since I don't want the entire web interface to stop
        working while I debug it), and because the code just needs the cleanup, I
        am doing it like this: Each page will sport new declarations at the top:
      
      	RequiredPageArguments("experiment", PAGEARG_EXPERIMENT,
                                    "template",   PAGEARG_TEMPLATE,
                                    "instance",   PAGEARG_INSTANCE,
                                    "metadata",   PAGEARG_METADATA,
                                    "osinfo",     PAGEARG_OSINFO,
                                    "image",      PAGEARG_IMAGE,
                                    "project",    PAGEARG_PROJECT,
                                    "group",      PAGEARG_GROUP,
                                    "user",       PAGEARG_USER,
      			      "node",       PAGEARG_NODE,
      			      "yesno",      PAGEARG_BOOLEAN,
      			      "message",    PAGEARG_STRING,
      			      "age",        PAGEARG_INTEGER,
                                    "cost",       PAGEARG_NUMERIC,
                                    "formfields", PAGEARG_ARRAY,
                                    "unknown",    PAGEARG_ANYTHING);
      
      	OptionalPageArguments("canceled", PAGEARG_BOOLEAN);
      
        The first token in each pair is the name of the global variable to
        set, and the second token is the type. So, for "experiment" we look at
        the URL for a pid/eid or exptidx, etc, sanity check them (safe for a
        DB query), and then try to find that experiment in the DB. If it maps
        to an experiment, set global variable $experiment to the object. Since
        its a required argument, produce an error if not supplied. Similar
        treatment for optional arguments, with the obvious difference.
      
        The goal is to have ALL argument processing in one place, consistent,
        and correct. I've found numerous places where we leak unchecked
        arguments into queries. It also cuts out a lot of duplicated code.
      
      * To make the above easier to deal with, I've been replacing lots of
        hardcoded URLS in the code of the form:
      
      	foo.php3?pid=$pid&eid=$eid ...
      
        with
      
              CreateURL("foo", $experiment)
      
        which creates and returns the neccessary url string, by looking at
        the type of its arguments (experiment, template, instance, etc.)
      
        Eventually plan to replace them all so that URL handling throughout
        the code is all defined in one place (all the new URL code is in
        url_defs.php).
      
      * I have cranked up error reporting to tell me anytime a variable is
        used before it is initialized, plus a bunch of other stuff that PHP
        deems improper. Think of it like -Wall ... and boy we get a lot of
        warnings.  A very large percentage of the diffs are to fix all these
        warnings.
      
        The warnings are currently going to /usr/testbed/log/php-errors.log,
        and I'll be adding a script to capture them each night and mail them
        to tbops. This file also gets errors (this will be a change for
        developers; rather then seeing errors and warnings dumped in the
        middle of web pages, they will go to this file instead).
      
      * Major refactoring of the code. More objects (nodes, images, osids).
        Moving tons of queries into the objects in the hopes of someday
        getting to a point where we can split the web interface onto a
        different server.  Lots of general cleanup.
      48acc8e3
  8. 18 Jul, 2006 1 commit
    • Leigh Stoller's avatar
      Changes necessary for moving most of the stuff in the node_types · 624a0364
      Leigh Stoller authored
      table, into a new table called node_type_attributes, which is intended
      to be a more extensible way of describing nodes.
      
      The only things left in the node_types table will be type,class and the
      various isXXX boolean flags, since we use those in numerous joins all over
      the system (ie: when discriminating amongst nodes).
      
      For the most part, all of that other stuff is rarely used, or used in
      contexts where the information is needed, but not for type descrimination.
      Still, it made for a lot of queries to change!
      
      Along the way I added a NodeType library module that represents the type
      info as a perl object. I also beefed up the existing Node module, and
      started using it in more places. I also added an Interfaces module, but I
      have not done much with that yet.
      
      I have not yet removed all the slots from the node_types table; I plan to
      run the new code for a few days and then remove the slots.
      
      Example using the new NodeType object:
      
      	use NodeType;
      
      	my $typeinfo = NodeType->Lookup($type);
      
              if ($typeinfo->control_interface(\$control_iface) ||
                  !$control_iface) {
        	    warn "No control interface for $type is defined in the DB!\n";
              }
      
      or using the Node:
      
      	use Node;
      
              my $nodeobject = Node->Lookup($node_id);
              my $imageable  = $nodeobject->NodeTypeInfo()->imageable();
      or
              my $rebootable = $nodeobject->isrebootable();
      or
              $nodeobject->NodeTypeAttribute("control_interface", \$control_iface);
      
      Lots of way to accomplish the same thing, but the main point is that the
      Node is able to override the NodeType (if it wants to), which I think is
      necessary for flexibly describing one/two of a kind things like switches, etc.
      624a0364
  9. 31 May, 2005 1 commit
    • Leigh Stoller's avatar
      A few more ELABINELAB related changes. The ordering of interfaces · 5f942a73
      Leigh Stoller authored
      might different, as reported by the newnode MFS. At present, I need
      the ordering (and thus, the iface names) to agree with the outer
      emulab since that is how I request vlans to be setup. This is not
      very pleasing, and I will probably have to change it to use MACs
      instead. For now, reorder the new_interfaces based on what switchmac
      (the proxy) tells us.
      5f942a73
  10. 27 May, 2005 1 commit
    • Leigh Stoller's avatar
      Couple of bug fixes: · ee486a42
      Leigh Stoller authored
      * Use the "role" slot of the interfaces table, instead of joining with
        node_type, to find the control interface. Must do this inside an
        inner Elab of course, since the node_types table does not reflect
        how assign selected the interface we use for the "control" network.
      
      * Use !is_numeric() instead of is_string() to determine if the naming
        patter in alpha based instead of number based ("1" is a string).
      ee486a42
  11. 27 Apr, 2005 1 commit
    • Leigh Stoller's avatar
      A set of changes to allow the newnode path (MFS and adding nodes) to · 94d97303
      Leigh Stoller authored
      work inside ElabInElab.
      
      The crux of this is to emulate what switchmac does when incorporating nodes
      into the testbed. Rather then using snmpit to ask the switches for MAC info,
      we can just ask outer emulab via the proxy to get that same info from the
      DB. Note, there are no changes to the newnode MFS; it will boot and happily
      report it after launching teachswitch, but those packets are harmless to the situation.
      
      Another wrinkle is that we need the outer emulab to tell us which
      interfaces are control and which are experimental, since inside there
      is no real way to determine that. I did this by overloading the final
      field in the return from switchmac, and using that to override the
      "role" setting that utils/newnode would normally choose on its own.
      
      There is another new routine in the XMLRPC server that is intended to
      be used for bypassing the newnode path. This is not hooked into
      anything yet, but the intent is that rather then using the web
      interface to "add" nodes, we just return everything needed to seed the
      new_nodes and new_interfaces table, and then run newnodes directly.
      94d97303
  12. 08 Nov, 2004 2 commits
  13. 24 Jun, 2004 1 commit
  14. 06 Oct, 2003 1 commit
  15. 10 Sep, 2003 1 commit
  16. 26 Aug, 2003 1 commit
  17. 21 Jul, 2003 1 commit
  18. 17 Jul, 2003 1 commit
    • Robert Ricci's avatar
      Use card numbers rather than iface names. · b9bc3a5e
      Robert Ricci authored
      Provide a way to re-number interfaces, in case the MFS discovers
      them in something other than the preffered (ie. Linux) order.
      
      Use the switch class from showmac to avoid problems where there is
      leakage between the control and experimental net, so we see a MAC
      on both.
      
      Fix a dumb php bug - can you beleive the in_array() function wasn't
      in php3?
      b9bc3a5e
  19. 14 Jul, 2003 1 commit
    • Robert Ricci's avatar
      Web interface for autoconfiguring nodes. This consisits of two pages, · 6ad7d688
      Robert Ricci authored
      one that lists and allows operations on a number of nodes at once, and
      another that allows editing of an individual node.
      
      Split much of the functionality of newnodecheckin.php into a new
      library, so it can get re-called from newnodes_list.php3 later.
      
      Move where we look for MACs on the switches - instead of doing in in
      newnode, call it from newnodecheckin.php - this provides the admins
      more feedback as to what's going on, and allows them to call it again
      later or put the information in by hand.
      6ad7d688
  20. 19 May, 2003 1 commit
    • Robert Ricci's avatar
      More steps in the auto-configuration of new nodes. · 08ae4de5
      Robert Ricci authored
      newnodecheckin.php accepts some information about a new node, tries to
      figure out a node_id, IP, type, etc. for them, sticks this into the
      new_ tables, then alerts testbed-ops. Another (not yet created) page
      will be used to make the new node a real boy.
      
      newclient will run from a (not yet created) MFS - it collects various
      data about the node, like its MAC, runs teachswitch, and checks in
      via newnodecheckin.php .
      08ae4de5