1
1
Fork 0
mirror of https://github.com/oxen-io/lokinet synced 2023-12-14 06:53:00 +01:00
Commit graph

96 commits

Author SHA1 Message Date
dr7ana ea614ed141 better! 2023-12-12 11:57:15 -08:00
dr7ana 6cb2f57abd whatever 2023-12-12 09:44:59 -08:00
dr7ana b69f754599 come on already work already 2023-12-12 08:11:34 -08:00
dr7ana 7544436f6a who cares 2023-12-11 13:48:11 -08:00
dr7ana f725c07f2d dont bomb with bootstrap reqs 2023-12-11 10:36:46 -08:00
dr7ana 9084d39e5a Squashed misc testnet fixes 2023-12-11 03:13:16 -08:00
dr7ana d00257b9f0 address parsing
- straightened out setting of public addr and public port in config vs listen ("bind") addr
- fixed small bug in router contact writing and saving
2023-12-07 16:15:20 -08:00
dr7ana cef2ff7782 Local router mode
- Up and running locally, no connections yet
- Next: flip testnet and do the gosh dang thing
2023-12-07 09:27:58 -08:00
dr7ana ed6bd28a35 testnet prep
- redoing link_manager functions again to implement previously ignored review comments on several PRs
- conceptually merging "whitelist_routers" and new "known_{rids,rcs}", s.t. we can completely eliminate white/red/gray/green/etc lists in favor of something that isn't dumb
2023-12-06 12:02:31 -08:00
dr7ana c9268dceba trust model edge case handling
- Once we have our set of returned rc's and accepted rid's (ones that were found locally), the remainder are placed in an "unconfirmed" state
- Once there, they have five subsequent successful fetches to be found in request response, at which point their verification counter is incremented and their attempt counter is reset
- If they appear three times, they are "promoted" and moved to our "known_{rid,rc}" list
2023-12-06 07:28:21 -08:00
dr7ana 70e9c1ae25 trust model fetch fails
- bootstrap cooldown implemented with 1min timer in case all bootstraps fail
- set comparison implemented in non-initial and non-bootstrap rc fetching; set comparison in rid fetching is done every fetch
- nodedb get_random functions refactored into conditional/non-conditional methods. Conditional search implements reservoir sampling for one-pass accumulation of n random rcs
2023-12-04 07:59:13 -08:00
dr7ana 3508dee8d8 trust model
- greedy evaluation of returned rid's, simplifying post-processing logic to simple frequency comparison per rid against a constant threshold
- tidied up link_manager request/response handling
- TODO:
  - review and decide thresholds
  - evaluate necessity and potential implementation of rc comparison
2023-12-01 12:54:52 -08:00
dr7ana 91121ea22b pull yourself up by your bootstraps sonny
- initial/subsequent fetching combined for RouterContacts and RouterIDs
- bootstraps fallback implemented and looped into fetch logic
2023-11-30 15:16:33 -08:00
dr7ana f6e651caea move from vectors to unordered_sets
- When receiving a request to fetch RouterID's, the remote endpoint fulfilling the request stores them in an unordered set. When the request caller receives that payload, it is loaded into a vector in the same order. However, we should just load it directly into an unordered set to enforce both the order and that none appear twice
- The trust model will have to operate on multiple large lists of RouterID's and RC's efficiently, and maintaining a sort order ensures the values are workable immediately after deserialization
2023-11-29 06:11:46 -08:00
dr7ana ba3fffb765 housekeeping pre-trust model 2023-11-29 06:03:54 -08:00
dr7ana b6cc86e25b fetch RID result handler logic 2023-11-28 12:51:30 -08:00
dr7ana 3fc7980691 less synchronous for the subsequent fetches 2023-11-28 12:51:30 -08:00
dr7ana 6559617816 RC/RID fetching logic implemented 2023-11-28 12:51:30 -08:00
dr7ana 5fa3c2be87 housekeeping and groundwork, initial commit 2023-11-28 12:51:30 -08:00
Thomas Winget 70d2052cd4 minor fixups 2023-11-27 21:49:02 -05:00
Thomas Winget 14b9aa20ee (client) periodically fetch RouterIDs from peers 2023-11-27 14:40:18 -05:00
Thomas Winget b353fd4095 Minor RC load/store/prune fixups 2023-11-27 14:40:18 -05:00
Thomas Winget c30a4dd44a Implement fetch RouterIDs method and usage
Periodically clients will fetch the set of RouterIDs for all relays on
the network.  It will request this list from a number (12, currently) of
relays, but as we are likely to be requesting from more relays than we
want to have edge connections, this request will itself be relayed to
the target source via one of our edges.  As we can't trust our edge to
do this honestly, the responses are signed by the source relay.

TODO: the responses from all (12) relays are collected, then processed
together.  The reconciliation of their responses is not yet implemented.

TODO: the source selection for this method obviously requires sources to
begin with, but this is the method by which we learn of
those...bootstrapping is still a bit in-progress, and will need to be
finished for this.

TODO: make Router call this periodically, as with RC fetching.
2023-11-27 14:40:18 -05:00
Thomas Winget 6952e8f705 Add command to fetch RCs from remote node
This command will be called periodically by clients to maintain a list
of RCs of active relay nodes.  It will require another command (future
commit) to fetch the RouterIDs from many nodes and reconcile those so we
have some notion of good-ness of the RCs we're getting; if we get what
seems to be a bad set of RCs (this concept not yet implemented), we will
choose a different relay to fetch RCs from.  These are left as TODOs for
now.
2023-11-27 14:40:09 -05:00
Thomas Winget 5bf520d0f1 minor style/naming changes 2023-11-27 13:28:45 -05:00
Thomas Winget 2425652696 NodeDB RCs don't need insertion time
We will want some notion of "when did we receive it" for RCs (or
RouterIDs, details tbd), but that will be per-source as a means to form
some metric of consensus/trust on which relays are *actually* on the
network.  Clients don't have a blockchain daemon to pull this from, so
they have to ask many relays for the full list of relays and form a
trust model on that (bootstrapping problem notwithstanding).
2023-11-27 12:59:35 -05:00
Thomas Winget 29ec72f0da implement and use "gossip_rc" command
TODO: refactor or remove RCGossiper and revisit RC regen and
when-to-gossip logic.
2023-11-27 12:59:35 -05:00
Thomas Winget ad9d0b19c1 remove rc_lookup_handler, relocating useful parts
RC "lookup" is being replaced with "gimme all recently updated RCs".  As
such, doing a lookup on a specific RC is going away, as is network
exploration, so a lot of what RCLookupHandler was doing will no longer
be relevant.  Functionality from it which was kept has moved to NodeDB,
as it makes sense for that functionality to live where the RCs live.
2023-11-27 12:54:43 -05:00
dr7ana fa4471f566 {Remote,Local}RC's
- RemoteRC supplants most of the functionality throughout the code of RouterContact
- Next step will be to sort out CI issues, then see if we can get rid of either LocalRC (and therefore RouterContact entirely)
2023-11-02 05:30:49 -07:00
dr7ana 07271f9ae7 RC refactor layout
- Local and Remote RC's now implemented with discrete functionalities and uses
2023-10-31 13:49:14 -07:00
dr7ana 7314c2a22a CI Fixes, squash 2023-10-25 12:43:32 -07:00
dr7ana 46ad8d4058 Clang format include sorting + CMake
- includes are now sorted in consistent, logical order; first step in an attempt to fix the tomfoolery (no relation to Tom) brought in by include-what-you-use
- shuffled around some cmake linking to simplify dependency graph
- superfluous files removed
2023-10-24 12:11:51 -07:00
Jason Rhinelander f4f5ab0109 "Refactor" aka delete Crypto/CryptoManager
- Get rid of CryptoManager.
- Get rid of Crypto.
- Move all the Crypto instance methods to llarp::crypto functions.
  (None of them needed to be methods at all, so this is simple).
- Move sodium/ntru initialization into static initialization.
- Add llarp::csrng, which is an available llarp::CSRNG instance which is
  a bit easier than needing to construct a `CSRNG rng{};` in various
  places.
- Various related small simplifications/cleanups.
2023-10-24 08:40:18 -07:00
dr7ana e710cfea47 Review commit 2023-10-24 08:40:18 -07:00
dr7ana 0e451db77f Compilation fixes
- almost all errors have been commented out for refactor or already refactored
- committing this prior to sorting out the cmake structure
- upcoming include-what-you-use application
2023-10-24 08:40:18 -07:00
dr7ana 3ae8fce77d Outbound context absorbed sendcontex
- message transmission routed through refactored handling
- still work to be done, but now to make it compile at least
2023-10-24 08:40:18 -07:00
dr7ana 577f5e61ea De-mutexing
- mutexes in nodedb and rc_lookup_handler removed
- implemented thread-safe queueing to event loop for previously locked accesses
2023-10-12 11:46:41 -07:00
dr7ana 5ccec24470 callsafe
- Added call_get to ev.hpp to queue event loop operations w/ a return value
- de-mutexed NodeDB and made all operations via event loop. Some calls to NodeDB methods (like ::put_if_newer) were wrapped in call->get's, but some weren't. All function bodies were using mutex locks
2023-10-12 06:43:18 -07:00
Jeff Becker 95cd275cdd
liblokinet additions:
* add lokinet_add_bootstrap_rc function for adding an rc from memory
* prevent stack overflow on error closing connection in quic
* add in memory nodedb
* refactor how convotags are set as active
* add initial stubs for endpoint statistics
* refactor time stuff to be a bit cleaner
* update lnproxy script with more arguments
2021-04-19 06:59:07 -04:00
Thomas Winget 7caa87862e standardize include format and pragma once
All #ifndef guards on headers have been removed, I think,
in favor of #pragma once

Headers are now included as `#include "filename"` if the included file
resides in the same directory as the file including it, or any
subdirectory therein.  Otherwise they are included as
`#include <project/top/dir/relative/path/filename>`

The above does not include system/os headers.
2021-03-09 19:01:41 -05: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
Jeff Becker 0fa91381ba
add llarp::CSRNG for cryptographically secure random number generator for use in std::shuffle 2021-03-02 07:20:29 -05:00
Jeff Becker 4478cf6f72
use pointers to entries instead of lookups by key 2021-03-02 07:20:29 -05:00
Jeff Becker b865ffb736
use 64-bit Mersenne Twister instead of 32 bit flavor in nodedb 2021-03-02 07:20:29 -05:00
Jeff Becker e584cbe44d
make non 64 bit platforms happy 2021-03-02 07:20:29 -05:00
Jeff Becker 5d465264a8
truly random access in nodedb iteration 2021-03-02 07:20:29 -05:00
Jeff Becker 1f1db29816
GetIf -> GetRandom 2021-02-03 16:38:31 -05:00
Jeff Becker c8aba0af31
make llarp::NodeDB::GetIf always randmize location 2021-02-03 14:49:00 -05:00
Jeff Becker 922f4fb724
fix iteration bug 2021-02-02 13:15:51 -05:00
Jeff Becker df4ea34a56
nodedb refactor
* bump zmq static dep
* lokimq -> oxenmq
* llarp_nodedb -> llarp::NodeDB
* remove all crufty api parts of NodeDB
* make NodeDB rc selection api not suck
* make path builder api not suck
* propagate all above changes so that unit tests work and it all compiles
2021-02-02 09:35:40 -05:00