LCOV - code coverage report
Current view: top level - vat - vat.h (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 0 10 0.0 %
Date: 2023-07-05 22:20:52 Functions: 0 1 0.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2015 Cisco and/or its affiliates.
       3             :  * Licensed under the Apache License, Version 2.0 (the "License");
       4             :  * you may not use this file except in compliance with the License.
       5             :  * You may obtain a copy of the License at:
       6             :  *
       7             :  *     http://www.apache.org/licenses/LICENSE-2.0
       8             :  *
       9             :  * Unless required by applicable law or agreed to in writing, software
      10             :  * distributed under the License is distributed on an "AS IS" BASIS,
      11             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      12             :  * See the License for the specific language governing permissions and
      13             :  * limitations under the License.
      14             :  */
      15             : #ifndef __included_vat_h__
      16             : #define __included_vat_h__
      17             : 
      18             : #define _GNU_SOURCE
      19             : #include <stdio.h>
      20             : #include <setjmp.h>
      21             : #include <sys/types.h>
      22             : #include <sys/socket.h>
      23             : #include <sys/un.h>
      24             : #include <vppinfra/clib.h>
      25             : #include <vppinfra/format.h>
      26             : #include <vppinfra/error.h>
      27             : #include <vppinfra/elog.h>
      28             : #include <vppinfra/time.h>
      29             : #include <vppinfra/macros.h>
      30             : #include <vppinfra/socket.h>
      31             : #include <vnet/vnet.h>
      32             : #include <vlib/vlib.h>
      33             : #include <vlib/unix/unix.h>
      34             : #include <vlibapi/api.h>
      35             : #include <vlibmemory/api.h>
      36             : #include <vlibmemory/memclnt.api_enum.h>
      37             : #include <vlibmemory/memclnt.api_types.h>
      38             : 
      39             : #include "vat/json_format.h"
      40             : 
      41             : #include <vlib/vlib.h>
      42             : 
      43             : typedef struct
      44             : {
      45             :   u8 *interface_name;
      46             :   u32 sw_if_index;
      47             :   /*
      48             :    * Subinterface ID. A number 0-N to uniquely identify this
      49             :    * subinterface under the super interface
      50             :    */
      51             :   u32 sub_id;
      52             : 
      53             :   /* Number of tags 0-2 */
      54             :   u8 sub_number_of_tags;
      55             :   u16 sub_outer_vlan_id;
      56             :   u16 sub_inner_vlan_id;
      57             : 
      58             :   union
      59             :   {
      60             :     u16 raw_flags;
      61             :     struct
      62             :     {
      63             :       u16 no_tags:1;
      64             :       u16 one_tag:1;
      65             :       u16 two_tags:1;
      66             :       /* 0 = dot1q, 1=dot1ad */
      67             :       u16 sub_dot1ad:1;
      68             :       u16 sub_exact_match:1;
      69             :       u16 sub_default:1;
      70             :       u16 sub_outer_vlan_id_any:1;
      71             :       u16 sub_inner_vlan_id_any:1;
      72             :     };
      73             :   };
      74             : 
      75             :   /* vlan tag rewrite */
      76             :   u32 vtr_op;
      77             :   u32 vtr_push_dot1q;
      78             :   u32 vtr_tag1;
      79             :   u32 vtr_tag2;
      80             : } sw_interface_subif_t;
      81             : 
      82             : typedef struct
      83             : {
      84             :   u8 ip[16];
      85             :   u8 prefix_length;
      86             : } ip_address_details_t;
      87             : 
      88             : typedef struct
      89             : {
      90             :   u8 present;
      91             :   ip_address_details_t *addr;
      92             : } ip_details_t;
      93             : 
      94             : typedef struct
      95             : {
      96             :   u64 packets;
      97             :   u64 bytes;
      98             : } interface_counter_t;
      99             : 
     100             : typedef struct
     101             : {
     102             :   struct in_addr address;
     103             :   u8 address_length;
     104             :   u64 packets;
     105             :   u64 bytes;
     106             : } ip4_fib_counter_t;
     107             : 
     108             : typedef struct
     109             : {
     110             :   struct in6_addr address;
     111             :   u8 address_length;
     112             :   u64 packets;
     113             :   u64 bytes;
     114             : } ip6_fib_counter_t;
     115             : 
     116             : typedef struct
     117             : {
     118             :   struct in_addr address;
     119             :   vnet_link_t linkt;
     120             :   u64 packets;
     121             :   u64 bytes;
     122             : } ip4_nbr_counter_t;
     123             : 
     124             : typedef struct
     125             : {
     126             :   struct in6_addr address;
     127             :   vnet_link_t linkt;
     128             :   u64 packets;
     129             :   u64 bytes;
     130             : } ip6_nbr_counter_t;
     131             : 
     132             : struct vat_registered_features_t;
     133             : 
     134             : typedef struct vat_main_
     135             : {
     136             :   /* vpe input queue */
     137             :   svm_queue_t *vl_input_queue;
     138             : 
     139             :   /* interface name table */
     140             :   uword *sw_if_index_by_interface_name;
     141             : 
     142             :   /* subinterface table */
     143             :   sw_interface_subif_t *sw_if_subif_table;
     144             : 
     145             :   /* Graph node table */
     146             :   uword *graph_node_index_by_name;
     147             :   vlib_node_t ***graph_nodes;
     148             : 
     149             :   /* ip tables */
     150             :   ip_details_t *ip_details_by_sw_if_index[2];
     151             : 
     152             :   /* sw_if_index of currently processed interface */
     153             :   u32 current_sw_if_index;
     154             : 
     155             :   /* remember that we are dumping ipv6 */
     156             :   u8 is_ipv6;
     157             : 
     158             :   /* function table */
     159             :   uword *function_by_name;
     160             : 
     161             :   /* help strings */
     162             :   uword *help_by_name;
     163             : 
     164             :   /* macro table */
     165             :   clib_macro_main_t macro_main;
     166             : 
     167             :   /* Errors by number */
     168             :   uword *error_string_by_error_number;
     169             : 
     170             :   /* Main thread can spin (w/ timeout) here if needed */
     171             :   u32 async_mode;
     172             :   u32 async_errors;
     173             :   volatile u32 result_ready;
     174             :   volatile i32 retval;
     175             :   volatile u32 sw_if_index;
     176             :   volatile u8 *shmem_result;
     177             :   u8 *cmd_reply;
     178             : 
     179             :   /* our client index */
     180             :   u32 my_client_index;
     181             :   int client_index_invalid;
     182             : 
     183             :   /* Time is of the essence... */
     184             :   clib_time_t clib_time;
     185             : 
     186             :   /* Unwind (so we can quit) */
     187             :   jmp_buf jump_buf;
     188             :   int jump_buf_set;
     189             :   volatile int do_exit;
     190             : 
     191             :   /* temporary parse buffer */
     192             :   unformat_input_t *input;
     193             : 
     194             :   /* input buffer */
     195             :   u8 *inbuf;
     196             : 
     197             :   /* stdio input / output FILEs */
     198             :   FILE *ifp, *ofp;
     199             :   u8 *current_file;
     200             :   u32 input_line_number;
     201             : 
     202             :   /* exec mode toggle */
     203             :   int exec_mode;
     204             : 
     205             :   /* Regenerate the interface table */
     206             :   volatile int regenerate_interface_table;
     207             : 
     208             :   /* flag for JSON output format */
     209             :   u8 json_output;
     210             : 
     211             :   /* flag for interface event display */
     212             :   u8 interface_event_display;
     213             : 
     214             :   /* JSON tree used in composing dump api call results */
     215             :   vat_json_node_t json_tree;
     216             : 
     217             :   /* counters */
     218             :   u64 **simple_interface_counters;
     219             :   interface_counter_t **combined_interface_counters;
     220             :   ip4_fib_counter_t **ip4_fib_counters;
     221             :   u32 *ip4_fib_counters_vrf_id_by_index;
     222             :   ip6_fib_counter_t **ip6_fib_counters;
     223             :   u32 *ip6_fib_counters_vrf_id_by_index;
     224             :   ip4_nbr_counter_t **ip4_nbr_counters;
     225             :   ip6_nbr_counter_t **ip6_nbr_counters;
     226             : 
     227             :   ssvm_private_t stat_segment;
     228             :   clib_spinlock_t *stat_segment_lockp;
     229             : 
     230             :   socket_client_main_t *socket_client_main;
     231             :   u8 *socket_name;
     232             : 
     233             :   elog_main_t elog_main;
     234             : 
     235             :   struct vat_registered_features_t *feature_function_registrations;
     236             : 
     237             :   int (*api_sw_interface_dump) (struct vat_main_ *);
     238             : 
     239             :   /* Convenience */
     240             :   vlib_main_t *vlib_main;
     241             : } vat_main_t;
     242             : 
     243             : extern vat_main_t vat_main;
     244             : 
     245             : void vat_suspend (vlib_main_t * vm, f64 interval);
     246             : f64 vat_time_now (vat_main_t * vam);
     247             : void errmsg (char *fmt, ...);
     248             : void vat_api_hookup (vat_main_t * vam);
     249             : int api_sw_interface_dump (vat_main_t * vam);
     250             : void do_one_file (vat_main_t * vam);
     251             : int exec (vat_main_t * vam);
     252             : 
     253             : /* Plugin API library functions */
     254             : extern char *vat_plugin_path;
     255             : extern char *vat_plugin_name_filter;
     256             : void vat_plugin_api_reference (void);
     257             : uword unformat_sw_if_index (unformat_input_t * input, va_list * args);
     258             : uword unformat_ip4_address (unformat_input_t * input, va_list * args);
     259             : uword unformat_ethernet_address (unformat_input_t * input, va_list * args);
     260             : uword unformat_ethernet_type_host_byte_order (unformat_input_t * input,
     261             :                                               va_list * args);
     262             : uword unformat_ip6_address (unformat_input_t * input, va_list * args);
     263             : u8 *format_ip4_address (u8 * s, va_list * args);
     264             : u8 *format_ip6_address (u8 * s, va_list * args);
     265             : u8 *format_ip46_address (u8 * s, va_list * args);
     266             : u8 *format_ethernet_address (u8 * s, va_list * args);
     267             : 
     268             : int vat_socket_connect (vat_main_t * vam);
     269             : 
     270             : #if VPP_API_TEST_BUILTIN
     271             : #define print api_cli_output
     272             : void api_cli_output (void *, const char *fmt, ...);
     273             : #else
     274             : #define print fformat_append_cr
     275             : void fformat_append_cr (FILE *, const char *fmt, ...);
     276             : #endif
     277             : 
     278             : 
     279             : typedef clib_error_t *(vat_feature_function_t) (vat_main_t * vam);
     280             : typedef struct vat_registered_features_t
     281             : {
     282             :   vat_feature_function_t *function;
     283             :   struct vat_registered_features_t *next;
     284             : } vat_registered_features_t;
     285             : 
     286             : 
     287             : #define VAT_REGISTER_FEATURE_FUNCTION(x)                               \
     288             :     vat_registered_features_t _vat_feature_function_##x;               \
     289             : static void __vlib_add_config_function_##x (void)                      \
     290             :     __attribute__((__constructor__)) ;                                 \
     291             : static void __vlib_add_config_function_##x (void)                      \
     292             : {                                                                      \
     293             :   vat_main_t * vam = &vat_main;                                                \
     294             :   _vat_feature_function_##x.next = vam->feature_function_registrations;        \
     295             :   vam->feature_function_registrations = &_vat_feature_function_##x;    \
     296             : }                                                                      \
     297             :  vat_registered_features_t _vat_feature_function_##x =                 \
     298             :    {                                                                   \
     299             :     .function = x,                                                     \
     300             :    }
     301             : 
     302             : #if VPP_API_TEST_BUILTIN == 0
     303             : static_always_inline uword
     304           0 : api_unformat_sw_if_index (unformat_input_t *input, va_list *args)
     305             : {
     306           0 :   vat_main_t *vam = va_arg (*args, vat_main_t *);
     307           0 :   u32 *result = va_arg (*args, u32 *);
     308             :   u8 *if_name;
     309             :   uword *p;
     310             : 
     311           0 :   if (!unformat (input, "%s", &if_name))
     312           0 :     return 0;
     313             : 
     314           0 :   p = hash_get_mem (vam->sw_if_index_by_interface_name, if_name);
     315           0 :   if (p == 0)
     316           0 :     return 0;
     317           0 :   *result = p[0];
     318           0 :   return 1;
     319             : }
     320             : #endif /* VPP_API_TEST_BUILTIN */
     321             : 
     322             : #endif /* __included_vat_h__ */
     323             : 
     324             : /*
     325             :  * fd.io coding-style-patch-verification: ON
     326             :  *
     327             :  * Local Variables:
     328             :  * eval: (c-set-style "gnu")
     329             :  * End:
     330             :  */

Generated by: LCOV version 1.14