FD.io VPP  v17.04-9-g99c0734
Vector Packet Processing
vxlan_gpe_ioam.h
Go to the documentation of this file.
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_vxlan_gpe_ioam_h__
16 #define __included_vxlan_gpe_ioam_h__
17 
21 #include <vnet/ip/ip.h>
22 
23 
25 {
28 
30 {
31  ip46_address_t dst_addr;
37 
38 typedef struct vxlan_gpe_ioam_main_
39 {
40  /**
41  * Linkage into the FIB object graph
42  */
44 
45  /* time scale transform. Joy. */
48 
49 
50  /* Trace option */
52 
53  /* Pot option */
55 
56 #define PPC_NONE 0
57 #define PPC_ENCAP 1
58 #define PPC_DECAP 2
60 
61 #define TSP_SECONDS 0
62 #define TSP_MILLISECONDS 1
63 #define TSP_MICROSECONDS 2
64 #define TSP_NANOSECONDS 3
65 
66  /* Array of function pointers to ADD and POP VxLAN-GPE iOAM option handling routines */
67  u8 options_size[256];
68  int (*add_options[256]) (u8 * rewrite_string, u8 * rewrite_size);
69  int (*pop_options[256]) (ip4_header_t * ip, vxlan_gpe_ioam_option_t * opt);
70 
71  /* Array of function pointers to iOAM option handling routines */
72  int (*options[256]) (vlib_buffer_t * b, vxlan_gpe_ioam_option_t * opt,
73  u8 is_ipv4, u8 use_adj);
74  u8 *(*trace[256]) (u8 * s, vxlan_gpe_ioam_option_t * opt);
75 
76  /* API message ID base */
78 
79  /* Override to export for iOAM */
82 
83  /* sequence of node graph for encap */
86 
87  /* Software interfaces. */
89 
90  /* hash ip4/ip6 -> list of destinations for doing transit iOAM operation */
94 
95  /** per sw_if_index, to maintain bitmap */
98 
99  /** State convenience vlib_main_t */
101  /** State convenience vnet_main_t */
103 
104 
107 
108 /*
109  * Primary h-b-h handler trace support
110  */
111 typedef struct
112 {
115  u8 option_data[256];
116 } ioam_trace_t;
117 
118 
122 
123 clib_error_t *vxlan_gpe_ioam_enable (int has_trace_option, int has_pot_option,
124  int has_ppc_option);
125 
126 clib_error_t *vxlan_gpe_ioam_disable (int has_trace_option,
127  int has_pot_option, int has_ppc_option);
128 
130  int has_trace_option,
131  int has_pot_option,
132  int has_ppc_option, u8 ipv6_set);
134  int has_trace_option, int has_pot_option,
135  int has_ppc_option, u8 ipv6_set);
136 
138  u8 size,
139  int rewrite_options (u8 *
140  rewrite_string,
141  u8 *
142  rewrite_size));
143 
145 
147  int options (vlib_buffer_t * b,
149  opt, u8 is_ipv4, u8 use_adj),
150  u8 * trace (u8 * s,
152  opt));
154 
156 
158 extern void vxlan_gpe_ioam_interface_init (void);
159 int
161  ip46_address_t dst_addr,
162  u32 outer_fib_index,
163  u8 is_ipv4, u8 is_add);
165  (vlib_main_t * vm, ip46_address_t dst_addr, u32 outer_fib_index,
166  u8 ipv4_set);
167 
168 typedef enum
169 {
174 
175 #endif
176 
177 /*
178  * fd.io coding-style-patch-verification: ON
179  *
180  * Local Variables:
181  * eval: (c-set-style "gnu")
182  * End:
183  */
int vxlan_gpe_ioam_register_option(u8 option, int options(vlib_buffer_t *b, vxlan_gpe_ioam_option_t *opt, u8 is_ipv4, u8 use_adj), u8 *trace(u8 *s, vxlan_gpe_ioam_option_t *opt))
enum fib_node_type_t_ fib_node_type_t
The types of nodes in a FIB graph.
static vlib_cli_command_t trace
(constructor) VLIB_CLI_COMMAND (trace)
Definition: memory_vlib.c:1172
vlib_main_t * vlib_main
State convenience vlib_main_t.
clib_error_t * vxlan_gpe_ioam_set(vxlan_gpe_tunnel_t *t, int has_trace_option, int has_pot_option, int has_ppc_option, u8 ipv6_set)
VXLAN GPE definitions.
vxlan_gpe_ioam_sw_interface_t * sw_interfaces
clib_error_t * vxlan_gpe_ioam_clear(vxlan_gpe_tunnel_t *t, int has_trace_option, int has_pot_option, int has_ppc_option, u8 ipv6_set)
clib_error_t * vxlan_gpe_ioam_disable(int has_trace_option, int has_pot_option, int has_ppc_option)
struct _vlib_node_registration vlib_node_registration_t
fib_node_index_t fib_entry_index
int vxlan_gpe_enable_disable_ioam_for_dest(vlib_main_t *vm, ip46_address_t dst_addr, u32 outer_fib_index, u8 is_ipv4, u8 is_add)
struct vxlan_gpe_ioam_main_ vxlan_gpe_ioam_main_t
int vxlan_gpe_add_unregister_option(u8 option)
void vxlan_gpe_ioam_interface_init(void)
vxlan_gpe_ioam_main_t vxlan_gpe_ioam_main
VXLAN GPE packet header structure.
Struct for VXLAN GPE tunnel.
Definition: vxlan_gpe.h:90
struct vxlan_gpe_sw_interface_ vxlan_gpe_ioam_sw_interface_t
vlib_node_registration_t vxlan_gpe_encap_ioam_v4_node
(constructor) VLIB_REGISTER_NODE (vxlan_gpe_encap_ioam_v4_node)
Definition: ioam_encap.c:168
int vxlan_gpe_trace_profile_setup(void)
An node in the FIB graph.
Definition: fib_node.h:277
vxlan_gpe_decap_ioam_v4_next_t
vlib_main_t * vm
Definition: buffer.c:276
vxlan_gpe_ioam_dest_tunnels_t * dst_tunnels
u32 fib_node_index_t
A typedef of a node index.
Definition: fib_types.h:28
struct vxlan_gpe_dest_tunnels_ vxlan_gpe_ioam_dest_tunnels_t
fib_node_t node
Linkage into the FIB object graph.
unsigned int u32
Definition: types.h:88
u8 * bool_ref_by_sw_if_index
per sw_if_index, to maintain bitmap
u64 uword
Definition: types.h:112
unsigned short u16
Definition: types.h:57
vlib_node_registration_t vxlan_gpe_transit_ioam_v4_node
fib_node_type_t fib_entry_type
double f64
Definition: types.h:142
unsigned char u8
Definition: types.h:56
int vxlan_gpe_ioam_add_register_option(u8 option, u8 size, int rewrite_options(u8 *rewrite_string, u8 *rewrite_size))
ip46_address_t dst_addr
clib_error_t * vxlan_gpe_ioam_enable(int has_trace_option, int has_pot_option, int has_ppc_option)
int vxlan_gpe_ioam_disable_for_dest(vlib_main_t *vm, ip46_address_t dst_addr, u32 outer_fib_index, u8 ipv4_set)
int vxlan_gpe_ioam_unregister_option(u8 option)
int vxlan_gpe_trace_profile_cleanup(void)
vnet_main_t * vnet_main
State convenience vnet_main_t.
vlib_node_registration_t vxlan_gpe_decap_ioam_v4_node
(constructor) VLIB_REGISTER_NODE (vxlan_gpe_decap_ioam_v4_node)
Definition: ioam_decap.c:197