skip malformed OF messages and continue instead of stopping

Needs to catch more kinds of exceptions (e.g. TypeError).

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
FUJITA Tomonori 2013-11-19 18:51:42 -08:00
parent 16307833b4
commit 4cb7683f2f
2 changed files with 10 additions and 9 deletions

View File

@ -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

View File

@ -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):