LCOV - code coverage report
Current view: top level - plugins/wireguard - wireguard.h (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 1 1 100.0 %
Date: 2023-10-26 01:39:38 Functions: 3 3 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2020 Doc.ai 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_wg_h__
      16             : #define __included_wg_h__
      17             : 
      18             : #include <wireguard/wireguard_index_table.h>
      19             : #include <wireguard/wireguard_messages.h>
      20             : #include <wireguard/wireguard_timer.h>
      21             : #include <vnet/buffer.h>
      22             : 
      23             : #define WG_DEFAULT_DATA_SIZE 2048
      24             : 
      25             : extern vlib_node_registration_t wg4_input_node;
      26             : extern vlib_node_registration_t wg6_input_node;
      27             : extern vlib_node_registration_t wg4_output_tun_node;
      28             : extern vlib_node_registration_t wg6_output_tun_node;
      29             : 
      30             : typedef struct wg_per_thread_data_t_
      31             : {
      32             :   CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
      33             :   vnet_crypto_op_t *crypto_ops;
      34             :   vnet_crypto_op_t *chained_crypto_ops;
      35             :   vnet_crypto_op_chunk_t *chunks;
      36             :   vnet_crypto_async_frame_t **async_frames;
      37             :   u8 data[WG_DEFAULT_DATA_SIZE];
      38             : } wg_per_thread_data_t;
      39             : 
      40             : typedef struct
      41             : {
      42             :   /* convenience */
      43             :   vlib_main_t *vlib_main;
      44             : 
      45             :   u16 msg_id_base;
      46             : 
      47             :   wg_index_table_t index_table;
      48             : 
      49             :   u32 in4_fq_index;
      50             :   u32 in6_fq_index;
      51             :   u32 out4_fq_index;
      52             :   u32 out6_fq_index;
      53             : 
      54             :   wg_per_thread_data_t *per_thread_data;
      55             :   u8 feature_init;
      56             : 
      57             :   tw_timer_wheel_16t_2w_512sl_t timer_wheel;
      58             : 
      59             :   /* operation mode flags (e.g. async) */
      60             :   u8 op_mode_flags;
      61             : } wg_main_t;
      62             : 
      63             : typedef struct
      64             : {
      65             :   /* wg post node index for async crypto */
      66             :   u32 wg4_post_next;
      67             :   u32 wg6_post_next;
      68             : } wg_async_post_next_t;
      69             : 
      70             : extern wg_async_post_next_t wg_encrypt_async_next;
      71             : extern wg_async_post_next_t wg_decrypt_async_next;
      72             : extern wg_main_t wg_main;
      73             : 
      74             : /**
      75             :  * Wireguard operation mode
      76             :  **/
      77             : #define foreach_wg_op_mode_flags _ (0, ASYNC, "async")
      78             : 
      79             : /**
      80             :  * Helper function to set/unset and check op modes
      81             :  **/
      82             : typedef enum wg_op_mode_flags_t_
      83             : {
      84             : #define _(v, f, s) WG_OP_MODE_FLAG_##f = 1 << v,
      85             :   foreach_wg_op_mode_flags
      86             : #undef _
      87             : } __clib_packed wg_op_mode_flags_t;
      88             : 
      89             : #define _(a, v, s)                                                            \
      90             :   always_inline int wg_op_mode_set_##v (void)                                 \
      91             :   {                                                                           \
      92             :     return (wg_main.op_mode_flags |= WG_OP_MODE_FLAG_##v);                    \
      93             :   }                                                                           \
      94             :   always_inline int wg_op_mode_unset_##v (void)                               \
      95             :   {                                                                           \
      96             :     return (wg_main.op_mode_flags &= ~WG_OP_MODE_FLAG_##v);                   \
      97             :   }                                                                           \
      98             :   always_inline int wg_op_mode_is_set_##v (void)                              \
      99             :   {                                                                           \
     100             :     return (wg_main.op_mode_flags & WG_OP_MODE_FLAG_##v);                     \
     101             :   }
     102         340 : foreach_wg_op_mode_flags
     103             : #undef _
     104             : 
     105             :   typedef struct
     106             : {
     107             :   u8 __pad[22];
     108             :   u16 next_index;
     109             : } wg_post_data_t;
     110             : 
     111             : STATIC_ASSERT (sizeof (wg_post_data_t) <=
     112             :                  STRUCT_SIZE_OF (vnet_buffer_opaque_t, unused),
     113             :                "Custom meta-data too large for vnet_buffer_opaque_t");
     114             : 
     115             : #define wg_post_data(b)                                                       \
     116             :   ((wg_post_data_t *) ((u8 *) ((b)->opaque) +                                 \
     117             :                        STRUCT_OFFSET_OF (vnet_buffer_opaque_t, unused)))
     118             : 
     119             : #define WG_START_EVENT  1
     120             : void wg_feature_init (wg_main_t * wmp);
     121             : void wg_set_async_mode (u32 is_enabled);
     122             : 
     123             : void wg_secure_zero_memory (void *v, size_t n);
     124             : 
     125             : #endif /* __included_wg_h__ */
     126             : 
     127             : /*
     128             :  * fd.io coding-style-patch-verification: ON
     129             :  *
     130             :  * Local Variables:
     131             :  * eval: (c-set-style "gnu")
     132             :  * End:
     133             :  */

Generated by: LCOV version 1.14