Commit Graph

20 Commits

Author SHA1 Message Date
Ole Troan
e5ff5a36dd api: enforce vla is last and fixed string type
Enforce that variable length fields are the last element of API messages.

Add a 'fixed' version of string type, since dealing with
multiple variable length strings turned out too painful
for the C language bindings.

The string type is now:
{
  string name[64]; // NUL terminated C-string. Essentially decays to u8 name[64]
  string name[];   // Variable length string with embedded len field (vl_api_string_t)
};

The latter notation could be made available to other types as well.
e.g.
{
  vl_api_address_t addresses[];
}
instead of

{
  u32 n_addr;
  vl_api_address_t addresses[n_addr];
};

Type: fix
Change-Id: I18fa17ef47227633752ab50453e8d20a652a9f9b
Signed-off-by: Ole Troan <ot@cisco.com>
2019-09-03 20:04:13 +00:00
Paul Vinciguerra
ff47fb6456 vppapigen map: raise ValueError when fieldname is python keyword
When working on the lb api, one of the field names was chosen as 'as'
(application server). Since 'as' is a python keyword, the field was
renamed to _1 in vpp_papi.

This changeset instead fails early with a descriptive message,
hopefully saving others time troubleshooting the issue.

    ValueError: Fieldname 'as' is a python keyword and
    is not accessible via the python API.

Type: feature
Change-Id: Ib048d97de0e392645540092e356cf8989848c947
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-08-19 14:38:12 +00:00
Paul Vinciguerra
888640a398 map gbp papi: match endianess of f64
clib_net_to_host_f64, clib_host_to_net_f64 are now implemented as '=',
https://gerrit.fd.io/r/#/c/20406/  set papi to match.
- all f64 api references are now wrapped with
  clib_net_to_host_f64 or clib_host_to_net_f64.

IEEE f64 endianess is not defined.  If clib_net_to_host_f64 and
clib_host_to_net_f64 are later defined in VPP as big-endian, it is
a single character change in the papi vpp_serializer.

Note: This breaks the api in a manner that would not be detected by
the flag day initiative.  The scope is small.  This only impacts map.api,
which applied the u64 transformation, while the gbp api uses '='.

The implementation of "=" raises issues for the papi socket implementation
if used between systems of differing endianess.  See Vratko's comments.

- Added get_f64_endian_value() to api to allow client to verify endianess of f64's.

Type: fix
Depends-on: https://gerrit.fd.io/r/#/c/20484/

Change-Id: I00fc64a6557ba0190398df211aa0ea5c7eb101df
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-07-08 17:47:33 +00:00
Paul Vinciguerra
ab05508e1e api: refactor format_vl_api_prefix_t return keys
format_vl_api_prefix_t returns a dict with keys 'address' and 'address_length',
but other format_vl_api_prefix functions return a dict with 'prefix', and 'len'.

Refactor all format_vl_api_prefix_t to return consistent keys 'address' and 'len'.

Type: refactor

Change-Id: I5f9558fc2da8742a303266e011102f5b2db80aad
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-06-26 11:36:57 +00:00
Neale Ranns
377860a739 api: Remove the inlines file and replace with library functions
using inlines exposes the users to the internal data types used by VPP, namely vec.h. This file does not compile with a C++ compiler.

Type: feature

Change-Id: I1544fdd9eae998309f865df61df78571bdb96903
Signed-off-by: Neale Ranns <nranns@cisco.com>
2019-06-26 11:29:09 +00:00
Ole Troan
283cd2e9af api: string type to convert to vector
Previous use of strndup() required user to remember to call free().
Now return a vector pointing directly to the API message string.
Of course user must remember to copy the string out if lifetime
is longer than API message lifetime.

Change-Id: Ib5e2b3d52d258e1a42ea9ea9a9e04abbe360e2bf
Type: fix
Signed-off-by: Ole Troan <ot@cisco.com>
2019-06-18 11:47:21 +00:00
Paul Vinciguerra
4d376f67a6 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>
2019-05-29 07:41:53 +00:00
Jon Loeliger
bdd6e6ac4e MAP: Crush Coverity Complaint
Change-Id: I965229f5bf8fcde9176357536a23ba8056542919
Signed-off-by: Jon Loeliger <jdl@netgate.com>
2019-03-22 08:28:02 +00:00
Jon Loeliger
4dc5c7b905 MAP: Add optional user-supplied 'tag' field in MAPs.
Like other entities, allow an arbitrray user-supplied 'tag'
field to be place on created MAP domains.  It is also later
returned with the MAP details.  You might be thinking "User
assigned MAP name" here.

As the MAP domain structure was at the limit of a cacheline size,
introduce a parallel "extra data" vector with non-essential domain
information in it.

Change-Id: Icc12b64cc4cb3e040c9a475908b19f6abaf4c293
Signed-off-by: Jon Loeliger <jdl@netgate.com>
2019-03-19 20:44:34 +00:00
Jon Loeliger
2500c79423 MAP: Prevent duplicate MAP-E/T graph nodes.
Change-Id: I6031f3f9cfa048a901a8424d33d47679115c2eb3
Signed-off-by: Jon Loeliger <jdl@netgate.com>
2019-01-07 21:30:11 +00:00
Jon Loeliger
fc7344f9be MAP: Convert from DPO to input feature.
Change-Id: I25c86aea23dff19656449b23133db27b1f062ac0
Signed-off-by: Jon Loeliger <jdl@netgate.com>
Signed-off-by: Ole Troan <ot@cisco.com>
2018-12-21 17:06:40 +00:00
Jon Loeliger
f34597fc86 MAP: Add API support for MAP input feature.
Change-Id: I336919a1d3a9d1b404e375a30575cce5e5335137
Signed-off-by: Jon Loeliger <jdl@netgate.com>
2018-12-19 14:27:00 +00:00
Jon Loeliger
18f34a86a4 MAP: Encode ht-ratio as f64 for API.
Change-Id: I5f05f112e8002e8b57db5c7a215ca4778ab6f76a
Signed-off-by: Jon Loeliger <jdl@netgate.com>
2018-12-17 08:23:53 +00:00
Jon Loeliger
cbee13a13a MAP: Fix inverted 'is_add'/'is_del' flag in map_pre_resolve() call.
Change-Id: I82e95358a4d710f1ddd4c8de584f03798e2b85f1
Signed-off-by: Jon Loeliger <jdl@netgate.com>
2018-12-13 17:48:21 -06:00
Paul Vinciguerra
21bb9af16e make build failure.
[84/597] Building C object vnet/CMakeFiles/vnet.dir/ip/ip_types_api.c.o
FAILED: ccache /usr/lib/ccache/cc  -DWITH_LIBSSL=1 -Dvnet_EXPORTS -I/vpp/src -I. -Iinclude -march=corei7 -mtune=corei7-avx -g -O2 -DFORTIFY_SOURCE=2 -fstack-protector -fPIC -Werror -fPIC   -Wno-address-of-packed-member -Wall -MMD -MT vnet/CMakeFiles/vnet.dir/ip/ip_types_api.c.o -MF vnet/CMakeFiles/vnet.dir/ip/ip_types_api.c.o.d -o vnet/CMakeFiles/vnet.dir/ip/ip_types_api.c.o   -c /vpp/src/vnet/ip/ip_types_api.c
/vpp/src/vnet/ip/ip_types_api.c: In function 'ip_address_union_encode':
/vpp/src/vnet/ip/ip_types_api.c:70:13: error: incompatible type for argument 1 of 'memcpy'
     memcpy (out->ip6, &in->ip6, sizeof (out->ip6));
             ^
In file included from /usr/include/string.h:635:0,
                 from /vpp/src/vppinfra/string.h:55,
                 from /vpp/src/vppinfra/mem.h:55,
                 from /vpp/src/vppinfra/vec.h:42,
                 from /vpp/src/vppinfra/error.h:53,
                 from /vpp/src/vppinfra/hash.h:41,
                 from /vpp/src/vnet/ip/ip.h:43,
                 from /vpp/src/vnet/ip/ip_types_api.h:23,
                 from /vpp/src/vnet/ip/ip_types_api.c:16:
/usr/include/x86_64-linux-gnu/bits/string3.h:50:42: note: expected 'void * restrict' but argument is of type 'vl_api_ip6_address_t {aka struct _vl_api_ip6_address}'
 __NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
                                          ^
/vpp/src/vnet/ip/ip_types_api.c:72:13: error: incompatible type for argument 1 of 'memcpy'
     memcpy (out->ip4, &in->ip4, sizeof (out->ip4));
             ^
In file included from /usr/include/string.h:635:0,
                 from /vpp/src/vppinfra/string.h:55,
                 from /vpp/src/vppinfra/mem.h:55,
                 from /vpp/src/vppinfra/vec.h:42,
                 from /vpp/src/vppinfra/error.h:53,
                 from /vpp/src/vppinfra/hash.h:41,
                 from /vpp/src/vnet/ip/ip.h:43,
                 from /vpp/src/vnet/ip/ip_types_api.h:23,
                 from /vpp/src/vnet/ip/ip_types_api.c:16:
/usr/include/x86_64-linux-gnu/bits/string3.h:50:42: note: expected 'void * restrict' but argument is of type 'vl_api_ip4_address_t {aka struct _vl_api_ip4_address}'
 __NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
                                          ^
/vpp/src/vnet/ip/ip_types_api.c: At top level:
cc1: error: unrecognized command line option '-Wno-address-of-packed-member' [-Werror]
cc1: all warnings being treated as errors
[84/597] Building C object vnet/CMakeFiles/vnet.dir/ip/ip4_forward.c.o
ninja: build stopped: subcommand failed.
Makefile:691: recipe for target 'vpp-build' failed
make[1]: *** [vpp-build] Error 1
make[1]: Leaving directory '/vpp/build-root'
Makefile:394: recipe for target 'test' failed
make: *** [test] Error 2

DBGvpp# show cpu
Model name:               Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
Microarchitecture:        Haswell (Crystalwell)
Flags:                    sse3 ssse3 sse41 sse42 avx avx2 aes invariant_tsc
Base frequency:           2.49 GHz

DBGvpp# show version verbose
Version:                  v19.01-rc0~447-g3be662f
Compiled by:              vagrant
Compile host:             vpp
Compile date:             Mon Dec 10 14:55:24 PST 2018
Compile location:         /vpp
Compiler:                 GCC 5.4.0 20160609
Current PID:              14104

Change-Id: I6ff03bc5ad1c3517256e244b6986e9a1507a3349
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2018-12-13 14:34:15 +00:00
Jon Loeliger
5a2e278a09 MAP: Add API support for setting parameters.
Change-Id: Ic67073e1f2ebe54bee5cb96a951eb92a28b1de06
Signed-off-by: Jon Loeliger <jdl@netgate.com>
2018-12-11 06:32:21 +00:00
Ole Troan
8c8acc0278 API: Change ip4_address and ip6_address to use type alias.
Change-Id: Id8669bbadd1d6b2054865a310a654e9b38d1667d
Signed-off-by: Ole Troan <ot@cisco.com>
2018-12-06 14:05:04 +00:00
Ole Troan
ffba3c377c MAP: Use explicit address/prefix types in API
Change-Id: Ic751fecc4a060eedcdb9eaf5d02e1416c838fd63
Signed-off-by: Ole Troan <ot@cisco.com>
2018-11-22 21:28:33 +01:00
Dave Barach
b7b929931a c11 safe string handling support
Change-Id: Ied34720ca5a6e6e717eea4e86003e854031b6eab
Signed-off-by: Dave Barach <dave@barachs.net>
2018-10-23 13:06:46 +00:00
Ole Troan
381e9a9074 MAP: Move MAP-E/T to a plugin.
Only remaining traces of MAP in the src/vnet is now in buffer.h.
Awaiting a new buffer opaque API (hint, hint).

Change-Id: Ie165561484731f1d7ed6e0f604b43624e06db3f0
Signed-off-by: Ole Troan <ot@cisco.com>
2018-06-25 20:19:40 +00:00