FD.io VPP  v19.04.4-rc0-5-ge88582fac
Vector Packet Processing
l2tp.h
Go to the documentation of this file.
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 <vnet/l2tp/packet.h>
24 
25 typedef struct
26 {
27  /* ip6 addresses */
30 
31  /* l2tpv3 header parameters */
32  u64 local_cookie[2];
36 
37  /* tunnel interface */
40 
41  /* fib index used for outgoing encapsulated packets */
43 
46  u8 cookie_flags; /* in host byte order */
47 
50 
51 typedef enum
52 {
57 
58 typedef struct
59 {
60  /* session pool */
62 
63  /* ip6 -> l2 hash tables. Make up your minds, people... */
67 
69 
70  /* Counters */
72 
73  /* vector of free l2tpv3 tunnel interfaces */
75 
76  /* show device instance by real device instance */
78 
79  /* convenience */
82 
83 } l2t_main_t;
84 
85 /* Packet trace structure */
86 typedef struct
87 {
92 } l2t_trace_t;
93 
94 extern l2t_main_t l2t_main;
98 
99 enum
100 {
103 };
104 
105 static inline u32
106 session_index_to_counter_index (u32 session_index, u32 counter_id)
107 {
108  return ((session_index << 1) + counter_id);
109 }
110 
111 u8 *format_l2t_trace (u8 * s, va_list * args);
112 
113 typedef struct
114 {
115  /* Any per-interface config would go here */
117 
118 uword unformat_pg_l2tp_header (unformat_input_t * input, va_list * args);
119 
120 void l2tp_encap_init (vlib_main_t * vm);
121 void l2tp_decap_init (void);
123  ip6_address_t * client_address,
124  ip6_address_t * our_address,
125  u32 local_session_id,
126  u32 remote_session_id,
127  u64 local_cookie,
128  u64 remote_cookie,
129  int l2_sublayer_present,
130  u32 encap_fib_index, u32 * sw_if_index);
131 
134  u64 new_local_cookie, u64 new_remote_cookie);
135 
137  u32 sw_if_index, int enable_disable);
138 
139 #endif /* __included_l2tp_h__ */
140 
141 /*
142  * fd.io coding-style-patch-verification: ON
143  *
144  * Local Variables:
145  * eval: (c-set-style "gnu")
146  * End:
147  */
int is_user_to_network
Definition: l2tp.h:88
u32 sw_if_index
Definition: ipsec_gre.api:37
u8 cookie_flags
Definition: l2tp.h:46
ip6_to_l2_lookup_t
Definition: l2tp.h:51
ip6_address_t client_address
Definition: l2tp.h:91
void l2tp_encap_init(vlib_main_t *vm)
Definition: encap.c:218
unsigned long u64
Definition: types.h:89
uword * session_by_session_id
Definition: l2tp.h:66
ip6_address_t our_address
Definition: l2tp.h:28
l2t_main_t l2t_main
Definition: l2tp.c:26
u32 encap_fib_index
Definition: l2tp.h:42
u64 remote_cookie
Definition: l2tp.h:33
static u32 session_index_to_counter_index(u32 session_index, u32 counter_id)
Definition: l2tp.h:106
unsigned char u8
Definition: types.h:56
ip6_address_t client_address
Definition: l2tp.h:29
vlib_node_registration_t l2t_decap_local_node
(constructor) VLIB_REGISTER_NODE (l2t_decap_local_node)
Definition: decap.c:275
unsigned int u32
Definition: types.h:88
u32 hw_if_index
Definition: l2tp.h:38
u8 * format_l2t_trace(u8 *s, va_list *args)
Definition: l2tp.c:30
u32 local_session_id
Definition: l2tp.h:34
struct _unformat_input_t unformat_input_t
vlib_node_registration_t l2t_decap_node
(constructor) VLIB_REGISTER_NODE (l2t_decap_node)
Definition: decap.c:253
int l2tpv3_interface_enable_disable(vnet_main_t *vnm, u32 sw_if_index, int enable_disable)
Definition: l2tp.c:617
vlib_node_registration_t l2t_encap_node
ip6_to_l2_lookup_t lookup_type
Definition: l2tp.h:68
ip6_address_t our_address
Definition: l2tp.h:90
int create_l2tpv3_ipv6_tunnel(l2t_main_t *lm, ip6_address_t *client_address, ip6_address_t *our_address, u32 local_session_id, u32 remote_session_id, u64 local_cookie, u64 remote_cookie, int l2_sublayer_present, u32 encap_fib_index, u32 *sw_if_index)
Definition: l2tp.c:292
u32 * free_l2tpv3_tunnel_hw_if_indices
Definition: l2tp.h:74
uword unformat_pg_l2tp_header(unformat_input_t *input, va_list *args)
Definition: pg.c:41
int l2tpv3_set_tunnel_cookies(l2t_main_t *lm, u32 sw_if_index, u64 new_local_cookie, u64 new_remote_cookie)
Definition: l2tp.c:534
vlib_main_t * vlib_main
Definition: l2tp.h:80
u32 remote_session_id
Definition: l2tp.h:35
vnet_main_t * vnet_main
Definition: l2tp.h:81
uword * session_by_dst_address
Definition: l2tp.h:65
vlib_combined_counter_main_t counter_main
Definition: l2tp.h:71
struct _vlib_node_registration vlib_node_registration_t
u8 l2tp_hdr_size
Definition: l2tp.h:44
u64 uword
Definition: types.h:112
l2t_session_t * sessions
Definition: l2tp.h:61
A collection of combined counters.
Definition: counter.h:188
u8 admin_up
Definition: l2tp.h:48
void l2tp_decap_init(void)
Definition: decap.c:297
u32 * dev_inst_by_real
Definition: l2tp.h:77
uword * session_by_src_address
Definition: l2tp.h:64
u8 l2_sublayer_present
Definition: l2tp.h:45
u32 sw_if_index
Definition: l2tp.h:39
u32 session_index
Definition: l2tp.h:89