aboutsummaryrefslogtreecommitdiffstats
path: root/src/vpp/api
diff options
context:
space:
mode:
authorPaul Vinciguerra <pvinci@vinciconsulting.com>2019-05-14 21:01:28 -0400
committerNeale Ranns <nranns@cisco.com>2019-07-08 17:47:33 +0000
commit888640a398f974cf388bdc983d10e78591275b37 (patch)
treed777158dece54df369f7e6a6f76e12cbdc1733ab /src/vpp/api
parent44e60468a2f0ad7ceff67de718fe3c401016ef6d (diff)
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>
Diffstat (limited to 'src/vpp/api')
-rw-r--r--src/vpp/api/api.c35
-rw-r--r--src/vpp/api/vpe.api50
2 files changed, 83 insertions, 2 deletions
diff --git a/src/vpp/api/api.c b/src/vpp/api/api.c
index 66857fbac9f..9ae027dab9b 100644
--- a/src/vpp/api/api.c
+++ b/src/vpp/api/api.c
@@ -86,7 +86,9 @@ _(SHOW_THREADS, show_threads) \
_(GET_NODE_GRAPH, get_node_graph) \
_(GET_NEXT_INDEX, get_next_index) \
_(LOG_DUMP, log_dump) \
-_(SHOW_VPE_SYSTEM_TIME_TICKS, show_vpe_system_time_ticks)
+_(SHOW_VPE_SYSTEM_TIME_TICKS, show_vpe_system_time_ticks) \
+_(GET_F64_ENDIAN_VALUE, get_f64_endian_value) \
+_(GET_F64_INCREMENT_BY_ONE, get_f64_increment_by_one) \
#define QUOTE_(x) #x
#define QUOTE(x) QUOTE_(x)
@@ -554,6 +556,37 @@ static void
/* *INDENT-ON* */
}
+static void
+vl_api_get_f64_endian_value_t_handler (vl_api_get_f64_endian_value_t * mp)
+{
+ int rv = 0;
+ f64 one = 1.0;
+ vl_api_get_f64_endian_value_reply_t *rmp;
+ if (1.0 != clib_net_to_host_f64 (mp->f64_one))
+ rv = VNET_API_ERROR_API_ENDIAN_FAILED;
+
+ /* *INDENT-OFF* */
+ REPLY_MACRO2(VL_API_GET_F64_ENDIAN_VALUE_REPLY,
+ ({
+ rmp->f64_one_result = clib_host_to_net_f64 (one);
+ }));
+ /* *INDENT-ON* */
+}
+
+static void
+vl_api_get_f64_increment_by_one_t_handler (vl_api_get_f64_increment_by_one_t *
+ mp)
+{
+ int rv = 0;
+ vl_api_get_f64_increment_by_one_reply_t *rmp;
+
+ /* *INDENT-OFF* */
+ REPLY_MACRO2(VL_API_GET_F64_INCREMENT_BY_ONE_REPLY,
+ ({
+ rmp->f64_value = clib_host_to_net_f64 (clib_net_to_host_f64(mp->f64_value) + 1.0);
+ }));
+ /* *INDENT-ON* */
+}
#define BOUNCE_HANDLER(nn) \
static void vl_api_##nn##_t_handler ( \
diff --git a/src/vpp/api/vpe.api b/src/vpp/api/vpe.api
index bd6b9d5638f..7c466b9a7a4 100644
--- a/src/vpp/api/vpe.api
+++ b/src/vpp/api/vpe.api
@@ -19,7 +19,7 @@
called through a shared memory interface.
*/
-option version = "1.3.0";
+option version = "1.4.0";
/*
* Note: API placement cleanup in progress
@@ -332,6 +332,54 @@ define show_vpe_system_time_ticks_reply
f64 vpe_system_time_ticks;
};
+/** \brief f64 types are not standardized across the wire. Sense wire format in each direction by sending the f64 value 1.0.
+ @param client_index - opaque cookie to identify the sender
+ @param context - sender context, to match reply w/ request
+ @param f64_one - The constant of 1.0. If you send a different value, expect an rv=VNET_API_ERROR_API_ENDIAN_FAILED.
+*/
+define get_f64_endian_value
+{
+ u32 client_index;
+ u32 context;
+ f64 f64_one [default=1.0];
+};
+
+/** \brief get_f64_endian_value reply message
+ @param context - sender context which was passed in the request
+ @param retval - return value - VNET_API_ERROR_API_ENDIAN_FAILED if f64_one != 1.0
+ @param f64_one_result - The value of 'f64 1.0'
+*/
+define get_f64_endian_value_reply
+{
+ u32 context;
+ u32 retval;
+ f64 f64_one_result;
+};
+
+/** \brief Verify f64 wire format by sending a value and receiving the value + 1.0
+ @param client_index - opaque cookie to identify the sender.
+ @param context - sender context, to match reply w/ request.
+ @param f64_value - The value you want to test. Default: 1.0.
+*/
+define get_f64_increment_by_one
+{
+ u32 client_index;
+ u32 context;
+ f64 f64_value [default=1.0];
+};
+
+/** \brief get_f64_increment_by_one reply
+ @param client_index - opaque cookie to identify the sender.
+ @param context - sender context, to match reply w/ request.
+ @param f64_value - The input f64_value incremented by 1.0.
+*/
+define get_f64_increment_by_one_reply
+{
+ u32 context;
+ u32 retval;
+ f64 f64_value;
+};
+
/*
* Local Variables:
* eval: (c-set-style "gnu")