26c4201900e99fe8b278d92098dd13b8c4c03e0d
[vpp.git] / src / plugins / ioam / udp-ping / udp_ping.h
1 /*
2  * Copyright (c) 2017 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
16 #ifndef PLUGINS_IOAM_PLUGIN_IOAM_UDP_PING_UDP_PING_H_
17 #define PLUGINS_IOAM_PLUGIN_IOAM_UDP_PING_UDP_PING_H_
18
19 #include <ioam/analyse/ioam_analyse.h>
20
21 #define MAX_PING_RETRIES 5
22
23 #define EVENT_SIG_RECHECK 2
24
25 /** @brief udp-ping session data.
26     @note cache aligned.
27 */
28 typedef struct
29 {
30   /** UDP ping packet */
31   u8 *ping_rewrite;
32
33   /** Ping packet rewrite string len. */
34   u16 rewrite_len;
35
36   /** Number of times ping response was dropped.
37    * If retry > MAX_PING_RETRIES then declare connectivity as down.
38    */
39   u16 retry;
40
41   u16 reserve[2];
42
43   /** Analysed data. */
44   ioam_analyser_data_t analyse_data;
45
46   /** This is used by ioam e2e for identifying flow and add seq number. */
47   u32 flow_ctx;
48
49   /** No of packets sent for this flow. */
50   u32 pak_sent;
51 } udp_ping_flow_data;
52
53 /** @brief udp-ping flow data.
54     @note cache aligned.
55 */
56 typedef struct
57 {
58   /** Time at which next udp-ping probe has to be sent out. */
59   f64 next_send_time;
60
61   /** Interval for which ping packet to be sent. */
62   u16 interval;
63
64   u16 reserve[3];
65
66   /** Defines start port of the src port range. */
67   u16 start_src_port;
68
69   /** Defines end port of the src port range. */
70   u16 end_src_port;
71
72   /** Defines start port of the dest port range. */
73   u16 start_dst_port;
74
75   /** Defines end port of the dest port range. */
76   u16 end_dst_port;
77
78   /** Ping statistics. */
79   udp_ping_flow_data *stats;
80
81 } udp_ping_flow;
82
83 /** @brief udp-ping data.
84 */
85 typedef struct
86 {
87   /** Local source IPv4/6 address to be used. */
88   ip46_address_t src;
89
90   /** Remote destination IPv4/6 address to be used. */
91   ip46_address_t dst;
92
93   /** Per flow data. */
94   udp_ping_flow udp_data;
95
96   /** To enable fault detection/isolation in network. */
97   u8 fault_det;
98 } ip46_udp_ping_flow;
99
100 /** @brief udp-ping main data-structure.
101 */
102 typedef struct
103 {
104   /** Vector od udp-ping data */
105   ip46_udp_ping_flow *ip46_flow;
106
107   /** Stores the time interval at which process node has to wake up. */
108   u64 timer_interval;
109
110   /** Pointer to VLib main for the node - ipfix-collector. */
111   vlib_main_t *vlib_main;
112
113   /** Pointer to vnet main for convenience. */
114   vnet_main_t *vnet_main;
115
116   /** API message ID base */
117   u16 msg_id_base;
118 } udp_ping_main_t;
119
120 extern udp_ping_main_t udp_ping_main;
121
122 void
123 ip46_udp_ping_set_flow (ip46_address_t src, ip46_address_t dst,
124                         u16 start_src_port, u16 end_src_port,
125                         u16 start_dst_port, u16 end_dst_port,
126                         u16 interval, u8 fault_det, u8 is_disable);
127
128 clib_error_t *udp_ping_flow_create (u8 del);
129
130 #endif /* PLUGINS_IOAM_PLUGIN_IOAM_UDP_PING_UDP_PING_H_ */
131
132 /*
133  * fd.io coding-style-patch-verification: ON
134  *
135  * Local Variables:
136  * eval: (c-set-style "gnu")
137  * End:
138  */