summaryrefslogtreecommitdiffstats
path: root/src/fastd.h
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2014-08-24 01:00:45 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2014-08-24 01:00:45 +0200
commita04bcf247f4be7e3da4fe3895200f0b9709fc0bb (patch)
tree5e749b81799bb82a751ed632d91b801abe624008 /src/fastd.h
parentad4999488eadac3a10de99caf50b732af8b771b9 (diff)
downloadfastd-a04bcf247f4be7e3da4fe3895200f0b9709fc0bb.tar
fastd-a04bcf247f4be7e3da4fe3895200f0b9709fc0bb.zip
Merge peer config into peer structure
With this refactoring, the structure fastd_peer_config_t is merged into fastd_peer_t, and fastd_remote_config_t into fastd_remote_t. This also means we now create peers directly when reading their configurations, which significantly simplifies the whole reload process, and prepares for some future optimizations like a key hash table. Note: This commit is too big, but I couldn't come up with a nice way to split it into smaller pieces...
Diffstat (limited to 'src/fastd.h')
-rw-r--r--src/fastd.h39
1 files changed, 20 insertions, 19 deletions
diff --git a/src/fastd.h b/src/fastd.h
index 9b1dc29..ea30045 100644
--- a/src/fastd.h
+++ b/src/fastd.h
@@ -68,20 +68,7 @@ struct fastd_protocol {
const char *name;
/** Performs one-time initialization tasks for the protocol */
- fastd_protocol_config_t* (*init)(void);
-
- /** Does some basic checks for the validity of a peer configuration */
- void (*peer_verify)(fastd_peer_config_t *peer_conf);
-
- /** Initializes protocol-specific parts of a peer configuration */
- void (*peer_configure)(fastd_peer_config_t *peer_conf);
-
- /** Checks if a peer configuration is valid and a connection may be established */
- bool (*peer_check)(fastd_peer_config_t *peer_conf);
-
- /** Checks if a dynamic peer is valid and a connection may be established */
- bool (*peer_check_dynamic)(fastd_peer_t *peer);
-
+ fastd_protocol_config_t * (*init)(void);
/** Sends a handshake to the given peer */
void (*handshake_init)(fastd_socket_t *sock, const fastd_peer_address_t *local_addr, const fastd_peer_address_t *remote_addr, fastd_peer_t *peer);
@@ -101,16 +88,27 @@ struct fastd_protocol {
/** Sends a payload data packet to the given peer */
void (*send)(fastd_peer_t *peer, fastd_buffer_t buffer);
+
/** Initializes the protocol state for a peer */
void (*init_peer_state)(fastd_peer_t *peer);
/** Resets the protocol state for a peer (resets active sessions etc.) */
void (*reset_peer_state)(fastd_peer_t *peer);
-
/** Frees the protocol state for a peer */
void (*free_peer_state)(fastd_peer_t *peer);
+
+ /** Initializes protocol-specific parts of a peer configuration */
+ fastd_protocol_key_t * (*read_key)(const char *key);
+
+ /** Checks a peer after reading its configuration */
+ bool (*check_peer)(const fastd_peer_t *peer);
+
+ /** Searches a peer identified by a specific key */
+ fastd_peer_t * (*find_peer)(const fastd_protocol_key_t *key);
+
+
/** Generates a new keypair and outputs it */
void (*generate_key)(void);
@@ -206,8 +204,6 @@ struct fastd_config {
fastd_peer_group_t *peer_group; /**< The root peer group configuration */
- bool has_floating; /**< Specifies if any of the configured peers have floating remotes */
-
fastd_protocol_config_t *protocol_config; /**< The protocol-specific configuration */
fastd_shell_command_t on_pre_up; /**< The command to execute before the initialization of the tunnel interface */
@@ -241,8 +237,6 @@ struct fastd_context {
struct timespec now; /**< The current monotonous timestamp */
- fastd_peer_config_t *peer_configs; /**< The configured peers */
-
uint64_t next_peer_id; /**< An monotonously increasing ID peers are identified with in some components */
VECTOR(fastd_peer_t*) peers; /**< The currectly active peers */
@@ -256,6 +250,8 @@ struct fastd_context {
VECTOR(struct pollfd) pollfds; /**< The vector of pollfds for all file descriptors */
#endif
+ bool has_floating; /**< Specifies if any of the configured peers have floating remotes */
+
uint32_t peer_addr_ht_seed; /**< The hash seed used for peer_addr_ht */
VECTOR(fastd_peer_t*) *peer_addr_ht; /**< An array of hash buckets for the peer hash table */
@@ -425,6 +421,11 @@ static inline fastd_string_stack_t* fastd_string_stack_push(fastd_string_stack_t
return ret;
}
+/** Gets the head of string stack (or NULL if the stack is NULL) */
+static inline const char * fastd_string_stack_get(const fastd_string_stack_t *stack) {
+ return stack ? stack->str : NULL;
+}
+
/** Frees a whole string stack */
static inline void fastd_string_stack_free(fastd_string_stack_t *str) {
while (str) {