pull/1/head
Jeff Becker 6 years ago
parent a38f29157e
commit 045a692522
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -17,8 +17,16 @@ SODIUM_LIBS = $(shell pkg-config --libs libsodium)
LIBUV_FLAGS = $(shell pkg-config --cflags libuv) LIBUV_FLAGS = $(shell pkg-config --cflags libuv)
LIBUV_LIBS = $(shell pkg-config --libs libuv) LIBUV_LIBS = $(shell pkg-config --libs libuv)
REQUIRED_CFLAGS = $(LIBUV_FLAGS) $(SODIUM_FLAGS) -I$(REPO)/include -std=c99 $(CFLAGS) DEBUG_FLAGS = -g
REQUIRED_CXXFLAGS = $(LIBUV_FLAGS) $(SODIUM_FLAGS) -I$(REPO)/include -std=c++14 $(CXXFLAGS)
GIT_VERSION ?= $(shell test -e .git && git rev-parse --short HEAD || true)
ifneq ($(GIT_VERSION),"")
VER_FLAGS=-DGIT_REV=\"$(GIT_VERSION)\"
endif
REQUIRED_CFLAGS = $(LIBUV_FLAGS) $(SODIUM_FLAGS) -I$(REPO)/include -std=c99 $(CFLAGS) $(DEBUG_FLAGS) $(VER_FLAGS)
REQUIRED_CXXFLAGS = $(LIBUV_FLAGS) $(SODIUM_FLAGS) -I$(REPO)/include -std=c++14 $(CXXFLAGS) $(DEBUG_FLAGS) $(VER_FLAGS)
REQUIRED_LDFLAGS = $(LDFLAGS) -ljemalloc $(SODIUM_LIBS) $(LIBUV_LIBS) REQUIRED_LDFLAGS = $(LDFLAGS) -ljemalloc $(SODIUM_LIBS) $(LIBUV_LIBS)
all: build all: build

@ -15,21 +15,24 @@ int main(int argc, char * argv[])
sarp_mem_jemalloc(); sarp_mem_jemalloc();
sarp_new_config(&gconfig); sarp_new_config(&gconfig);
sarp_ev_loop_alloc(&mainloop); sarp_ev_loop_alloc(&mainloop);
printf("%s loaded\n", SARP_VERSION);
if(sarp_load_config(gconfig, conffname)) if(!sarp_load_config(gconfig, conffname))
{
printf("!!! failed to load %s\n", conffname);
}
else
{ {
printf("loaded config %s\n", conffname); printf("Loaded config %s\n", conffname);
sarp_init_router(&router); sarp_init_router(&router);
sarp_configure_router(router, gconfig); if(!sarp_configure_router(router, gconfig))
printf("running...\n"); {
sarp_run_router(router, mainloop); printf("Running\n");
sarp_ev_loop_run(mainloop); sarp_run_router(router, mainloop);
sarp_ev_loop_run(mainloop);
}
else
printf("Failed to configure router\n");
} }
printf("shutting down."); else
printf("Failed to load config %s\n", conffname);
printf("Shutting down.");
sarp_free_router(&router); sarp_free_router(&router);
printf("."); printf(".");
sarp_free_config(&gconfig); sarp_free_config(&gconfig);

@ -1,4 +1,5 @@
#ifndef SARP_H_ #ifndef SARP_H_
#define SARP_H_ #define SARP_H_
#include <sarp/router.h> #include <sarp/router.h>
#include <sarp/version.h>
#endif #endif

@ -22,7 +22,7 @@ struct sarp_config_iterator
void (*visit)(struct sarp_config_iterator *, const char *, const char *, const char *); void (*visit)(struct sarp_config_iterator *, const char *, const char *, const char *);
}; };
void sarp_config_iter(struct sarp_config * conf, struct sarp_config_iterator iter); void sarp_config_iter(struct sarp_config * conf, struct sarp_config_iterator * iter);
#ifdef __cplusplus #ifdef __cplusplus
} }

@ -0,0 +1,25 @@
#ifndef SARP_VERSION_H
#define SARP_VERSION_H
#ifndef SARP_VERSION_MAJ
#define SARP_VERSION_MAJ "0"
#endif
#ifndef SARP_VERSION_MIN
#define SARP_VERSION_MIN "0"
#endif
#ifndef SARP_VERSION_PATCH
#define SARP_VERSION_PATCH "0"
#endif
#ifndef SARP_VERSION_NUM
#ifdef GIT_REV
#define SARP_VERSION_NUM "-"SARP_VERSION_MAJ"."SARP_VERSION_MIN"."SARP_VERSION_PATCH"-"GIT_REV
#else
#define SARP_VERSION_NUM "-"SARP_VERSION_MAJ"."SARP_VERSION_MIN"."SARP_VERSION_PATCH
#endif
#endif
#define SARP_VERSION "llarpd"SARP_VERSION_NUM
#endif

@ -59,9 +59,9 @@ extern "C" {
return 0; return 0;
} }
void sarp_config_iter(struct sarp_config * conf, struct sarp_config_iterator iter) void sarp_config_iter(struct sarp_config * conf, struct sarp_config_iterator * iter)
{ {
iter.conf = conf; iter->conf = conf;
std::map<std::string, sarp::Config::section_t&> sections = { std::map<std::string, sarp::Config::section_t&> sections = {
{"router", conf->impl.router}, {"router", conf->impl.router},
{"network", conf->impl.network}, {"network", conf->impl.network},
@ -70,6 +70,6 @@ extern "C" {
}; };
for(const auto & section : sections) for(const auto & section : sections)
for(const auto & item : section.second) for(const auto & item : section.second)
iter.visit(&iter, section.first.c_str(), item.first.c_str(), item.second.c_str()); iter->visit(iter, section.first.c_str(), item.first.c_str(), item.second.c_str());
} }
} }

@ -28,10 +28,14 @@ namespace sarp
Link::Link(sarp_crypto * crypto) : _crypto(crypto) Link::Link(sarp_crypto * crypto) : _crypto(crypto)
{ {
listener.user = this; _listener.user = this;
listener.recvfrom = link_recv_from; _listener.recvfrom = link_recv_from;
} }
Link::~Link()
{
}
PeerSession::PeerSession(sarp_crypto * crypto, sockaddr_in6 remote) : PeerSession::PeerSession(sarp_crypto * crypto, sockaddr_in6 remote) :
lastRX(0), lastRX(0),
remoteAddr(remote), remoteAddr(remote),

@ -64,12 +64,13 @@ namespace sarp
sarp_crypto * _crypto; sarp_crypto * _crypto;
Link(sarp_crypto * crypto); Link(sarp_crypto * crypto);
~Link();
sarp_udp_listener listener; sarp_udp_listener _listener;
sarp_udp_listener * Listener() { return &_listener; }
}; };
typedef std::unique_ptr<Link> Link_ptr;
} }
#endif #endif

@ -11,15 +11,18 @@ namespace sarp
struct Router struct Router
{ {
std::list<Link_ptr> Links; std::list<Link *> Links;
sarp_crypto * crypto; sarp_crypto * crypto;
void Close() void Close()
{ {
for(auto & itr : Links) if(Links.size())
{ {
sarp_ev_close_udp_listener(&itr->listener); for(auto & itr : Links)
{
sarp_ev_close_udp_listener(itr->Listener());
}
Links.clear();
} }
Links.clear();
} }
bool Configured() bool Configured()
@ -54,14 +57,15 @@ extern "C" {
sarp_config_iterator iter; sarp_config_iterator iter;
iter.user = router; iter.user = router;
iter.visit = sarp::router_iter_config; iter.visit = sarp::router_iter_config;
sarp_config_iter(conf, iter); sarp_config_iter(conf, &iter);
return router->impl.Configured() ? 0 : -1; return router->impl.Configured() ? 0 : -1;
} }
void sarp_run_router(struct sarp_router * router, struct sarp_ev_loop * loop) void sarp_run_router(struct sarp_router * router, struct sarp_ev_loop * loop)
{ {
for(auto & iter : router->impl.Links) if(router->impl.Links.size())
sarp_ev_add_udp_listener(loop, &iter->listener); for(auto & iter : router->impl.Links)
sarp_ev_add_udp_listener(loop, iter->Listener());
} }
void sarp_free_router(struct sarp_router ** router) void sarp_free_router(struct sarp_router ** router)
@ -86,7 +90,7 @@ namespace sarp
{ {
if(streq(val, "ip")) if(streq(val, "ip"))
{ {
self->impl.Links.push_back(std::make_unique<Link>(&self->crypto)); self->impl.Links.push_back(new Link(&self->crypto));
} }
else if (streq(val, "eth")) else if (streq(val, "eth"))
{ {

@ -4,7 +4,7 @@ Low Latency Anon Routing Protocol
[rfc](doc/proto_v0.txt) [rfc](doc/proto_v0.txt)
## ref impl ## Reference Implementation
Build requirements: Build requirements:
@ -13,3 +13,11 @@ Build requirements:
* libsodium >= 1.0.14 * libsodium >= 1.0.14
* c++ 17 capable C++ compiler * c++ 17 capable C++ compiler
* c99 compliant C compiler * c99 compliant C compiler
Building:
$ make
Running:
$ ./llarpd daemon.ini

Loading…
Cancel
Save