-
Notifications
You must be signed in to change notification settings - Fork 30
/
internals.h
95 lines (83 loc) · 2.93 KB
/
internals.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
* Copyright (C) 2010-2012 Red Hat, Inc. All rights reserved.
*
* Authors: Fabio M. Di Nitto <fabbione@kronosnet.org>
* Federico Simoncelli <fsimon@kronosnet.org>
*
* This software licensed under GPL-2.0+, LGPL-2.0+
*/
#ifndef __INTERNALS_H__
#define __INTERNALS_H__
/*
* NOTE: you shouldn't need to include this header normally
*/
#include "libknet.h"
#define KNET_DATABUFSIZE 131072 /* 128k */
#define KNET_DATABUFSIZE_CRYPT KNET_DATABUFSIZE * 2
#define timespec_diff(start, end, diff) \
do { \
if (end.tv_sec > start.tv_sec) \
*(diff) = ((end.tv_sec - start.tv_sec) * 1000000000llu) \
+ end.tv_nsec - start.tv_nsec; \
else \
*(diff) = end.tv_nsec - start.tv_nsec; \
} while (0);
struct knet_listener {
int sock;
struct sockaddr_storage address;
struct knet_listener *next;
};
struct knet_handle {
uint16_t node_id;
unsigned int enabled:1;
int sockfd;
int logfd;
uint8_t log_levels[KNET_MAX_SUBSYSTEMS];
int hostpipefd[2];
int dstpipefd[2];
int tap_to_links_epollfd;
int recv_from_links_epollfd;
int dst_link_handler_epollfd;
struct knet_host *host_head;
struct knet_host *host_tail;
struct knet_host *host_index[KNET_MAX_HOST];
struct knet_listener *listener_head;
struct knet_frame *tap_to_links_buf;
struct knet_frame *recv_from_links_buf;
struct knet_frame *pingbuf;
pthread_t tap_to_links_thread;
pthread_t recv_from_links_thread;
pthread_t heartbt_thread;
pthread_t dst_link_handler_thread;
pthread_rwlock_t list_rwlock;
pthread_rwlock_t host_rwlock;
pthread_mutex_t host_mutex;
pthread_cond_t host_cond;
struct crypto_instance *crypto_instance;
unsigned char *tap_to_links_buf_crypt;
unsigned char *recv_from_links_buf_crypt;
unsigned char *pingbuf_crypt;
seq_num_t bcast_seq_num_tx;
uint8_t dst_host_filter;
int (*dst_host_filter_fn) (
const unsigned char *outdata,
ssize_t outdata_len,
uint16_t src_node_id,
uint16_t *dst_host_ids,
size_t *dst_host_ids_entries);
};
int _fdset_cloexec(int fd);
int _fdset_nonblock(int fd);
int _dst_cache_update(knet_handle_t knet_h, uint16_t node_id);
int _send_host_info(knet_handle_t knet_h, const void *data, const size_t datalen);
int _should_deliver(struct knet_host *host, int bcast, seq_num_t seq_num);
void _has_been_delivered(struct knet_host *host, int bcast, seq_num_t seq_num);
int _listener_add(knet_handle_t knet_h, struct knet_link *lnk);
int _listener_remove(knet_handle_t knet_h, struct knet_link *lnk);
void log_msg(knet_handle_t knet_h, uint8_t subsystem, uint8_t msglevel,
const char *fmt, ...) __attribute__((format(printf, 4, 5)));;
#define log_err(knet_h, subsys, fmt, args...) log_msg(knet_h, subsys, KNET_LOG_ERR, fmt, ##args)
#define log_warn(knet_h, subsys, fmt, args...) log_msg(knet_h, subsys, KNET_LOG_WARN, fmt, ##args)
#define log_info(knet_h, subsys, fmt, args...) log_msg(knet_h, subsys, KNET_LOG_INFO, fmt, ##args)
#define log_debug(knet_h, subsys, fmt, args...) log_msg(knet_h, subsys, KNET_LOG_DEBUG, fmt, ##args)
#endif