diff --git a/ryu/ofproto/ofproto_v1_3_parser.py b/ryu/ofproto/ofproto_v1_3_parser.py index a0de4617..6c13fe69 100644 --- a/ryu/ofproto/ofproto_v1_3_parser.py +++ b/ryu/ofproto/ofproto_v1_3_parser.py @@ -5149,7 +5149,7 @@ class OFPTableFeaturePropExperimenter(OFPTableFeatureProp): while offset < length: (word,) = struct.unpack_from(cls._DATA_ELEMENT_PACK_STR, buf, offset) - exp.data.append(word) + data.append(word) offset += pack_size return { diff --git a/ryu/tests/packet_data/of13/4-56-ofp_table_features_reply.packet b/ryu/tests/packet_data/of13/4-56-ofp_table_features_reply.packet index f48d4ab3..3a467f42 100644 Binary files a/ryu/tests/packet_data/of13/4-56-ofp_table_features_reply.packet and b/ryu/tests/packet_data/of13/4-56-ofp_table_features_reply.packet differ diff --git a/ryu/tests/packet_data_generator/src/x4.erl b/ryu/tests/packet_data_generator/src/x4.erl index 32e641a5..efd4deb7 100644 --- a/ryu/tests/packet_data_generator/src/x4.erl +++ b/ryu/tests/packet_data_generator/src/x4.erl @@ -1732,7 +1732,19 @@ x() -> arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, icmpv6_type,icmpv6_code,ipv6_nd_target, ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, #ofp_table_features{ table_id = 1,name = <<"Flow Table 0x01">>, metadata_match = <<"\377\377\377\377\377\377\377\377">>, diff --git a/ryu/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json index 3febfcec..4f46c567 100644 --- a/ryu/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json +++ b/ryu/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json @@ -4,7 +4,7 @@ { "OFPTableFeaturesStats": { "config": 0, - "length": 1112, + "length": 1168, "max_entries": 16777216, "metadata_match": 18446744073709551615, "metadata_write": 18446744073709551615, @@ -1591,6 +1591,33 @@ ], "type": 14 } + }, + { + "OFPTableFeaturePropExperimenter": { + "length": 12, + "type": 65534, + "exp_type": 0, + "experimenter": 101, + "data": [] + } + }, + { + "OFPTableFeaturePropExperimenter": { + "length": 16, + "type": 65534, + "exp_type": 1, + "experimenter": 101, + "data": [1] + } + }, + { + "OFPTableFeaturePropExperimenter": { + "length": 20, + "type": 65534, + "exp_type": 2, + "experimenter": 101, + "data": [1, 2] + } } ], "table_id": 0 diff --git a/ryu/utils.py b/ryu/utils.py index 1889257b..a66b7fee 100644 --- a/ryu/utils.py +++ b/ryu/utils.py @@ -100,7 +100,7 @@ def hex_array(data): def bytearray_to_hex(data): """Convert bytearray into array of hexes to be printed.""" - return ' '.join(hex(byte) for byte in data) + return ' '.join(hex(ord(byte)) for byte in data) # the following functions are taken from OpenStack