mirror of
https://github.com/neocturne/fastd.git
synced 2025-05-14 12:25:07 +02:00
Reorganized type definitions
This commit is contained in:
parent
d4686dd797
commit
1d18f97255
10 changed files with 166 additions and 121 deletions
11
src/fastd.c
11
src/fastd.c
|
@ -317,7 +317,8 @@ static void configure(fastd_context *ctx, fastd_config *conf, int argc, char *ar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conf->bind_addr_in.sin_family == AF_UNSPEC && conf->bind_addr_in6.sin6_family == AF_UNSPEC) {
|
if (conf->n_floating && conf->bind_addr_in.sin_family == AF_UNSPEC
|
||||||
|
&& conf->bind_addr_in6.sin6_family == AF_UNSPEC) {
|
||||||
conf->bind_addr_in.sin_family = AF_INET;
|
conf->bind_addr_in.sin_family = AF_INET;
|
||||||
conf->bind_addr_in6.sin6_family = AF_INET6;
|
conf->bind_addr_in6.sin6_family = AF_INET6;
|
||||||
}
|
}
|
||||||
|
@ -347,6 +348,10 @@ static void init_peers(fastd_context *ctx) {
|
||||||
fastd_peer_add(ctx, peer_conf);
|
fastd_peer_add(ctx, peer_conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void update_time(fastd_context *ctx) {
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &ctx->now);
|
||||||
|
}
|
||||||
|
|
||||||
static void handle_tasks(fastd_context *ctx) {
|
static void handle_tasks(fastd_context *ctx) {
|
||||||
fastd_task *task;
|
fastd_task *task;
|
||||||
while ((task = fastd_task_get(ctx)) != NULL) {
|
while ((task = fastd_task_get(ctx)) != NULL) {
|
||||||
|
@ -565,6 +570,8 @@ static void handle_input(fastd_context *ctx) {
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
exit_errno(ctx, "poll");
|
exit_errno(ctx, "poll");
|
||||||
|
|
||||||
|
update_time(ctx);
|
||||||
|
|
||||||
if (fds[0].revents & POLLIN)
|
if (fds[0].revents & POLLIN)
|
||||||
handle_tun(ctx);
|
handle_tun(ctx);
|
||||||
if (fds[1].revents & POLLIN)
|
if (fds[1].revents & POLLIN)
|
||||||
|
@ -582,6 +589,8 @@ int main(int argc, char *argv[]) {
|
||||||
configure(&ctx, &conf, argc, argv);
|
configure(&ctx, &conf, argc, argv);
|
||||||
ctx.conf = &conf;
|
ctx.conf = &conf;
|
||||||
|
|
||||||
|
update_time(&ctx);
|
||||||
|
|
||||||
init_peers(&ctx);
|
init_peers(&ctx);
|
||||||
|
|
||||||
init_tuntap(&ctx);
|
init_tuntap(&ctx);
|
||||||
|
|
72
src/fastd.h
72
src/fastd.h
|
@ -28,6 +28,7 @@
|
||||||
#ifndef _FASTD_FASTD_H_
|
#ifndef _FASTD_FASTD_H_
|
||||||
#define _FASTD_FASTD_H_
|
#define _FASTD_FASTD_H_
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -40,77 +41,18 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
|
||||||
typedef enum _fastd_loglevel {
|
struct _fastd_buffer {
|
||||||
LOG_FATAL = 0,
|
|
||||||
LOG_ERROR,
|
|
||||||
LOG_WARN,
|
|
||||||
LOG_INFO,
|
|
||||||
LOG_DEBUG,
|
|
||||||
} fastd_loglevel;
|
|
||||||
|
|
||||||
typedef enum _fastd_packet_type {
|
|
||||||
PACKET_DATA = 0,
|
|
||||||
PACKET_HANDSHAKE,
|
|
||||||
} fastd_packet_type;
|
|
||||||
|
|
||||||
typedef struct _fastd_buffer {
|
|
||||||
void *base;
|
void *base;
|
||||||
size_t base_len;
|
size_t base_len;
|
||||||
|
|
||||||
void *data;
|
void *data;
|
||||||
size_t len;
|
size_t len;
|
||||||
} fastd_buffer;
|
};
|
||||||
|
|
||||||
typedef enum _fastd_protocol {
|
struct _fastd_method {
|
||||||
PROTOCOL_ETHERNET,
|
|
||||||
PROTOCOL_IP,
|
|
||||||
} fastd_protocol;
|
|
||||||
|
|
||||||
typedef union _fastd_peer_address {
|
|
||||||
struct sockaddr sa;
|
|
||||||
struct sockaddr_in in;
|
|
||||||
struct sockaddr_in6 in6;
|
|
||||||
} fastd_peer_address;
|
|
||||||
|
|
||||||
typedef struct _fastd_peer_config {
|
|
||||||
struct _fastd_peer_config *next;
|
|
||||||
|
|
||||||
fastd_peer_address address;
|
|
||||||
} fastd_peer_config;
|
|
||||||
|
|
||||||
typedef enum _fastd_peer_state {
|
|
||||||
STATE_WAIT,
|
|
||||||
STATE_ESTABLISHED,
|
|
||||||
STATE_TEMP,
|
|
||||||
STATE_TEMP_ESTABLISHED,
|
|
||||||
} fastd_peer_state;
|
|
||||||
|
|
||||||
typedef struct _fastd_eth_addr {
|
|
||||||
uint8_t data[ETH_ALEN];
|
|
||||||
} fastd_eth_addr;
|
|
||||||
|
|
||||||
typedef struct _fastd_peer {
|
|
||||||
struct _fastd_peer *next;
|
|
||||||
|
|
||||||
const fastd_peer_config *config;
|
|
||||||
|
|
||||||
fastd_peer_address address;
|
|
||||||
|
|
||||||
fastd_peer_state state;
|
|
||||||
uint8_t last_req_id;
|
|
||||||
} fastd_peer;
|
|
||||||
|
|
||||||
typedef struct _fastd_peer_eth_addr {
|
|
||||||
fastd_eth_addr addr;
|
|
||||||
fastd_peer *peer;
|
|
||||||
} fastd_peer_eth_addr;
|
|
||||||
|
|
||||||
typedef struct _fastd_config fastd_config;
|
|
||||||
typedef struct _fastd_context fastd_context;
|
|
||||||
|
|
||||||
typedef struct _fastd_method {
|
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
bool (*check_config)(fastd_context *ctx, const fastd_config *conf);
|
bool (*check_config)(fastd_context *ctx, const fastd_config *conf);
|
||||||
|
@ -121,7 +63,7 @@ typedef struct _fastd_method {
|
||||||
|
|
||||||
void (*handle_recv)(fastd_context *ctx, fastd_peer *peer, fastd_buffer buffer);
|
void (*handle_recv)(fastd_context *ctx, fastd_peer *peer, fastd_buffer buffer);
|
||||||
void (*send)(fastd_context *ctx, fastd_peer *peer, fastd_buffer buffer);
|
void (*send)(fastd_context *ctx, fastd_peer *peer, fastd_buffer buffer);
|
||||||
} fastd_method;
|
};
|
||||||
|
|
||||||
struct _fastd_config {
|
struct _fastd_config {
|
||||||
fastd_loglevel loglevel;
|
fastd_loglevel loglevel;
|
||||||
|
@ -143,6 +85,8 @@ struct _fastd_config {
|
||||||
struct _fastd_context {
|
struct _fastd_context {
|
||||||
const fastd_config *conf;
|
const fastd_config *conf;
|
||||||
|
|
||||||
|
struct timespec now;
|
||||||
|
|
||||||
fastd_peer *peers;
|
fastd_peer *peers;
|
||||||
fastd_queue task_queue;
|
fastd_queue task_queue;
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
#include "handshake.h"
|
#include "handshake.h"
|
||||||
#include "packet.h"
|
#include "packet.h"
|
||||||
|
#include "peer.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
56
src/packet.h
56
src/packet.h
|
@ -32,40 +32,40 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum _fastd_packet_type {
|
||||||
|
PACKET_UNKNOWN = 0,
|
||||||
|
PACKET_HANDSHAKE,
|
||||||
|
PACKET_DATA,
|
||||||
|
} fastd_packet_type;
|
||||||
|
|
||||||
typedef enum _fastd_reply_code {
|
typedef enum _fastd_reply_code {
|
||||||
REPLY_SUCCESS = 0,
|
REPLY_SUCCESS = 0,
|
||||||
} fastd_reply_code;
|
} fastd_reply_code;
|
||||||
|
|
||||||
typedef struct __attribute__ ((__packed__)) _fastd_packet_any {
|
|
||||||
#if defined(__LITTLE_ENDIAN_BITFIELD)
|
#if defined(__LITTLE_ENDIAN_BITFIELD)
|
||||||
unsigned req_id : 6;
|
#define FASTD_PACKET_COMMON \
|
||||||
unsigned cp : 1;
|
unsigned req_id : 6; \
|
||||||
unsigned reply : 1;
|
unsigned cp : 1; \
|
||||||
|
unsigned reply : 1; \
|
||||||
|
uint8_t rsv
|
||||||
#elif defined (__BIG_ENDIAN_BITFIELD)
|
#elif defined (__BIG_ENDIAN_BITFIELD)
|
||||||
unsigned reply : 1;
|
#define FASTD_PACKET_COMMON \
|
||||||
unsigned cp : 1;
|
unsigned reply : 1; \
|
||||||
unsigned req_id : 6;
|
unsigned cp : 1; \
|
||||||
|
unsigned req_id : 6; \
|
||||||
|
uint8_t rsv
|
||||||
#else
|
#else
|
||||||
#error "Bitfield endianess not defined."
|
#error "Bitfield endianess not defined."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t rsv;
|
|
||||||
|
typedef struct __attribute__ ((__packed__)) _fastd_packet_any {
|
||||||
|
FASTD_PACKET_COMMON;
|
||||||
} fastd_packet_any;
|
} fastd_packet_any;
|
||||||
|
|
||||||
typedef struct __attribute__ ((__packed__)) _fastd_packet_request {
|
typedef struct __attribute__ ((__packed__)) _fastd_packet_request {
|
||||||
#if defined(__LITTLE_ENDIAN_BITFIELD)
|
FASTD_PACKET_COMMON;
|
||||||
unsigned req_id : 6;
|
|
||||||
unsigned cp : 1;
|
|
||||||
unsigned reply : 1;
|
|
||||||
#elif defined (__BIG_ENDIAN_BITFIELD)
|
|
||||||
unsigned reply : 1;
|
|
||||||
unsigned cp : 1;
|
|
||||||
unsigned req_id : 6;
|
|
||||||
#else
|
|
||||||
#error "Bitfield endianess not defined."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint8_t rsv;
|
|
||||||
uint8_t flags;
|
uint8_t flags;
|
||||||
uint8_t proto;
|
uint8_t proto;
|
||||||
uint8_t method_len;
|
uint8_t method_len;
|
||||||
|
@ -73,19 +73,7 @@ typedef struct __attribute__ ((__packed__)) _fastd_packet_request {
|
||||||
} fastd_packet_request;
|
} fastd_packet_request;
|
||||||
|
|
||||||
typedef struct __attribute__ ((__packed__)) _fastd_packet_reply {
|
typedef struct __attribute__ ((__packed__)) _fastd_packet_reply {
|
||||||
#if defined(__LITTLE_ENDIAN_BITFIELD)
|
FASTD_PACKET_COMMON;
|
||||||
unsigned req_id : 6;
|
|
||||||
unsigned cp : 1;
|
|
||||||
unsigned reply : 1;
|
|
||||||
#elif defined (__BIG_ENDIAN_BITFIELD)
|
|
||||||
unsigned reply : 1;
|
|
||||||
unsigned cp : 1;
|
|
||||||
unsigned req_id : 6;
|
|
||||||
#else
|
|
||||||
#error "Bitfield endianess not defined."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint8_t rsv;
|
|
||||||
uint8_t reply_code;
|
uint8_t reply_code;
|
||||||
} fastd_packet_reply;
|
} fastd_packet_reply;
|
||||||
|
|
||||||
|
|
33
src/peer.h
33
src/peer.h
|
@ -31,6 +31,39 @@
|
||||||
#include "fastd.h"
|
#include "fastd.h"
|
||||||
|
|
||||||
|
|
||||||
|
union _fastd_peer_address {
|
||||||
|
struct sockaddr sa;
|
||||||
|
struct sockaddr_in in;
|
||||||
|
struct sockaddr_in6 in6;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _fastd_peer {
|
||||||
|
fastd_peer *next;
|
||||||
|
|
||||||
|
const fastd_peer_config *config;
|
||||||
|
|
||||||
|
fastd_peer_address address;
|
||||||
|
|
||||||
|
fastd_peer_state state;
|
||||||
|
uint8_t last_req_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _fastd_peer_config {
|
||||||
|
fastd_peer_config *next;
|
||||||
|
|
||||||
|
fastd_peer_address address;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _fastd_eth_addr {
|
||||||
|
uint8_t data[ETH_ALEN];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _fastd_peer_eth_addr {
|
||||||
|
fastd_eth_addr addr;
|
||||||
|
fastd_peer *peer;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const fastd_eth_addr* fastd_get_source_address(const fastd_context *ctx, fastd_buffer buffer);
|
const fastd_eth_addr* fastd_get_source_address(const fastd_context *ctx, fastd_buffer buffer);
|
||||||
const fastd_eth_addr* fastd_get_dest_address(const fastd_context *ctx, fastd_buffer buffer);
|
const fastd_eth_addr* fastd_get_dest_address(const fastd_context *ctx, fastd_buffer buffer);
|
||||||
|
|
||||||
|
|
20
src/queue.c
20
src/queue.c
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
#include "fastd.h"
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
@ -35,14 +36,12 @@ static inline int after(const struct timespec *tp1, const struct timespec *tp2)
|
||||||
(tp1->tv_sec == tp2->tv_sec && tp1->tv_nsec > tp2->tv_nsec));
|
(tp1->tv_sec == tp2->tv_sec && tp1->tv_nsec > tp2->tv_nsec));
|
||||||
}
|
}
|
||||||
|
|
||||||
void fastd_queue_put(fastd_queue *queue, void *data, int timeout) {
|
void fastd_queue_put(fastd_context *ctx, fastd_queue *queue, void *data, int timeout) {
|
||||||
fastd_queue_entry *entry = malloc(sizeof(fastd_queue_entry));
|
fastd_queue_entry *entry = malloc(sizeof(fastd_queue_entry));
|
||||||
entry->data = data;
|
entry->data = data;
|
||||||
entry->timeout = (struct timespec){ 0, 0 };
|
entry->timeout = ctx->now;
|
||||||
|
|
||||||
if (timeout) {
|
if (timeout) {
|
||||||
clock_gettime(CLOCK_MONOTONIC, &entry->timeout);
|
|
||||||
|
|
||||||
entry->timeout.tv_sec += timeout/1000;
|
entry->timeout.tv_sec += timeout/1000;
|
||||||
entry->timeout.tv_nsec += (timeout%1000)*1e6;
|
entry->timeout.tv_nsec += (timeout%1000)*1e6;
|
||||||
|
|
||||||
|
@ -62,8 +61,8 @@ void fastd_queue_put(fastd_queue *queue, void *data, int timeout) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void* fastd_queue_get(fastd_queue *queue) {
|
void* fastd_queue_get(fastd_context *ctx, fastd_queue *queue) {
|
||||||
if (!queue->head || fastd_queue_timeout(queue) > 0)
|
if (!queue->head || fastd_queue_timeout(ctx, queue) > 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
fastd_queue_entry *entry = queue->head;
|
fastd_queue_entry *entry = queue->head;
|
||||||
|
@ -74,21 +73,18 @@ void* fastd_queue_get(fastd_queue *queue) {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
int fastd_queue_timeout(fastd_queue *queue) {
|
int fastd_queue_timeout(fastd_context *ctx, fastd_queue *queue) {
|
||||||
if (!queue->head)
|
if (!queue->head)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
struct timespec tp;
|
int64_t diff_msec = ((int64_t)(queue->head->timeout.tv_sec-ctx->now.tv_sec))*1000 + (queue->head->timeout.tv_nsec-ctx->now.tv_nsec)/1e6;
|
||||||
clock_gettime(CLOCK_MONOTONIC, &tp);
|
|
||||||
|
|
||||||
int64_t diff_msec = ((int64_t)(queue->head->timeout.tv_sec-tp.tv_sec))*1000 + (queue->head->timeout.tv_nsec-tp.tv_nsec)/1e6;
|
|
||||||
if (diff_msec < 0)
|
if (diff_msec < 0)
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
return (int)diff_msec;
|
return (int)diff_msec;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fastd_queue_filter(fastd_queue *queue, bool (*pred)(void*, void*), void *extra) {
|
void fastd_queue_filter(fastd_context *ctx, fastd_queue *queue, bool (*pred)(void*, void*), void *extra) {
|
||||||
fastd_queue_entry **entry;
|
fastd_queue_entry **entry;
|
||||||
for (entry = &queue->head; *entry; ) {
|
for (entry = &queue->head; *entry; ) {
|
||||||
if (!pred((*entry)->data, extra)) {
|
if (!pred((*entry)->data, extra)) {
|
||||||
|
|
10
src/queue.h
10
src/queue.h
|
@ -28,6 +28,8 @@
|
||||||
#ifndef _FASTD_QUEUE_H_
|
#ifndef _FASTD_QUEUE_H_
|
||||||
#define _FASTD_QUEUE_H_
|
#define _FASTD_QUEUE_H_
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
@ -46,9 +48,9 @@ typedef struct _fastd_queue {
|
||||||
} fastd_queue;
|
} fastd_queue;
|
||||||
|
|
||||||
|
|
||||||
void fastd_queue_put(fastd_queue *queue, void *data, int timeout);
|
void fastd_queue_put(fastd_context *ctx, fastd_queue *queue, void *data, int timeout);
|
||||||
void* fastd_queue_get(fastd_queue *queue);
|
void* fastd_queue_get(fastd_context *ctx, fastd_queue *queue);
|
||||||
int fastd_queue_timeout(fastd_queue *queue);
|
int fastd_queue_timeout(fastd_context *ctx, fastd_queue *queue);
|
||||||
void fastd_queue_filter(fastd_queue *queue, bool (*pred)(void*, void*), void *extra);
|
void fastd_queue_filter(fastd_context *ctx, fastd_queue *queue, bool (*pred)(void*, void*), void *extra);
|
||||||
|
|
||||||
#endif /* _FASTD_QUEUE_H_ */
|
#endif /* _FASTD_QUEUE_H_ */
|
||||||
|
|
10
src/task.c
10
src/task.c
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
|
|
||||||
fastd_task* fastd_task_get(fastd_context *ctx) {
|
fastd_task* fastd_task_get(fastd_context *ctx) {
|
||||||
return fastd_queue_get(&ctx->task_queue);
|
return fastd_queue_get(ctx, &ctx->task_queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fastd_task_put_send_type(fastd_context *ctx, fastd_peer *peer, uint8_t packet_type, fastd_buffer buffer) {
|
static void fastd_task_put_send_type(fastd_context *ctx, fastd_peer *peer, uint8_t packet_type, fastd_buffer buffer) {
|
||||||
|
@ -41,7 +41,7 @@ static void fastd_task_put_send_type(fastd_context *ctx, fastd_peer *peer, uint8
|
||||||
task->packet_type = packet_type;
|
task->packet_type = packet_type;
|
||||||
task->buffer = buffer;
|
task->buffer = buffer;
|
||||||
|
|
||||||
fastd_queue_put(&ctx->task_queue, task, 0);
|
fastd_queue_put(ctx, &ctx->task_queue, task, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fastd_task_put_send_handshake(fastd_context *ctx, fastd_peer *peer, fastd_buffer buffer) {
|
void fastd_task_put_send_handshake(fastd_context *ctx, fastd_peer *peer, fastd_buffer buffer) {
|
||||||
|
@ -59,7 +59,7 @@ void fastd_task_put_handle_recv(fastd_context *ctx, fastd_peer *peer, fastd_buff
|
||||||
task->peer = peer;
|
task->peer = peer;
|
||||||
task->buffer = buffer;
|
task->buffer = buffer;
|
||||||
|
|
||||||
fastd_queue_put(&ctx->task_queue, task, 0);
|
fastd_queue_put(ctx, &ctx->task_queue, task, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fastd_task_schedule_handshake(fastd_context *ctx, fastd_peer *peer, int timeout) {
|
void fastd_task_schedule_handshake(fastd_context *ctx, fastd_peer *peer, int timeout) {
|
||||||
|
@ -68,7 +68,7 @@ void fastd_task_schedule_handshake(fastd_context *ctx, fastd_peer *peer, int tim
|
||||||
task->type = TASK_HANDSHAKE;
|
task->type = TASK_HANDSHAKE;
|
||||||
task->peer = peer;
|
task->peer = peer;
|
||||||
|
|
||||||
fastd_queue_put(&ctx->task_queue, task, timeout);
|
fastd_queue_put(ctx, &ctx->task_queue, task, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool delete_task(void *data, void *extra) {
|
static bool delete_task(void *data, void *extra) {
|
||||||
|
@ -97,5 +97,5 @@ static bool delete_task(void *data, void *extra) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void fastd_task_delete_peer(fastd_context *ctx, fastd_peer *peer) {
|
void fastd_task_delete_peer(fastd_context *ctx, fastd_peer *peer) {
|
||||||
fastd_queue_filter(&ctx->task_queue, delete_task, peer);
|
fastd_queue_filter(ctx, &ctx->task_queue, delete_task, peer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#define _FASTD_TASK_H_
|
#define _FASTD_TASK_H_
|
||||||
|
|
||||||
#include "fastd.h"
|
#include "fastd.h"
|
||||||
|
#include "packet.h"
|
||||||
|
|
||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
|
|
||||||
|
@ -73,7 +74,7 @@ typedef union _fastd_task {
|
||||||
|
|
||||||
fastd_task* fastd_task_get(fastd_context *ctx);
|
fastd_task* fastd_task_get(fastd_context *ctx);
|
||||||
static inline int fastd_task_timeout(fastd_context *ctx) {
|
static inline int fastd_task_timeout(fastd_context *ctx) {
|
||||||
return fastd_queue_timeout(&ctx->task_queue);
|
return fastd_queue_timeout(ctx, &ctx->task_queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fastd_task_put_send_handshake(fastd_context *ctx, fastd_peer *peer, fastd_buffer buffer);
|
void fastd_task_put_send_handshake(fastd_context *ctx, fastd_peer *peer, fastd_buffer buffer);
|
||||||
|
|
71
src/types.h
Normal file
71
src/types.h
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2012, Matthias Schiffer <mschiffer@universe-factory.net>
|
||||||
|
Partly based on QuickTun Copyright (c) 2010, Ivo Smits <Ivo@UCIS.nl>.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
types.h
|
||||||
|
|
||||||
|
Basic enums and typedefs for common types
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _FASTD_TYPES_H_
|
||||||
|
#define _FASTD_TYPES_H_
|
||||||
|
|
||||||
|
typedef enum _fastd_loglevel {
|
||||||
|
LOG_FATAL = 0,
|
||||||
|
LOG_ERROR,
|
||||||
|
LOG_WARN,
|
||||||
|
LOG_INFO,
|
||||||
|
LOG_DEBUG,
|
||||||
|
} fastd_loglevel;
|
||||||
|
|
||||||
|
typedef enum _fastd_protocol {
|
||||||
|
PROTOCOL_ETHERNET,
|
||||||
|
PROTOCOL_IP,
|
||||||
|
} fastd_protocol;
|
||||||
|
|
||||||
|
typedef enum _fastd_peer_state {
|
||||||
|
STATE_WAIT,
|
||||||
|
STATE_ESTABLISHED,
|
||||||
|
STATE_TEMP,
|
||||||
|
STATE_TEMP_ESTABLISHED,
|
||||||
|
} fastd_peer_state;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _fastd_buffer fastd_buffer;
|
||||||
|
|
||||||
|
typedef union _fastd_peer_address fastd_peer_address;
|
||||||
|
typedef struct _fastd_peer_config fastd_peer_config;
|
||||||
|
typedef struct _fastd_eth_addr fastd_eth_addr;
|
||||||
|
typedef struct _fastd_peer fastd_peer;
|
||||||
|
typedef struct _fastd_peer_eth_addr fastd_peer_eth_addr;
|
||||||
|
|
||||||
|
typedef struct _fastd_config fastd_config;
|
||||||
|
typedef struct _fastd_context fastd_context;
|
||||||
|
|
||||||
|
typedef struct _fastd_method fastd_method;
|
||||||
|
|
||||||
|
#endif /* _FASTD_TYPES_H_ */
|
Loading…
Add table
Reference in a new issue