From 4cb7683f2f372cf1f43ce5a2ecdd10f44bd19109 Mon Sep 17 00:00:00 2001 From: FUJITA Tomonori Date: Tue, 19 Nov 2013 18:51:42 -0800 Subject: [PATCH] skip malformed OF messages and continue instead of stopping Needs to catch more kinds of exceptions (e.g. TypeError). Signed-off-by: FUJITA Tomonori --- ryu/controller/controller.py | 15 ++++++++------- ryu/ofproto/ofproto_parser.py | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) 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):