def _recv_loop(self): buf = bytearray() required_len = oxproto_common.OXP_HEADER_SIZE count = 0 while self.is_active: ret = self.socket.recv(required_len) if len(ret) == 0: self.is_active = False break buf += ret LOG.info("msg: %s " % buf) while len(buf) >= required_len: # Parser. (version, msg_type, msg_len, xid) = oxproto_parser.header(buf) required_len = msg_len if len(buf) < required_len: break print "msg:", msg ''' #Wait for parsing msg = ofproto_parser.msg(self, version, msg_type, msg_len, xid, buf) # LOG.debug('queue msg %s cls %s', msg, msg.__class__) if msg: ev = ofp_event.ofp_msg_to_ev(msg) self.ofp_brick.send_event_to_observers(ev, self.state) dispatchers = lambda x: x.callers[ev.__class__].dispatchers handlers = [handler for handler in self.ofp_brick.get_handlers(ev) if self.state in dispatchers(handler)] for handler in handlers: handler(ev) buf = buf[required_len:] required_len = ofproto_common.OFP_HEADER_SIZE # We need to schedule other greenlets. Otherwise, ryu # can't accept new switches or handle the existing # switches. The limit is arbitrary. We need the better # approach in the future. ''' count += 1 if count > 2048: count = 0 hub.sleep(0)
def _recv_loop(self): buf = bytearray() required_len = oxproto_common.OXP_HEADER_SIZE count = 0 while self.is_active: ret = self.socket.recv(required_len) if len(ret) == 0: self.is_active = False break buf += ret while len(buf) >= required_len: # Parser. (version, msg_type, msg_len, xid) = oxproto_parser.header(buf) required_len = msg_len if len(buf) < required_len: break # Wait for parsing msg = oxproto_parser.msg(self, version, msg_type, msg_len, xid, buf) if msg: # LOG.info('queue msg %s cls %s', msg, msg.__class__) ev = oxp_event.oxp_msg_to_ev(msg) self.oxp_brick.send_event_to_observers(ev, self.state) dispatchers = lambda x: x.callers[ev.__class__].dispatchers handlers = [ handler for handler in self.oxp_brick.get_handlers(ev) if self.state in dispatchers(handler) ] for handler in handlers: handler(ev) buf = buf[required_len:] required_len = oxproto_common.OXP_HEADER_SIZE count += 1 if count > 2048: count = 0 hub.sleep(0)