◈ 9ce92808be498e9e05590ff27cbfdfe4
RNS 1.4.2 released https://pypi.org/project/rns/
Forum / General / Help Testing: Interface Gravity

Help Testing: Interface Gravity

Started by Mark bc7291552be7a58f... ·

Mark bc7291552be7a58f...

The latest source version of RNS of Aleph introduces interface gravity configuration. From the manual:

The gravity option specifies the pathing affinity of an interface. If not set specifically, and unless otherwise configured by default_gravity or autoconnect_interface_gravity, it defaults to 0. Positive values increase pathing affinity, and negative values decrease it.

This means, that each individual interface can now have a gravity value configured, and if multiple interfaces receive the same announce, the interface with the highest gravity wins the path table entry. This is especially useful for operators running transport nodes with public entrypoints, where many users continously connects and disconnects.

For example, since some programs have established a recent trend of just enabling transport by default on everything, this leads to situations where John Doe's phone is now part of your path, as he's strolling down the streets of Maryville. Phone is not doing much, and has a good fast connection right now, so as such, that's actually perfectly within the intended behavior of Reticulum - it delivers the announce most efficiently to the next transport node. Problem only is, in five minutes John enters the subway, and that path is gone.

(Okay okay okay, I know, the whole default transport thing was already fixed, but I'm just poking a bit of fun to illustrate the situation, and from what I can see, a lot of people are actually still running things like that, maybe intentionally, maybe not, who knows?)

Either way, with gravity this is much easier to just configure once, and then forget about. For example:

[reticulum]
  default_gravity = 25                # Default high gravity for our static, known-good peers
  autoconnect_interface_gravity = 15  # Prefer static, but higher priority to auto-connects too

[interfaces]

  # Our internal downlinks gets the
  # highest gravity, so paths nodes
  # there are always reached directly.
  [[Core Downlinks]]
    enabled = yes
    type = BackboneInterface
    mode = internal
    gravity = 50
    device = enp2s0
    port = 41862
    block_fast_flapping = no
    passphrase = udWaydHusBebyotEdLidveb3

  # Two known-good high-performance
  # backbone links, these inherit the
  # default high gravity.
  [[Backbone Peer 1]]
    enabled = yes
    type = BackboneInterface
    mode = gateway
    remote = some.host.tld
    target_port = 4242

  [[Backbone Peer 2]]
    enabled = yes
    type = BackboneInterface
    mode = gateway
    remote = other.place.tld
    target_port = 4242

  # Our public entrypoint is open to
  # the chaos of the world, so this
  # gets a lower gravity than the rest.
  [[Public IPv4]]
    type = BackboneInterface
    mode = gateway
    gravity = 10
    enabled = yes
    device = enp1s0
    port = 4242

It's worth noting that the gravity mechanisms are currently (and intentionally) rather rudimentary. Once the core concepts have been tested, and probably adjusted a bit, it will serve as the basis for much more intelligent behavior, and is a required part of the picture before multi-pathing and path redundancy.

Please also see the other post I just made about dynamic path re-balancing. Any help testing all of this out on transport nodes across the network is much appreciated!

PS: If you, for reasons related to the above, cannot access the latest source code on Aleph, I posted a pre-compiled test wheel here:

https://github.com/markqvist/Sideband/releases/download/1.9.8/rns-1.4.0-py3-none-any.whl

Connecting to nomadnet sites seems to a little more snappy on my backbone server which I'm guessing gravity is responsible for out of the two changes in this version because I won't default to going through some random connection on my public interface.

Question, would it make sense to give a lower gravity to lower bitrate and higher latency interfaces such as I2P or LoRa if you are serving a public interface for either? Would that decision still make sense if you were not a transport node?

Mark bc7291552be7a58f...

Interface gravity can definitely be used on non-transport nodes and normal devices as well to better control the pathing affinity according to whatever you like. For low-bandwidth/high-latency interfaces, it's probably not going to change the pathing decision much in practice though, since path will almost certainly end up going over faster/lower-latency interfaces if destinations are reachable there anyway. But if you have specific needs in that regard, no harm in experimenting with what works best.

Anonymous

Sounds very useful, but I dont fully understand the example. Where would the transport node phone be connected in the config given, and how would interface gravity help here exactly?

Post a Reply

Markdown

Supports Markdown: **bold**, *italic*, `code`, ```code blocks```, [links](url)

Log in to upload images

Proof of work verification for anonymous posting

Copied to clipboard