def f_mnSocketProcess(self,sock): # Received a connect to the server (listening) socket # iperf ok here if sock == self.srvsock: self.accept_new_connection() #raw_input("Press enter to continue") #os.system("pause") #CLI( self.net ) else: # Received something on a client socket str_in = sock.recv(1024) #print 'at MN receive %s' %str_in # Check to see if the peer socket closed if str_in == '': self.f_closeSocket(sock) elif str_in == INIT_POX_DONE: self.trafficProcessor = Traffic_process(self.topoFileName,self.net,self.topo,self.server_list, self.switch_list,self.hostTraffic_dict_list,self.weight_raw_in, self.io_mat_f,self.iperfPeriod) self.trafficProcessor.run() # start() #.f_run() #raw_input("Press enter to continue") #os.system("pause") sys.exit() CLI( self.net ) # notify POX traffic ready f_send_pox_inform(msg=MSG_TRAFFIC_FIRED) # sock.send(MSG_TRAFFIC_FIRED) elif str_in == MSG_SENDNEWRATIO: f_send_pox_inform(msg=str(TEM_ratio)) elif str_in == MSG_NEXTTRAFFIC: # loop to next traffic if self.dataCnt < len(self.hostTraffic_dict_list): self.pidHistDict = f_generate_traffic(self.net,self.topo,self.hostTraffic_dict_list[self.dataCnt], self.server_list,self.iperfPeriod,self.pidHistDict) self.dataCnt += 1 else: f_send_pox_inform(MSG_NOTRAFFIC) elif str_in == MSG_ALLDONE: f_kill_iperf(self.net,self.server_list) self.workFinish = True else: # TBD host,port = sock.getpeername() newstr = '[%s:%s] %s' % (host, port, str_in)
class MnServer: def __init__(self,topoFileName,net,topo,server_list,switch_list,hostTraffic_dict,weight_raw_in, period=10000000,port=MN_PORT): '''input''' self.topoFileName = topoFileName self.net = net self.topo = topo self.hostTraffic_dict_list = hostTraffic_dict self.weight_raw_in = weight_raw_in self.server_list = server_list self.switch_list = switch_list self.iperfPeriod = period self.port = port self.io_mat_f = b'' '''logging related''' self.diable_items = ','.join(self.switch_list)+','+SYS_ENTITY '''iperf PID''' self.pidHistDict = None '''status''' self.workFinish = False self.dataCnt = 0 '''process obj''' self.trafficProcessor = None # start server socket self.f_init_server_socket() def f_init_server_socket(self): try: self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) result = self.srvsock.connect_ex(("", self.port)) print 'socket result=',result # if(result == 0) : # self.srvsock.shutdown(socket.SHUT_RDWR) # self.srvsock.close() # self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) self.srvsock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 ) #print 'socket ok here 1' if (result == 0) : self.srvsock.bind( ('localhost', 0) ) else: self.srvsock.bind( ("", self.port) ) #print 'socket ok here 2' self.srvsock.listen( 5 ) self.descriptors = [self.srvsock] except socket.error as err: print "socket creation failed at client with error %s" %(err) return False print 'ChatServer started on port %s' % self.port return True def accept_new_connection( self ): ''' receive new connection ''' newsock, (remhost, remport) = self.srvsock.accept() self.descriptors.append( newsock ) print 'remhost:%s, remport:%d' %(remhost, remport) # send connection ack newsock.send(CONN_CONFIRM) def run( self ): '''loop for MN and POX communications and processes''' while 1: # Await an event on a readable socket descriptor #print self.descriptors (sread, swrite, sexc) = select.select( self.descriptors, [], [] ) # Iterate through the tagged read descriptors for sock in sread: self.f_mnSocketProcess(sock) if self.workFinish: return True def f_mnSocketProcess(self,sock): # Received a connect to the server (listening) socket # iperf ok here if sock == self.srvsock: self.accept_new_connection() #raw_input("Press enter to continue") #os.system("pause") #CLI( self.net ) else: # Received something on a client socket str_in = sock.recv(1024) #print 'at MN receive %s' %str_in # Check to see if the peer socket closed if str_in == '': self.f_closeSocket(sock) elif str_in == INIT_POX_DONE: self.trafficProcessor = Traffic_process(self.topoFileName,self.net,self.topo,self.server_list, self.switch_list,self.hostTraffic_dict_list,self.weight_raw_in, self.io_mat_f,self.iperfPeriod) self.trafficProcessor.run() # start() #.f_run() #raw_input("Press enter to continue") #os.system("pause") sys.exit() CLI( self.net ) # notify POX traffic ready f_send_pox_inform(msg=MSG_TRAFFIC_FIRED) # sock.send(MSG_TRAFFIC_FIRED) elif str_in == MSG_SENDNEWRATIO: f_send_pox_inform(msg=str(TEM_ratio)) elif str_in == MSG_NEXTTRAFFIC: # loop to next traffic if self.dataCnt < len(self.hostTraffic_dict_list): self.pidHistDict = f_generate_traffic(self.net,self.topo,self.hostTraffic_dict_list[self.dataCnt], self.server_list,self.iperfPeriod,self.pidHistDict) self.dataCnt += 1 else: f_send_pox_inform(MSG_NOTRAFFIC) elif str_in == MSG_ALLDONE: f_kill_iperf(self.net,self.server_list) self.workFinish = True else: # TBD host,port = sock.getpeername() newstr = '[%s:%s] %s' % (host, port, str_in) def f_closeSocket(self,sock): #host,port = sock.getpeername() sock.close self.descriptors.remove(sock)