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 %files api-python
%defattr(644,root,root) %defattr(644,root,root)
%{python2_sitelib}/vpp_* %{python2_sitelib}/vpp_*
%{python2_sitelib}/tests/*
%files selinux-policy %files selinux-policy
%defattr(-,root,root,0755) %defattr(-,root,root,0755)

View File

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

View File

View File

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

View File

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