From 6f74ab194a772c9666811985061c2bc107733ef1 Mon Sep 17 00:00:00 2001
From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Date: Mon, 25 Jun 2012 15:22:38 +0900
Subject: of1.2: fix OFPPacketIn parser to set ethernet frame

set ethernet frame in msg.data.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
---
 ryu/ofproto/ofproto_v1_2_parser.py | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/ryu/ofproto/ofproto_v1_2_parser.py b/ryu/ofproto/ofproto_v1_2_parser.py
index d9c12fb4..6acf7d23 100644
--- a/ryu/ofproto/ofproto_v1_2_parser.py
+++ b/ryu/ofproto/ofproto_v1_2_parser.py
@@ -19,6 +19,7 @@ import struct
 import itertools
 
 from ryu.lib import mac
+from ryu import utils
 from ofproto_parser import MsgBase, msg_pack_into, msg_str_attr
 from . import ofproto_parser
 from . import ofproto_v1_2
@@ -236,6 +237,15 @@ class OFPPacketIn(MsgBase):
 
         msg.match = OFPMatch.parser(msg.buf, ofproto_v1_2.OFP_PACKET_IN_SIZE -
                                     ofproto_v1_2.OFP_MATCH_SIZE)
+
+        match_len = utils.round_up(msg.match.length, 8)
+        msg.data = msg.buf[(ofproto_v1_2.OFP_PACKET_IN_SIZE -
+                            ofproto_v1_2.OFP_MATCH_SIZE + match_len):]
+
+        if msg.total_len < len(msg.data):
+            # discard padding for 8-byte alignment of OFP packet
+            msg.data = msg.data[:msg.total_len]
+
         return msg
 
 
-- 
cgit v1.2.3