From 045a6925222092d230c41012321772bf53e18e42 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Thu, 25 Jan 2018 11:11:45 -0500 Subject: [PATCH] more --- Makefile | 12 ++++++++++-- daemon/main.c | 27 +++++++++++++++------------ include/sarp.h | 1 + include/sarp/config.h | 2 +- include/sarp/version.h | 25 +++++++++++++++++++++++++ llarp/config.cpp | 6 +++--- llarp/link.cpp | 8 ++++++-- llarp/link.hpp | 7 ++++--- llarp/router.cpp | 20 ++++++++++++-------- readme.md | 10 +++++++++- 10 files changed, 86 insertions(+), 32 deletions(-) create mode 100644 include/sarp/version.h diff --git a/Makefile b/Makefile index 60ee7e602..b68eb095b 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/daemon/main.c b/daemon/main.c index 5ba27c89b..923d02e39 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -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); diff --git a/include/sarp.h b/include/sarp.h index 45811e1b2..49bc591d7 100644 --- a/include/sarp.h +++ b/include/sarp.h @@ -1,4 +1,5 @@ #ifndef SARP_H_ #define SARP_H_ #include +#include #endif diff --git a/include/sarp/config.h b/include/sarp/config.h index de979060b..d646fda68 100644 --- a/include/sarp/config.h +++ b/include/sarp/config.h @@ -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 } diff --git a/include/sarp/version.h b/include/sarp/version.h new file mode 100644 index 000000000..9ea94bda4 --- /dev/null +++ b/include/sarp/version.h @@ -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 diff --git a/llarp/config.cpp b/llarp/config.cpp index 0d1b1c2e5..18e7ba599 100644 --- a/llarp/config.cpp +++ b/llarp/config.cpp @@ -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 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()); } } diff --git a/llarp/link.cpp b/llarp/link.cpp index 982e0a1d1..b74175e0e 100644 --- a/llarp/link.cpp +++ b/llarp/link.cpp @@ -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), diff --git a/llarp/link.hpp b/llarp/link.hpp index 79b356cde..a9c5d0e2d 100644 --- a/llarp/link.hpp +++ b/llarp/link.hpp @@ -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_ptr; } #endif diff --git a/llarp/router.cpp b/llarp/router.cpp index aec9e7a44..2da81e197 100644 --- a/llarp/router.cpp +++ b/llarp/router.cpp @@ -11,15 +11,18 @@ namespace sarp struct Router { - std::list Links; + std::list 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(&self->crypto)); + self->impl.Links.push_back(new Link(&self->crypto)); } else if (streq(val, "eth")) { diff --git a/readme.md b/readme.md index 617031f90..8b57d9281 100644 --- a/readme.md +++ b/readme.md @@ -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