Commit Graph

51 Commits

Author SHA1 Message Date
Jason Rhinelander af6caf776a
Config file improvements (#1397)
* Config file API/comment improvements

API improvements:
=================

Make the config API use position-independent tag parameters (Required,
Default{123}, MultiValue) rather than a sequence of bools with
overloads.  For example, instead of:

    conf.defineOption<int>("a", "b", false, true, 123, [] { ... });

you now write:

    conf.defineOption<int>("a", "b", MultiValue, Default{123}, [] { ... });

The tags are:
- Required
- MultiValue
- Default{value}
plus new abilities (see below):
- Hidden
- RelayOnly
- ClientOnly
- Comment{"line1", "line2", "line3"}

Made option definition more powerful:
=====================================

- `Hidden` allows you to define an option that won't show up in the
  generated config file if it isn't set.

- `RelayOnly`/`ClientOnly` sets up an option that is only accepted and
  only shows up for relay or client configs.  (If neither is specified
  the option shows up in both modes).

- `Comment{...}` lets the option comments be specified as part of the
  defineOption.

Comment improvements
====================

- Rewrote comments for various options to expand on details.
- Inlined all the comments with the option definitions.
- Several options that were missing comments got comments added.
- Made various options for deprecated and or internal options hidden by
  default so that they don't show up in a default config file.
- show the section comment (but not option comments) *after* the
  [section] tag instead of before it as it makes more sense that way
  (particularly for the [bind] section which has a new long comment to
  describe how it works).

Disable profiling by default
============================

We had this weird state where we use and store profiling by default but
never *load* it when starting up.  This commit makes us just not use
profiling at all unless explicitly enabled.

Other misc changes:
===================

- change default worker threads to 0 (= num cpus) instead of 1, and fix
  it to allow 0.
- Actually apply worker-threads option
- fixed default data-dir value erroneously having quotes around it
- reordered ifname/ifaddr/mapaddr (was previously mapaddr/ifaddr/ifname)
  as mapaddr is a sort of specialization of ifaddr and so makes more
  sense to come after it (particularly because it now references ifaddr
  in its help message).
- removed peer-stats option (since we always require it for relays and
  never use it for clients)
- removed router profiles filename option (this doesn't need to be
  configurable)
- removed defunct `service-node-seed` option
- Change default logging output file to "" (which means stdout), and
  also made "-" work for stdout.

* Router hive compilation fixes

* Comments for SNApp SRV settings in ini file

* Add extra blank line after section comments

* Better deprecated option handling

Allow {client,relay}-only options in {relay,client} configs to be
specified as implicitly deprecated options: they warn, and don't set
anything.

Add an explicit `Deprecated` tag and move deprecated option handling
into definition.cpp.

* Move backwards compat options into section definitions

Keep the "addBackwardsCompatibleConfigOptions" only for options in
sections that no longer exist.

* Fix INI parsing issues & C++17-ify

- don't allow inline comments because it seems they aren't allowed in
ini formats in general, and is going to cause problems if there is a
comment character in a value (e.g. an exit auth string).  Additionally
it was breaking on a line such as:

    # some comment; see?

because it was treating only `; see?` as the comment and then producing
an error message about the rest of the line being invalid.

- make section parsing stricter: the `[` and `]` have to be at the
beginning at end of the line now (after stripping whitespace).

- Move whitespace stripping to the top since everything in here does it.

- chop off string_view suffix/prefix rather than maintaining position
values

- fix potential infinite loop/segfault when given a line such as `]foo[`

* Make config parsing failure fatal

Load() LogError's and returns false on failure, so we weren't aborting
on config file errors.

* Formatting: allow `{}` for empty functions/structs

Instead of using two lines when empty:

    {
    }

* Make default dns bind 127.0.0.1 on non-Linux

* Don't show empty section; fix tests

We can conceivably have sections that only make sense for clients or
relays, and so want to completely omit that section if we have no
options for the type of config being generated.

Also fixes missing empty lines between tests.

Co-authored-by: Thomas Winget <tewinget@gmail.com>
2020-10-07 18:22:58 -04:00
Jeff Becker d7ff6c579c
address feedback from jason
* split up ipv6 netmask
* revert iwp ack interval change
* c++17-isms in ip range map
* lambda-ize nodedb
* mutable lambdas in transit hops
* perfect forwarding of args in abstract router
* mutable lambdas in lokid rpc client
* notes in readme about nproc
2020-07-02 11:13:32 -04:00
Jeff Becker f4971a88fd
use lokimq workers instead of llarp:🧵:ThreadPool 2020-07-02 11:07:34 -04:00
Jeff Becker 1899debfb5
unfug transit hops 2020-06-05 11:40:18 -04:00
Jeff Becker 9fb681eb7c
typo 2020-06-04 16:16:07 -04:00
Jeff Becker fe1dae8f30
fix transit hop job queuing 2020-06-04 15:48:32 -04:00
Jeff Becker acecb23eb3
make libuv event loop logic queue size configurable.
remove logic constructor that is no-op.
add constant for default logic queue size
add constant for transit hop queue size
2020-06-01 09:17:44 -04:00
Jeff Becker c826d0a0b1
increase transit hop limits 2020-05-23 16:07:20 -04:00
Jeff Becker 6af498092b
exit traffic via loki addresses 2020-05-23 16:07:19 -04:00
Jason Rhinelander ebd2142114 Don't use std::optional::value() because f u macos
This replaces all use of std::optional's `opt.value()` with `*opt`
because macOS is great and the ghost of Steve Jobs says that actually
supporting std::optional's value() method is not for chumps before macOS
10.14.  So don't use it because Apple is great.

Pretty much all of our use of it actually is done better with operator*
anyway (since operator* doesn't do a check that the optional has a
value).

Also replaced *most* of the `has_value()` calls with direct bool
context, except for one in the config section which looked really
confusing at a glance without a has_value().
2020-05-20 19:18:28 -03:00
Stephen Shelton 273270916e
The Great Wall of Blame
This commit reflects changes to clang-format rules. Unfortunately,
these rule changes create a massive change to the codebase, which
causes an apparent rewrite of git history.

Git blame's --ignore-rev flag can be used to ignore this commit when
attempting to `git blame` some code.
2020-04-07 12:38:56 -06:00
Stephen Shelton f61cd1a7da
Add some notes/comments about DHT message handling 2020-02-28 16:26:52 -07:00
Jeff Becker d2d109e92c
llarp_time_t is now using std::chrono 2020-02-24 15:25:03 -05:00
Jeff Becker 9efd796145
initial wack at 0.7.0 dht fixes 2020-01-27 11:54:51 -05:00
Jeff Becker d391f70417
reduce cpu use 2020-01-03 07:00:02 -05:00
Jeff Becker 0828307906 fix address mapping bug 2019-11-29 19:11:14 -04:00
Jeff Becker 5188873288 batch and flush 2019-11-29 19:11:14 -04:00
Jeff Becker 2852601a28 flush in logic 2019-11-29 19:11:14 -04:00
Jeff Becker d823d6fa70 only flush when no other jobs are executing 2019-11-29 19:11:14 -04:00
Jeff Becker 9e305c5b30 use lockless queues to gather results of transit traffic work 2019-11-29 19:11:14 -04:00
Jeff Becker d591394ad2 dont process empty queues 2019-11-29 19:11:14 -04:00
Jeff Becker e2472d985d process transit hops on flush 2019-11-29 19:11:14 -04:00
Jeff Becker 34bc3da069
flush quues of other paths 2019-11-22 16:23:20 -05:00
Jeff Becker 56dce90de9
add trace log level for tracking logic thread jobs 2019-11-22 16:23:19 -05:00
Jeff Becker 327c545530
finish multithread cryptography first pass 2019-09-16 12:12:05 -04:00
jeff 14c9ef15ed try calling stuff in logic thread from event loop 2019-09-16 06:21:12 -04:00
Jeff Becker 4bf6882c8a
more async cryptography 2019-09-05 13:39:09 -04:00
Michael 16cdfbd5f0
clang-tidy modernize pass 2019-08-12 16:52:58 +01:00
Thomas Winget 697ece64cc make TransitHop self-destruct if path is invalidated 2019-07-25 19:54:10 -04:00
Thomas Winget 38fd0552d3 Adds Link-Relay Status Messages
Success case:
  - the path endpoint creates and sends a LR_StatusMessage upon
    successful path creation

Failure case:
  - an intermediate hop creates and sends a LR_StatusMessage upon
    failure to forward the path to the next hop for any reason

Both cases:
  - transit hops receive LR_StatusMessages and add a frame
    to them reflecting their "status" with respect to that path
  - the path creator receives LR_StatusMessages and decrypts/parses
    the LR_StatusRecord frames from the path hops.  If all is good,
    the Path does as it would when receiving a PathConfirmMessage.
    If not, the Path marks the new path as failed.

LR_StatusMessage is now used/sent in place of PathConfirmMessage
2019-07-25 17:46:56 -04:00
Michael 488695047f
Remove redundant else blocks 2019-07-09 22:54:46 +01:00
Michael 08609f9e5a
Rename message files 2019-06-19 23:30:07 +01:00
Michael 8a058fcb34
Move other messages 2019-06-19 21:35:57 +01:00
Michael 83bd9227a7
Move exit messages 2019-06-19 21:35:26 +01:00
Michael b89689fec3
Refactor path build code 2019-06-18 22:51:41 +01:00
Michael 491fee206b
Port code to use CryptoManager over passing Crypto pointers 2019-05-28 20:45:08 +01:00
Michael dd8a93a400
Apply rule of zero to code base 2019-05-19 23:11:07 +01:00
Jeff Becker 1d852a1e83
send exit close ack 2019-05-07 14:27:21 -04:00
Michael e33a33635c
Remove usage of raw new from service classes 2019-04-22 18:38:29 +01:00
Jeff Becker c910a2a2fb
more 2019-04-05 10:58:22 -04:00
Jeff Becker df17866ff7
breaking protocol change, bundle source txid on outside of path transfer message. 2019-03-08 10:33:49 -05:00
Jeff Becker c626f7c9b7
revert 2019-02-23 12:39:48 -05:00
Jeff Becker 64f34dccc2
set transit started time
holy what the crap.
2019-02-23 12:36:39 -05:00
Michael 13a9f65520
Fully define interface for dht::Context 2019-02-22 15:08:08 +00:00
Michael 048fa83c39
Finish replacement of Router with AbstractRouter 2019-02-14 22:31:31 +00:00
Michael 729cd045f1
Convert llarp::Router into an abstract base class 2019-02-06 09:59:47 +00:00
Michael 7ca3e13e78
Rename to ManagedBuffer 2019-02-03 00:48:10 +00:00
Michael f3b0af9d2f
Create CopyableBuffer type 2019-02-02 23:21:35 +00:00
Michael 2de621b0ad
Disable copy constructing llarp_buffer_t 2019-02-01 01:58:13 +00:00
Michael f24f554a01
Convert llarp::Crypto into an abstract base class 2019-01-26 15:40:58 +00:00