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_LIBS = $(shell pkg-config --libs libuv)
REQUIRED_CFLAGS = $(LIBUV_FLAGS) $(SODIUM_FLAGS) -I$(REPO)/include -std=c99 $(CFLAGS)
REQUIRED_CXXFLAGS = $(LIBUV_FLAGS) $(SODIUM_FLAGS) -I$(REPO)/include -std=c++14 $(CXXFLAGS)
DEBUG_FLAGS = -g
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)
all: build

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

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

@ -22,7 +22,7 @@ struct sarp_config_iterator
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
}

@ -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;
}
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 = {
{"router", conf->impl.router},
{"network", conf->impl.network},
@ -70,6 +70,6 @@ extern "C" {
};
for(const auto & section : sections)
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)
{
listener.user = this;
listener.recvfrom = link_recv_from;
_listener.user = this;
_listener.recvfrom = link_recv_from;
}
Link::~Link()
{
}
PeerSession::PeerSession(sarp_crypto * crypto, sockaddr_in6 remote) :
lastRX(0),
remoteAddr(remote),

@ -64,12 +64,13 @@ namespace sarp
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

@ -11,15 +11,18 @@ namespace sarp
struct Router
{
std::list<Link_ptr> Links;
std::list<Link *> Links;
sarp_crypto * crypto;
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()
@ -54,14 +57,15 @@ extern "C" {
sarp_config_iterator iter;
iter.user = router;
iter.visit = sarp::router_iter_config;
sarp_config_iter(conf, iter);
sarp_config_iter(conf, &iter);
return router->impl.Configured() ? 0 : -1;
}
void sarp_run_router(struct sarp_router * router, struct sarp_ev_loop * loop)
{
for(auto & iter : router->impl.Links)
sarp_ev_add_udp_listener(loop, &iter->listener);
if(router->impl.Links.size())
for(auto & iter : router->impl.Links)
sarp_ev_add_udp_listener(loop, iter->Listener());
}
void sarp_free_router(struct sarp_router ** router)
@ -86,7 +90,7 @@ namespace sarp
{
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"))
{

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

Loading…
Cancel
Save