Version 2 (modified by Josh Smift, 11 years ago) (diff)


FOAM attachment information

FOAM can be configured with information about what other devices its switches are connected to, which is really useful in helping experimenters figure out the topology of the GENI infrastructure.

NOTE that you'll want to update this if you add or remove connections!

Configuring attachments

FOAM keeps track of these attachments, and there are three foamctl commands to work with them:

foamctl topo:create-attachment --passwd-file=/etc/foam.passwd
foamctl topo:list-attachments --passwd-file=/etc/foam.passwd
foamctl topo:remove-attachment --passwd-file=/etc/foam.passwd

topo:list-attachments will show of the currently-configured attachments, each of which has a UUID, which you can use to remove the attachment with topo:remove-attachment. The rest of this section describes how to create new attachments. (To modify an existing attachment, just remove it and create a new one.)

topo:create-attachment takes a variety of arguments:

  • --type=TYPE: This identifies what type of remote device this attachment is connected to. There are four options:
    • of is a FOAM-managed OpenFlow device with a GENI URN
    • nof is a non-FOAM-managed network device with a GENI URN
    • host is a host with a GENI URN
    • other is anything without a GENI URN
  • --local-dpid=LOCAL_DPID and --local-port=LOCAL_PORT: These identify the DPID and port name on the switch that FOAM manages.
  • --remote-component-id=REMOTE_CMID: The GENI URN of the remote device, if it has one; don't use this with --type=other.
  • --remote-hostname=REMOTE_HOSTNAME: A hostname (or some other string) that identifies the remote device, if it doesn't have a GENI URN; only use this with --type=other.
  • --remote-port=REMOTE_PORT: A string that identifies the port on the remote device.
  • --desc=DESC: A natural-language description of the remote device; typically something high-level that would be useful to an experimenter.


Here are some examples for various BBN things.

Both sides of a connection between two FOAM-managed OpenFlow switches (habanero-1750 and poblano-1750):

foamctl topo:create-attachment --type="of" --local-dpid="06:d6:00:24:a8:c4:b9:00" --local-port="47" --remote-component-id="" --remote-port="GBE0/20" --desc="poblano-1750" --passwd-file=/etc/foam.passwd
foamctl topo:create-attachment --type="of" --local-dpid="06:d6:00:12:e2:b8:a5:d0" --local-port="GBE0/20" --remote-component-id="" --remote-port="47" --desc="habanero-1750" --passwd-file=/etc/foam.passwd

A connection to a ProtoGENI node:

foamctl topo:create-attachment --type="host" --local-dpid="06:d6:00:24:a8:c4:b9:00" --local-port="1" --remote-component-id="" --remote-port="eth3" --desc="[eth3] (ur)" --passwd-file=/etc/foam.passwd

A connection to a test node, which isn't GENI managed (and thus doesn't have a GENI URN):

foamctl topo:create-attachment --type="other" --local-dpid="06:d6:00:24:a8:c4:b9:00" --local-port="33" --remote-hostname="" --remote-port="eth1" --desc="argos[eth1]" --passwd-file=/etc/foam.passwd

Show your current connections:

foamctl topo:list-attachments --passwd-file=/etc/foam.passwd

Remove some connections, by UUID:

uuids='bcf0f116-402f-46ae-9ba1-73f7724e05d4 8070f5f2-d0e9-4040-8366-662a003cbc89 <etc>'
for uuid in $uuids ; do foamctl topo:remove-attachment --uuid=$uuid --passwd-file=/etc/foam.passwd ; done