At Mon, 22 Jun 2015 22:07:31 +0900 (JST), FUJITA Tomonori wrote: > > 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
It seems that python2.6 cannot unpack bytearray. buffer() needs to be replaced with six.binary_type where the data is fed to unpack. > >> 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 > ------------------------------------------------------------------------------ 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
