On Thu, 20 Jun 2013 13:41:12 +0900 Isaku Yamahata <[email protected]> wrote:
> On Thu, Jun 20, 2013 at 07:07:25AM +0900, FUJITA Tomonori wrote: >> On Wed, 12 Jun 2013 12:28:33 +0900 >> Isaku Yamahata <[email protected]> wrote: >> >> > On 32bit environment integer representation of ipv4 address can be >> > python int or long. Some unit tests failed. >> > On the other hand 64 bit environment it is int. >> > And some clean up. >> > >> > FAIL: Failure: AssertionError () >> > >> > Traceback (most recent call last): >> > File "/usr/local/lib/python2.7/dist-packages/nose/loader.py", line 413, >> > in >> > loadTestsFromName >> > addr.filename, addr.module) >> > File "/usr/local/lib/python2.7/dist-packages/nose/importer.py", line 47, >> > in >> > importFromPath >> > return self.importFromDir(dir_path, fqname) >> > File "/usr/local/lib/python2.7/dist-packages/nose/importer.py", line 94, >> > in >> > importFromDir >> > mod = load_module(part_fqname, fh, filename, desc) >> > File "/home/oliver/tmp/ryu/ryu/tests/unit/packet/test_vrrp.py", line 38, >> > in >> > <module> >> > class Test_vrrpv2(unittest.TestCase): >> > File "/home/oliver/tmp/ryu/ryu/tests/unit/packet/test_vrrp.py", line 52, >> > in >> > Test_vrrpv2 >> > [ip_address]) >> > File "/home/oliver/tmp/ryu/ryu/lib/packet/vrrp.py", line 440, in create >> > auth_data=VRRP_AUTH_DATA) >> > File "/home/oliver/tmp/ryu/ryu/lib/packet/vrrp.py", line 308, in >> > create_version >> > auth_type=auth_type, auth_data=auth_data) >> > File "/home/oliver/tmp/ryu/ryu/lib/packet/vrrp.py", line 272, in __init__ >> > self._is_ipv6 = is_ipv6(self.ip_addresses[0]) >> > File "/home/oliver/tmp/ryu/ryu/lib/packet/vrrp.py", line 172, in is_ipv6 >> > assert type(ip_address) == str >> > AssertionError >> > >> > Cc: Kei Ohmura <[email protected]> >> > Reported-by: Oren Spector <[email protected]> >> > Signed-off-by: Isaku Yamahata <[email protected]> >> > --- >> > ryu/lib/packet/vrrp.py | 31 +++++++++++++++++++++++-------- >> > ryu/tests/unit/packet/test_vrrp.py | 6 +++--- >> > 2 files changed, 26 insertions(+), 11 deletions(-) >> > >> > diff --git a/ryu/lib/packet/vrrp.py b/ryu/lib/packet/vrrp.py >> > index 8b6140a..a197629 100644 >> > --- a/ryu/lib/packet/vrrp.py >> > +++ b/ryu/lib/packet/vrrp.py >> > @@ -165,12 +165,29 @@ VRRP_V2_MAX_ADVER_INT_MIN = 1 # don't >> > allow 0 >> > VRRP_V2_MAX_ADVER_INT_MAX = 0xff >> > >> > >> > +# On 32bit environment, C-uint32_t can be python-long >> > +_IPV4_VALUE_TYPES = list(set((int, type(0xffffffff)))) >> > +_IPV6_PACKED_TYPE = type(netaddr.IPAddress('::1').packed) # = str >> > +_IPV6_PACKED_LEN = len(netaddr.IPAddress('::1').packed) # = 16 >> > + >> > + >> > +def _assert_ipv4_address(ipv4_address): >> > + assert type(ipv4_address) in _IPV4_VALUE_TYPES >> > + assert ipv4_address >= 0 >> > + assert ipv4_address <= 0xffffffff >> > + >> > + >> > +def _assert_ipv6_address(ipv6_address): >> > + assert type(ipv6_address) == _IPV6_PACKED_TYPE >> > + assert len(ipv6_address) == _IPV6_PACKED_LEN >> > + >> > + >> > def is_ipv6(ip_address): >> > - if type(ip_address) == int: >> > + if type(ip_address) in _IPV4_VALUE_TYPES: >> > + _assert_ipv4_address(ip_address) >> > return False >> > >> > - assert type(ip_address) == str >> > - assert len(ip_address) == 16 >> > + _assert_ipv6_address(ip_address) >> > return True >> > >> > >> > @@ -206,8 +223,7 @@ class vrrp(packet_base.PacketBase): >> > _IPV4_ADDRESS_PACK_STR_RAW = 'I' >> > _IPV4_ADDRESS_PACK_STR = '!' + _IPV4_ADDRESS_PACK_STR_RAW >> > _IPV4_ADDRESS_LEN = struct.calcsize(_IPV4_ADDRESS_PACK_STR) >> > - _IPV6_ADDRESS_LEN = 16 >> > - _IPV6_ADDRESS_PACK_STR_RAW = '%ds' % _IPV6_ADDRESS_LEN >> > + _IPV6_ADDRESS_PACK_STR_RAW = '%ds' % _IPV6_PACKED_LEN >> > _IPV6_ADDRESS_PACK_STR = '!' + _IPV6_ADDRESS_PACK_STR_RAW >> > _IPV6_ADDRESS_LEN = struct.calcsize(_IPV6_ADDRESS_PACK_STR) >> >> Why this code needs to care about types for a value? > > Because vrrp packets includes ipv4 or ipv6 addresses > and the encoding depends on its address type. I meant that the code should not depend on such if int or long type is used for ipv4 address. ------------------------------------------------------------------------------ This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
