Index: fedd/federation/emulab_access.py
===================================================================
--- fedd/federation/emulab_access.py	(revision 53340444df2a6d0e1a519b10db10ea1fdb819caf)
+++ fedd/federation/emulab_access.py	(revision a65a65a860e3841f04c8fdb1bdf28364ed22c007)
@@ -97,5 +97,16 @@
 	self.cleanup = not config.getboolean("access", "leave_tmpfiles")
 	self.access_type = config.get("access", "type")
-   
+
+	self.dragon_endpoint = config.get("access", "dragon")
+	self.dragon_vlans = config.get("access", "dragon_vlans")
+	self.deter_internal = config.get("access", "deter_internal")
+
+	self.tunnel_config = config.getboolean("access", "tunnel_config")
+	self.portal_command = config.get("access", "portal_command")
+	self.portal_image = config.get("access", "portal_image")
+	self.portal_type = config.get("access", "portal_type") or "pc"
+	self.portal_startcommand = config.get("access", "portal_startcommand")
+	self.node_startcommand = config.get("access", "node_startcommand")
+
 	self.federation_software = software_list(self.federation_software)
 	self.portal_software = software_list(self.portal_software)
@@ -113,5 +124,4 @@
 	    self.stop_segment = None
 
-        self.attrs = { }
         self.access = { }
         self.restricted = [ ]
@@ -258,6 +268,4 @@
 
         restricted_re = re.compile("restricted:\s*(.*)", re.IGNORECASE)
-        attr_re = re.compile('attribute:\s*([\._\-a-z0-9]+)\s+value:\s*(.*)',
-                re.IGNORECASE)
         access_re = re.compile('\('+key_name+'\s*,\s*'+key_name+'\s*,\s*'+
                 key_name+'\s*\)\s*->\s*\('+access_proj + '\s*,\s*' + 
@@ -280,11 +288,4 @@
             line = line.strip();
             if len(line) == 0 or line.startswith('#'):
-                continue
-
-            # Extended (attribute: x value: y) attribute line
-            m = attr_re.match(line)
-            if m != None:
-                attr, val = m.group(1,2)
-                self.attrs[attr] = val
                 continue
 
@@ -717,8 +718,17 @@
 		]
             }
-        if len(self.attrs) > 0:
-            msg['fedAttr'].extend(
-                [ { 'attribute': x, 'value' : y } \
-                        for x,y in self.attrs.iteritems()])
+
+	if self.dragon_endpoint:
+	    msg['fedAttr'].append({'attribute': 'dragon',
+		'value': self.dragon_endpoint})
+	if self.deter_internal:
+	    print 'adding internal'
+	    msg['fedAttr'].append({'attribute': 'deter_internal',
+		'value': self.deter_internal})
+	else: print "internal: %s" % self.deter_internal
+	#XXX: ??
+	if self.dragon_vlans:
+	    msg['fedAttr'].append({'attribute': 'vlans',
+		'value': self.dragon_vlans})
 
 	if services:
@@ -735,5 +745,5 @@
 
         def gateway_hardware(h):
-            if h == 'GWTYPE': return self.attrs.get('connectorType', 'GWTYPE')
+            if h == 'GWTYPE': return self.portal_type or 'GWTYPE'
             else: return h
 
@@ -1194,5 +1204,5 @@
 
 	    cfn = "%s/%s.gw.conf" % (tmpdir, myname.lower())
-	    tunnelconfig = self.attrs.has_key('TunnelCfg')
+	    tunnelconfig = self.tunnel_config
 	    try:
 		f = open(cfn, "w")
@@ -1318,12 +1328,4 @@
 			"Missing connectivity info")
 
-	# The startcmds for master and slave testbeds
-	if master: 
-	    gate_cmd = self.attrs.get('MasterConnectorStartCmd', '/bin/true')
-	    node_cmd = self.attrs.get('MasterNodeStartCmd', 'bin/true')
-	else: 
-	    gate_cmd = self.attrs.get('SlaveConnectorStartCmd', '/bin/true')
-	    node_cmd = self.attrs.get('SlaveNodeStartCmd', 'bin/true')
-
 	# Weed out the things we aren't going to instantiate: Segments, portal
 	# substrates, and portal interfaces.  (The copy in the for loop allows
@@ -1337,15 +1339,16 @@
 	    if isinstance(e, topdl.Computer):
 		self.add_kit(e, self.federation_software)
-		if e.get_attribute('portal') and gate_cmd:
+		if e.get_attribute('portal') and self.portal_startcommand:
 		    # Add local portal support software
 		    self.add_kit(e, self.portal_software)
 		    # Portals never have a user-specified start command
-		    e.set_attribute('startup', gate_cmd)
-		elif node_cmd:
+		    e.set_attribute('startup', self.portal_startcommand)
+		elif self.node_startcommand:
 		    if e.get_attribute('startup'):
 			e.set_attribute('startup', "%s \\$USER '%s'" % \
-				(node_cmd, e.get_attribute('startup')))
+				(self.node_startcommand, 
+				    e.get_attribute('startup')))
 		    else:
-			e.set_attribute('startup', node_cmd)
+			e.set_attribute('startup', self.node_startcommand)
 
 		dinf = [i[0] for i in dragon_map.get(e.name, []) ]
@@ -1363,9 +1366,5 @@
 	filters = []
 
-	# NB: these are extra commands issued for the node, not the startcmds
-	if master: cmd = self.attrs.get('MasterConnectorCmd', '')
-	else: cmd = self.attrs.get('SlaveConnectorCmd', '')
-
-	if self.attrs.has_key('dragon'):
+	if self.dragon_endpoint:
 	    add_filter = not_dragon(dragon_map)
 	    filters.append(dragon_commands(dragon_map))
@@ -1373,15 +1372,15 @@
 	    add_filter = None
 
-	if cmd:
-	    filters.append(topdl.generate_portal_command_filter(cmd,
-		add_filter=add_filter))
-
-	if self.attrs.has_key('connectorImage'):
+	if self.portal_command:
+	    filters.append(topdl.generate_portal_command_filter(
+		self.portal_command, add_filter=add_filter))
+
+	if self.portal_image:
 	    filters.append(topdl.generate_portal_image_filter(
-		self.attrs.get('connectorImage')))
-
-	if self.attrs.has_key('connectorType'):
+		self.portal_image))
+
+	if self.portal_type:
 	    filters.append(topdl.generate_portal_hardware_filter(
-		self.attrs.get('connectorType')))
+		self.portal_type))
 
 	# Convert to ns and write it out
