On Thu, 7 Jun 2012 07:48:34 +0900
Isaku Yamahata <yamah...@valinux.co.jp> wrote:

> I meant ethernet frame parser like dpkt. Some parsers depends on frame size.

I see. Here's an update patch.

btw, dpkt can't handle vlan header. So it's not so usuful in most of
production environments. We can add the feature to it but looks like
the development activity of dpkt is pretty low. So I'm not sure if it
is the library that we should use. Anyone knows other python ethernet
libraries?


-
>From b287192116e4838a4871431a69a68db292afc6ff Mon Sep 17 00:00:00 2001
From: FUJITA Tomonori <fujita.tomon...@lab.ntt.co.jp>
Date: Thu, 7 Jun 2012 07:58:21 +0900
Subject: [PATCH] Add Nicira Extension NXT_PACKET_IN support

Signed-off-by: FUJITA Tomonori <fujita.tomon...@lab.ntt.co.jp>
---
 ryu/ofproto/ofproto_v1_0.py        |    6 ++++++
 ryu/ofproto/ofproto_v1_0_parser.py |   34 ++++++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/ryu/ofproto/ofproto_v1_0.py b/ryu/ofproto/ofproto_v1_0.py
index 5c9c205..624bc76 100644
--- a/ryu/ofproto/ofproto_v1_0.py
+++ b/ryu/ofproto/ofproto_v1_0.py
@@ -574,6 +574,7 @@ NXT_FLOW_MOD = 13
 NXT_FLOW_REMOVED = 14
 NXT_FLOW_MOD_TABLE_ID = 15
 NXT_SET_PACKET_IN_FORMAT = 16
+NXT_PACKET_IN = 17
 NXT_SET_CONTROLLER_ID = 20
 
 # enum nx_role
@@ -624,6 +625,11 @@ NX_SET_PACKET_IN_FORMAT_SIZE = 20
 assert (calcsize(NX_SET_PACKET_IN_FORMAT_PACK_STR) +
         NICIRA_HEADER_SIZE == NX_SET_PACKET_IN_FORMAT_SIZE)
 
+NX_PACKET_IN_PACK_STR = '!IHBBQH6x'
+NX_PACKET_IN_SIZE = 40
+assert (calcsize(NX_PACKET_IN_PACK_STR) +
+        NICIRA_HEADER_SIZE == NX_PACKET_IN_SIZE)
+
 NX_CONTROLLER_ID_PACK_STR = '!6xH'
 NX_CONTROLLER_ID_SIZE = 24
 assert (calcsize(NX_CONTROLLER_ID_PACK_STR) +
diff --git a/ryu/ofproto/ofproto_v1_0_parser.py 
b/ryu/ofproto/ofproto_v1_0_parser.py
index 07acce4..f81ebd0 100644
--- a/ryu/ofproto/ofproto_v1_0_parser.py
+++ b/ryu/ofproto/ofproto_v1_0_parser.py
@@ -1368,6 +1368,40 @@ class NXTSetPacketInFormat(NiciraHeader):
                       self.format)
 
 
+@NiciraHeader.register_nx_subtype(ofproto_v1_0.NXT_PACKET_IN)
+class NXTPacketIn(NiciraHeader):
+    def __init__(self, datapath, buffer_id, total_len, reason, table_id,
+                 cookie, match_len, match, frame):
+        super(NXTPacketIn, self).__init__(
+            datapath, ofproto_v1_0.NXT_PACKET_IN)
+        self.buffer_id = buffer_id
+        self.total_len = total_len
+        self.reason = reason
+        self.table_id = table_id
+        self.cookie = cookie
+        self.match_len = match_len
+        self.match = match
+        self.frame = frame
+
+    @classmethod
+    def parser(cls, datapath, buf, offset):
+        (buffer_id, total_len, reason, table_id,
+                 cookie, match_len) = struct.unpack_from(
+            ofproto_v1_0.NX_PACKET_IN_PACK_STR, buf, offset)
+
+        offset += (ofproto_v1_0.NX_PACKET_IN_SIZE
+                   - ofproto_v1_0.NICIRA_HEADER_SIZE)
+
+        match = nx_match.NXMatch.parser(buf, offset, match_len)
+        pad_len = (match_len + 7) / 8 * 8
+        offset += match_len + pad_len
+        frame = buf[offset:]
+        if total_len < len(frame):
+            frame = frame[:total_len]
+        return cls(datapath, buffer_id, total_len, reason, table_id,
+                   cookie, match_len, match, frame)
+
+
 class NXTSetControllerId(NiciraHeader):
     def __init__(self, datapath, controller_id):
         super(NXTSetControllerId, self).__init__(
-- 
1.7.4.4


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to