LCOV - code coverage report
Current view: top level - vlibapi - api.h (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 16 16 100.0 %
Date: 2023-07-05 22:20:52 Functions: 5 5 100.0 %

          Line data    Source code
       1             : /*
       2             :  *------------------------------------------------------------------
       3             :  * api.h
       4             :  *
       5             :  * Copyright (c) 2009-2015 Cisco and/or its affiliates.
       6             :  * Licensed under the Apache License, Version 2.0 (the "License");
       7             :  * you may not use this file except in compliance with the License.
       8             :  * You may obtain a copy of the License at:
       9             :  *
      10             :  *     http://www.apache.org/licenses/LICENSE-2.0
      11             :  *
      12             :  * Unless required by applicable law or agreed to in writing, software
      13             :  * distributed under the License is distributed on an "AS IS" BASIS,
      14             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      15             :  * See the License for the specific language governing permissions and
      16             :  * limitations under the License.
      17             :  *------------------------------------------------------------------
      18             :  */
      19             : 
      20             : #ifndef included_api_h
      21             : #define included_api_h
      22             : 
      23             : #include <stddef.h>
      24             : #include <vppinfra/error.h>
      25             : #include <svm/svm.h>
      26             : #include <svm/queue.h>
      27             : #include <vlib/vlib.h>
      28             : #include <vlib/unix/unix.h>
      29             : #include <vlibapi/api_common.h>
      30             : 
      31             : /* *INDENT-OFF* */
      32             : typedef CLIB_PACKED ( struct {
      33             :    u32 nitems;
      34             :    u32 msgtbl_size;
      35             :    u8 wrapped;
      36             : }) vl_api_trace_file_header_t;
      37             : /* *INDENT-ON* */
      38             : 
      39             : int vl_msg_api_trace_save (api_main_t *am, vl_api_trace_which_t which,
      40             :                            FILE *fp, u8 is_json);
      41             : 
      42             : #define VLIB_API_INIT_FUNCTION(x) VLIB_DECLARE_INIT_FUNCTION(x,api_init)
      43             : 
      44             : /* Call given init function: used for init function dependencies. */
      45             : #define vlib_call_api_init_function(vm, x)                              \
      46             :   ({                                                                    \
      47             :     extern vlib_init_function_t * _VLIB_INIT_FUNCTION_SYMBOL (x,api_init); \
      48             :     vlib_init_function_t * _f = _VLIB_INIT_FUNCTION_SYMBOL (x,api_init); \
      49             :     clib_error_t * _error = 0;                                          \
      50             :     if (! hash_get (vm->init_functions_called, _f))                     \
      51             :       {                                                                 \
      52             :         hash_set1 (vm->init_functions_called, _f);                      \
      53             :         _error = _f (vm);                                               \
      54             :       }                                                                 \
      55             :     _error;                                                             \
      56             :   })
      57             : 
      58             : #define _VL_MSG_API_FUNCTION_SYMBOL(x, type)    \
      59             :   _vl_msg_api_##type##_function_##x
      60             : 
      61             : #define VL_MSG_API_FUNCTION_SYMBOL(x)           \
      62             :   _VL_MSG_API_FUNCTION_SYMBOL(x, reaper)
      63             : 
      64             : #define VLIB_DECLARE_REAPER_FUNCTION(x, tag)                            \
      65             : vl_msg_api_init_function_t * _VL_MSG_API_FUNCTION_SYMBOL (x, tag) = x;  \
      66             : static void __vl_msg_api_add_##tag##_function_##x (void)                \
      67             :     __attribute__((__constructor__)) ;                                  \
      68             :                                                                         \
      69             : static void __vl_msg_api_add_##tag##_function_##x (void)                \
      70             : {                                                                       \
      71             :  api_main_t * am = vlibapi_get_main();                                  \
      72             :  static _vl_msg_api_function_list_elt_t _vl_msg_api_function;           \
      73             :  _vl_msg_api_function.next_init_function                                \
      74             :     = am->tag##_function_registrations;                                 \
      75             :   am->tag##_function_registrations = &_vl_msg_api_function;             \
      76             :  _vl_msg_api_function.f = &x;                                           \
      77             : }
      78             : 
      79             : #define VL_MSG_API_REAPER_FUNCTION(x) VLIB_DECLARE_REAPER_FUNCTION(x,reaper)
      80             : 
      81             : /* Call reaper function with client index */
      82             : #define vl_msg_api_call_reaper_function(ci)                             \
      83             :   ({                                                                    \
      84             :     extern vlib_init_function_t * VLIB_INIT_FUNCTION_SYMBOL (reaper);   \
      85             :     vlib_init_function_t * _f = VLIB_INIT_FUNCTION_SYMBOL (reaper);     \
      86             :     clib_error_t * _error = 0;                                          \
      87             :     _error = _f (ci);                                                   \
      88             :   })
      89             : 
      90             : static inline u32
      91      253480 : vl_msg_api_get_msg_length_inline (void *msg_arg)
      92             : {
      93      253480 :   u8 *msg = (u8 *) msg_arg;
      94             : 
      95      253480 :   msgbuf_t *header = (msgbuf_t *) (msg - offsetof (msgbuf_t, data));
      96             : 
      97      253480 :   return clib_net_to_host_u32 (header->data_len);
      98             : }
      99             : 
     100             : int vl_msg_api_rx_trace_enabled (api_main_t * am);
     101             : int vl_msg_api_tx_trace_enabled (api_main_t * am);
     102             : void vl_msg_api_trace (api_main_t * am, vl_api_trace_t * tp, void *msg);
     103             : int vl_msg_api_trace_onoff (api_main_t * am, vl_api_trace_which_t which,
     104             :                             int onoff);
     105             : int vl_msg_api_trace_free (api_main_t * am, vl_api_trace_which_t which);
     106             : int vl_msg_api_trace_configure (api_main_t * am, vl_api_trace_which_t which,
     107             :                                 u32 nitems);
     108             : u32 vl_msg_api_max_length (void *mp);
     109             : vl_api_trace_t *vl_msg_api_trace_get (api_main_t * am,
     110             :                                       vl_api_trace_which_t which);
     111             : void vl_msg_api_add_msg_name_crc (api_main_t * am, const char *string,
     112             :                                   u32 id);
     113             : void vl_msg_api_add_version (api_main_t * am, const char *string,
     114             :                              u32 major, u32 minor, u32 patch);
     115             : /* node_serialize.c prototypes */
     116             : u8 *vlib_node_serialize (vlib_main_t * vm, vlib_node_t *** node_dups,
     117             :                          u8 * vector, int include_nexts, int include_stats);
     118             : vlib_node_t ***vlib_node_unserialize (u8 * vector);
     119             : 
     120             : u32 vl_msg_api_get_msg_length (void *msg_arg);
     121             : 
     122             : typedef int (*vl_msg_traverse_trace_fn) (u8 *, void *);
     123             : 
     124             : int vl_msg_traverse_trace (vl_api_trace_t *tp, vl_msg_traverse_trace_fn fn,
     125             :                            void *ctx);
     126             : 
     127             : always_inline void
     128        3354 : vl_api_increase_msg_trace_size (api_main_t *am, u32 msg_id, u32 inc)
     129             : {
     130        3354 :   am->msg_data[msg_id].trace_size += inc;
     131        3354 : }
     132             : 
     133             : always_inline void
     134       14534 : vl_api_set_msg_thread_safe (api_main_t *am, u32 msg_id, int v)
     135             : {
     136       14534 :   am->msg_data[msg_id].is_mp_safe = v != 0;
     137       14534 : }
     138             : 
     139             : always_inline void
     140        1118 : vl_api_set_msg_autoendian (api_main_t *am, u32 msg_id, int v)
     141             : {
     142        1118 :   am->msg_data[msg_id].is_autoendian = v != 0;
     143        1118 : }
     144             : 
     145             : always_inline void
     146        1118 : vl_api_allow_msg_replay (api_main_t *am, u32 msg_id, int v)
     147             : {
     148        1118 :   am->msg_data[msg_id].replay_allowed = v != 0;
     149        1118 : }
     150             : 
     151             : format_function_t format_vl_api_msg_text;
     152             : format_function_t format_vl_api_msg_json;
     153             : 
     154             : #endif /* included_api_h */
     155             : /*
     156             :  * fd.io coding-style-patch-verification: ON
     157             :  *
     158             :  * Local Variables:
     159             :  * eval: (c-set-style "gnu")
     160             :  * End:
     161             :  */

Generated by: LCOV version 1.14