Exemple #1
0
 def setUp(self):
     #self.scheduler 
     logging.basicConfig()
     self.scheduler = Scheduler(DefaultPolling())
     #self.scheduler.debugging = True
     #self.scheduler.logger.setLevel('DEBUG')
     #Client.logger.setLevel('DEBUG')
     import tests
     import os.path
     rootpath, _ = os.path.split(tests.__path__[0])
     if rootpath:
         os.chdir(rootpath)
     self.scheduler.queue.addSubQueue(3, PollEvent.createMatcher(category=PollEvent.WRITE_READY), 'write', None, None, CBQueue.AutoClassQueue.initHelper('fileno'))
     self.scheduler.queue.addSubQueue(1, PollEvent.createMatcher(category=PollEvent.READ_READY), 'read', None, None, CBQueue.AutoClassQueue.initHelper('fileno'))
     self.scheduler.queue.addSubQueue(5, PollEvent.createMatcher(category=PollEvent.ERROR), 'error')
     self.scheduler.queue.addSubQueue(2, ConnectionControlEvent.createMatcher(), 'control')
     self.scheduler.queue.addSubQueue(4, ConnectionWriteEvent.createMatcher(), 'connectionwrite', 40, 40, CBQueue.AutoClassQueue.initHelper('connection'))
     self.scheduler.queue.addSubQueue(10, RoutineControlEvent.createMatcher(), 'routine')
     self.scheduler.queue.addSubQueue(9, TimerEvent.createMatcher(), 'timer')
     self.scheduler.queue.addSubQueue(8, ResolveResponseEvent.createMatcher(), 'resolve')
     self.scheduler.queue.addSubQueue(8, ResolveRequestEvent.createMatcher(), 'resolvereq')
     self.scheduler.queue.addSubQueue(20, SystemControlEvent.createMatcher(), 'sysctl')
     self.scheduler.queue.addSubQueue(0, SystemControlLowPriorityEvent.createMatcher(), 'sysctllow')
     #Client.logger.setLevel('DEBUG')
     #TcpServer.logger.setLevel('DEBUG')
     self.protocolServer = TestProtocol(True)
     self.protocolClient = TestProtocol(False)
     self.resolver = Resolver(scheduler=self.scheduler)
     self.resolver.start()
Exemple #2
0
 def setUp(self):
     #self.scheduler 
     logging.basicConfig()
     self.scheduler = Scheduler(DefaultPolling())
     #self.scheduler.debugging = True
     #self.scheduler.logger.setLevel('DEBUG')
     #Client.logger.setLevel('DEBUG')
     import tests
     import os.path
     rootpath, _ = os.path.split(tests.__path__[0])
     if rootpath:
         os.chdir(rootpath)
     self.scheduler.queue.addSubQueue(3, PollEvent.createMatcher(category=PollEvent.WRITE_READY), 'write', None, None, CBQueue.AutoClassQueue.initHelper('fileno'))
     self.scheduler.queue.addSubQueue(1, PollEvent.createMatcher(category=PollEvent.READ_READY), 'read', None, None, CBQueue.AutoClassQueue.initHelper('fileno'))
     self.scheduler.queue.addSubQueue(5, PollEvent.createMatcher(category=PollEvent.ERROR), 'error')
     self.scheduler.queue.addSubQueue(2, ConnectionControlEvent.createMatcher(), 'control')
     self.scheduler.queue.addSubQueue(4, ConnectionWriteEvent.createMatcher(), 'connectionwrite', 40, 40, CBQueue.AutoClassQueue.initHelper('connection'))
     self.scheduler.queue.addSubQueue(10, RoutineControlEvent.createMatcher(), 'routine')
     self.scheduler.queue.addSubQueue(9, TimerEvent.createMatcher(), 'timer')
     self.scheduler.queue.addSubQueue(8, ResolveResponseEvent.createMatcher(), 'resolve')
     self.scheduler.queue.addSubQueue(8, ResolveRequestEvent.createMatcher(), 'resolvereq')
     self.scheduler.queue.addSubQueue(20, SystemControlEvent.createMatcher(), 'sysctl')
     self.scheduler.queue.addSubQueue(0, SystemControlLowPriorityEvent.createMatcher(), 'sysctllow')
     #Client.logger.setLevel('DEBUG')
     #TcpServer.logger.setLevel('DEBUG')
     self.protocolServer = TestProtocol(True)
     self.protocolClient = TestProtocol(False)
     self.resolver = Resolver(scheduler=self.scheduler)
     self.resolver.start()
Exemple #3
0
 def formatrequest(self, request, connection, assignxid = True):
     if assignxid:
         self.assignxid(request, connection)
     c = ConnectionWriteEvent(connection = connection, connmark = connection.connmark, data = request._tobytes())
     if self.debugging:
         self._logger.debug('message formatted: %r', common.dump(request))
     return c
Exemple #4
0
 def closed(self, connection):
     '''
     routine for connection closed
     '''
     connection.scheduler.ignore(ConnectionWriteEvent.createMatcher(connection = connection))
     for m in self._clearwritequeue(connection):
         yield m
Exemple #5
0
 def formatreply(self, reply, request, connection):
     reply.header.xid = request.header.xid
     c = ConnectionWriteEvent(connection=connection,
                              connmark=connection.connmark,
                              data=reply._tobytes())
     if self.debugging:
         self._logger.debug('message formatted: %r', common.dump(request))
     return c
Exemple #6
0
 async def error(self, connection):
     '''
     routine for connection error
     '''
     err = connection.socket.getsockopt(SOL_SOCKET, SO_ERROR)
     self._logger.warning('Connection error status: %d(%s)', err, errno.errorcode.get(err, 'Not found'))
     connection.scheduler.ignore(ConnectionWriteEvent.createMatcher(connection = connection))
     await self._clearwritequeue(connection)
Exemple #7
0
 def closed(self, connection):
     '''
     routine for connection closed
     '''
     connection.scheduler.ignore(
         ConnectionWriteEvent.createMatcher(connection=connection))
     for m in self._clearwritequeue(connection):
         yield m
Exemple #8
0
 def init(self, connection):
     '''
     routine for connection initialization
     '''
     try:
         connection.createdqueues = []
         if self.createqueue:
             connection.queue = connection.scheduler.queue.addSubQueue(
                 self.writepriority,
                 ConnectionWriteEvent.createMatcher(connection=connection),
                 ('write', connection), self.writequeuesize)
             connection.createdqueues.append(connection.queue)
     except IndexError:
         pass
     if False:
         yield
Exemple #9
0
 async def init(self, connection):
     await Protocol.init(self, connection)
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.messagepriority, OpenflowPresetupMessageEvent.createMatcher(connection = connection), ('presetup', connection)))
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.messagepriority, OpenflowConnectionStateEvent.createMatcher(connection = connection), ('connstate', connection)))
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.messagepriority + 1, OpenflowResponseEvent.createMatcher(connection = connection), ('response', connection), self.messagequeuesize))
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.messagepriority, OpenflowAsyncMessageEvent.createMatcher(connection = connection), ('async', connection), self.messagequeuesize))
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.messagepriority, OpenflowExperimenterMessageEvent.createMatcher(connection = connection), ('experimenter', connection), self.messagequeuesize))
     # Add priority to echo reply, or the whole connection is down
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.writepriority + 10, ConnectionWriteEvent.createMatcher(connection = connection, _ismatch = lambda x: hasattr(x, 'echoreply') and x.echoreply), ('echoreply', connection)))
     connection._rate_limiter = RateLimiter(200, connection)
     await self.reconnect_init(connection)
Exemple #10
0
 def init(self, connection):
     for m in Protocol.init(self, connection):
         yield m
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.messagepriority, OpenflowPresetupMessageEvent.createMatcher(connection = connection), ('presetup', connection)))
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.messagepriority, OpenflowConnectionStateEvent.createMatcher(connection = connection), ('connstate', connection)))
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.messagepriority + 1, OpenflowResponseEvent.createMatcher(connection = connection), ('response', connection), self.messagequeuesize))
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.messagepriority, OpenflowAsyncMessageEvent.createMatcher(connection = connection), ('async', connection), self.messagequeuesize))
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.messagepriority, OpenflowExperimenterMessageEvent.createMatcher(connection = connection), ('experimenter', connection), self.messagequeuesize))
     # Add priority to echo reply, or the whole connection is down
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.writepriority + 10, ConnectionWriteEvent.createMatcher(connection = connection, _ismatch = lambda x: hasattr(x, 'echoreply') and x.echoreply), ('echoreply', connection)))
     for m in self.reconnect_init(connection):
         yield m
Exemple #11
0
 def init(self, connection):
     """
     routine for connection initialization
     """
     try:
         connection.createdqueues = []
         if self.createqueue:
             connection.queue = connection.scheduler.queue.addSubQueue(
                 self.writepriority,
                 ConnectionWriteEvent.createMatcher(connection=connection),
                 ("write", connection),
                 self.writequeuesize,
             )
             connection.createdqueues.append(connection.queue)
     except IndexError:
         pass
     if False:
         yield
Exemple #12
0
 def parse(self, connection, data, laststart):
     start = 0
     events = []
     while True:
         result = common.ofp_msg.parse(data[start:])
         if result is None:
             break
         msg, size = result
         if self.debugging:
             self._logger.debug('message received: %r', common.dump(msg))
         start += size
         e = self._createevent(connection, msg)
         if e is not None:
             events.append(e)
     if laststart == len(data):
         # Remote write close
         events.append(ConnectionWriteEvent(connection, connection.connmark, data = b'', EOF = True))
     return (events, len(data) - start)
Exemple #13
0
 def _extra_queues(self, connection):
     connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\
             self.writepriority + 10, ConnectionWriteEvent.createMatcher(connection = connection, _ismatch = lambda x: hasattr(x, 'echoreply') and x.echoreply), ('echoreply', connection)))
     if False:
         yield