summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ryu/lib/packet/packet.py13
1 files changed, 8 insertions, 5 deletions
diff --git a/ryu/lib/packet/packet.py b/ryu/lib/packet/packet.py
index d6aeed73..bfeed0d7 100644
--- a/ryu/lib/packet/packet.py
+++ b/ryu/lib/packet/packet.py
@@ -14,6 +14,7 @@
# limitations under the License.
import inspect
+import struct
from . import packet_base
from . import ethernet
@@ -47,11 +48,13 @@ class Packet(object):
def _parser(self, cls):
while cls:
- proto, cls = cls.parser(self.data[self.parsed_bytes:])
- if proto:
- self.parsed_bytes += proto.length
- self.protocols.append(proto)
-
+ try:
+ proto, cls = cls.parser(self.data[self.parsed_bytes:])
+ if proto:
+ self.parsed_bytes += proto.length
+ self.protocols.append(proto)
+ except struct.error:
+ cls = None
if len(self.data) > self.parsed_bytes:
self.protocols.append(self.data[self.parsed_bytes:])