Releases: threefoldtech/mycelium
Releases · threefoldtech/mycelium
v0.5.7
v0.5.6
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
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 nowutun0
. - 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
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
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
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
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
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
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
Changed
- The amount of bytes read and written to a peer are now no longer reset after
a reconnect (for outgoing connection). - Renamed
connectionTxBytes
andconnectionRxBytes
on the peer stats struct
totxBytes
andrxBytes
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.