83 lines
3.1 KiB
C
83 lines
3.1 KiB
C
/*
|
|
Copyright (c) 2013, Matthias Schiffer <mschiffer@universe-factory.net>
|
|
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.
|
|
*/
|
|
|
|
|
|
#ifndef _GMRF_GMRF_H_
|
|
#define _GMRF_GMRF_H_
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
#include <syslog.h>
|
|
|
|
|
|
typedef struct gmrf gmrf_t;
|
|
typedef struct gmrf_context gmrf_context_t;
|
|
typedef struct gmrf_iface gmrf_iface_t;
|
|
|
|
|
|
#define GMRF_ADDR_LEN 8
|
|
|
|
typedef struct gmrf_addr {
|
|
uint8_t d[GMRF_ADDR_LEN];
|
|
} gmrf_addr_t;
|
|
|
|
static const gmrf_addr_t gmrf_addr_unspec = {};
|
|
|
|
|
|
typedef uint64_t gmrf_time_t;
|
|
|
|
static const gmrf_time_t gmrf_time_unspec = UINT64_MAX;
|
|
|
|
|
|
static inline bool gmrf_addr_equal(const gmrf_addr_t *addr1, const gmrf_addr_t *addr2) {
|
|
return (memcmp(addr1->d, addr2->d, GMRF_ADDR_LEN) == 0);
|
|
}
|
|
|
|
gmrf_time_t gmrf_now(gmrf_t *gmrf);
|
|
void gmrf_random_bytes(gmrf_t *gmrf, void *buffer, size_t len);
|
|
void gmrf_logf(gmrf_t *gmrf, int priority, const char *format, ...);
|
|
|
|
gmrf_addr_t gmrf_iface_get_addr(gmrf_t *gmrf, gmrf_iface_t *iface);
|
|
const char* gmrf_iface_get_name(gmrf_t *gmrf, gmrf_iface_t *iface);
|
|
size_t gmrf_iface_get_mtu(gmrf_t *gmrf, gmrf_iface_t *iface);
|
|
|
|
bool gmrf_iface_send(gmrf_t *gmrf, gmrf_iface_t *iface, const void *data, size_t len, const gmrf_addr_t *dest);
|
|
bool gmrf_iface_send_bc(gmrf_t *gmrf, gmrf_iface_t *iface, const void *data, size_t len);
|
|
|
|
typedef void (*gmrf_scheduled_func)(gmrf_t *gmrf, gmrf_context_t *ctx, void *arg);
|
|
|
|
void gmrf_schedule(gmrf_t *gmrf, gmrf_scheduled_func f, void *arg, unsigned delay);
|
|
|
|
/* implemented by protocol */
|
|
extern const char *gmrf_protocol_name;
|
|
extern const char *gmrf_protocol_version;
|
|
|
|
gmrf_context_t* gmrf_protocol_init(gmrf_t *gmrf);
|
|
void gmrf_protocol_add_iface(gmrf_t *gmrf, gmrf_context_t *ctx, gmrf_iface_t *iface);
|
|
void gmrf_protocol_handle_packet(gmrf_t *gmrf, gmrf_context_t *ctx, gmrf_iface_t *iface, const gmrf_addr_t *source, const void *data, size_t len);
|
|
|
|
#endif /* _GMRF_GMRF_H_ */
|