1 from sfa.util.faults import *
2 from sfa.util.misc import *
3 from sfa.util.rspec import Rspec
4 from sfa.server.registry import Registries
5 from sfa.plc.nodes import *
6 from sfa.util.config import Config
12 # Message IDs for all the GENI light calls
13 # This will be used by the aggrMgr controller
14 SFA_GET_RESOURCES = 101
15 SFA_CREATE_SLICE = 102
18 SFA_DELETE_SLICE = 105
20 SFA_RESET_SLICES = 107
24 def print_buffer(buf):
25 for i in range(0,len(buf)):
29 # Shud we first obtain the message length?
30 # msg_len = socket.ntohs(sock.recv(2))
36 except socket.error, message:
37 if 'timed out' in message:
40 sys.exit("Socket error: " + message)
46 print 'done extracting response from aggrMgr'
49 def connect(server, port):
50 '''Connect to the Aggregate Manager module'''
51 sock = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
52 sock.connect ( ( server, port) )
54 print 'connected to aggregate manager module'
57 def connect_aggrMgr():
58 (aggr_mgr_ip, aggr_mgr_port) = Config().get_openflow_aggrMgr_info()
59 print """Connecting to port %d of %s""" % (aggr_mgr_port, aggr_mgr_ip)
60 return connect(aggr_mgr_ip, aggr_mgr_port)
62 def generate_slide_id(cred, hrn):
67 #return str(cred) + '_' + str(hrn)
70 def msg_aggrMgr(cred, hrn, msg_id):
71 slice_id = generate_slide_id(cred, hrn)
73 msg = struct.pack('> B%ds' % len(slice_id), msg_id, slice_id)
74 buf = struct.pack('> H', len(msg)+2) + msg
77 aggrMgr_sock = connect_aggrMgr()
78 aggrMgr_sock.send(buf)
81 except socketerror, message:
83 except IOerror, message:
87 def start_slice(cred, hrn):
88 if DEBUG: print "Received start_slice call"
89 return msg_aggrMgr(SFA_START_SLICE)
91 def stop_slice(cred, hrn):
92 if DEBUG: print "Received stop_slice call"
93 return msg_aggrMgr(SFA_STOP_SLICE)
95 def delete_slice(cred, hrn):
96 if DEBUG: print "Received delete_slice call"
97 return msg_aggrMgr(SFA_DELETE_SLICE)
99 def reset_slices(cred, hrn):
100 if DEBUG: print "Received reset_slices call"
101 return msg_aggrMgr(SFA_RESET_SLICES)
103 def create_slice(cred, hrn, rspec):
104 if DEBUG: print "Received create_slice call"
105 slice_id = generate_slide_id(cred, hrn)
107 msg = struct.pack('> B%ds%ds' % (len(slice_id)+1, len(rspec)), SFA_CREATE_SLICE, slice_id, rspec)
108 buf = struct.pack('> H', len(msg)+2) + msg
111 aggrMgr_sock = connect_aggrMgr()
112 aggrMgr_sock.send(buf)
114 print "Sent %d bytes and closing connection" % len(buf)
116 except socketerror, message:
118 except IOerror, message:
122 def get_rspec(cred, hrn=None):
123 if DEBUG: print "Received get_rspec call"
124 slice_id = generate_slide_id(cred, hrn)
126 msg = struct.pack('> B%ds' % len(slice_id), SFA_GET_RESOURCES, slice_id)
127 buf = struct.pack('> H', len(msg)+2) + msg
130 aggrMgr_sock = connect_aggrMgr()
131 aggrMgr_sock.send(buf)
132 resource_list = extract(aggrMgr_sock);
136 except socketerror, message:
138 except IOerror, message:
144 # r.parseFile(sys.argv[1])
146 # create_slice(None,'plc',rspec)
148 #if __name__ == "__main__":