#include "system.h"
+#include "pidfile.h"
+
#ifndef HAVE_MINGW
/* read_pid
*
* 0 is returned if either there's no pidfile, it's empty
* or no pid can be read.
*/
-pid_t read_pid (char *pidfile)
+pid_t read_pid (const char *pidfile)
{
FILE *f;
long pid;
* table (using /proc) to determine if the process already exists. If
* so the pid is returned, otherwise 0.
*/
-pid_t check_pid (char *pidfile)
+pid_t check_pid (const char *pidfile)
{
pid_t pid = read_pid(pidfile);
* Writes the pid to the specified file. If that fails 0 is
* returned, otherwise the pid.
*/
-pid_t write_pid (char *pidfile)
+pid_t write_pid (const char *pidfile)
{
FILE *f;
int fd;
* Remove the the specified file. The result from unlink(2)
* is returned
*/
-int remove_pid (char *pidfile)
+int remove_pid (const char *pidfile)
{
return unlink (pidfile);
}
* 0 is returned if either there's no pidfile, it's empty
* or no pid can be read.
*/
-pid_t read_pid (char *pidfile);
+extern pid_t read_pid (const char *pidfile);
/* check_pid
*
* table (using /proc) to determine if the process already exists. If
* so 1 is returned, otherwise 0.
*/
-pid_t check_pid (char *pidfile);
+extern pid_t check_pid (const char *pidfile);
/* write_pid
*
* Writes the pid to the specified file. If that fails 0 is
* returned, otherwise the pid.
*/
-pid_t write_pid (char *pidfile);
+extern pid_t write_pid (const char *pidfile);
/* remove_pid
*
* Remove the the specified file. The result from unlink(2)
* is returned
*/
-int remove_pid (char *pidfile);
+extern int remove_pid (const char *pidfile);
#endif
#include "../src/logger.h"
#include "utils.h"
-const char hexadecimals[] = "0123456789ABCDEF";
+static const char hexadecimals[] = "0123456789ABCDEF";
-int charhex2bin(char c) {
+static int charhex2bin(char c) {
if(isdigit(c))
return c - '0';
else
}
#endif
-unsigned int bitfield_to_int(void *bitfield, size_t size) {
+unsigned int bitfield_to_int(const void *bitfield, size_t size) {
unsigned int value = 0;
if(size > sizeof value)
size = sizeof value;
#define sockinprogress(x) ((x) == EINPROGRESS)
#endif
-extern unsigned int bitfield_to_int(void *bitfield, size_t size);
+extern unsigned int bitfield_to_int(const void *bitfield, size_t size);
#endif /* __TINC_UTILS_H__ */
extern char *const xalloc_msg_memory_exhausted;
/* FIXME: describe */
-extern void (*xalloc_fail_func) ();
+extern void (*xalloc_fail_func) (int);
void *xmalloc PARAMS ((size_t n)) __attribute__ ((__malloc__));
void *xmalloc_and_zero PARAMS ((size_t n)) __attribute__ ((__malloc__));
char *const xalloc_msg_memory_exhausted = "Memory exhausted";
/* FIXME: describe */
-void (*xalloc_fail_func) (int) = 0;
+void (*xalloc_fail_func) (int) = NULL;
static void
xalloc_fail (int size)
/* Allocate N bytes of memory dynamically, with error checking. */
void *
-xmalloc (n)
- size_t n;
+xmalloc (size_t n)
{
void *p;
p = malloc (n);
- if (p == 0)
+ if (p == NULL)
xalloc_fail ((int)n);
return p;
}
/* Allocate N bytes of memory dynamically, and set it all to zero. */
void *
-xmalloc_and_zero (n)
- size_t n;
+xmalloc_and_zero (size_t n)
{
void *p;
p = malloc (n);
- if (p == 0)
+ if (p == NULL)
xalloc_fail ((int)n);
memset (p, '\0', n);
return p;
If P is NULL, run xmalloc. */
void *
-xrealloc (p, n)
- void *p;
- size_t n;
+xrealloc (void *p, size_t n)
{
p = realloc (p, n);
- if (p == 0)
+ if (p == NULL)
xalloc_fail (n);
return p;
}
void *p;
p = calloc (n, s);
- if (p == 0)
+ if (p == NULL)
xalloc_fail ();
return p;
}
#include "system.h"
#include "conf.h"
+#include "device.h"
#include "logger.h"
#include "net.h"
#include "route.h"
avl_insert(config_tree, cfg);
}
-config_t *lookup_config(avl_tree_t *config_tree, char *variable) {
+config_t *lookup_config(const avl_tree_t *config_tree, char *variable) {
config_t cfg, *found;
cfg.variable = variable;
return found;
}
-config_t *lookup_config_next(avl_tree_t *config_tree, const config_t *cfg) {
+config_t *lookup_config_next(const avl_tree_t *config_tree, const config_t *cfg) {
avl_node_t *node;
config_t *found;
}
bool get_config_subnet(const config_t *cfg, subnet_t ** result) {
- subnet_t subnet = {0};
+ subnet_t subnet = {NULL};
if(!cfg)
return false;
}
}
-bool read_server_config() {
+bool read_server_config(void) {
char *fname;
bool x;
extern config_t *new_config(void) __attribute__ ((__malloc__));
extern void free_config(config_t *);
extern void config_add(avl_tree_t *, config_t *);
-extern config_t *lookup_config(avl_tree_t *, char *);
-extern config_t *lookup_config_next(avl_tree_t *, const config_t *);
+extern config_t *lookup_config(const avl_tree_t *, char *);
+extern config_t *lookup_config_next(const avl_tree_t *, const config_t *);
extern bool get_config_bool(const config_t *, bool *);
extern bool get_config_int(const config_t *, int *);
extern bool get_config_string(const config_t *, char **);
#define OPTION_CLAMP_MSS 0x0008
typedef struct connection_status_t {
- int pinged:1; /* sent ping */
- int active:1; /* 1 if active.. */
- int connecting:1; /* 1 if we are waiting for a non-blocking connect() to finish */
- int termreq:1; /* the termination of this connection was requested */
- int remove:1; /* Set to 1 if you want this connection removed */
- int timeout:1; /* 1 if gotten timeout */
- int encryptout:1; /* 1 if we can encrypt outgoing traffic */
- int decryptin:1; /* 1 if we have to decrypt incoming traffic */
- int mst:1; /* 1 if this connection is part of a minimum spanning tree */
- int unused:23;
+ unsigned int pinged:1; /* sent ping */
+ unsigned int active:1; /* 1 if active.. */
+ unsigned int connecting:1; /* 1 if we are waiting for a non-blocking connect() to finish */
+ unsigned int termreq:1; /* the termination of this connection was requested */
+ unsigned int remove:1; /* Set to 1 if you want this connection removed */
+ unsigned int timeout:1; /* 1 if gotten timeout */
+ unsigned int encryptout:1; /* 1 if we can encrypt outgoing traffic */
+ unsigned int decryptin:1; /* 1 if we have to decrypt incoming traffic */
+ unsigned int mst:1; /* 1 if this connection is part of a minimum spanning tree */
+ unsigned int unused:23;
} connection_status_t;
#include "edge.h"
#include <w32api/winioctl.h>
#include "conf.h"
+#include "device.h"
#include "logger.h"
#include "net.h"
#include "route.h"
#include "system.h"
+#include "device.h"
#include "logger.h"
#include "net.h"
avl_tree_t *event_tree;
extern time_t now;
-int id;
+static int id;
static int event_compare(const event_t *a, const event_t *b) {
if(a->time > b->time)
#include "connection.h"
#include "device.h"
#include "edge.h"
+#include "graph.h"
#include "logger.h"
#include "netutl.h"
#include "node.h"
Please note that sorting on weight is already done by add_edge().
*/
-void mst_kruskal(void) {
+static void mst_kruskal(void) {
avl_node_t *node, *next;
edge_t *e;
node_t *n;
Running time: O(E)
*/
-void sssp_bfs(void) {
+static void sssp_bfs(void) {
avl_node_t *node, *next, *to;
edge_t *e;
node_t *n;
#define __TINC_GRAPH_H__
extern void graph(void);
-extern void mst_kruskal(void);
-extern void sssp_bfs(void);
extern void dump_graph(void);
#endif /* __TINC_GRAPH_H__ */
#endif
#include "conf.h"
+#include "device.h"
#include "logger.h"
#include "net.h"
#include "route.h"
#include <winioctl.h>
#include "conf.h"
+#include "device.h"
#include "logger.h"
#include "net.h"
#include "route.h"
}
}
- send_key_changed(broadcast, myself);
+ send_key_changed();
keyexpires = now + keylifetime;
}
extern int contradicting_add_edge;
extern int contradicting_del_edge;
+extern volatile bool running;
+
/* Yes, very strange placement indeed, but otherwise the typedefs get all tangled up */
#include "connection.h"
#include "node.h"
extern int setup_listen_socket(const sockaddr_t *);
extern int setup_vpn_in_socket(const sockaddr_t *);
extern void send_packet(const struct node_t *, vpn_packet_t *);
-extern void receive_tcppacket(struct connection_t *, char *, int);
+extern void receive_tcppacket(struct connection_t *, const char *, int);
extern void broadcast_packet(const struct node_t *, vpn_packet_t *);
extern bool setup_network(void);
extern void setup_outgoing_connection(struct outgoing_t *);
extern void flush_queue(struct node_t *);
extern bool read_rsa_public_key(struct connection_t *);
extern void send_mtu_probe(struct node_t *);
-extern void load_all_subnets();
+extern void load_all_subnets(void);
#ifndef HAVE_MINGW
#define closesocket(s) close(s)
receive_packet(n, inpkt);
}
-void receive_tcppacket(connection_t *c, char *buffer, int len) {
+void receive_tcppacket(connection_t *c, const char *buffer, int len) {
vpn_packet_t outpkt;
outpkt.len = len;
return false;
}
-bool read_rsa_private_key(void) {
+static bool read_rsa_private_key(void) {
FILE *fp;
char *fname, *key, *pubkey;
struct stat s;
/*
Configure node_t myself and set up the local sockets (listen only)
*/
-bool setup_myself(void) {
+static bool setup_myself(void) {
config_t *cfg;
subnet_t *subnet;
char *name, *hostname, *mode, *afname, *cipher, *digest;
return true;
}
-void free_outgoing(outgoing_t *outgoing) {
+static void free_outgoing(outgoing_t *outgoing) {
if(outgoing->ai)
freeaddrinfo(outgoing->ai);
}
node_t *lookup_node(char *name) {
- node_t n = {0};
+ node_t n = {NULL};
n.name = name;
}
node_t *lookup_node_udp(const sockaddr_t *sa) {
- node_t n = {0};
+ node_t n = {NULL};
n.address = *sa;
n.name = NULL;
ifdebug(PROTOCOL) logger(LOG_DEBUG, "UDP address of %s set to %s", n->name, n->hostname);
} else {
memset(&n->address, 0, sizeof n->address);
- n->hostname = 0;
+ n->hostname = NULL;
ifdebug(PROTOCOL) logger(LOG_DEBUG, "UDP address of %s cleared", n->name);
}
}
#include "subnet.h"
typedef struct node_status_t {
- int unused_active:1; /* 1 if active (not used for nodes) */
- int validkey:1; /* 1 if we currently have a valid key for him */
- int unused_waitingforkey:1; /* 1 if we already sent out a request */
- int visited:1; /* 1 if this node has been visited by one of the graph algorithms */
- int reachable:1; /* 1 if this node is reachable in the graph */
- int indirect:1; /* 1 if this node is not directly reachable by us */
- int unused:26;
+ unsigned int unused_active:1; /* 1 if active (not used for nodes) */
+ unsigned int validkey:1; /* 1 if we currently have a valid key for him */
+ unsigned int unused_waitingforkey:1; /* 1 if we already sent out a request */
+ unsigned int visited:1; /* 1 if this node has been visited by one of the graph algorithms */
+ unsigned int reachable:1; /* 1 if this node is reachable in the graph */
+ unsigned int indirect:1; /* 1 if this node is not directly reachable by us */
+ unsigned int unused:26;
} node_status_t;
typedef struct node_t {
#include "device.h"
#include "edge.h"
#include "logger.h"
+#include "net.h"
#include "node.h"
#include "pidfile.h"
#include "process.h"
extern char *pidfilename;
extern char **g_argv;
extern bool use_logfile;
-extern volatile bool running;
#ifndef HAVE_MINGW
-sigset_t emptysigset;
+static sigset_t emptysigset;
#endif
static int saved_debug_level = -1;
}
bool seen_request(char *request) {
- past_request_t *new, p = {0};
+ past_request_t *new, p = {NULL};
p.request = request;
extern bool send_del_subnet(struct connection_t *, const struct subnet_t *);
extern bool send_add_edge(struct connection_t *, const struct edge_t *);
extern bool send_del_edge(struct connection_t *, const struct edge_t *);
-extern void send_key_changed();
+extern void send_key_changed(void);
extern bool send_req_key(struct node_t *);
extern bool send_ans_key(struct node_t *);
-extern bool send_tcppacket(struct connection_t *, struct vpn_packet_t *);
+extern bool send_tcppacket(struct connection_t *, const struct vpn_packet_t *);
/* Request handlers */
#include "utils.h"
#include "xalloc.h"
-bool mykeyused = false;
+static bool mykeyused = false;
-void send_key_changed() {
+void send_key_changed(void) {
avl_node_t *node;
connection_t *c;
/* Sending and receiving packets via TCP */
-bool send_tcppacket(connection_t *c, vpn_packet_t *packet) {
+bool send_tcppacket(connection_t *c, const vpn_packet_t *packet) {
/* If there already is a lot of data in the outbuf buffer, discard this packet.
We use a very simple Random Early Drop algorithm. */
char subnetstr[MAX_STRING_SIZE];
char name[MAX_STRING_SIZE];
node_t *owner;
- subnet_t s = {0}, *new, *old;
+ subnet_t s = {NULL}, *new, *old;
if(sscanf(c->buffer, "%*d %*x " MAX_STRING " " MAX_STRING, name, subnetstr) != 2) {
logger(LOG_ERR, "Got bad %s from %s (%s)", "ADD_SUBNET", c->name,
char subnetstr[MAX_STRING_SIZE];
char name[MAX_STRING_SIZE];
node_t *owner;
- subnet_t s = {0}, *find;
+ subnet_t s = {NULL}, *find;
if(sscanf(c->buffer, "%*d %*x " MAX_STRING " " MAX_STRING, name, subnetstr) != 2) {
logger(LOG_ERR, "Got bad %s from %s (%s)", "DEL_SUBNET", c->name,
#include <netpacket/packet.h>
#include "conf.h"
+#include "device.h"
#include "net.h"
#include "logger.h"
#include "utils.h"
#include <net/if_tun.h>
#include "conf.h"
+#include "device.h"
#include "logger.h"
#include "net.h"
#include "utils.h"
static bool cache_mac_valid[2];
static int cache_mac_slot;
-void subnet_cache_flush() {
+void subnet_cache_flush(void) {
cache_ipv4_valid[0] = cache_ipv4_valid[1] = false;
cache_ipv6_valid[0] = cache_ipv6_valid[1] = false;
cache_mac_valid[0] = cache_mac_valid[1] = false;
void subnet_update(node_t *owner, subnet_t *subnet, bool up) {
avl_node_t *node;
int i;
- char *envp[9] = {0};
+ char *envp[9] = {NULL};
char netstr[MAXNETSTR];
char *name, *address, *port;
char empty[] = "";
#include <sys/un.h>
#include "conf.h"
+#include "device.h"
#include "net.h"
#include "logger.h"
#include "utils.h"
#include <libvdeplug_dyn.h>
#include "conf.h"
+#include "device.h"
#include "net.h"
#include "logger.h"
#include "utils.h"