summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorIsaku Yamahata <yamahata@valinux.co.jp>2012-03-07 20:53:27 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2012-03-08 05:54:19 +0900
commitba5ce1a72e7f09c60e5f270ba0b489135957802e (patch)
tree28c09feea51eca041b3c734dbf4141d6c0fe5d42
parent828f58b2a77e307d8ceb82cd8fdae27700166371 (diff)
controller: print stack trace when datapath main loop goes wrong and log it
log errors when serving datapath. And a comment to clarify the intention. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/controller/controller.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/ryu/controller/controller.py b/ryu/controller/controller.py
index 886ee311..860db850 100644
--- a/ryu/controller/controller.py
+++ b/ryu/controller/controller.py
@@ -17,6 +17,7 @@ import contextlib
import gflags
import logging
import gevent
+import traceback
import random
from gevent.server import StreamServer
from gevent.queue import Queue
@@ -61,6 +62,9 @@ def _deactivate(method):
def deactivate(self):
try:
method(self)
+ except:
+ traceback.print_stack()
+ raise
finally:
self.is_active = False
return deactivate
@@ -228,4 +232,13 @@ class Datapath(object):
def datapath_connection_factory(socket, address):
LOG.debug('connected socket:%s address:%s', socket, address)
with contextlib.closing(Datapath(socket, address)) as datapath:
- datapath.serve()
+ try:
+ datapath.serve()
+ except:
+ # Something went wrong.
+ # Especially malicious switch can send malformed packet,
+ # the parser raise exception.
+ # Can we do anything more graceful?
+ LOG.error("Error in the datapath %s from %s",
+ datapath.id, address)
+ raise