Harmonize vec/pool_get_aligned object sizes and alignment requests
[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   /** Required for pool_get_aligned */
88   CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
89
90   /** Local source IPv4/6 address to be used. */
91   ip46_address_t src;
92
93   /** Remote destination IPv4/6 address to be used. */
94   ip46_address_t dst;
95
96   /** Per flow data. */
97   udp_ping_flow udp_data;
98
99   /** To enable fault detection/isolation in network. */
100   u8 fault_det;
101 } ip46_udp_ping_flow;
102
103 /** @brief udp-ping main data-structure.
104 */
105 typedef struct
106 {
107   /** Vector od udp-ping data */
108   ip46_udp_ping_flow *ip46_flow;
109
110   /** Stores the time interval at which process node has to wake up. */
111   u64 timer_interval;
112
113   /** Pointer to VLib main for the node - ipfix-collector. */
114   vlib_main_t *vlib_main;
115
116   /** Pointer to vnet main for convenience. */
117   vnet_main_t *vnet_main;
118
119   /** API message ID base */
120   u16 msg_id_base;
121 } udp_ping_main_t;
122
123 extern udp_ping_main_t udp_ping_main;
124
125 void
126 ip46_udp_ping_set_flow (ip46_address_t src, ip46_address_t dst,
127                         u16 start_src_port, u16 end_src_port,
128                         u16 start_dst_port, u16 end_dst_port,
129                         u16 interval, u8 fault_det, u8 is_disable);
130
131 clib_error_t *udp_ping_flow_create (u8 del);
132
133 #endif /* PLUGINS_IOAM_PLUGIN_IOAM_UDP_PING_UDP_PING_H_ */
134
135 /*
136  * fd.io coding-style-patch-verification: ON
137  *
138  * Local Variables:
139  * eval: (c-set-style "gnu")
140  * End:
141  */