map: Use vl_api_string macros.
* Add optional tag to api call in tests * Add test for map_domain_dump() for api code coverage. Type: fix Change-Id: I2f7784aecdca4bf9e94de3319f959786e3d2c607 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
This commit is contained in:
committed by
Ole Trøan
parent
68b24e2c9a
commit
4d376f67a6
@@ -24,7 +24,7 @@ import "vnet/ip/ip_types.api";
|
||||
@param ip4_prefix - Rule IPv4 prefix
|
||||
@param ip6_src - MAP domain IPv6 BR address / Tunnel source
|
||||
@param ea_bits_len - Embedded Address bits length
|
||||
@param psid_offset - Port Set Identifider (PSID) offset
|
||||
@param psid_offset - Port Set Identifier (PSID) offset
|
||||
@param psid_length - PSID length
|
||||
@param mtu - MTU
|
||||
@param tag - A user field stored with the MAP
|
||||
@@ -40,7 +40,7 @@ define map_add_domain
|
||||
u8 psid_offset;
|
||||
u8 psid_length;
|
||||
u16 mtu;
|
||||
string tag;
|
||||
string tag[limit=64];
|
||||
};
|
||||
|
||||
/** \brief Reply for MAP domain add
|
||||
@@ -103,7 +103,7 @@ define map_domain_dump
|
||||
@param ip4_prefix - Rule IPv4 prefix
|
||||
@param ip6_src - MAP domain IPv6 BR address / Tunnel source
|
||||
@param ea_bits_len - Embedded Address bits length
|
||||
@param psid_offset - Port Set Identifider (PSID) offset
|
||||
@param psid_offset - Port Set Identifier (PSID) offset
|
||||
@param psid_length - PSID length
|
||||
@param flags -
|
||||
@param mtu - MTU
|
||||
@@ -121,7 +121,7 @@ define map_domain_details
|
||||
u8 psid_length;
|
||||
u8 flags;
|
||||
u16 mtu;
|
||||
string tag;
|
||||
string tag[limit=64];
|
||||
};
|
||||
|
||||
define map_rule_dump
|
||||
|
||||
@@ -53,16 +53,6 @@ vl_api_map_add_domain_t_handler (vl_api_map_add_domain_t * mp)
|
||||
int rv = 0;
|
||||
u32 index;
|
||||
u8 flags = 0;
|
||||
char *tag = 0;
|
||||
u32 len;
|
||||
|
||||
len = ntohl (mp->tag.length);
|
||||
if (len > 0)
|
||||
{
|
||||
tag = clib_mem_alloc (len + 1);
|
||||
clib_memset (tag, 0, len + 1);
|
||||
clib_memcpy (tag, (char *) mp->tag.buf, len);
|
||||
}
|
||||
|
||||
rv =
|
||||
map_create_domain ((ip4_address_t *) & mp->ip4_prefix.prefix,
|
||||
@@ -71,10 +61,8 @@ vl_api_map_add_domain_t_handler (vl_api_map_add_domain_t * mp)
|
||||
mp->ip6_prefix.len,
|
||||
(ip6_address_t *) & mp->ip6_src.prefix,
|
||||
mp->ip6_src.len, mp->ea_bits_len, mp->psid_offset,
|
||||
mp->psid_length, &index, ntohs (mp->mtu), flags, tag);
|
||||
|
||||
if (tag)
|
||||
clib_mem_free (tag);
|
||||
mp->psid_length, &index, ntohs (mp->mtu), flags,
|
||||
vl_api_from_api_string_c (&mp->tag));
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
REPLY_MACRO2(VL_API_MAP_ADD_DOMAIN_REPLY,
|
||||
@@ -135,12 +123,10 @@ vl_api_map_domain_dump_t_handler (vl_api_map_domain_dump_t * mp)
|
||||
map_domain_index = d - mm->domains;
|
||||
de = vec_elt_at_index(mm->domain_extras, map_domain_index);
|
||||
|
||||
len = 0;
|
||||
if (de->tag)
|
||||
len = strlen(de->tag);
|
||||
len = strnlen_s(de->tag, 64);
|
||||
|
||||
/* Make sure every field is initiated (or don't skip the clib_memset()) */
|
||||
rmp = vl_msg_api_alloc (sizeof (*rmp) + sizeof(rmp->tag.length) + len);
|
||||
rmp = vl_msg_api_alloc (sizeof (*rmp) + len);
|
||||
|
||||
rmp->_vl_msg_id = htons(VL_API_MAP_DOMAIN_DETAILS + mm->msg_id_base);
|
||||
rmp->context = mp->context;
|
||||
@@ -157,11 +143,7 @@ vl_api_map_domain_dump_t_handler (vl_api_map_domain_dump_t * mp)
|
||||
rmp->flags = d->flags;
|
||||
rmp->mtu = htons(d->mtu);
|
||||
|
||||
if (de->tag)
|
||||
{
|
||||
rmp->tag.length = htonl (len);
|
||||
clib_memcpy ((char *)rmp->tag.buf, de->tag, len);
|
||||
}
|
||||
vl_api_to_api_string (len, de->tag, &rmp->tag );
|
||||
|
||||
vl_api_send_msg (reg, (u8 *) rmp);
|
||||
}));
|
||||
|
||||
+43
-3
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import ipaddress
|
||||
import unittest
|
||||
|
||||
from framework import VppTestCase, VppTestRunner
|
||||
@@ -64,6 +65,34 @@ class TestMAP(VppTestCase):
|
||||
self.assertEqual(rx[IPv6].src, ip6_src)
|
||||
self.assertEqual(rx[IPv6].dst, ip6_dst)
|
||||
|
||||
def test_api_map_domain_dump(self):
|
||||
map_dst = '2001::/64'
|
||||
map_src = '3000::1/128'
|
||||
client_pfx = '192.168.0.0/16'
|
||||
tag = 'MAP-E tag.'
|
||||
index = self.vapi.map_add_domain(ip4_prefix=client_pfx,
|
||||
ip6_prefix=map_dst,
|
||||
ip6_src=map_src,
|
||||
tag=tag).index
|
||||
|
||||
rv = self.vapi.map_domain_dump()
|
||||
|
||||
# restore the state early so as to not impact subsequent tests.
|
||||
# If an assert fails, we will not get the chance to do it at the end.
|
||||
self.vapi.map_del_domain(index=index)
|
||||
|
||||
self.assertGreater(len(rv), 0,
|
||||
"Expected output from 'map_domain_dump'")
|
||||
|
||||
# typedefs are returned as ipaddress objects.
|
||||
# wrap results in str() ugh! to avoid the need to call unicode.
|
||||
self.assertEqual(str(rv[0].ip4_prefix), client_pfx)
|
||||
self.assertEqual(str(rv[0].ip6_prefix), map_dst)
|
||||
self.assertEqual(str(rv[0].ip6_src), map_src)
|
||||
|
||||
self.assertEqual(rv[0].tag, tag,
|
||||
"output produced incorrect tag value.")
|
||||
|
||||
def test_map_e(self):
|
||||
""" MAP-E """
|
||||
|
||||
@@ -87,7 +116,11 @@ class TestMAP(VppTestCase):
|
||||
map_dst = '2001::/64'
|
||||
map_src = '3000::1/128'
|
||||
client_pfx = '192.168.0.0/16'
|
||||
self.vapi.map_add_domain(map_dst, client_pfx, map_src)
|
||||
tag = 'MAP-E tag.'
|
||||
self.vapi.map_add_domain(ip4_prefix=client_pfx,
|
||||
ip6_prefix=map_dst,
|
||||
ip6_src=map_src,
|
||||
tag=tag)
|
||||
|
||||
# Enable MAP on interface.
|
||||
self.vapi.map_if_enable_disable(is_enable=1,
|
||||
@@ -211,9 +244,16 @@ class TestMAP(VppTestCase):
|
||||
map_dst = '2001:db8::/32'
|
||||
map_src = '1234:5678:90ab:cdef::/64'
|
||||
ip4_pfx = '192.168.0.0/24'
|
||||
tag = 'MAP-T Tag.'
|
||||
|
||||
self.vapi.map_add_domain(map_dst, ip4_pfx, map_src,
|
||||
16, 6, 4, mtu=1500)
|
||||
self.vapi.map_add_domain(ip6_prefix=map_dst,
|
||||
ip4_prefix=ip4_pfx,
|
||||
ip6_src=map_src,
|
||||
ea_bits_len=16,
|
||||
psid_offset=6,
|
||||
psid_length=4,
|
||||
mtu=1500,
|
||||
tag=tag)
|
||||
|
||||
# Enable MAP-T on interfaces.
|
||||
self.vapi.map_if_enable_disable(is_enable=1,
|
||||
|
||||
Reference in New Issue
Block a user