Index: fedd/federation/emulab_access.py
===================================================================
--- fedd/federation/emulab_access.py	(revision add53eac346bfce9b8b4ad0835c3e6f2ffd756fa)
+++ fedd/federation/emulab_access.py	(revision 814b5e5b5dc9a550eb5f9f31c2323ace176d7d37)
@@ -73,4 +73,5 @@
 	self.ssh_port = config.get("access","ssh_port") or "22"
 	self.boss = config.get("access", "boss")
+	self.ops = config.get("access", "ops")
 	self.xmlrpc_cert = config.get("access", "xmlrpc_cert")
 	self.xmlrpc_certpw = config.get("access", "xmlrpc_certpw")
Index: fedd/federation/experiment_control.py
===================================================================
--- fedd/federation/experiment_control.py	(revision add53eac346bfce9b8b4ad0835c3e6f2ffd756fa)
+++ fedd/federation/experiment_control.py	(revision 814b5e5b5dc9a550eb5f9f31c2323ace176d7d37)
@@ -1834,5 +1834,5 @@
 	    # Now get access to the dynamic testbeds (those added above)
 	    for tb in [ t for t in topo if t not in allocated]:
-		self.get_access(tb, None, tbparams, access_user, masters)
+		self.get_access(tb, None, tbparams, access_user, masters, tbmap)
 		allocated[tb] = 1
 		store_keys = topo[tb].get_attribute('store_keys')
Index: fedd/federation/experiment_partition.py
===================================================================
--- fedd/federation/experiment_partition.py	(revision add53eac346bfce9b8b4ad0835c3e6f2ffd756fa)
+++ fedd/federation/experiment_partition.py	(revision 814b5e5b5dc9a550eb5f9f31c2323ace176d7d37)
@@ -66,8 +66,8 @@
 	"""
 	seer_master = None
-	for m in masters.values():
+	for k, m in masters.items():
 	    for s in m:
-		if s.name == 'SEER':
-		    seer_master = m
+		if s.name == 'seer':
+		    seer_master = k
 		    break
 	    if seer_master: break
@@ -284,8 +284,8 @@
 
 	seer_master = None
-	for m in masters.values():
+	for k, m in masters.items():
 	    for s in m:
-		if s.name == 'SEER':
-		    seer_master = m
+		if s.name == 'seer':
+		    seer_master = k
 		    break
 	    if seer_master: break
Index: fedd/federation/protogeni_access.py
===================================================================
--- fedd/federation/protogeni_access.py	(revision add53eac346bfce9b8b4ad0835c3e6f2ffd756fa)
+++ fedd/federation/protogeni_access.py	(revision 814b5e5b5dc9a550eb5f9f31c2323ace176d7d37)
@@ -344,5 +344,6 @@
 			self.d[self.current_key] = {
 				'hostname': attrs.get('hostname', None),
-				'interfaces': { }
+				'interfaces': { },
+				'mac': { }
 				}
 		elif name == 'interface' and self.current_key:
@@ -350,4 +351,11 @@
 			    [attrs.get('virtual_id','')] = \
 			    attrs.get('component_id', None)
+		elif name == 'interface_ref':
+		    # Collect mac address information from an interface_ref.
+		    # These appear after the node info has been parsed.
+		    nid = attrs.get('virtual_node_id', None)
+		    ifid = attrs.get('virtual_interface_id', None)
+		    mac = attrs.get('MAC', None)
+		    self.d[nid]['mac'][ifid] = mac
 	    #  When a node is finished, clear current_key
 	    def end_element(self, name):
@@ -652,4 +660,5 @@
 
 	ifconfig = "/sbin/ifconfig"
+	findif = '/usr/local/etc/emulab/findif'
 	stage_file = stage_file_type(user, self.staging_host, stagingdir)
 	pname = node.get('hostname', None)
@@ -666,10 +675,15 @@
 		    if not i.get_attribute('portal')]:
 		pinf = node['interfaces'].get(i.name, None)
+		pmac = node['mac'].get(i.name, None)
 		addr = i.get_attribute('ip4_address') 
 		netmask = i.get_attribute('ip4_netmask') or '255.255.255.0'
-		if pinf and addr:
+		# The interface names in manifests are not to be trusted, so we
+		# find the interface to configure using the local node's script
+		# to match mac address to interface name.
+		if pinf and addr and pmac:
+		    print >>script, '# %s' % pinf
 		    print >>script, \
-			    "%s %s %s netmask %s"  % \
-			    (ifconfig, pinf, addr, netmask)
+			    "%s `%s %s` %s netmask %s"  % \
+			    (ifconfig, findif, pmac, addr, netmask)
 		else:
 		    self.log.error("Missing interface or address for %s" \
@@ -997,5 +1011,5 @@
 		certfile, certpw)
 
-	if not ctxt: return False
+	if not ctxt: return False, {}
 
 	self.set_up_staging_filespace(segment_commands, user, host, stagingdir)
@@ -1023,5 +1037,5 @@
 				user, host, "%s/%s" % (stagingdir, f)):
 			    self.log.error("Scp failed")
-			    return False
+			    return False, {}
 
 
@@ -1032,9 +1046,9 @@
 	    self.log.error('Sliver failed to start on ProtoGENI')
 	    self.delete_slice(segment_commands, slice_cred, slice_urn, ctxt)
-	    return False
+	    return False, {}
 	elif status == 'timeout':
 	    self.log.error('Sliver failed to start on ProtoGENI (timeout)')
 	    self.delete_slice(segment_commands, slice_cred, slice_urn, ctxt)
-	    return False
+	    return False, {}
 	else:
 	    # All good: save ProtoGENI info in shared state
@@ -1397,17 +1411,5 @@
 	    param = {
 		    'credential': cred,
-		    'hrn': name,
-		    'type': 'Slice',
-		    }
-	    slice = segment_commands.slice_authority_call('Resolve', 
-		    param, ctxt)
-	    uuid = slice.get('uuid', None)
-	    if uuid == None:
-		sys.exit('No uuid for %s' % slicename)
-
-	    print 'Calling GetCredential (uuid)'
-	    param = {
-		    'credential': cred,
-		    'uuid': uuid,
+		    'urn': slice_urn,
 		    'type': 'Slice',
 		    }
@@ -1419,5 +1421,4 @@
 	    return None
 	try:
-	    print 'Calling RenewSlice (CM)'
 	    param = {
 		    'credentials': [new_scred,],
Index: fedd/federation/remote_service.py
===================================================================
--- fedd/federation/remote_service.py	(revision add53eac346bfce9b8b4ad0835c3e6f2ffd756fa)
+++ fedd/federation/remote_service.py	(revision 814b5e5b5dc9a550eb5f9f31c2323ace176d7d37)
@@ -502,5 +502,6 @@
 			    'desc': e.fault.string or "Something Weird" }
 		if ee:
-		    raise service_error(ee['code'], ee['desc'])
+		    raise service_error(ee.get('code', 'no code'), 
+			    ee.get('desc','no desc'))
 		else:
 		    raise service_error(service_error.internal,
