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

          Line data    Source code
       1             : /*
       2             :  * l2tp.h : L2TPv3 tunnel support
       3             :  *
       4             :  * Copyright (c) 2013 Cisco and/or its affiliates.
       5             :  * Licensed under the Apache License, Version 2.0 (the "License");
       6             :  * you may not use this file except in compliance with the License.
       7             :  * You may obtain a copy of the License at:
       8             :  *
       9             :  *     http://www.apache.org/licenses/LICENSE-2.0
      10             :  *
      11             :  * Unless required by applicable law or agreed to in writing, software
      12             :  * distributed under the License is distributed on an "AS IS" BASIS,
      13             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      14             :  * See the License for the specific language governing permissions and
      15             :  * limitations under the License.
      16             :  */
      17             : 
      18             : #ifndef __included_l2tp_h__
      19             : #define __included_l2tp_h__
      20             : 
      21             : #include <vlib/vlib.h>
      22             : #include <vnet/ip/ip.h>
      23             : #include <l2tp/packet.h>
      24             : 
      25             : typedef struct
      26             : {
      27             :   /* ip6 addresses */
      28             :   ip6_address_t our_address;
      29             :   ip6_address_t client_address;
      30             : 
      31             :   /* l2tpv3 header parameters */
      32             :   u64 local_cookie[2];
      33             :   u64 remote_cookie;
      34             :   u32 local_session_id;
      35             :   u32 remote_session_id;
      36             : 
      37             :   /* tunnel interface */
      38             :   u32 hw_if_index;
      39             :   u32 sw_if_index;
      40             : 
      41             :   /* fib index used for outgoing encapsulated packets */
      42             :   u32 encap_fib_index;
      43             : 
      44             :   u8 l2tp_hdr_size;
      45             :   u8 l2_sublayer_present;
      46             :   u8 cookie_flags;              /* in host byte order */
      47             : 
      48             :   u8 admin_up;
      49             : } l2t_session_t;
      50             : 
      51             : typedef enum
      52             : {
      53             :   L2T_LOOKUP_SRC_ADDRESS = 0,
      54             :   L2T_LOOKUP_DST_ADDRESS,
      55             :   L2T_LOOKUP_SESSION_ID,
      56             : } ip6_to_l2_lookup_t;
      57             : 
      58             : typedef struct
      59             : {
      60             :   /* session pool */
      61             :   l2t_session_t *sessions;
      62             : 
      63             :   /* ip6 -> l2 hash tables. Make up your minds, people... */
      64             :   uword *session_by_src_address;
      65             :   uword *session_by_dst_address;
      66             :   uword *session_by_session_id;
      67             : 
      68             :   ip6_to_l2_lookup_t lookup_type;
      69             : 
      70             :   /* Counters */
      71             :   vlib_combined_counter_main_t counter_main;
      72             : 
      73             :   /* vector of free l2tpv3 tunnel interfaces */
      74             :   u32 *free_l2tpv3_tunnel_hw_if_indices;
      75             : 
      76             :   /* show device instance by real device instance */
      77             :   u32 *dev_inst_by_real;
      78             : 
      79             :   /* convenience */
      80             :   vlib_main_t *vlib_main;
      81             :   vnet_main_t *vnet_main;
      82             : 
      83             :   bool proto_registered;
      84             : 
      85             : } l2t_main_t;
      86             : 
      87             : /* Packet trace structure */
      88             : typedef struct
      89             : {
      90             :   int is_user_to_network;
      91             :   u32 session_index;
      92             :   ip6_address_t our_address;
      93             :   ip6_address_t client_address;
      94             : } l2t_trace_t;
      95             : 
      96             : extern l2t_main_t l2t_main;
      97             : extern vlib_node_registration_t l2t_encap_node;
      98             : extern vlib_node_registration_t l2t_decap_node;
      99             : extern vlib_node_registration_t l2t_decap_local_node;
     100             : 
     101             : enum
     102             : {
     103             :   SESSION_COUNTER_USER_TO_NETWORK = 0,
     104             :   SESSION_COUNTER_NETWORK_TO_USER,
     105             : };
     106             : 
     107             : static inline u32
     108           1 : session_index_to_counter_index (u32 session_index, u32 counter_id)
     109             : {
     110           1 :   return ((session_index << 1) + counter_id);
     111             : }
     112             : 
     113             : u8 *format_l2t_trace (u8 * s, va_list * args);
     114             : 
     115             : typedef struct
     116             : {
     117             :   /* Any per-interface config would go here */
     118             : } ip6_l2tpv3_config_t;
     119             : 
     120             : uword unformat_pg_l2tp_header (unformat_input_t * input, va_list * args);
     121             : 
     122             : void l2tp_encap_init (vlib_main_t * vm);
     123             : int create_l2tpv3_ipv6_tunnel (l2t_main_t * lm,
     124             :                                ip6_address_t * client_address,
     125             :                                ip6_address_t * our_address,
     126             :                                u32 local_session_id,
     127             :                                u32 remote_session_id,
     128             :                                u64 local_cookie,
     129             :                                u64 remote_cookie,
     130             :                                int l2_sublayer_present,
     131             :                                u32 encap_fib_index, u32 * sw_if_index);
     132             : 
     133             : int l2tpv3_set_tunnel_cookies (l2t_main_t * lm,
     134             :                                u32 sw_if_index,
     135             :                                u64 new_local_cookie, u64 new_remote_cookie);
     136             : 
     137             : int l2tpv3_interface_enable_disable (vnet_main_t * vnm,
     138             :                                      u32 sw_if_index, int enable_disable);
     139             : 
     140             : #endif /* __included_l2tp_h__ */
     141             : 
     142             : /*
     143             :  * fd.io coding-style-patch-verification: ON
     144             :  *
     145             :  * Local Variables:
     146             :  * eval: (c-set-style "gnu")
     147             :  * End:
     148             :  */

Generated by: LCOV version 1.14