Skip to content

Releases: threefoldtech/mycelium

v0.5.7

31 Oct 13:39
v0.5.7
8a2b564
Compare
Choose a tag to compare

Fixed

  • Properly set the interface ipv6 MTU on windows.

v0.5.6

03 Oct 11:00
v0.5.6
b79dee8
Compare
Choose a tag to compare

Fixed

  • Fix a panic in the route cleanup task when a peer dies who is the last stored
    announcer of a subnet.

v0.5.5

27 Sep 09:08
v0.5.5
b056f67
Compare
Choose a tag to compare

Added

  • Mycelium-ui, a standalone GUI which exposes (part of) the mycelium API. This
    does not have a bundled mycelium node, so that needs to be run separately.

Changed

  • Default TUN name on Linux and Windows is now mycelium. On MacOS it is now utun0.
  • TUN interface name validation on MacOS. If the user supplies an invalid or already
    taken interface name, an available interface name will be automatically assigned.

Fixed

  • Release flow to create the Windows installer now properly extracts wintun
  • Guard against a race condition when a route is deleted which could rarely
    trigger a panic and subsequent memory leak.

v0.5.4

20 Aug 15:06
v0.5.4
0df69a1
Compare
Choose a tag to compare

Added

  • Quic protocol can now be disabled using the --disable-quic flag
  • Mycelium can now be started with a configuration file using --config-file.
    If no configuration file is supplied, Mycelium will look in a default location
    based on the OS. For more information see README
  • Windows installer for Mycelium. The .msi file can be downloaded from the release
    assets.
  • Added flag to specify how many update workers should be started, which governs
    the amount of parallelism used for processing updates.
  • Send a seqno request if we receive an unfeasible update for a subnet with no
    routes, or if there is no selected route for the subnet.
  • New public peers in US, India, and Singapore.

Changed

  • Increased the starting metric of a peer from 50 to 1000.
  • Reworked the internals of the routing table, which should reduce memory consumption.
    Additionally, it is now possible to apply updates in parallel
  • Periodically reduce the allocated size of the seqno cache to avoid wasting some
    memory which is not currently used by the cache but still allocated.
  • Demote seqno cache warnings about duplicate seqno requests go debug lvl, as it
    is valid to send duplicate requests if sufficient time passed.
  • Skip route selection after an unfeasible update to a fallback route, as the (now
    unfeasible) route won't be selected anyway.
  • No longer refresh route timer after an unfeasbile update. This allows routes
    which have become unfeasible to gracefully be removed from the routing table
    over time.
  • Expired routes which aren't selected are now immediately removed from the routing
    table.
  • Changed how updates are sent to be more performant.
  • A triggered update is no longer sent just because a route sequence number got
    increased. We do still send the update to peer in the seqno request cache.
  • Reduced log level when a route changes next-hop to debug from info.

Fixed

  • When running mycelium with a command, a keyfile was loaded (or created, if not
    yet present). This was not necessary in that context.
  • Limit the amount of time allowed for inbound quic connections to be set up, and
    process multiple of them in parallel. This fixes a DOS vector against the quic
    listener.
  • We now update the source table even if we don't send an update because we are
    sure the receiver won't select us as a next-hop anyway.

v0.5.3

07 Jun 08:56
v0.5.3
b3aaff8
Compare
Choose a tag to compare

Added

  • On Linux and macOS, a more descriptive error is printed when setting up the tun
    device fails because a device with the same name already exists.
  • Seqno request cache, to avoid spamming peers with duplicate seqno requests and
    to make sure seqno's are forwarded to different peers.
  • Added myceliumd-private binary, which contains private network functionality.
  • Added API endpoint to retrieve the public key associated with an IP.
  • The CLI can now be used to list, remove or add peers (see mycelium peers --help)
  • The CLI can now be used to list selected and fallback routes (see mycelium routes --help)

Changed

  • We now send seqno requests to all peers who advertised a subnet if the selected
    route to it is lost as a result of the next-hop dying, or and update coming in
    which causes no routes to be feasible anymore.
  • Switched from the log to the tracing ecosystem.
  • Only do the periodic route announcement every 5 minutes instead of every minute.
  • Mycelium binary is no longer part of the workspace, and no longer contains private
    network functionality.
  • If a packet received from a peer can't be forwarded to the router, terminate the
    connection to the peer.

Fixed

  • Manually implement Hash for Subnet, previously we could potentially have multiple
    distinct entries in the source table for the same source key.

v0.5.2

03 May 09:50
v0.5.2
adf8fc4
Compare
Choose a tag to compare

Added

  • New CI workflow to build and test the mycelium library separately from the full
    provided binary build.

Changed

  • Disabled the protobuf feature on prometheus, this removes protobuf related code
    and significantly reduces the release binary size.
  • Changed log level when sending a protocol message to a peer which is no longer
    alive from error to trace in most instances.
  • Improved performance of sending protocol messages to peers by queueing up multiple
    packets at once (if multiple are ready).
  • Before trying to send an update we now check if it makes sense to do so.
  • If a peer died, fallback routes using it are no longer retained with an infinite
    metric but removed immediately.
  • No longer run route selection for subnets if a peer died and the route is not
    selected.
  • If routes are removed, shrink the capacity of the route list in the route table
    if it is larger than required.
  • Check if the originator of a TLV is still available before processing said TLV.
  • The router now uses a dedicated task per TLV type to handle received TLV's from
    peers.
  • Statically linking openssl is now a feature flag when building yourself.

Fixed

  • If a peer died, unselect the selected routes which have it as next-hop if there
    is no other feasible route.
  • Properly unselect a route if a retraction update comes in and there is no other
    feasible route.
  • If the router bumps it's seqno it now properly announces the local route to it's
    peers instead of the selected routes
  • Seqno bump requests for advertised local routes now properly bump the router
    seqno.

v0.5.1

19 Apr 14:00
v0.5.1
0dbe64e
Compare
Choose a tag to compare

Added

  • The repo is now a workspace, and pure library code is separated out. This is mainly
    done to make it easier to develop implementations on different platforms.
  • Link local discovery will now send discovery beacons on every interface the process
    listens on for remote beacons.
  • Experimental private network support. See the private network docs
    for more info.
  • You can now optionally expose Prometheus compatible metrics about the system by
    setting the --metrics-api-address flag.
  • On Linux, you can now set an optional firewall mark by setting the --firewall-mark
    flag.
  • Added a nix flake to the repo.

Changed

  • We no longer create an outbound connection to a link local discovered IP if that
    IP is already known (usually as inbound address) with potentially a different
    port.

v0.5.0

04 Apr 09:14
v0.5.0
9972e88
Compare
Choose a tag to compare

Changed

  • Connection identifier is now included in the error log if we can't forward a
    seqno request.
  • Garbage collection time for source entries has been increased from 5 to 30 minutes
    for now.
  • The router implementation has been changed to use regular locks instead of an
    always readable concurrency primitive for all but the actual routing table. This
    should reduce the memory consumption a bit.
  • Public key and shared secret for a destination are now saved on the router, instead
    of maintaining a separate mapping for them. This slightly reduces memory consumption
    of the router, and ensures stale data is properly cleaned up when all routes to
    a subnet are removed.
  • Hello packets now set the interval in which the next Hello will be sent properly
    in centiseconds.
  • IHU packets now set the interval properly in centiseconds.
  • IHU packets now set an RX cost. For now this is the link cost, in the future
    this will be set properly.
  • Route expiration time is now calculated from the interval received in updates.
  • Ip address derivation from public keys now uses the blake3 hash algorithm.

Fixed

  • Don't try to forward seqno requests to a peer if we know its connection is dead.

v0.4.5

26 Mar 14:18
v0.4.5
9efeead
Compare
Choose a tag to compare

Changed

  • Size of data packets is limited to 65535 bytes.
  • Update interval is now expressed as centiseconds, in accordance with the babel
    RFC.
  • Update filters now allow retractions for a route from any router-id.

Fixed

  • The feasibility distance of an existing source key is no longer incorrectly updated
    when the metric increases.
  • Source key garbage collection timers are properly reset on update even if the
    source key itself is not updated.
  • Nodes now properly reply to route requests for a static route.
  • A retraction is now sent as reply to a route request if the route is not known.

v0.4.4

22 Mar 14:22
v0.4.4
4a3f4cf
Compare
Choose a tag to compare

Changed

  • The amount of bytes read and written to a peer are now no longer reset after
    a reconnect (for outgoing connection).
  • Renamed connectionTxBytes and connectionRxBytes on the peer stats struct
    to txBytes and rxBytes to better express that they are no longer tied to
    a single connection to the peer.

Fixed

  • When joining a link local multicast group on an interface returns a
    Address already in use error, the error is now ignored and the interface is
    considered to be joined.
  • When sending an update to a peer, the source table is now correctly updated before
    the update is sent, instead of doing a batched source table update afterward.