corosync  2.4.3
totemnet.c
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  * All rights reserved.
6  *
7  * Author: Steven Dake (sdake@redhat.com)
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 
36 #include <config.h>
37 
38 #include <assert.h>
39 
40 #ifdef HAVE_RDMA
41 #include <totemiba.h>
42 #endif
43 #include <totemudp.h>
44 #include <totemudpu.h>
45 #include <totemnet.h>
46 #include <qb/qbloop.h>
47 
48 #define LOGSYS_UTILS_ONLY 1
49 #include <corosync/logsys.h>
50 
51 struct transport {
52  const char *name;
53 
54  int (*initialize) (
55  qb_loop_t *loop_pt,
56  void **transport_instance,
57  struct totem_config *totem_config,
58  totemsrp_stats_t *stats,
59  int interface_no,
60  void *context,
61 
62  void (*deliver_fn) (
63  void *context,
64  const void *msg,
65  unsigned int msg_len),
66 
67  void (*iface_change_fn) (
68  void *context,
69  const struct totem_ip_address *iface_address),
70 
71  void (*target_set_completed) (
72  void *context));
73 
74  void *(*buffer_alloc) (void);
75 
76  void (*buffer_release) (void *ptr);
77 
79  void *transport_context,
80  int processor_count);
81 
82  int (*token_send) (
83  void *transport_context,
84  const void *msg,
85  unsigned int msg_len);
86 
88  void *transport_context,
89  const void *msg,
90  unsigned int msg_len);
91 
92 
94  void *transport_context,
95  const void *msg,
96  unsigned int msg_len);
97 
98  int (*recv_flush) (void *transport_context);
99 
100  int (*send_flush) (void *transport_context);
101 
102  int (*iface_check) (void *transport_context);
103 
104  int (*finalize) (void *transport_context);
105 
106  void (*net_mtu_adjust) (void *transport_context, struct totem_config *totem_config);
107 
108  const char *(*iface_print) (void *transport_context);
109 
110  int (*iface_get) (
111  void *transport_context,
112  struct totem_ip_address *addr);
113 
115  void *transport_context,
116  const struct totem_ip_address *token_target);
117 
118  int (*crypto_set) (
119  void *transport_context,
120  const char *cipher_type,
121  const char *hash_type);
122 
124  void *transport_context);
125 
126  int (*member_add) (
127  void *transport_context,
128  const struct totem_ip_address *member);
129 
130  int (*member_remove) (
131  void *transport_context,
132  const struct totem_ip_address *member);
133 
135  void *transport_context,
136  const struct totem_ip_address *member,
137  int active);
138 };
139 
141  {
142  .name = "UDP/IP Multicast",
143  .initialize = totemudp_initialize,
144  .buffer_alloc = totemudp_buffer_alloc,
145  .buffer_release = totemudp_buffer_release,
146  .processor_count_set = totemudp_processor_count_set,
147  .token_send = totemudp_token_send,
148  .mcast_flush_send = totemudp_mcast_flush_send,
149  .mcast_noflush_send = totemudp_mcast_noflush_send,
150  .recv_flush = totemudp_recv_flush,
151  .send_flush = totemudp_send_flush,
152  .iface_check = totemudp_iface_check,
153  .finalize = totemudp_finalize,
154  .net_mtu_adjust = totemudp_net_mtu_adjust,
155  .iface_print = totemudp_iface_print,
156  .iface_get = totemudp_iface_get,
157  .token_target_set = totemudp_token_target_set,
158  .crypto_set = totemudp_crypto_set,
159  .recv_mcast_empty = totemudp_recv_mcast_empty
160  },
161  {
162  .name = "UDP/IP Unicast",
163  .initialize = totemudpu_initialize,
164  .buffer_alloc = totemudpu_buffer_alloc,
165  .buffer_release = totemudpu_buffer_release,
166  .processor_count_set = totemudpu_processor_count_set,
167  .token_send = totemudpu_token_send,
168  .mcast_flush_send = totemudpu_mcast_flush_send,
169  .mcast_noflush_send = totemudpu_mcast_noflush_send,
170  .recv_flush = totemudpu_recv_flush,
171  .send_flush = totemudpu_send_flush,
172  .iface_check = totemudpu_iface_check,
173  .finalize = totemudpu_finalize,
174  .net_mtu_adjust = totemudpu_net_mtu_adjust,
175  .iface_print = totemudpu_iface_print,
176  .iface_get = totemudpu_iface_get,
177  .token_target_set = totemudpu_token_target_set,
178  .crypto_set = totemudpu_crypto_set,
179  .recv_mcast_empty = totemudpu_recv_mcast_empty,
180  .member_add = totemudpu_member_add,
181  .member_remove = totemudpu_member_remove,
182  .member_set_active = totemudpu_member_set_active
183  },
184 #ifdef HAVE_RDMA
185  {
186  .name = "Infiniband/IP",
187  .initialize = totemiba_initialize,
188  .buffer_alloc = totemiba_buffer_alloc,
189  .buffer_release = totemiba_buffer_release,
190  .processor_count_set = totemiba_processor_count_set,
191  .token_send = totemiba_token_send,
192  .mcast_flush_send = totemiba_mcast_flush_send,
193  .mcast_noflush_send = totemiba_mcast_noflush_send,
194  .recv_flush = totemiba_recv_flush,
195  .send_flush = totemiba_send_flush,
196  .iface_check = totemiba_iface_check,
197  .finalize = totemiba_finalize,
198  .net_mtu_adjust = totemiba_net_mtu_adjust,
199  .iface_print = totemiba_iface_print,
200  .iface_get = totemiba_iface_get,
201  .token_target_set = totemiba_token_target_set,
202  .crypto_set = totemiba_crypto_set,
203  .recv_mcast_empty = totemiba_recv_mcast_empty
204 
205  }
206 #endif
207 };
208 
211 
213 
214  void (*totemnet_log_printf) (
215  int level,
216  int subsys,
217  const char *function,
218  const char *file,
219  int line,
220  const char *format,
221  ...)__attribute__((format(printf, 6, 7)));
222 
223  int totemnet_subsys_id;
224 };
225 
226 #define log_printf(level, format, args...) \
227 do { \
228  instance->totemnet_log_printf ( \
229  level, \
230  instance->totemnet_subsys_id, \
231  __FUNCTION__, __FILE__, __LINE__, \
232  (const char *)format, ##args); \
233 } while (0);
234 
235 static void totemnet_instance_initialize (
236  struct totemnet_instance *instance,
237  struct totem_config *config)
238 {
239  int transport;
240 
243 
244 
245  transport = config->transport_number;
246 
248  "Initializing transport (%s).", transport_entries[transport].name);
249 
250  instance->transport = &transport_entries[transport];
251 }
252 
254  void *net_context,
255  const char *cipher_type,
256  const char *hash_type)
257 {
258  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
259  int res = 0;
260 
261  res = instance->transport->crypto_set (instance->transport_context,
262  cipher_type, hash_type);
263 
264  return res;
265 }
266 
268  void *net_context)
269 {
270  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
271  int res = 0;
272 
273  res = instance->transport->finalize (instance->transport_context);
274 
275  return (res);
276 }
277 
279  qb_loop_t *loop_pt,
280  void **net_context,
281  struct totem_config *totem_config,
282  totemsrp_stats_t *stats,
283  int interface_no,
284  void *context,
285 
286  void (*deliver_fn) (
287  void *context,
288  const void *msg,
289  unsigned int msg_len),
290 
291  void (*iface_change_fn) (
292  void *context,
293  const struct totem_ip_address *iface_address),
294 
295  void (*target_set_completed) (
296  void *context))
297 {
298  struct totemnet_instance *instance;
299  unsigned int res;
300 
301  instance = malloc (sizeof (struct totemnet_instance));
302  if (instance == NULL) {
303  return (-1);
304  }
305  totemnet_instance_initialize (instance, totem_config);
306 
307  res = instance->transport->initialize (loop_pt,
308  &instance->transport_context, totem_config, stats,
309  interface_no, context, deliver_fn, iface_change_fn, target_set_completed);
310 
311  if (res == -1) {
312  goto error_destroy;
313  }
314 
315  *net_context = instance;
316  return (0);
317 
318 error_destroy:
319  free (instance);
320  return (-1);
321 }
322 
323 void *totemnet_buffer_alloc (void *net_context)
324 {
325  struct totemnet_instance *instance = net_context;
326  assert (instance != NULL);
327  assert (instance->transport != NULL);
328  return instance->transport->buffer_alloc();
329 }
330 
331 void totemnet_buffer_release (void *net_context, void *ptr)
332 {
333  struct totemnet_instance *instance = net_context;
334  assert (instance != NULL);
335  assert (instance->transport != NULL);
336  instance->transport->buffer_release (ptr);
337 }
338 
340  void *net_context,
341  int processor_count)
342 {
343  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
344  int res = 0;
345 
346  res = instance->transport->processor_count_set (instance->transport_context, processor_count);
347  return (res);
348 }
349 
350 int totemnet_recv_flush (void *net_context)
351 {
352  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
353  int res = 0;
354 
355  res = instance->transport->recv_flush (instance->transport_context);
356 
357  return (res);
358 }
359 
360 int totemnet_send_flush (void *net_context)
361 {
362  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
363  int res = 0;
364 
365  res = instance->transport->send_flush (instance->transport_context);
366 
367  return (res);
368 }
369 
371  void *net_context,
372  const void *msg,
373  unsigned int msg_len)
374 {
375  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
376  int res = 0;
377 
378  res = instance->transport->token_send (instance->transport_context, msg, msg_len);
379 
380  return (res);
381 }
383  void *net_context,
384  const void *msg,
385  unsigned int msg_len)
386 {
387  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
388  int res = 0;
389 
390  res = instance->transport->mcast_flush_send (instance->transport_context, msg, msg_len);
391 
392  return (res);
393 }
394 
396  void *net_context,
397  const void *msg,
398  unsigned int msg_len)
399 {
400  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
401  int res = 0;
402 
403  res = instance->transport->mcast_noflush_send (instance->transport_context, msg, msg_len);
404 
405  return (res);
406 }
407 
408 extern int totemnet_iface_check (void *net_context)
409 {
410  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
411  int res = 0;
412 
413  res = instance->transport->iface_check (instance->transport_context);
414 
415  return (res);
416 }
417 
418 extern int totemnet_net_mtu_adjust (void *net_context, struct totem_config *totem_config)
419 {
420  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
421  int res = 0;
422 
423  instance->transport->net_mtu_adjust (instance->transport_context, totem_config);
424  return (res);
425 }
426 
427 const char *totemnet_iface_print (void *net_context) {
428  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
429  const char *ret_char;
430 
431  ret_char = instance->transport->iface_print (instance->transport_context);
432  return (ret_char);
433 }
434 
436  void *net_context,
437  struct totem_ip_address *addr)
438 {
439  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
440  unsigned int res;
441 
442  res = instance->transport->iface_get (instance->transport_context, addr);
443 
444  return (res);
445 }
446 
448  void *net_context,
449  const struct totem_ip_address *token_target)
450 {
451  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
452  unsigned int res;
453 
454  res = instance->transport->token_target_set (instance->transport_context, token_target);
455 
456  return (res);
457 }
458 
460  void *net_context)
461 {
462  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
463  unsigned int res;
464 
465  res = instance->transport->recv_mcast_empty (instance->transport_context);
466 
467  return (res);
468 }
469 
471  void *net_context,
472  const struct totem_ip_address *member)
473 {
474  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
475  unsigned int res = 0;
476 
477  if (instance->transport->member_add) {
478  res = instance->transport->member_add (
479  instance->transport_context,
480  member);
481  }
482 
483  return (res);
484 }
485 
487  void *net_context,
488  const struct totem_ip_address *member)
489 {
490  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
491  unsigned int res = 0;
492 
493  if (instance->transport->member_remove) {
494  res = instance->transport->member_remove (
495  instance->transport_context,
496  member);
497  }
498 
499  return (res);
500 }
501 
503  void *net_context,
504  const struct totem_ip_address *member,
505  int active)
506 {
507  struct totemnet_instance *instance = (struct totemnet_instance *)net_context;
508  unsigned int res = 0;
509 
510  if (instance->transport->member_set_active) {
511  res = instance->transport->member_set_active (
512  instance->transport_context,
513  member,
514  active);
515  }
516 
517  return (res);
518 }
int totemudp_crypto_set(void *udp_context, const char *cipher_type, const char *hash_type)
Definition: totemudp.c:247
int totemudp_processor_count_set(void *udp_context, int processor_count)
Definition: totemudp.c:1261
const char *(* iface_print)(void *transport_context)
Definition: totemnet.c:108
int(* finalize)(void *transport_context)
Definition: totemnet.c:104
int totemnet_mcast_flush_send(void *net_context, const void *msg, unsigned int msg_len)
Definition: totemnet.c:382
int(* recv_mcast_empty)(void *transport_context)
Definition: totemnet.c:123
int totemiba_recv_mcast_empty(void *iba_context)
Definition: totemiba.c:1632
int(* token_target_set)(void *transport_context, const struct totem_ip_address *token_target)
Definition: totemnet.c:114
The totem_ip_address struct.
Definition: coroapi.h:111
int totemudpu_token_target_set(void *udpu_context, const struct totem_ip_address *token_target)
Definition: totemudpu.c:1018
totem_transport_t transport_number
Definition: totem.h:188
int totemiba_send_flush(void *iba_context)
Definition: totemiba.c:1443
int totemiba_token_target_set(void *iba_context, const struct totem_ip_address *token_target)
Definition: totemiba.c:1613
int totemnet_member_remove(void *net_context, const struct totem_ip_address *member)
Definition: totemnet.c:486
void totemudp_net_mtu_adjust(void *udp_context, struct totem_config *totem_config)
Definition: totemudp.c:1372
void(*) in totemnet_subsys_id)
Definition: totemnet.c:221
int(* member_set_active)(void *transport_context, const struct totem_ip_address *member, int active)
Definition: totemnet.c:134
void * totemudp_buffer_alloc(void)
Definition: totemudp.c:1251
int totemudp_mcast_flush_send(void *udp_context, const void *msg, unsigned int msg_len)
Definition: totemudp.c:1336
int totemudp_token_target_set(void *udp_context, const struct totem_ip_address *token_target)
Definition: totemudp.c:1403
const char * totemnet_iface_print(void *net_context)
Definition: totemnet.c:427
int totemiba_initialize(qb_loop_t *qb_poll_handle, void **iba_context, struct totem_config *totem_config, totemsrp_stats_t *stats, int interface_no, void *context, void(*deliver_fn)(void *context, const void *msg, unsigned int msg_len), void(*iface_change_fn)(void *context, const struct totem_ip_address *iface_address), void(*target_set_completed)(void *context))
Create an instance.
Definition: totemiba.c:1350
int totemudpu_processor_count_set(void *udpu_context, int processor_count)
Definition: totemudpu.c:903
int(* send_flush)(void *transport_context)
Definition: totemnet.c:100
int totemiba_mcast_flush_send(void *iba_context, const void *ms, unsigned int msg_len)
Definition: totemiba.c:1493
unsigned char addr[TOTEMIP_ADDRLEN]
Definition: coroapi.h:77
void * totemiba_buffer_alloc(void)
Definition: totemiba.c:1411
int totemnet_member_add(void *net_context, const struct totem_ip_address *member)
Definition: totemnet.c:470
void(* buffer_release)(void *ptr)
Definition: totemnet.c:76
int(* iface_get)(void *transport_context, struct totem_ip_address *addr)
Definition: totemnet.c:110
int totemudp_mcast_noflush_send(void *udp_context, const void *msg, unsigned int msg_len)
Definition: totemudp.c:1349
int totemiba_iface_check(void *iba_context)
Definition: totemiba.c:1575
void *(* buffer_alloc)(void)
Definition: totemnet.c:74
const char * totemudpu_iface_print(void *udpu_context)
Definition: totemudpu.c:997
int totemudp_send_flush(void *udp_context)
Definition: totemudp.c:1319
Totem Network interface - also does encryption/decryption.
int totemudp_recv_flush(void *udp_context)
Definition: totemudp.c:1283
int totemnet_recv_flush(void *net_context)
Definition: totemnet.c:350
int totemiba_crypto_set(void *iba_context, const char *cipher_type, const char *hash_type)
Definition: totemiba.c:1323
void(* totemnet_log_printf)(int level, int subsys, const char *function, const char *file, int line, const char *format,...) __attribute__((format(printf
Definition: totemnet.c:214
int totemnet_net_mtu_adjust(void *net_context, struct totem_config *totem_config)
Definition: totemnet.c:418
void totemudpu_buffer_release(void *ptr)
Definition: totemudpu.c:898
void * totemudpu_buffer_alloc(void)
Definition: totemudpu.c:893
int(* token_send)(void *transport_context, const void *msg, unsigned int msg_len)
Definition: totemnet.c:82
int totemudp_token_send(void *udp_context, const void *msg, unsigned int msg_len)
Definition: totemudp.c:1324
int totemnet_crypto_set(void *net_context, const char *cipher_type, const char *hash_type)
Definition: totemnet.c:253
int totemiba_token_send(void *iba_context, const void *ms, unsigned int msg_len)
Definition: totemiba.c:1453
void(* net_mtu_adjust)(void *transport_context, struct totem_config *totem_config)
Definition: totemnet.c:106
int totemudpu_mcast_noflush_send(void *udpu_context, const void *msg, unsigned int msg_len)
Definition: totemudpu.c:964
int totemudp_initialize(qb_loop_t *poll_handle, void **udp_context, struct totem_config *totem_config, totemsrp_stats_t *stats, int interface_no, void *context, void(*deliver_fn)(void *context, const void *msg, unsigned int msg_len), void(*iface_change_fn)(void *context, const struct totem_ip_address *iface_address), void(*target_set_completed)(void *context))
Create an instance.
Definition: totemudp.c:1156
void * totemnet_buffer_alloc(void *net_context)
Definition: totemnet.c:323
int(* mcast_flush_send)(void *transport_context, const void *msg, unsigned int msg_len)
Definition: totemnet.c:87
int totemnet_member_set_active(void *net_context, const struct totem_ip_address *member, int active)
Definition: totemnet.c:502
int totemiba_iface_get(void *iba_context, struct totem_ip_address *addr)
Definition: totemiba.c:1601
int totemnet_recv_mcast_empty(void *net_context)
Definition: totemnet.c:459
int totemnet_iface_get(void *net_context, struct totem_ip_address *addr)
Definition: totemnet.c:435
int totemudpu_crypto_set(void *udpu_context, const char *cipher_type, const char *hash_type)
Definition: totemudpu.c:250
int totemnet_send_flush(void *net_context)
Definition: totemnet.c:360
void totemiba_net_mtu_adjust(void *iba_context, struct totem_config *totem_config)
Definition: totemiba.c:1585
int totemnet_mcast_noflush_send(void *net_context, const void *msg, unsigned int msg_len)
Definition: totemnet.c:395
int totemudpu_token_send(void *udpu_context, const void *msg, unsigned int msg_len)
Definition: totemudpu.c:939
int totemudp_finalize(void *udp_context)
Definition: totemudp.c:423
typedef __attribute__
int totemnet_finalize(void *net_context)
Definition: totemnet.c:267
const char * totemudp_iface_print(void *udp_context)
Definition: totemudp.c:1382
void(* log_printf)(int level, int subsys, const char *function_name, const char *file_name, int file_line, const char *format,...) __attribute__((format(printf
Definition: totem.h:78
int(* crypto_set)(void *transport_context, const char *cipher_type, const char *hash_type)
Definition: totemnet.c:118
const char * totemiba_iface_print(void *iba_context)
Definition: totemiba.c:1591
int totemnet_token_send(void *net_context, const void *msg, unsigned int msg_len)
Definition: totemnet.c:370
void * transport_context
Definition: totemnet.c:210
int totemiba_finalize(void *iba_context)
Definition: totemiba.c:1336
int(* initialize)(qb_loop_t *loop_pt, void **transport_instance, struct totem_config *totem_config, totemsrp_stats_t *stats, int interface_no, void *context, void(*deliver_fn)(void *context, const void *msg, unsigned int msg_len), void(*iface_change_fn)(void *context, const struct totem_ip_address *iface_address), void(*target_set_completed)(void *context))
Definition: totemnet.c:54
int(* member_add)(void *transport_context, const struct totem_ip_address *member)
Definition: totemnet.c:126
int totemudpu_member_remove(void *udpu_context, const struct totem_ip_address *token_target)
Definition: totemudpu.c:1169
int(* processor_count_set)(void *transport_context, int processor_count)
Definition: totemnet.c:78
int totemnet_initialize(qb_loop_t *loop_pt, void **net_context, struct totem_config *totem_config, totemsrp_stats_t *stats, int interface_no, void *context, void(*deliver_fn)(void *context, const void *msg, unsigned int msg_len), void(*iface_change_fn)(void *context, const struct totem_ip_address *iface_address), void(*target_set_completed)(void *context))
Create an instance.
Definition: totemnet.c:278
int totemudpu_member_set_active(void *udpu_context, const struct totem_ip_address *member_ip, int active)
Definition: totemudpu.c:1245
struct transport transport_entries[]
Definition: totemnet.c:140
int totemudp_iface_get(void *udp_context, struct totem_ip_address *addr)
Definition: totemudp.c:1391
int totemiba_mcast_noflush_send(void *iba_context, const void *ms, unsigned int msg_len)
Definition: totemiba.c:1534
const char * name
Definition: totemnet.c:52
#define log_printf(level, format, args...)
Definition: totemnet.c:226
struct totem_logging_configuration totem_logging_configuration
Definition: totem.h:166
#define LOGSYS_LEVEL_NOTICE
Definition: logsys.h:72
int totemudpu_recv_mcast_empty(void *udpu_context)
Definition: totemudpu.c:1033
int(* iface_check)(void *transport_context)
Definition: totemnet.c:102
void totemnet_buffer_release(void *net_context, void *ptr)
Definition: totemnet.c:331
int totemudpu_initialize(qb_loop_t *poll_handle, void **udpu_context, struct totem_config *totem_config, totemsrp_stats_t *stats, int interface_no, void *context, void(*deliver_fn)(void *context, const void *msg, unsigned int msg_len), void(*iface_change_fn)(void *context, const struct totem_ip_address *iface_address), void(*target_set_completed)(void *context))
Create an instance.
Definition: totemudpu.c:797
int totemiba_processor_count_set(void *iba_context, int processor_count)
Definition: totemiba.c:1421
int totemiba_recv_flush(void *iba_context)
Definition: totemiba.c:1433
int totemudp_recv_mcast_empty(void *udp_context)
Definition: totemudp.c:1418
int totemudp_iface_check(void *udp_context)
Definition: totemudp.c:1362
int totemnet_iface_check(void *net_context)
Definition: totemnet.c:408
void totemudpu_net_mtu_adjust(void *udpu_context, struct totem_config *totem_config)
Definition: totemudpu.c:987
int totemudpu_mcast_flush_send(void *udpu_context, const void *msg, unsigned int msg_len)
Definition: totemudpu.c:951
struct transport * transport
Definition: totemnet.c:212
int totemudpu_send_flush(void *udpu_context)
Definition: totemudpu.c:932
int(* recv_flush)(void *transport_context)
Definition: totemnet.c:98
int(* mcast_noflush_send)(void *transport_context, const void *msg, unsigned int msg_len)
Definition: totemnet.c:93
void totemiba_buffer_release(void *ptr)
Definition: totemiba.c:1416
int totemudpu_finalize(void *udpu_context)
Definition: totemudpu.c:433
int totemnet_token_target_set(void *net_context, const struct totem_ip_address *token_target)
Definition: totemnet.c:447
int totemudpu_recv_flush(void *udpu_context)
Definition: totemudpu.c:925
int totemudpu_member_add(void *udpu_context, const struct totem_ip_address *member)
Definition: totemudpu.c:1143
int(* member_remove)(void *transport_context, const struct totem_ip_address *member)
Definition: totemnet.c:130
int totemudpu_iface_get(void *udpu_context, struct totem_ip_address *addr)
Definition: totemudpu.c:1006
void totemudp_buffer_release(void *ptr)
Definition: totemudp.c:1256
int totemudpu_iface_check(void *udpu_context)
Definition: totemudpu.c:977
int totemnet_processor_count_set(void *net_context, int processor_count)
Definition: totemnet.c:339