Exemple #1
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
            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)
Exemple #2
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)