On Mon, 22 Jun 2015 19:20:55 +0900 IWAMOTO Toshihiro <[email protected]> wrote:
> At Mon, 22 Jun 2015 19:09:59 +0900, > IWAMOTO Toshihiro wrote: >> >> python3 doesn't have buffer() and it doesn't seem to be necessary from first. > > Is there a reason for using buffer? > If buffer-like thing is necessary in python3, memoryview can be used. Looks like this breaks python2.6 support. You can look at the full log at: https://travis-ci.org/fujita/ryu >> >> Signed-off-by: IWAMOTO Toshihiro <[email protected]> >> --- >> ryu/lib/packet/bgp.py | 66 >> +++++++++++++-------------- >> ryu/lib/packet/bmp.py | 33 ++++++-------- >> ryu/lib/packet/ospf.py | 30 ++++++------ >> ryu/ofproto/ofproto_parser.py | 8 +++- >> ryu/ofproto/ofproto_v1_3_parser.py | 16 +++---- >> ryu/tests/unit/lib/test_ofp_pktinfilter.py | 2 +- >> ryu/tests/unit/lib/test_pack_utils.py | 2 +- >> ryu/tests/unit/ofproto/test_ofproto_parser.py | 5 ++ >> ryu/tests/unit/packet/test_icmpv6.py | 40 ++++++++-------- >> ryu/tests/unit/packet/test_igmp.py | 16 +++---- >> 10 files changed, 112 insertions(+), 106 deletions(-) >> >> diff --git a/ryu/lib/packet/bgp.py b/ryu/lib/packet/bgp.py >> index 623260f..cc95ce1 100644 >> --- a/ryu/lib/packet/bgp.py >> +++ b/ryu/lib/packet/bgp.py >> @@ -174,7 +174,7 @@ class _Value(object): >> >> @classmethod >> def parse_value(cls, buf): >> - values = struct.unpack_from(cls._VALUE_PACK_STR, buffer(buf)) >> + values = struct.unpack_from(cls._VALUE_PACK_STR, buf) >> return dict(zip(cls._VALUE_FIELDS, values)) >> >> def serialize_value(self): >> @@ -623,7 +623,7 @@ class _RouteDistinguisher(StringifyMixin, _TypeDisp, >> _Value): >> @classmethod >> def parser(cls, buf): >> assert len(buf) == 8 >> - (type_,) = struct.unpack_from(cls._PACK_STR, buffer(buf)) >> + (type_,) = struct.unpack_from(cls._PACK_STR, buf) >> rest = buf[struct.calcsize(cls._PACK_STR):] >> subcls = cls._lookup_type(type_) >> return subcls(type_=type_, **subcls.parse_value(rest)) >> @@ -733,7 +733,7 @@ class _AddrPrefix(StringifyMixin): >> >> @classmethod >> def parser(cls, buf): >> - (length, ) = struct.unpack_from(cls._PACK_STR, buffer(buf)) >> + (length, ) = struct.unpack_from(cls._PACK_STR, buf) >> rest = buf[struct.calcsize(cls._PACK_STR):] >> byte_length = (length + 7) / 8 >> addr = cls._from_bin(rest[:byte_length]) >> @@ -800,7 +800,7 @@ class _LabelledAddrPrefix(_AddrPrefix): >> >> @classmethod >> def _label_from_bin(cls, bin): >> - (b1, b2, b3) = struct.unpack_from(cls._LABEL_PACK_STR, buffer(bin)) >> + (b1, b2, b3) = struct.unpack_from(cls._LABEL_PACK_STR, bin) >> rest = bin[struct.calcsize(cls._LABEL_PACK_STR):] >> return (b1 << 16) | (b2 << 8) | b3, rest >> >> @@ -1135,7 +1135,7 @@ class _OptParam(StringifyMixin, _TypeDisp, _Value): >> >> @classmethod >> def parser(cls, buf): >> - (type_, length) = struct.unpack_from(cls._PACK_STR, buffer(buf)) >> + (type_, length) = struct.unpack_from(cls._PACK_STR, buf) >> rest = buf[struct.calcsize(cls._PACK_STR):] >> value = bytes(rest[:length]) >> rest = rest[length:] >> @@ -1188,7 +1188,7 @@ class _OptParamCapability(_OptParam, _TypeDisp): >> caps = [] >> while len(buf) > 0: >> (code, length) = struct.unpack_from(cls._CAP_HDR_PACK_STR, >> - buffer(buf)) >> + buf) >> value = buf[struct.calcsize(cls._CAP_HDR_PACK_STR):] >> buf = buf[length + 2:] >> kwargs = { >> @@ -1258,11 +1258,11 @@ class >> BGPOptParamCapabilityGracefulRestart(_OptParamCapability): >> >> @classmethod >> def parse_cap_value(cls, buf): >> - (restart, ) = struct.unpack_from(cls._CAP_PACK_STR, buffer(buf)) >> + (restart, ) = struct.unpack_from(cls._CAP_PACK_STR, buf) >> buf = buf[2:] >> l = [] >> while len(buf) > 0: >> - l.append(struct.unpack_from("!HBB", buffer(buf))) >> + l.append(struct.unpack_from("!HBB", buf)) >> buf = buf[4:] >> return {'flags': restart >> 12, 'time': restart & 0xfff, 'tuples': >> l} >> >> @@ -1289,7 +1289,7 @@ class >> BGPOptParamCapabilityFourOctetAsNumber(_OptParamCapability): >> >> @classmethod >> def parse_cap_value(cls, buf): >> - (as_number, ) = struct.unpack_from(cls._CAP_PACK_STR, buffer(buf)) >> + (as_number, ) = struct.unpack_from(cls._CAP_PACK_STR, buf) >> return {'as_number': as_number} >> >> def serialize_cap_value(self): >> @@ -1311,7 +1311,7 @@ class >> BGPOptParamCapabilityMultiprotocol(_OptParamCapability): >> @classmethod >> def parse_cap_value(cls, buf): >> (afi, reserved, safi,) = struct.unpack_from(cls._CAP_PACK_STR, >> - buffer(buf)) >> + buf) >> return { >> 'afi': afi, >> 'reserved': reserved, >> @@ -1354,13 +1354,13 @@ class _PathAttribute(StringifyMixin, _TypeDisp, >> _Value): >> >> @classmethod >> def parser(cls, buf): >> - (flags, type_) = struct.unpack_from(cls._PACK_STR, buffer(buf)) >> + (flags, type_) = struct.unpack_from(cls._PACK_STR, buf) >> rest = buf[struct.calcsize(cls._PACK_STR):] >> if (flags & BGP_ATTR_FLAG_EXTENDED_LENGTH) != 0: >> len_pack_str = cls._PACK_STR_EXT_LEN >> else: >> len_pack_str = cls._PACK_STR_LEN >> - (length,) = struct.unpack_from(len_pack_str, buffer(rest)) >> + (length,) = struct.unpack_from(len_pack_str, rest) >> rest = rest[struct.calcsize(len_pack_str):] >> value = bytes(rest[:length]) >> rest = rest[length:] >> @@ -1469,7 +1469,7 @@ class _BGPPathAttributeAsPathCommon(_PathAttribute): >> >> while buf: >> (type_, num_as) = struct.unpack_from(cls._SEG_HDR_PACK_STR, >> - buffer(buf)) >> + buf) >> >> if type_ is not cls._AS_SET and type_ is not cls._AS_SEQUENCE: >> return False >> @@ -1494,12 +1494,12 @@ class _BGPPathAttributeAsPathCommon(_PathAttribute): >> >> while buf: >> (type_, num_as) = struct.unpack_from(cls._SEG_HDR_PACK_STR, >> - buffer(buf)) >> + buf) >> buf = buf[struct.calcsize(cls._SEG_HDR_PACK_STR):] >> l = [] >> for i in range(0, num_as): >> (as_number,) = struct.unpack_from(as_pack_str, >> - buffer(buf)) >> + buf) >> buf = buf[struct.calcsize(as_pack_str):] >> l.append(as_number) >> if type_ == cls._AS_SET: >> @@ -1568,7 +1568,7 @@ class BGPPathAttributeNextHop(_PathAttribute): >> >> @classmethod >> def parse_value(cls, buf): >> - (ip_addr,) = struct.unpack_from(cls._VALUE_PACK_STR, buffer(buf)) >> + (ip_addr,) = struct.unpack_from(cls._VALUE_PACK_STR, buf) >> return { >> 'value': addrconv.ipv4.bin_to_text(ip_addr), >> } >> @@ -1621,7 +1621,7 @@ class >> _BGPPathAttributeAggregatorCommon(_PathAttribute): >> @classmethod >> def parse_value(cls, buf): >> (as_number, addr) = struct.unpack_from(cls._VALUE_PACK_STR, >> - buffer(buf)) >> + buf) >> return { >> 'as_number': as_number, >> 'addr': addrconv.ipv4.bin_to_text(addr), >> @@ -1669,7 +1669,7 @@ class BGPPathAttributeCommunities(_PathAttribute): >> communities = [] >> elem_size = struct.calcsize(cls._VALUE_PACK_STR) >> while len(rest) >= elem_size: >> - (comm, ) = struct.unpack_from(cls._VALUE_PACK_STR, buffer(rest)) >> + (comm, ) = struct.unpack_from(cls._VALUE_PACK_STR, rest) >> communities.append(comm) >> rest = rest[elem_size:] >> return { >> @@ -1730,7 +1730,7 @@ class BGPPathAttributeOriginatorId(_PathAttribute): >> >> @classmethod >> def parse_value(cls, buf): >> - (originator_id,) = struct.unpack_from(cls._VALUE_PACK_STR, >> buffer(buf)) >> + (originator_id,) = struct.unpack_from(cls._VALUE_PACK_STR, buf) >> return { >> 'value': addrconv.ipv4.bin_to_text(originator_id), >> } >> @@ -1762,7 +1762,7 @@ class BGPPathAttributeClusterList(_PathAttribute): >> elem_size = struct.calcsize(cls._VALUE_PACK_STR) >> while len(rest) >= elem_size: >> (cluster_id, ) = struct.unpack_from( >> - cls._VALUE_PACK_STR, buffer(rest)) >> + cls._VALUE_PACK_STR, rest) >> cluster_list.append(addrconv.ipv4.bin_to_text(cluster_id)) >> rest = rest[elem_size:] >> return { >> @@ -1880,7 +1880,7 @@ class _ExtendedCommunity(StringifyMixin, _TypeDisp, >> _Value): >> >> @classmethod >> def parse(cls, buf): >> - (type_high, payload) = struct.unpack_from(cls._PACK_STR, >> buffer(buf)) >> + (type_high, payload) = struct.unpack_from(cls._PACK_STR, buf) >> rest = buf[struct.calcsize(cls._PACK_STR):] >> type_ = type_high & cls._TYPE_HIGH_MASK >> subcls = cls._lookup_type(type_) >> @@ -2006,7 +2006,7 @@ class BGPPathAttributeMpReachNLRI(_PathAttribute): >> @classmethod >> def parse_value(cls, buf): >> (afi, safi, next_hop_len,) = struct.unpack_from(cls._VALUE_PACK_STR, >> - buffer(buf)) >> + buf) >> rest = buf[struct.calcsize(cls._VALUE_PACK_STR):] >> next_hop_bin = rest[:next_hop_len] >> rest = rest[next_hop_len:] >> @@ -2103,7 +2103,7 @@ class BGPPathAttributeMpUnreachNLRI(_PathAttribute): >> >> @classmethod >> def parse_value(cls, buf): >> - (afi, safi,) = struct.unpack_from(cls._VALUE_PACK_STR, buffer(buf)) >> + (afi, safi,) = struct.unpack_from(cls._VALUE_PACK_STR, buf) >> binnlri = buf[struct.calcsize(cls._VALUE_PACK_STR):] >> addr_cls = _get_addr_class(afi, safi) >> nlri = [] >> @@ -2169,7 +2169,7 @@ class BGPMessage(packet_base.PacketBase, _TypeDisp): >> raise stream_parser.StreamParser.TooSmallException( >> '%d < %d' % (len(buf), cls._HDR_LEN)) >> (marker, len_, type_) = struct.unpack_from(cls._HDR_PACK_STR, >> - buffer(buf)) >> + buf) >> msglen = len_ >> if len(buf) < msglen: >> raise stream_parser.StreamParser.TooSmallException( >> @@ -2248,7 +2248,7 @@ class BGPOpen(BGPMessage): >> def parser(cls, buf): >> (version, my_as, hold_time, >> bgp_identifier, opt_param_len) = struct.unpack_from(cls._PACK_STR, >> - buffer(buf)) >> + buf) >> rest = buf[struct.calcsize(cls._PACK_STR):] >> binopts = rest[:opt_param_len] >> opt_param = [] >> @@ -2345,15 +2345,15 @@ class BGPUpdate(BGPMessage): >> @classmethod >> def parser(cls, buf): >> offset = 0 >> - (withdrawn_routes_len,) = struct.unpack_from('!H', buffer(buf), >> offset) >> - binroutes = buffer(buf[offset + 2: >> - offset + 2 + withdrawn_routes_len]) >> + (withdrawn_routes_len,) = struct.unpack_from('!H', buf, offset) >> + binroutes = buf[offset + 2: >> + offset + 2 + withdrawn_routes_len] >> offset += 2 + withdrawn_routes_len >> - (total_path_attribute_len,) = struct.unpack_from('!H', buffer(buf), >> + (total_path_attribute_len,) = struct.unpack_from('!H', buf, >> offset) >> - binpathattrs = buffer(buf[offset + 2: >> - offset + 2 + total_path_attribute_len]) >> - binnlri = buffer(buf[offset + 2 + total_path_attribute_len:]) >> + binpathattrs = buf[offset + 2: >> + offset + 2 + total_path_attribute_len] >> + binnlri = buf[offset + 2 + total_path_attribute_len:] >> withdrawn_routes = [] >> while binroutes: >> r, binroutes = BGPWithdrawnRoute.parser(binroutes) >> @@ -2562,7 +2562,7 @@ class BGPRouteRefresh(BGPMessage): >> @classmethod >> def parser(cls, buf): >> (afi, demarcation, safi,) = struct.unpack_from(cls._PACK_STR, >> - buffer(buf)) >> + buf) >> return { >> "afi": afi, >> "safi": safi, >> diff --git a/ryu/lib/packet/bmp.py b/ryu/lib/packet/bmp.py >> index 06d4fb2..a3158e9 100644 >> --- a/ryu/lib/packet/bmp.py >> +++ b/ryu/lib/packet/bmp.py >> @@ -132,7 +132,7 @@ class BMPMessage(packet_base.PacketBase, _TypeDisp): >> raise stream_parser.StreamParser.TooSmallException( >> '%d < %d' % (len(buf), cls._HDR_LEN)) >> (version, len_, type_) = struct.unpack_from(cls._HDR_PACK_STR, >> - buffer(buf)) >> + buf) >> >> return version, len_, type_ >> >> @@ -229,7 +229,7 @@ class BMPPeerMessage(BMPMessage): >> (peer_type, peer_flags, peer_distinguisher, >> peer_address, peer_as, peer_bgp_id, >> timestamp1, timestamp2) = >> struct.unpack_from(cls._PEER_HDR_PACK_STR, >> - buffer(buf)) >> + buf) >> >> rest = buf[struct.calcsize(cls._PEER_HDR_PACK_STR):] >> >> @@ -239,11 +239,11 @@ class BMPPeerMessage(BMPMessage): >> is_post_policy = False >> >> if peer_flags & (1 << 7): >> - peer_address = addrconv.ipv6.bin_to_text(buffer(peer_address)) >> + peer_address = addrconv.ipv6.bin_to_text(peer_address) >> else: >> - peer_address = >> addrconv.ipv4.bin_to_text(buffer(peer_address[:4])) >> + peer_address = addrconv.ipv4.bin_to_text(peer_address[:4]) >> >> - peer_bgp_id = addrconv.ipv4.bin_to_text(buffer(peer_bgp_id)) >> + peer_bgp_id = addrconv.ipv4.bin_to_text(peer_bgp_id) >> >> timestamp = float(timestamp1) + timestamp2 * (10 ** -6) >> >> @@ -385,8 +385,7 @@ class BMPStatisticsReport(BMPPeerMessage): >> def parser(cls, buf): >> kwargs, rest = super(BMPStatisticsReport, cls).parser(buf) >> >> - stats_count, = struct.unpack_from('!I', buffer(rest)) >> - >> + stats_count, = struct.unpack_from('!I', rest) >> buf = rest[struct.calcsize('!I'):] >> >> stats = [] >> @@ -395,7 +394,7 @@ class BMPStatisticsReport(BMPPeerMessage): >> if len(buf) < cls._MIN_LEN: >> raise stream_parser.StreamParser.TooSmallException( >> '%d < %d' % (len(buf), cls._MIN_LEN)) >> - (type_, len_) = struct.unpack_from(cls._TLV_PACK_STR, >> buffer(buf)) >> + (type_, len_) = struct.unpack_from(cls._TLV_PACK_STR, buf) >> >> if len(buf) < (cls._MIN_LEN + len_): >> raise stream_parser.StreamParser.TooSmallException( >> @@ -410,10 +409,10 @@ class BMPStatisticsReport(BMPPeerMessage): >> type_ == BMP_STAT_TYPE_INV_UPDATE_DUE_TO_AS_PATH_LOOP or \ >> type_ == BMP_STAT_TYPE_INV_UPDATE_DUE_TO_ORIGINATOR_ID or \ >> type_ == BMP_STAT_TYPE_INV_UPDATE_DUE_TO_AS_CONFED_LOOP: >> - value, = struct.unpack_from('!I', buffer(value)) >> + value, = struct.unpack_from('!I', value) >> elif type_ == BMP_STAT_TYPE_ADJ_RIB_IN or \ >> type_ == BMP_STAT_TYPE_LOC_RIB: >> - value, = struct.unpack_from('!Q', buffer(value)) >> + value, = struct.unpack_from('!Q', value) >> >> buf = buf[cls._MIN_LEN + len_:] >> >> @@ -491,13 +490,13 @@ class BMPPeerDownNotification(BMPPeerMessage): >> @classmethod >> def parser(cls, buf): >> kwargs, buf = super(BMPPeerDownNotification, cls).parser(buf) >> - reason, = struct.unpack_from('!B', buffer(buf)) >> + reason, = struct.unpack_from('!B', buf) >> buf = buf[struct.calcsize('!B'):] >> >> if reason == BMP_PEER_DOWN_REASON_LOCAL_BGP_NOTIFICATION: >> data, rest = BGPMessage.parser(buf) >> elif reason == BMP_PEER_DOWN_REASON_LOCAL_NO_NOTIFICATION: >> - data = struct.unpack_from('!H', buffer(buf)) >> + data = struct.unpack_from('!H', buf) >> elif reason == BMP_PEER_DOWN_REASON_REMOTE_BGP_NOTIFICATION: >> data, rest = BGPMessage.parser(buf) >> elif reason == BMP_PEER_DOWN_REASON_REMOTE_NO_NOTIFICATION: >> @@ -591,9 +590,7 @@ class BMPPeerUpNotification(BMPPeerMessage): >> kwargs, rest = super(BMPPeerUpNotification, cls).parser(buf) >> >> (local_address, local_port, >> - remote_port) = struct.unpack_from(cls._PACK_STR, buffer(rest)) >> - >> - local_address = buffer(local_address) >> + remote_port) = struct.unpack_from(cls._PACK_STR, rest) >> >> if '.' in kwargs['peer_address']: >> local_address = addrconv.ipv4.bin_to_text(local_address[:4]) >> @@ -665,7 +662,7 @@ class BMPInitiation(BMPMessage): >> if len(buf) < cls._MIN_LEN: >> raise stream_parser.StreamParser.TooSmallException( >> '%d < %d' % (len(buf), cls._MIN_LEN)) >> - (type_, len_) = struct.unpack_from(cls._TLV_PACK_STR, >> buffer(buf)) >> + (type_, len_) = struct.unpack_from(cls._TLV_PACK_STR, buf) >> >> if len(buf) < (cls._MIN_LEN + len_): >> raise stream_parser.StreamParser.TooSmallException( >> @@ -728,7 +725,7 @@ class BMPTermination(BMPMessage): >> if len(buf) < cls._MIN_LEN: >> raise stream_parser.StreamParser.TooSmallException( >> '%d < %d' % (len(buf), cls._MIN_LEN)) >> - (type_, len_) = struct.unpack_from(cls._TLV_PACK_STR, >> buffer(buf)) >> + (type_, len_) = struct.unpack_from(cls._TLV_PACK_STR, buf) >> >> if len(buf) < (cls._MIN_LEN + len_): >> raise stream_parser.StreamParser.TooSmallException( >> @@ -738,7 +735,7 @@ class BMPTermination(BMPMessage): >> if type_ == BMP_TERM_TYPE_STRING: >> value = value.decode('utf-8') >> elif type_ == BMP_TERM_TYPE_REASON: >> - value, = struct.unpack_from('!H', buffer(value)) >> + value, = struct.unpack_from('!H', value) >> >> buf = buf[cls._MIN_LEN + len_:] >> >> diff --git a/ryu/lib/packet/ospf.py b/ryu/lib/packet/ospf.py >> index 99ef6bf..2414c7a 100644 >> --- a/ryu/lib/packet/ospf.py >> +++ b/ryu/lib/packet/ospf.py >> @@ -151,7 +151,7 @@ class LSAHeader(StringifyMixin): >> raise stream_parser.StreamParser.TooSmallException( >> '%d < %d' % (len(buf), cls._HDR_LEN)) >> (ls_age, options, type_, id_, adv_router, ls_seqnum, checksum, >> - length,) = struct.unpack_from(cls._HDR_PACK_STR, buffer(buf)) >> + length,) = struct.unpack_from(cls._HDR_PACK_STR, buf) >> adv_router = addrconv.ipv4.bin_to_text(adv_router) >> rest = buf[cls._HDR_LEN:] >> lsacls = LSA._lookup_type(type_) >> @@ -167,7 +167,7 @@ class LSAHeader(StringifyMixin): >> } >> >> if issubclass(lsacls, OpaqueLSA): >> - (id_,) = struct.unpack_from('!I', buffer(id_)) >> + (id_,) = struct.unpack_from('!I', id_) >> value['opaque_type'] = (id_ & 0xff000000) >> 24 >> value['opaque_id'] = (id_ & 0xffffff) >> else: >> @@ -266,7 +266,7 @@ class RouterLSA(LSA): >> link = buf[:cls._PACK_LEN] >> rest = buf[cls._PACK_LEN:] >> (id_, data, type_, tos, metric) = \ >> - struct.unpack_from(cls._PACK_STR, buffer(link)) >> + struct.unpack_from(cls._PACK_STR, link) >> id_ = addrconv.ipv4.bin_to_text(id_) >> data = addrconv.ipv4.bin_to_text(data) >> return cls(id_, data, type_, tos, metric), rest >> @@ -291,7 +291,7 @@ class RouterLSA(LSA): >> links = [] >> hdr = buf[:cls._PACK_LEN] >> buf = buf[cls._PACK_LEN:] >> - (flags, padding, num) = struct.unpack_from(cls._PACK_STR, >> buffer(hdr)) >> + (flags, padding, num) = struct.unpack_from(cls._PACK_STR, hdr) >> while buf: >> link, buf = cls.Link.parser(buf) >> links.append(link) >> @@ -331,13 +331,13 @@ class NetworkLSA(LSA): >> raise stream_parser.StreamParser.TooSmallException( >> '%d < %d' % (len(buf), cls._PACK_LEN)) >> binmask = buf[:cls._PACK_LEN] >> - (mask,) = struct.unpack_from(cls._PACK_STR, buffer(binmask)) >> + (mask,) = struct.unpack_from(cls._PACK_STR, binmask) >> mask = addrconv.ipv4.bin_to_text(mask) >> buf = buf[cls._PACK_LEN:] >> routers = [] >> while buf: >> binrouter = buf[:cls._PACK_LEN] >> - (router,) = struct.unpack_from(cls._PACK_STR, buffer(binrouter)) >> + (router,) = struct.unpack_from(cls._PACK_STR, binrouter) >> router = addrconv.ipv4.bin_to_text(router) >> routers.append(router) >> buf = buf[cls._PACK_LEN:] >> @@ -376,7 +376,7 @@ class SummaryLSA(LSA): >> '%d < %d' % (len(buf), cls_PACK_LEN)) >> buf = buf[:cls._PACK_LEN] >> (mask, tos, metric_fst, metric_lst) = >> struct.unpack_from(cls._PACK_STR, >> - >> buffer(buf)) >> + buf) >> mask = addrconv.ipv4.bin_to_text(mask) >> metric = metric_fst << 16 | (metric_lst & 0xffff) >> return { >> @@ -419,7 +419,7 @@ class ASExternalLSA(LSA): >> ext_nw = buf[:cls._PACK_LEN] >> rest = buf[cls._PACK_LEN:] >> (mask, flags, metric_fst, metric_lst, fwd_addr, >> - tag) = struct.unpack_from(cls._PACK_STR, buffer(ext_nw)) >> + tag) = struct.unpack_from(cls._PACK_STR, ext_nw) >> mask = addrconv.ipv4.bin_to_text(mask) >> metric = metric_fst << 16 | (metric_lst & 0xffff) >> fwd_addr = addrconv.ipv4.bin_to_text(fwd_addr) >> @@ -548,7 +548,6 @@ class OpaqueBody(StringifyMixin, _TypeDisp): >> class ExtendedPrefixOpaqueBody(OpaqueBody): >> @classmethod >> def parser(cls, buf): >> - buf = buffer(buf) >> tlvs = [] >> while buf: >> (type_, length) = struct.unpack_from('!HH', buf) >> @@ -567,7 +566,6 @@ class ExtendedPrefixOpaqueBody(OpaqueBody): >> class ExtendedLinkOpaqueBody(OpaqueBody): >> @classmethod >> def parser(cls, buf): >> - buf = buffer(buf) >> tlvs = [] >> while buf: >> (type_, length) = struct.unpack_from('!HH', buf) >> @@ -657,7 +655,7 @@ class OSPFMessage(packet_base.PacketBase, _TypeDisp): >> raise stream_parser.StreamParser.TooSmallException( >> '%d < %d' % (len(buf), cls._HDR_LEN)) >> (version, type_, length, router_id, area_id, checksum, au_type, >> - authentication) = struct.unpack_from(cls._HDR_PACK_STR, >> buffer(buf)) >> + authentication) = struct.unpack_from(cls._HDR_PACK_STR, buf) >> >> # Exclude checksum and authentication field for checksum validation. >> if packet_utils.checksum(buf[:12] + buf[14:16] + >> buf[cls._HDR_LEN:]) \ >> @@ -731,7 +729,7 @@ class OSPFHello(OSPFMessage): >> def parser(cls, buf): >> (mask, hello_interval, options, priority, dead_interval, >> designated_router, backup_router) = >> struct.unpack_from(cls._PACK_STR, >> - buffer(buf)) >> + buf) >> mask = addrconv.ipv4.bin_to_text(mask) >> designated_router = addrconv.ipv4.bin_to_text(designated_router) >> backup_router = addrconv.ipv4.bin_to_text(backup_router) >> @@ -739,7 +737,7 @@ class OSPFHello(OSPFMessage): >> binneighbors = buf[cls._PACK_LEN:len(buf)] >> while binneighbors: >> n = binneighbors[:4] >> - n = addrconv.ipv4.bin_to_text(buffer(n)) >> + n = addrconv.ipv4.bin_to_text(n) >> binneighbors = binneighbors[4:] >> neighbors.append(n) >> return { >> @@ -793,7 +791,7 @@ class OSPFDBDesc(OSPFMessage): >> @classmethod >> def parser(cls, buf): >> (mtu, options, flags, >> - sequence_number) = struct.unpack_from(cls._PACK_STR, buffer(buf)) >> + sequence_number) = struct.unpack_from(cls._PACK_STR, buf) >> i_flag = (flags >> 2) & 0x1 >> m_flag = (flags >> 1) & 0x1 >> ms_flag = flags & 0x1 >> @@ -848,7 +846,7 @@ class OSPFLSReq(OSPFMessage): >> link = buf[:cls._PACK_LEN] >> rest = buf[cls._PACK_LEN:] >> (type_, id_, adv_router) = struct.unpack_from(cls._PACK_STR, >> - buffer(link)) >> + link) >> id_ = addrconv.ipv4.bin_to_text(id_) >> adv_router = addrconv.ipv4.bin_to_text(adv_router) >> return cls(type_, id_, adv_router), rest >> @@ -899,7 +897,7 @@ class OSPFLSUpd(OSPFMessage): >> @classmethod >> def parser(cls, buf): >> binnum = buf[:cls._PACK_LEN] >> - (num,) = struct.unpack_from(cls._PACK_STR, buffer(binnum)) >> + (num,) = struct.unpack_from(cls._PACK_STR, binnum) >> >> buf = buf[cls._PACK_LEN:] >> lsas = [] >> diff --git a/ryu/ofproto/ofproto_parser.py b/ryu/ofproto/ofproto_parser.py >> index 7bc9214..6e1af26 100644 >> --- a/ryu/ofproto/ofproto_parser.py >> +++ b/ryu/ofproto/ofproto_parser.py >> @@ -14,6 +14,8 @@ >> # See the License for the specific language governing permissions and >> # limitations under the License. >> >> +import six >> + >> import base64 >> import collections >> import logging >> @@ -29,11 +31,15 @@ from . import ofproto_common >> >> LOG = logging.getLogger('ryu.ofproto.ofproto_parser') >> >> +# This is merely for API compatibility on python2 >> +if six.PY3: >> + buffer = bytes >> + >> >> def header(buf): >> assert len(buf) >= ofproto_common.OFP_HEADER_SIZE >> # LOG.debug('len %d bufsize %d', len(buf), ofproto.OFP_HEADER_SIZE) >> - return struct.unpack_from(ofproto_common.OFP_HEADER_PACK_STR, >> buffer(buf)) >> + return struct.unpack_from(ofproto_common.OFP_HEADER_PACK_STR, buf) >> >> >> _MSG_PARSERS = {} >> diff --git a/ryu/ofproto/ofproto_v1_3_parser.py >> b/ryu/ofproto/ofproto_v1_3_parser.py >> index 52cad96..f62b31f 100644 >> --- a/ryu/ofproto/ofproto_v1_3_parser.py >> +++ b/ryu/ofproto/ofproto_v1_3_parser.py >> @@ -228,7 +228,7 @@ class OFPErrorMsg(MsgBase): >> >> @classmethod >> def parser(cls, datapath, version, msg_type, msg_len, xid, buf): >> - type_, = struct.unpack_from('!H', buffer(buf), >> + type_, = struct.unpack_from('!H', buf, >> ofproto.OFP_HEADER_SIZE) >> if type_ == ofproto.OFPET_EXPERIMENTER: >> return OFPErrorExperimenterMsg.parser(datapath, version, >> msg_type, >> @@ -3614,7 +3614,7 @@ class OFPMultipartReply(MsgBase): >> @classmethod >> def parser(cls, datapath, version, msg_type, msg_len, xid, buf): >> type_, flags = struct.unpack_from( >> - ofproto.OFP_MULTIPART_REPLY_PACK_STR, buffer(buf), >> + ofproto.OFP_MULTIPART_REPLY_PACK_STR, buf, >> ofproto.OFP_HEADER_SIZE) >> stats_type_cls = cls._STATS_MSG_TYPES.get(type_) >> msg = super(OFPMultipartReply, stats_type_cls).parser( >> @@ -4965,7 +4965,7 @@ class OFPTableFeatureProp(StringifyMixin): >> >> @classmethod >> def parse(cls, buf): >> - (type_, length,) = struct.unpack_from(cls._PACK_STR, buffer(buf), 0) >> + (type_, length,) = struct.unpack_from(cls._PACK_STR, buf, 0) >> bin_prop = buf[struct.calcsize(cls._PACK_STR):length] >> rest = buf[utils.round_up(length, 8):] >> try: >> @@ -5014,7 +5014,7 @@ class OFPInstructionId(StringifyMixin): >> >> @classmethod >> def parse(cls, buf): >> - (type_, len_,) = struct.unpack_from(cls._PACK_STR, buffer(buf), 0) >> + (type_, len_,) = struct.unpack_from(cls._PACK_STR, buf, 0) >> rest = buf[len_:] >> return cls(type_=type_, len_=len_), rest >> >> @@ -5066,7 +5066,7 @@ class >> OFPTableFeaturePropNextTables(OFPTableFeatureProp): >> rest = buf >> ids = [] >> while rest: >> - (i,) = struct.unpack_from(cls._TABLE_ID_PACK_STR, buffer(rest), >> 0) >> + (i,) = struct.unpack_from(cls._TABLE_ID_PACK_STR, rest, 0) >> rest = rest[struct.calcsize(cls._TABLE_ID_PACK_STR):] >> ids.append(i) >> return { >> @@ -5101,7 +5101,7 @@ class OFPActionId(StringifyMixin): >> >> @classmethod >> def parse(cls, buf): >> - (type_, len_,) = struct.unpack_from(cls._PACK_STR, buffer(buf), 0) >> + (type_, len_,) = struct.unpack_from(cls._PACK_STR, buf, 0) >> rest = buf[len_:] >> return cls(type_=type_, len_=len_), rest >> >> @@ -5178,7 +5178,7 @@ class OFPOxmId(StringifyMixin): >> >> @classmethod >> def parse(cls, buf): >> - (oxm,) = struct.unpack_from(cls._PACK_STR, buffer(buf), 0) >> + (oxm,) = struct.unpack_from(cls._PACK_STR, buf, 0) >> # oxm (32 bit) == class (16) | field (7) | hasmask (1) | length (8) >> # in case of experimenter OXMs, another 32 bit value >> # (experimenter id) follows. >> @@ -5189,7 +5189,7 @@ class OFPOxmId(StringifyMixin): >> class_ = oxm >> (7 + 1 + 8) >> if class_ == ofproto.OFPXMC_EXPERIMENTER: >> (exp_id,) = struct.unpack_from(cls._EXPERIMENTER_ID_PACK_STR, >> - buffer(rest), 0) >> + rest, 0) >> rest = rest[struct.calcsize(cls._EXPERIMENTER_ID_PACK_STR):] >> subcls = OFPExperimenterOxmId >> return subcls(type_=type_, exp_id=exp_id, hasmask=hasmask, >> diff --git a/ryu/tests/unit/lib/test_ofp_pktinfilter.py >> b/ryu/tests/unit/lib/test_ofp_pktinfilter.py >> index cd8e2f8..c1eeffe 100644 >> --- a/ryu/tests/unit/lib/test_ofp_pktinfilter.py >> +++ b/ryu/tests/unit/lib/test_ofp_pktinfilter.py >> @@ -84,7 +84,7 @@ class Test_packet_in_filter(unittest.TestCase): >> >> def test_pkt_in_filter_truncated(self): >> datapath = ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) >> - truncated_data = buffer('') >> + truncated_data = '' >> pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, >> data=truncated_data) >> ev = ofp_event.EventOFPPacketIn(pkt_in) >> diff --git a/ryu/tests/unit/lib/test_pack_utils.py >> b/ryu/tests/unit/lib/test_pack_utils.py >> index 3bf476f..edabda4 100644 >> --- a/ryu/tests/unit/lib/test_pack_utils.py >> +++ b/ryu/tests/unit/lib/test_pack_utils.py >> @@ -41,7 +41,7 @@ class TestMsgPackInto(unittest.TestCase): >> pack_utils.msg_pack_into(fmt, buf, offset, arg1, arg2) >> >> check_offset = len(buf) - len_ >> - res = struct.unpack_from(fmt, buffer(buf), check_offset) >> + res = struct.unpack_from(fmt, buf, check_offset) >> >> eq_(arg1, res[0]) >> eq_(arg2, res[1]) >> diff --git a/ryu/tests/unit/ofproto/test_ofproto_parser.py >> b/ryu/tests/unit/ofproto/test_ofproto_parser.py >> index e31cf20..5bdb039 100644 >> --- a/ryu/tests/unit/ofproto/test_ofproto_parser.py >> +++ b/ryu/tests/unit/ofproto/test_ofproto_parser.py >> @@ -15,6 +15,8 @@ >> >> # vim: tabstop=4 shiftwidth=4 softtabstop=4 >> >> +import six >> + >> import binascii >> import unittest >> from nose.tools import * >> @@ -27,6 +29,9 @@ from ryu.ofproto import ofproto_v1_0, ofproto_v1_0_parser >> import logging >> LOG = logging.getLogger(__name__) >> >> +if six.PY3: >> + buffer = bytes >> + >> >> class TestOfproto_Parser(unittest.TestCase): >> def setUp(self): >> diff --git a/ryu/tests/unit/packet/test_icmpv6.py >> b/ryu/tests/unit/packet/test_icmpv6.py >> index c2e7af1..a3d0741 100644 >> --- a/ryu/tests/unit/packet/test_icmpv6.py >> +++ b/ryu/tests/unit/packet/test_icmpv6.py >> @@ -77,7 +77,7 @@ class Test_icmpv6_header(unittest.TestCase): >> prev = ipv6(6, 0, 0, 4, 58, 255, src_ipv6, dst_ipv6) >> >> buf = self.icmp.serialize(bytearray(), prev) >> - (type_, code, csum) = struct.unpack(self.icmp._PACK_STR, >> buffer(buf)) >> + (type_, code, csum) = struct.unpack(self.icmp._PACK_STR, buf) >> >> eq_(type_, self.type_) >> eq_(code, self.code) >> @@ -153,7 +153,7 @@ class Test_icmpv6_echo_request(unittest.TestCase): >> >> echo = icmpv6.echo(self.id_, self.seq, echo_data) >> icmp = icmpv6.icmpv6(self.type_, self.code, 0, echo) >> - buf = buffer(icmp.serialize(bytearray(), prev)) >> + buf = icmp.serialize(bytearray(), prev) >> >> (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) >> (id_, seq) = struct.unpack_from(echo._PACK_STR, buf, icmp._MIN_LEN) >> @@ -303,7 +303,7 @@ class Test_icmpv6_neighbor_solicit(unittest.TestCase): >> nd_csum = icmpv6_csum(prev, self.buf) >> >> icmp = icmpv6.icmpv6(self.type_, self.code, 0, nd) >> - buf = buffer(icmp.serialize(bytearray(), prev)) >> + buf = icmp.serialize(bytearray(), prev) >> >> (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) >> (res, dst) = struct.unpack_from(nd._PACK_STR, buf, icmp._MIN_LEN) >> @@ -323,7 +323,7 @@ class Test_icmpv6_neighbor_solicit(unittest.TestCase): >> nd_csum = icmpv6_csum(prev, self.buf + self.data) >> >> icmp = icmpv6.icmpv6(self.type_, self.code, 0, nd) >> - buf = buffer(icmp.serialize(bytearray(), prev)) >> + buf = icmp.serialize(bytearray(), prev) >> >> (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) >> (res, dst) = struct.unpack_from(nd._PACK_STR, buf, icmp._MIN_LEN) >> @@ -446,7 +446,7 @@ class >> Test_icmpv6_neighbor_advert(Test_icmpv6_neighbor_solicit): >> nd_csum = icmpv6_csum(prev, self.buf + self.data) >> >> icmp = icmpv6.icmpv6(self.type_, self.code, 0, nd) >> - buf = buffer(icmp.serialize(bytearray(), prev)) >> + buf = icmp.serialize(bytearray(), prev) >> >> (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) >> (res, dst) = struct.unpack_from(nd._PACK_STR, buf, icmp._MIN_LEN) >> @@ -591,7 +591,7 @@ class Test_icmpv6_router_solicit(unittest.TestCase): >> rs_csum = icmpv6_csum(prev, self.buf) >> >> icmp = icmpv6.icmpv6(self.type_, self.code, 0, rs) >> - buf = buffer(icmp.serialize(bytearray(), prev)) >> + buf = icmp.serialize(bytearray(), prev) >> >> (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) >> res = struct.unpack_from(rs._PACK_STR, buf, icmp._MIN_LEN) >> @@ -610,7 +610,7 @@ class Test_icmpv6_router_solicit(unittest.TestCase): >> rs_csum = icmpv6_csum(prev, self.buf + self.data) >> >> icmp = icmpv6.icmpv6(self.type_, self.code, 0, rs) >> - buf = buffer(icmp.serialize(bytearray(), prev)) >> + buf = icmp.serialize(bytearray(), prev) >> >> (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) >> res = struct.unpack_from(rs._PACK_STR, buf, icmp._MIN_LEN) >> @@ -1007,7 +1007,7 @@ class Test_icmpv6_membership_query(unittest.TestCase): >> >> mld = icmpv6.mld(self.maxresp, self.address) >> icmp = icmpv6.icmpv6(self.type_, self.code, 0, mld) >> - buf = buffer(icmp.serialize(bytearray(), prev)) >> + buf = icmp.serialize(bytearray(), prev) >> >> (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) >> (maxresp, address) = struct.unpack_from( >> @@ -1497,13 +1497,13 @@ class Test_mldv2_report(unittest.TestCase): >> (record_num, ) = struct.unpack_from( >> self.mld._PACK_STR, str(buf), icmp._MIN_LEN) >> offset = icmp._MIN_LEN + self.mld._MIN_LEN >> - rec1 = icmpv6.mldv2_report_group.parser(buffer(buf[offset:])) >> + rec1 = icmpv6.mldv2_report_group.parser(buf[offset:]) >> offset += len(rec1) >> - rec2 = icmpv6.mldv2_report_group.parser(buffer(buf[offset:])) >> + rec2 = icmpv6.mldv2_report_group.parser(buf[offset:]) >> offset += len(rec2) >> - rec3 = icmpv6.mldv2_report_group.parser(buffer(buf[offset:])) >> + rec3 = icmpv6.mldv2_report_group.parser(buf[offset:]) >> offset += len(rec3) >> - rec4 = icmpv6.mldv2_report_group.parser(buffer(buf[offset:])) >> + rec4 = icmpv6.mldv2_report_group.parser(buf[offset:]) >> >> eq_(type_, self.type_) >> eq_(code, self.code) >> @@ -1800,7 +1800,7 @@ class Test_mldv2_report_group(unittest.TestCase): >> def test_serialize(self): >> buf = self.mld.serialize() >> res = struct.unpack_from( >> - icmpv6.mldv2_report_group._PACK_STR, buffer(buf)) >> + icmpv6.mldv2_report_group._PACK_STR, buf) >> >> eq_(res[0], self.type_) >> eq_(res[1], self.aux_len) >> @@ -1811,9 +1811,9 @@ class Test_mldv2_report_group(unittest.TestCase): >> self.setUp_with_srcs() >> buf = self.mld.serialize() >> res = struct.unpack_from( >> - icmpv6.mldv2_report_group._PACK_STR, buffer(buf)) >> + icmpv6.mldv2_report_group._PACK_STR, buf) >> (src1, src2, src3) = struct.unpack_from( >> - '16s16s16s', buffer(buf), icmpv6.mldv2_report_group._MIN_LEN) >> + '16s16s16s', buf, icmpv6.mldv2_report_group._MIN_LEN) >> eq_(res[0], self.type_) >> eq_(res[1], self.aux_len) >> eq_(res[2], self.num) >> @@ -1826,9 +1826,9 @@ class Test_mldv2_report_group(unittest.TestCase): >> self.setUp_with_aux() >> buf = self.mld.serialize() >> res = struct.unpack_from( >> - icmpv6.mldv2_report_group._PACK_STR, buffer(buf)) >> + icmpv6.mldv2_report_group._PACK_STR, buf) >> (aux, ) = struct.unpack_from( >> - '%ds' % (self.aux_len * 4), buffer(buf), >> + '%ds' % (self.aux_len * 4), buf, >> icmpv6.mldv2_report_group._MIN_LEN) >> eq_(res[0], self.type_) >> eq_(res[1], self.aux_len) >> @@ -1840,11 +1840,11 @@ class Test_mldv2_report_group(unittest.TestCase): >> self.setUp_with_srcs_and_aux() >> buf = self.mld.serialize() >> res = struct.unpack_from( >> - icmpv6.mldv2_report_group._PACK_STR, buffer(buf)) >> + icmpv6.mldv2_report_group._PACK_STR, buf) >> (src1, src2, src3) = struct.unpack_from( >> - '16s16s16s', buffer(buf), icmpv6.mldv2_report_group._MIN_LEN) >> + '16s16s16s', buf, icmpv6.mldv2_report_group._MIN_LEN) >> (aux, ) = struct.unpack_from( >> - '%ds' % (self.aux_len * 4), buffer(buf), >> + '%ds' % (self.aux_len * 4), buf, >> icmpv6.mldv2_report_group._MIN_LEN + 16 * 3) >> eq_(res[0], self.type_) >> eq_(res[1], self.aux_len) >> diff --git a/ryu/tests/unit/packet/test_igmp.py >> b/ryu/tests/unit/packet/test_igmp.py >> index d99253d..6da5da9 100644 >> --- a/ryu/tests/unit/packet/test_igmp.py >> +++ b/ryu/tests/unit/packet/test_igmp.py >> @@ -813,7 +813,7 @@ class Test_igmpv3_report_group(unittest.TestCase): >> >> def test_serialize(self): >> buf = self.g.serialize() >> - res = unpack_from(igmpv3_report_group._PACK_STR, buffer(buf)) >> + res = unpack_from(igmpv3_report_group._PACK_STR, buf) >> >> eq_(res[0], self.type_) >> eq_(res[1], self.aux_len) >> @@ -823,8 +823,8 @@ class Test_igmpv3_report_group(unittest.TestCase): >> def test_serialize_with_srcs(self): >> self.setUp_with_srcs() >> buf = self.g.serialize() >> - res = unpack_from(igmpv3_report_group._PACK_STR, buffer(buf)) >> - (src1, src2, src3) = unpack_from('4s4s4s', buffer(buf), >> + res = unpack_from(igmpv3_report_group._PACK_STR, buf) >> + (src1, src2, src3) = unpack_from('4s4s4s', buf, >> igmpv3_report_group._MIN_LEN) >> eq_(res[0], self.type_) >> eq_(res[1], self.aux_len) >> @@ -837,8 +837,8 @@ class Test_igmpv3_report_group(unittest.TestCase): >> def test_serialize_with_aux(self): >> self.setUp_with_aux() >> buf = self.g.serialize() >> - res = unpack_from(igmpv3_report_group._PACK_STR, buffer(buf)) >> - (aux, ) = unpack_from('%ds' % (self.aux_len * 4), buffer(buf), >> + res = unpack_from(igmpv3_report_group._PACK_STR, buf) >> + (aux, ) = unpack_from('%ds' % (self.aux_len * 4), buf, >> igmpv3_report_group._MIN_LEN) >> eq_(res[0], self.type_) >> eq_(res[1], self.aux_len) >> @@ -849,10 +849,10 @@ class Test_igmpv3_report_group(unittest.TestCase): >> def test_serialize_with_srcs_and_aux(self): >> self.setUp_with_srcs_and_aux() >> buf = self.g.serialize() >> - res = unpack_from(igmpv3_report_group._PACK_STR, buffer(buf)) >> - (src1, src2, src3) = unpack_from('4s4s4s', buffer(buf), >> + res = unpack_from(igmpv3_report_group._PACK_STR, buf) >> + (src1, src2, src3) = unpack_from('4s4s4s', buf, >> igmpv3_report_group._MIN_LEN) >> - (aux, ) = unpack_from('%ds' % (self.aux_len * 4), buffer(buf), >> + (aux, ) = unpack_from('%ds' % (self.aux_len * 4), buf, >> igmpv3_report_group._MIN_LEN + 12) >> eq_(res[0], self.type_) >> eq_(res[1], self.aux_len) >> -- >> 2.1.4 >> >> > > > ------------------------------------------------------------------------------ > Monitor 25 network devices or servers for free with OpManager! > OpManager is web-based network management software that monitors > network devices and physical & virtual servers, alerts via email & sms > for fault. Monitor 25 devices for free with no restriction. Download now > http://ad.doubleclick.net/ddm/clk/292181274;119417398;o > _______________________________________________ > Ryu-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/ryu-devel ------------------------------------------------------------------------------ Monitor 25 network devices or servers for free with OpManager! OpManager is web-based network management software that monitors network devices and physical & virtual servers, alerts via email & sms for fault. Monitor 25 devices for free with no restriction. Download now http://ad.doubleclick.net/ddm/clk/292181274;119417398;o _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
