[[PageOutline]] = FOAM attachment information = [wiki:OpenFlow/FOAM 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. = Examples = 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="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+datapath+06:d6:00:12:e2:b8:a5:d0" --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="urn:publicid:IDN+openflow:foam:foam.gpolab.bbn.com+datapath+06:d6:00:24:a8:c4:b9:00" --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="urn:publicid:IDN+pgeni.gpolab.bbn.com+node+pc1" --remote-port="eth3" --desc="pc1.pgeni.gpolab.bbn.com[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="argos.gpolab.bbn.com" --remote-port="eth1" --desc="argos[eth1]" --passwd-file=/etc/foam.passwd }}}