diff --git a/ryu/controller/controller.py b/ryu/controller/controller.py index fc6e1168..2bb43f98 100644 --- a/ryu/controller/controller.py +++ b/ryu/controller/controller.py @@ -164,14 +164,15 @@ class Datapath(object): msg = ofproto_parser.msg(self, version, msg_type, msg_len, xid, buf) #LOG.debug('queue msg %s cls %s', msg, msg.__class__) - ev = ofp_event.ofp_msg_to_ev(msg) - self.ofp_brick.send_event_to_observers(ev, self.state) + if msg: + ev = ofp_event.ofp_msg_to_ev(msg) + self.ofp_brick.send_event_to_observers(ev, self.state) - handlers = [handler for handler in - self.ofp_brick.get_handlers(ev) if self.state in - handler.dispatchers] - for handler in handlers: - handler(ev) + handlers = [handler for handler in + self.ofp_brick.get_handlers(ev) if + self.state in handler.dispatchers] + for handler in handlers: + handler(ev) buf = buf[required_len:] required_len = ofproto_common.OFP_HEADER_SIZE diff --git a/ryu/ofproto/ofproto_parser.py b/ryu/ofproto/ofproto_parser.py index 3b884400..6dbff037 100644 --- a/ryu/ofproto/ofproto_parser.py +++ b/ryu/ofproto/ofproto_parser.py @@ -54,13 +54,13 @@ def msg(datapath, version, msg_type, msg_len, xid, buf): try: return msg_parser(datapath, version, msg_type, msg_len, xid, buf) - except struct.error: + except: LOG.exception( 'Encounter an error during parsing OpenFlow packet from switch.' 'This implies switch sending a malfold OpenFlow packet.' 'version 0x%02x msg_type %d msg_len %d xid %d buf %s', version, msg_type, msg_len, xid, utils.bytearray_to_hex(buf)) - raise + return None def create_list_of_base_attributes(f):