Commit Graph

6654 Commits

Author SHA1 Message Date
Jason Rhinelander
36edabd9b0 Rename EventLoop::udp to EventLoop::make_udp
Makes it consistent with the make_waker, etc.

Also removes some debugging.
2021-03-04 16:51:18 -04:00
Jason Rhinelander
afd856bca0 Remove unused junk (also fix win32 compilation fail) 2021-03-04 16:51:18 -04:00
Jason Rhinelander
ced035d401 Switch uvw to a fork with libuv backwards compat support 2021-03-04 16:51:18 -04:00
Jason Rhinelander
096f37fe4e Fix linux compilation & narrowing conversion warning 2021-03-04 16:51:18 -04:00
Jason Rhinelander
e198bfd3e1 Remove unused variable 2021-03-04 16:51:18 -04:00
Jason Rhinelander
c4559d158e Make format 2021-03-04 16:51:18 -04:00
Jason Rhinelander
ccc7b5c9e9 Merge Logic functions into EventLoop
loop->call(...) is similar to the old logic->Call(...), but is smart
about the current thread: if called from within the event loop it simply
runs the argument directly, otherwise it queues it.

Similarly most of the other event loop calls are also now thread-aware:
for example, `call_later(...)` can queue the job directly when called if
in the event loop rather than having to double-queue through the even
loop (once to call, then inside the call to initiate the time).
2021-03-04 16:51:18 -04:00
Jason Rhinelander
5b555ee5aa Replace libuv with uvw & related refactoring
- removes all the llarp_ev_* functions, replacing with methods/classes/functions in the llarp
  namespace.
- banish ev/ev.h to the void
- Passes various things by const lvalue ref, especially shared_ptr's that don't need to be copied
  (to avoid an atomic refcount increment/decrement).
- Add a llarp::UDPHandle abstract class for UDP handling
- Removes the UDP tick handler; code that needs tick can just do a separate handler on the event
  loop outside the UDP socket.
- Adds an "OwnedBuffer" which owns its own memory but is implicitly convertible to a llarp_buffer_t.
  This is mostly needed to take over ownership of buffers from uvw without copying them as,
  currently, uvw does its own allocation (pending some open upstream issues/PRs).
- Logic:
  - add `make_caller`/`call_forever`/`call_every` utility functions to abstract Call wrapping and
    dependent timed tasks.
  - Add inLogicThread() so that code can tell its inside the logic thread (typically for
    debugging assertions).
  - get rid of janky integer returns and dealing with cancellations on call_later: the other methods
    added here and the event loop code remove the need for them.
- Event loop:
  - redo everything with uvw instead of libuv
  - rename EventLoopWakeup::Wakeup to EventLoopWakeup::Trigger to better reflect what it does.
  - add EventLoopRepeater for repeated events, and replace the code that reschedules itself every
    time it is called with a repeater.
  - Split up `EventLoop::run()` into a non-virtual base method and abstract `run_loop()` methods;
    the base method does a couple extra setup/teardown things that don't need to be in the derived class.
  - udp_listen is replaced with ev->udp(...) which returns a new UDPHandle object rather that
    needing gross C-style-but-not-actually-C-compatible structs.
  - Remove unused register_poll_fd_(un)readable
  - Use shared_ptr for EventLoopWakeup rather than returning a raw pointer; uvw lets us not have to
    worry about having the event loop class maintain ownership of it.
  - Add factory EventLoop::create() function to create a default (uvw-based) event loop (previously
    this was one of the llarp_ev_blahblah unnamespaced functions).
  - ev_libuv: this is mostly rewritten; all of the glue code/structs, in particular, are gone as
    they are no longer needed with uvw.
- DNS:
  - Rename DnsHandler to DnsInterceptor to better describe what it does (this is the code that
    intercepts all DNS to the tun IP range for Android).
- endpoint:
  - remove unused "isolated network" code
  - remove distinct (but actually always the same) variables for router/endpoint logic objects
- llarp_buffer_t
  - make constructors type-safe against being called with points to non-size-1 values
- tun packet reading:
  - read all available packets off the device/file descriptor; previously we were reading one packet
    at a time then returning to the event loop to poll again.
  - ReadNextPacket() now returns a 0-size packet if the read would block (so that we can implement
    the previous point).
  - ReadNextPacket() now throws on I/O error
- Miscellaneous code cleanups/simplifications
2021-03-04 16:51:18 -04:00
Jason Rhinelander
c71d3527bd C++17 simplification 2021-03-04 16:51:18 -04:00
Jason Rhinelander
8aa1b702cd Disallow evil compilation
-fpermissive allows nasty things that are (apparently) needed on
Windows, so only enable it there.

vla are evil, so don't just warn but error on it.

remove duplicate -Wno-unknown-pragmas
2021-03-04 16:51:18 -04:00
Jason Rhinelander
ffe9bbc984 Tweak clang-tidy rules
Turn off modernize-use-trailing-return because it's *really* annoying
(and clangd picks it up when using it for editing).

Turn off modernize-use-nodiscard as well because it's already annoying.

Add bugprone-* as well because it includes a lot of useful checks.
2021-03-04 16:51:18 -04:00
Jason Rhinelander
dfb62d06ce Shut up noisy catch tests 2021-03-04 16:51:18 -04:00
Jason Rhinelander
8b00eacabf Fix signed/unsigned char comparison bug
These functions would not working properly if given a high bit char
value.
2021-03-04 16:51:18 -04:00
Jason Rhinelander
00df8b85da Bump required oxenmq version
Current lokinet dev relies on something from oxenmq dev branch which is
in the not-yet-released next version; without this lokinet tries using
the system 1.2.3 install, which then fails the build.
2021-03-04 16:51:18 -04:00
Jason Rhinelander
e3aff6c36c Add more junk & clangd symlinks to .gitignore
Ignore any root directory starting with build so that you can have many
build directories (build, build2, build-win32, ...) that get ignored.

Add .cache which clangd creates

Ignore compile_commands.json (and generate it by default) which helps
clangd, but needs to be symlinked to a compile_commands.json in a build
dir so isn't suitable for inclusion in the repo.
2021-03-04 16:51:18 -04:00
Jeff
db515e48ec
Merge pull request #1561 from majestrate/catch2_migrate-2021-03-03
totally remove gtest/gmock from unit tests.
2021-03-04 15:50:36 -05:00
Jeff
abf057d6e3
Merge pull request #1536 from majestrate/memleak-fix-2021-02-15
plug super slow memory leak
2021-03-04 15:50:11 -05:00
Jeff
72c9b0f1b4
Merge pull request #1535 from majestrate/no-iwp-multiack-2021-02-13
only do single ack packets
2021-03-04 15:49:12 -05:00
Jeff Becker
4cf0f1ee35
decaying hashset unit test fixes 2021-03-04 15:47:09 -05:00
Jeff Becker
5fd15fa044
generate keys in unit test 2021-03-04 15:46:12 -05:00
Jeff Becker
6c8e5256d6
catchAll -> testAll 2021-03-04 15:45:52 -05:00
Jeff Becker
60bfdacc23
get rid of the rest of gtest/gmock 2021-03-04 15:41:53 -05:00
lyyn
ece91e87fc
Migrate tests from gtest to catch2 2021-03-04 15:41:42 -05:00
Jeff Becker
ec0f45eeb7
plug memory leak in outbound message queue.
sometimes we use rxid in our pathid so we need to clear those queues too.
if we don't it'll leak from never clearing those queues.
2021-03-04 15:29:09 -05:00
Jeff Becker
7dbd25f271
don't leave old multi ack codepath in 2021-03-04 15:25:11 -05:00
Jeff Becker
8a4417cb1a
reduce test message count so it can pass 2021-03-04 15:21:51 -05:00
Jeff Becker
c9ff917e0d
revert priority queue ordering change 2021-03-04 15:21:51 -05:00
Jeff Becker
ad3c23ba2b
simplify call 2021-03-04 15:21:51 -05:00
Jeff Becker
5cffc3b0f8
consolidate rx message handling in iwp
* add toggle flag for using multi ack
* check replay filter before processing message
2021-03-04 15:21:51 -05:00
Jeff Becker
e6ac7e721d
use a std::map instead of a std::unordered_map for holding message buffers by their sequentially increasing message id.
when retransmissions happen, they will be executed in a deterministic order by their delivery id.
this reduces the jitter from delayed message delivery on link layer as with an unordered map the order of iteration is "random",
so when we iterate all messages for retransmission we do it lowest id first (the messages queued first).
2021-03-04 15:21:51 -05:00
Jeff Becker
74f707ee01
only do single ack packets 2021-03-04 15:21:51 -05:00
Jeff
4992629f20
Merge pull request #1563 from majestrate/dont-multiplex-from-outbound-context-2021-03-03
use lowest latency path for send context
2021-03-04 15:16:40 -05:00
Jeff
d5baeaa425
Merge pull request #1564 from majestrate/exit-backwards-comapt-issue-2021-03-03
unbreak ipv4 exits
2021-03-04 14:30:53 -05:00
Jeff
e379200ba6
Merge pull request #1566 from majestrate/redo-cmake-setcap-check-2021-03-04
redo cmake setcap check
2021-03-04 14:14:04 -05:00
Jeff Becker
b9d439558f
dont include lokinet-bootstrap.ps1 in ci builds 2021-03-04 14:05:44 -05:00
Jeff Becker
4540c964f5
rework cmake install targets
* redo setcap on linux so that it's required to do install targets on linux
* add -DWITH_SETCAP=OFF option to bypass setcap requirement on linux
* remove lokinet-bootstrap.ps1 as we bundle the bootstrap in the win32 installer now
* remove references to lokinet-bootstrap.ps1 in cmake
2021-03-04 14:02:53 -05:00
Jeff
32ed709839
Merge pull request #1565 from majestrate/ci-fixup-2021-03-04
explicitly turn off setcap on ci builds so they pass
2021-03-04 12:39:14 -05:00
Jeff Becker
7060a60c84
enable route poker poking before going "up" 2021-03-04 06:22:23 -05:00
Jeff Becker
849c8b6aa8
explicitly turn off setcap on ci builds so they pass 2021-03-04 06:00:03 -05:00
Jeff Becker
f77cbfb48e
fixes for ipv4 traffic: dont use new range because that breaks backwards comapt 2021-03-03 20:08:38 -05:00
Jeff Becker
f67668f0a6
use lowest latency path for send context 2021-03-03 18:42:10 -05:00
Jeff
f2b234d6c3
Merge pull request #1539 from majestrate/path-algorithm-flavors-2021-02-18
add option to enforce unique netblocks per path.
2021-03-03 14:06:40 -05:00
Jeff
b4b8b84e57
Merge pull request #1548 from majestrate/lns-mx-records-2021-02-25
add mx records to lns names
2021-03-03 14:06:28 -05:00
Jeff Becker
d6567614e3
use mutable lambda instead of shared_ptr for handling mx dns reply for lns 2021-03-03 10:37:31 -05:00
Jeff
d0e4069762
Merge pull request #1554 from majestrate/cmake-check-for-setcap-2021-03-01
add explicit check for setcap
2021-03-03 10:28:24 -05:00
Thomas Winget
49037e8be9
Merge pull request #1560 from jagerman/gradle-cache
Allow multiple gradles to run on the same box
2021-03-02 23:24:14 -05:00
Jason Rhinelander
6c176330a4 Allow multiple gradles to run on the same box
/cache is shared among multiple runners that can potentiall run at
once, but gradle's cache is retarded and just completely blocks anything
from using the cache for the span of the entire build.  Work around it
by sticking the unique builder identifier in the cache path.
2021-03-02 21:23:37 -04:00
Jason Rhinelander
c2689ee7e6
Merge pull request #1558 from majestrate/disallow-ci-fail-android-2021-03-02
disallow fail on ci pipeline for android builds
2021-03-02 20:51:18 -04:00
Jeff Becker
b8d7d0327f
disallow fail on ci pipeline for android builds 2021-03-02 15:21:39 -05:00
Jeff
f685d615bf
Merge pull request #1537 from majestrate/android-works-now-2021-02-11
Android
2021-03-02 14:08:40 -05:00