PAPI: Union pad at the end of short fields instead of at head.

Hopefully that's going to be consistent across platforms, compilers and ABI.

Change-Id: I0b82565288d88fd046278d4d8288ec1488273ba5
Signed-off-by: Ole Troan <ot@cisco.com>
This commit is contained in:
Ole Troan
2018-08-02 19:19:21 +02:00
committed by Dave Barach
parent b257fc9fc2
commit b199e98fef
5 changed files with 8 additions and 9 deletions

View File

@ -398,6 +398,7 @@ fi
%files api-python
%defattr(644,root,root)
%{python2_sitelib}/vpp_*
%{python2_sitelib}/tests/*
%files selinux-policy
%defattr(-,root,root,0755)

View File

@ -18,7 +18,7 @@ except ImportError:
from distutils.core import setup, find_packages
setup(name='vpp_papi',
version='1.5',
version='1.6',
description='VPP Python binding',
author='Ole Troan',
author_email='ot@cisco.com',

View File

View File

@ -15,11 +15,11 @@ class TestAddType(unittest.TestCase):
[['u8', 'is_bool'],
['u32', 'is_int']])
b = un.pack({'is_int': 0x1234})
b = un.pack({'is_int': 0x12345678})
self.assertEqual(len(b), 4)
nt = un.unpack(b)
self.assertEqual(nt.is_bool, 52)
self.assertEqual(nt.is_int, 0x1234)
self.assertEqual(nt.is_bool, 0x12)
self.assertEqual(nt.is_int, 0x12345678)
def test_address(self):
af = VPPEnumType('vl_api_address_family_t', [["ADDRESS_IP4", 0],
@ -53,7 +53,7 @@ class TestAddType(unittest.TestCase):
self.assertEqual(nt.un.ip4.address,
inet_pton(AF_INET, '2.2.2.2'))
self.assertEqual(nt.un.ip6.address,
inet_pton(AF_INET6, '::0202:0202'))
inet_pton(AF_INET6, '0202:0202::'))
def test_arrays(self):
# Test cases

View File

@ -232,17 +232,15 @@ class VPPUnionType():
for k, v in data.items():
logger.debug("Key: {} Value: {}".format(k, v))
b = self.packers[k].pack(v, kwargs)
offset = self.size - self.packers[k].size
break
r = bytearray(self.size)
r[offset:] = b
r[:len(b)] = b
return r
def unpack(self, data, offset=0, result=None):
r = []
for k, p in self.packers.items():
union_offset = self.size - p.size
r.append(p.unpack(data, offset + union_offset))
r.append(p.unpack(data, offset))
return self.tuple._make(r)