Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
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)