corosync
2.4.5
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
include
corosync
totem
totem.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2005 MontaVista Software, Inc.
3
* Copyright (c) 2006-2012 Red Hat, Inc.
4
*
5
* Author: Steven Dake (sdake@redhat.com)
6
*
7
* All rights reserved.
8
*
9
* This software licensed under BSD license, the text of which follows:
10
*
11
* Redistribution and use in source and binary forms, with or without
12
* modification, are permitted provided that the following conditions are met:
13
*
14
* - Redistributions of source code must retain the above copyright notice,
15
* this list of conditions and the following disclaimer.
16
* - Redistributions in binary form must reproduce the above copyright notice,
17
* this list of conditions and the following disclaimer in the documentation
18
* and/or other materials provided with the distribution.
19
* - Neither the name of the MontaVista Software, Inc. nor the names of its
20
* contributors may be used to endorse or promote products derived from this
21
* software without specific prior written permission.
22
*
23
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
33
* THE POSSIBILITY OF SUCH DAMAGE.
34
*/
35
#ifndef TOTEM_H_DEFINED
36
#define TOTEM_H_DEFINED
37
#include "
totemip.h
"
38
#include <
corosync/hdb.h
>
39
40
#ifdef HAVE_SMALL_MEMORY_FOOTPRINT
41
#define PROCESSOR_COUNT_MAX 16
42
#define MESSAGE_SIZE_MAX 1024*64
43
#define MESSAGE_QUEUE_MAX 512
44
#else
45
#define PROCESSOR_COUNT_MAX 384
46
#define MESSAGE_SIZE_MAX 1024*1024
/* (1MB) */
47
#define MESSAGE_QUEUE_MAX ((4 * MESSAGE_SIZE_MAX) / totem_config->net_mtu)
48
#endif
/* HAVE_SMALL_MEMORY_FOOTPRINT */
49
50
#define FRAME_SIZE_MAX 10000
51
#define TRANSMITS_ALLOWED 16
52
#define SEND_THREADS_MAX 16
53
#define INTERFACE_MAX 2
54
55
#define BIND_MAX_RETRIES 10
56
#define BIND_RETRIES_INTERVAL 100
57
61
#define MAX_NO_CONT_GATHER 3
62
/*
63
* Maximum number of continuous failures get from sendmsg call
64
*/
65
#define MAX_NO_CONT_SENDMSG_FAILURES 30
66
67
struct
totem_interface
{
68
struct
totem_ip_address
bindnet
;
69
struct
totem_ip_address
boundto
;
70
struct
totem_ip_address
mcast_addr
;
71
uint16_t
ip_port
;
72
uint16_t
ttl
;
73
int
member_count
;
74
struct
totem_ip_address
member_list
[
PROCESSOR_COUNT_MAX
];
75
};
76
77
struct
totem_logging_configuration
{
78
void (*
log_printf
) (
79
int
level,
80
int
subsys,
81
const
char
*function_name,
82
const
char
*file_name,
83
int
file_line,
84
const
char
*format,
85
...)
__attribute__
((format(printf, 6, 7)));
86
87
int
log_level_security
;
88
int
log_level_error
;
89
int
log_level_warning
;
90
int
log_level_notice
;
91
int
log_level_debug
;
92
int
log_level_trace
;
93
int
log_subsys_id
;
94
};
95
96
enum
{
TOTEM_PRIVATE_KEY_LEN
= 128 };
97
enum
{
TOTEM_RRP_MODE_BYTES
= 64 };
98
99
typedef
enum
{
100
TOTEM_TRANSPORT_UDP
= 0,
101
TOTEM_TRANSPORT_UDPU
= 1,
102
TOTEM_TRANSPORT_RDMA
= 2
103
}
totem_transport_t
;
104
105
#define MEMB_RING_ID
106
struct
memb_ring_id
{
107
struct
totem_ip_address
rep;
108
unsigned
long
long
seq
;
109
}
__attribute__
((packed));
110
111
struct
totem_config
{
112
int
version
;
113
114
/*
115
* network
116
*/
117
struct
totem_interface
*
interfaces
;
118
unsigned
int
interface_count
;
119
unsigned
int
node_id
;
120
unsigned
int
clear_node_high_bit
;
121
122
/*
123
* key information
124
*/
125
unsigned
char
private_key
[
TOTEM_PRIVATE_KEY_LEN
];
126
127
unsigned
int
private_key_len
;
128
129
/*
130
* Totem configuration parameters
131
*/
132
unsigned
int
token_timeout
;
133
134
unsigned
int
token_retransmit_timeout
;
135
136
unsigned
int
token_hold_timeout
;
137
138
unsigned
int
token_retransmits_before_loss_const
;
139
140
unsigned
int
join_timeout
;
141
142
unsigned
int
send_join_timeout
;
143
144
unsigned
int
consensus_timeout
;
145
146
unsigned
int
merge_timeout
;
147
148
unsigned
int
downcheck_timeout
;
149
150
unsigned
int
fail_to_recv_const
;
151
152
unsigned
int
seqno_unchanged_const
;
153
154
unsigned
int
rrp_token_expired_timeout
;
155
156
unsigned
int
rrp_problem_count_timeout
;
157
158
unsigned
int
rrp_problem_count_threshold
;
159
160
unsigned
int
rrp_problem_count_mcast_threshold
;
161
162
unsigned
int
rrp_autorecovery_check_timeout
;
163
164
char
rrp_mode
[
TOTEM_RRP_MODE_BYTES
];
165
166
struct
totem_logging_configuration
totem_logging_configuration
;
167
168
unsigned
int
net_mtu
;
169
170
unsigned
int
threads
;
171
172
unsigned
int
heartbeat_failures_allowed
;
173
174
unsigned
int
max_network_delay
;
175
176
unsigned
int
window_size
;
177
178
unsigned
int
max_messages
;
179
180
const
char
*
vsf_type
;
181
182
unsigned
int
broadcast_use
;
183
184
char
*
crypto_cipher_type
;
185
186
char
*
crypto_hash_type
;
187
188
totem_transport_t
transport_number
;
189
190
unsigned
int
miss_count_const
;
191
192
int
ip_version
;
193
194
unsigned
int
block_unlisted_ips
;
195
196
void (*
totem_memb_ring_id_create_or_load
) (
197
struct
memb_ring_id
*
memb_ring_id
,
198
const
struct
totem_ip_address
*
addr
);
199
200
void (*
totem_memb_ring_id_store
) (
201
const
struct
memb_ring_id
*
memb_ring_id
,
202
const
struct
totem_ip_address
*
addr
);
203
};
204
205
#define TOTEM_CONFIGURATION_TYPE
206
enum
totem_configuration_type
{
207
TOTEM_CONFIGURATION_REGULAR
,
208
TOTEM_CONFIGURATION_TRANSITIONAL
209
};
210
211
#define TOTEM_CALLBACK_TOKEN_TYPE
212
enum
totem_callback_token_type
{
213
TOTEM_CALLBACK_TOKEN_RECEIVED
= 1,
214
TOTEM_CALLBACK_TOKEN_SENT
= 2
215
};
216
217
enum
totem_event_type
{
218
TOTEM_EVENT_DELIVERY_CONGESTED
,
219
TOTEM_EVENT_NEW_MSG
,
220
};
221
222
typedef
struct
{
223
int
is_dirty
;
224
time_t
last_updated
;
225
}
totem_stats_header_t
;
226
227
typedef
struct
{
228
totem_stats_header_t
hdr
;
229
uint32_t
iface_changes
;
230
}
totemnet_stats_t
;
231
232
typedef
struct
{
233
totem_stats_header_t
hdr
;
234
totemnet_stats_t
*
net
;
235
char
*
algo_name
;
236
uint8_t *
faulty
;
237
uint32_t
interface_count
;
238
}
totemrrp_stats_t
;
239
240
241
typedef
struct
{
242
uint32_t
rx
;
243
uint32_t
tx
;
244
int
backlog_calc
;
245
}
totemsrp_token_stats_t
;
246
247
typedef
struct
{
248
totem_stats_header_t
hdr
;
249
totemrrp_stats_t
*
rrp
;
250
uint64_t
orf_token_tx
;
251
uint64_t
orf_token_rx
;
252
uint64_t
memb_merge_detect_tx
;
253
uint64_t
memb_merge_detect_rx
;
254
uint64_t
memb_join_tx
;
255
uint64_t
memb_join_rx
;
256
uint64_t
mcast_tx
;
257
uint64_t
mcast_retx
;
258
uint64_t
mcast_rx
;
259
uint64_t
memb_commit_token_tx
;
260
uint64_t
memb_commit_token_rx
;
261
uint64_t
token_hold_cancel_tx
;
262
uint64_t
token_hold_cancel_rx
;
263
uint64_t
operational_entered
;
264
uint64_t
operational_token_lost
;
265
uint64_t
gather_entered
;
266
uint64_t
gather_token_lost
;
267
uint64_t
commit_entered
;
268
uint64_t
commit_token_lost
;
269
uint64_t
recovery_entered
;
270
uint64_t
recovery_token_lost
;
271
uint64_t
consensus_timeouts
;
272
uint64_t
rx_msg_dropped
;
273
uint32_t
continuous_gather
;
274
uint32_t
continuous_sendmsg_failures
;
275
276
int
earliest_token
;
277
int
latest_token
;
278
#define TOTEM_TOKEN_STATS_MAX 100
279
totemsrp_token_stats_t
token[
TOTEM_TOKEN_STATS_MAX
];
280
281
}
totemsrp_stats_t
;
282
283
284
#define TOTEM_CONFIGURATION_TYPE
285
286
typedef
struct
{
287
totem_stats_header_t
hdr
;
288
totemsrp_stats_t
*
srp
;
289
}
totemmrp_stats_t
;
290
291
typedef
struct
{
292
totem_stats_header_t
hdr
;
293
totemmrp_stats_t
*
mrp
;
294
uint32_t
msg_reserved
;
295
uint32_t
msg_queue_avail
;
296
}
totempg_stats_t
;
297
298
#endif
/* TOTEM_H_DEFINED */
Generated on Sun Apr 5 2020 18:06:22 for corosync by
1.8.3.1