netavark: A container network stack

Overview

netavark: A container network stack

Netavark is a rust based network stack for containers. It is being designed to work with Podman but is also applicable for other OCI container management applications.

Overview and scope

Netavark is capable of the following given the proper JSON input:

  • Create, manage, and destroy network interfaces including bridge and macvlan
  • Configure firewall (NAT) and port mapping rules
  • Support IPv4 and IPv6

As this project is in very early development, we will add more capabilities in the near future.

Requires

Build

$ make

Latest release

Not applicable yet (TBD)

Latest release

Not applicable yet (TBD)

Communications

For general questions and discussion, please use Podman's channels.

For discussions around issues/bugs and features, you can use the GitHub issues and PRs tracking system.

Comments
  • isolate podman networks

    isolate podman networks

    add support for a new option "isolate", a boolean that determines whether or not a network can send/recieve data outside of its bridge. This is done by creating a new chain "NETAVARK_ISOLATION" that drops external outgoing connections

    resolves #154

    Signed-off-by: cdoern [email protected]

    approved lgtm 
    opened by cdoern 32
  • Use latest aardvark-dns binary

    Use latest aardvark-dns binary

    Instead of using a packaged version of aardvark-dns, we grabbed the latest main branch zip copy and use it instead.

    Signed-off-by: Brent Baude [email protected]

    approved lgtm 
    opened by baude 25
  • deps: add support for `vendor` and use local `vendor` for `deps`

    deps: add support for `vendor` and use local `vendor` for `deps`

    While releasing netavark binary lot of platform does not allows build process to pull deps from upstream repo.

    Vendor and ship dependency locally in a vendor directory and point cargo to use local vendored deps.

    Automatically uses vendor while doing make build or make

    See: https://github.com/containers/netavark/issues/115

    approved lgtm 
    opened by flouthoc 25
  • ipv6 network setup on a system with ipv6 disabled should return useful error message

    ipv6 network setup on a system with ipv6 disabled should return useful error message

    Error in creating container
    
    ➜  ~ cat /etc/redhat-release
    Fedora release 36 (Thirty Six)
    ➜  ~ uname -r
    5.18.17-200.fc36.x86_64
    ➜  ~ uname -a
    Linux localhost.localdomain 5.18.17-200.fc36.x86_64 containers/podman#1 SMP PREEMPT_DYNAMIC Thu Aug 11 14:36:06 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
    
    
    ➜  ~ podman network ls
    NETWORK ID    NAME        DRIVER
    88c9b7b61afd  kind        bridge
    2f259bab93aa  podman      bridge
    ➜  ~ podman inspect kind
    [
         {
              "name": "kind",
              "id": "88c9b7b61afd09229a54869e7f3603416f588848f71343ee2706ca1dc21c1d49",
              "driver": "bridge",
              "network_interface": "podman1",
              "created": "2022-08-21T00:14:12.41086239+08:00",
              "subnets": [
                   {
                        "subnet": "fc00:f853:ccd:e793::/64",
                        "gateway": "fc00:f853:ccd:e793::1"
                   },
                   {
                        "subnet": "10.89.0.0/24",
                        "gateway": "10.89.0.1"
                   }
              ],
              "ipv6_enabled": true,
              "internal": false,
              "dns_enabled": true,
              "ipam_options": {
                   "driver": "host-local"
              }
         }
    ]
    ➜  ~ ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:15:5d:03:5e:28 brd ff:ff:ff:ff:ff:ff
        inet 172.28.28.121/20 brd 172.28.31.255 scope global dynamic noprefixroute eth0
           valid_lft 85030sec preferred_lft 85030sec
    5: podman1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 62:a5:c2:5f:89:9b brd ff:ff:ff:ff:ff:ff
    
    ➜  KIND_EXPERIMENTAL_PROVIDER=podman sudo kind create cluster --config ./config.yml
    enabling experimental podman provider
    Creating cluster "kind" ...
     ✓ Ensuring node image (localhost/kindest/node:22.10.20220801.1.24.3) 🖼
     ✗ Preparing nodes 📦 📦
    ERROR: failed to create cluster: command "podman run --name kind-control-plane --hostname kind-control-plane --label io.x-k8s.kind.role=control-plane --privileged --tmpfs /tmp --tmpfs /run --volume 29eb75650a9b89f0032582a1d5930ac072f5dc8c4bd692a8a87255ebb184196b:/var:suid,exec,dev --volume /lib/modules:/lib/modules:ro -e KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER --detach --tty --net kind --label io.x-k8s.kind.cluster=kind -e container=podman --volume /dev/mapper:/dev/mapper --publish=127.0.0.1:43279:6443/tcp -e KUBECONFIG=/etc/kubernetes/admin.conf localhost/kindest/node:22.10.20220801.1.24.3" failed with error: exit status 126
    Command Output: Error: netavark: failed to configure bridge and veth interface: failed while configuring network interface: failed to set ip address to podman1: Permission denied (os error 13)
    
    stale-issue 
    opened by xiaofan-linux 23
  • dns: start aardvark-dns on a different port

    dns: start aardvark-dns on a different port

    I've taken a stab at a proof of concept first -- as said in the issue about port 53 shouldn't be used (link below) it seems simple enough to use DNAT for this.

    This WIP version has at least two problems:

    • I've hardcoded port 1153 as alternative port, we should either use an ephemeral port (problem: we can't know if it's free unless we try to bind to it, so we'd need some retry...) or simpler just make it configurable at network level as a driver-specific option. I'd favor the later.
    • I'm not actually checking if dns settings are enabled to create the forward rule, that should obviously be checked.

    Is there anything else I missed?

    Fixes: https://github.com/containers/aardvark-dns/issues/13

    approved lgtm 
    opened by martinetd 22
  • netavark, dns: don't `double-fork` aardvark instead wait for the aardvark process to return.

    netavark, dns: don't `double-fork` aardvark instead wait for the aardvark process to return.

    Netavark now does not double-forks aardvark-dns's server instead it waits for aardvark-process to return back and success return means aardvark-dns is ready to serve requests and now forking happens at aardvark end.

    See: https://doc.rust-lang.org/std/process/struct.Command.html#method.spawn

    This needs: https://github.com/containers/aardvark-dns/pull/148

    Should help in:

    • https://github.com/containers/podman/issues/14173
    • https://github.com/containers/podman/issues/14171

    Alternative to: https://github.com/containers/netavark/pull/300

    approved lgtm 
    opened by flouthoc 20
  • static macvlan IP is duplicated after container restart

    static macvlan IP is duplicated after container restart

    repro:

    sudo podman network create macvtest -d macvlan --subnet=fd22::/16
    sudo podman run --net=macvtest:ip=fd22::3 docker.io/nginx 
    

    In a second window run:

    sudo nsenter -t $(pgrep nginx | tail -n1) -p -n ip -6 a
    
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    27: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
        inet6 censored-slaac-address/64 scope global tentative dynamic mngtmpaddr 
           valid_lft 2592000sec preferred_lft 604800sec
        inet6 fd22::3/16 scope global tentative 
           valid_lft forever preferred_lft forever
        inet6 fe80::28a7:41ff:feb3:9497/64 scope link 
           valid_lft forever preferred_lft forever
    

    looks ok, now ctrl+c the nginx and start it again. sudo nsenter -t $(pgrep nginx | tail -n1) -p -n ip -6 a now shows:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    28: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
        inet6 censored-slaac-address/64 scope global dynamic mngtmpaddr 
           valid_lft 2591990sec preferred_lft 604790sec
        inet6 fd22::3/16 scope global dadfailed tentative 
           valid_lft forever preferred_lft forever
        inet6 fe80::54c8:36ff:fe70:2b5b/64 scope link 
           valid_lft forever preferred_lft forever
    

    Notice the dadfailed on eth0. Does this need to be released somehow?

    opened by nivekuil 18
  • Cirrus: Switch CI onto VMs from containers

    Cirrus: Switch CI onto VMs from containers

    Prior to this commit, CI ran entirely in a container environment. This was very much less than ideal, since actual network/firewall manipulations could not be exercised. With this commit, everything will execute on the same VM images and image-build workflow used by all the other containers-org project automations.

    Note: Given all other projects generally use golang, the VM images here are NOT tailored to a rust project. Unfortunately that means performing runtime updates/installs and using cache to reduce the dnf repo. Metadata/package downloading. These aspects can be removed once dedicated netavark VM images are realized and implemented in a future commit.

    approved lgtm 
    opened by cevich 18
  • teardown: implement teardown for removing container interfaces or container `veth`.

    teardown: implement teardown for removing container interfaces or container `veth`.

    Implements teardown which is responsible for removing container interfaces and performing cleanups.

    Usage

    netavark -f <config> teardown <networknamespace>
    
    approved lgtm 
    opened by flouthoc 18
  • core: configure required kernel parameters `accept_ra` and `accept_dad` for `ipv6` not for `ipv4`

    core: configure required kernel parameters `accept_ra` and `accept_dad` for `ipv6` not for `ipv4`

    Explicitly required kernel parameters like accept_ra and accept_dad are only needed for interface when we are using ipv6 not ipv4.

    Standard netavark configuration has a field ipv6_enabled which should be enough for us to propagate configuration to lower utility functions in the stack.

    approved lgtm 
    opened by flouthoc 17
  • aardvark,commit: acquire fs lock when performing commit to avoid `race` across parallel invocations.

    aardvark,commit: acquire fs lock when performing commit to avoid `race` across parallel invocations.

    • We should avoid overriding configs when another instance of aardvark is trying to commit configs on the same path.

    • On certain system a race exists where more than one aardvark instance are started in the frame where one instance has not yet completed updating its aardvark.pid causing more than one instance to get started and eventually causing conflits on the requested ports.

    Some conditions are reported on low power hardware which tries to start a significant amount of containers and it looks like the case matches with what is described in the second point.

    approved lgtm 
    opened by flouthoc 16
  • build(deps): bump tokio from 1.23.0 to 1.24.1

    build(deps): bump tokio from 1.23.0 to 1.24.1

    Bumps tokio from 1.23.0 to 1.24.1.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.24.1

    This release fixes a compilation failure on targets without AtomicU64 when using rustc older than 1.63. (#5356)

    #5356: tokio-rs/tokio#5356

    Tokio v1.24.0

    The highlight of this release is the reduction of lock contention for all I/O operations (#5300). We have received reports of up to a 20% improvement in CPU utilization and increased throughput for real-world I/O heavy applications.

    Fixed

    • rt: improve native AtomicU64 support detection (#5284)

    Added

    • rt: add configuration option for max number of I/O events polled from the OS per tick (#5186)
    • rt: add an environment variable for configuring the default number of worker threads per runtime instance (#4250)

    Changed

    • sync: reduce MPSC channel stack usage (#5294)
    • io: reduce lock contention in I/O operations (#5300)
    • fs: speed up read_dir() by chunking operations (#5309)
    • rt: use internal ThreadId implementation (#5329)
    • test: don't auto-advance time when a spawn_blocking task is running (#5115)

    #5186: tokio-rs/tokio#5186 #5294: tokio-rs/tokio#5294 #5284: tokio-rs/tokio#5284 #4250: tokio-rs/tokio#4250 #5300: tokio-rs/tokio#5300 #5329: tokio-rs/tokio#5329 #5115: tokio-rs/tokio#5115 #5309: tokio-rs/tokio#5309

    Tokio v1.23.1

    This release forward ports changes from 1.18.4.

    Fixed

    • net: fix Windows named pipe server builder to maintain option when toggling pipe mode (#5336).

    #5336: tokio-rs/tokio#5336

    Commits
    • 31c7e82 chore: prepare Tokio v1.24.1 (#5357)
    • 8d8db27 tokio: add load and compare_exchange_weak to loom StaticAtomicU64 (#5356)
    • dfe252d chore: prepare Tokio v1.24.0 release (#5353)
    • 21b233f test: bump version of async-stream (#5347)
    • 7299304 Merge branch 'tokio-1.23.x' into master
    • 1a997ff chore: prepare Tokio v1.23.1 release
    • a8fe333 Merge branch 'tokio-1.20.x' into tokio-1.23.x
    • ba81945 chore: prepare Tokio 1.20.3 release
    • 763bdc9 ci: run WASI tasks using latest Rust
    • 9f98535 Merge remote-tracking branch 'origin/tokio-1.18.x' into fix-named-pipes-1.20
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • build(deps): bump zbus from 3.6.2 to 3.7.0

    build(deps): bump zbus from 3.6.2 to 3.7.0

    Bumps zbus from 3.6.2 to 3.7.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Append file/directory name to missing file/directory error (suggestion)

    Append file/directory name to missing file/directory error (suggestion)

    After reporting a problem with podman-compose (https://github.com/containers/podman-compose/issues/609) that outputs error:

    Error: unable to start container 945f51fa502fc70dfc60ea2b05a2497d6fc0b09506641eadd68cd7e1d6b740a7: netavark: No such file or directory (os error 2)

    I have found with strace that the missing file was iptables. Debian podman package (https://packages.debian.org/bookworm/podman) only suggests iptables package therefore it is not installed by default.

    My suggestion is to append the missing file/directory name to the netavark error for easier debugging.

    opened by ancebfer 3
  • build(deps): bump netavark_proxy from `e38a730` to `dccc2db`

    build(deps): bump netavark_proxy from `e38a730` to `dccc2db`

    Bumps netavark_proxy from e38a730 to dccc2db.

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • build(deps): bump clap from 3.2.23 to 4.0.32

    build(deps): bump clap from 3.2.23 to 4.0.32

    Bumps clap from 3.2.23 to 4.0.32.

    Release notes

    Sourced from clap's releases.

    v4.0.32

    [4.0.32] - 2022-12-22

    Fixes

    • (parser) When overriding required(true), consider args that conflict with its group

    v4.0.31

    [4.0.31] - 2022-12-22

    Performance

    • Speed up parsing when a lot of different flags are present (100 unique flags)

    v4.0.30

    [4.0.30] - 2022-12-21

    Fixes

    • (error) Improve error for args_conflicts_with_subcommand

    v4.0.29

    [4.0.29] - 2022-11-29

    v4.0.28

    [4.0.28] - 2022-11-29

    Fixes

    • Fix wasm support which was broken in 4.0.27

    v4.0.26

    [4.0.26] - 2022-11-16

    Fixes

    • (error) Fix typos in ContextKind::as_str

    v4.0.25

    [4.0.25] - 2022-11-15

    Features

    • (error) Report available subcommands when required subcommand is missing

    v4.0.24

    [4.0.24] - 2022-11-14

    Fixes

    ... (truncated)

    Changelog

    Sourced from clap's changelog.

    [4.0.32] - 2022-12-22

    Fixes

    • (parser) When overriding required(true), consider args that conflict with its group

    [4.0.31] - 2022-12-22

    Performance

    • Speed up parsing when a lot of different flags are present (100 unique flags)

    [4.0.30] - 2022-12-21

    Fixes

    • (error) Improve error for args_conflicts_with_subcommand

    [4.0.29] - 2022-11-29

    [4.0.28] - 2022-11-29

    Fixes

    • Fix wasm support which was broken in 4.0.27

    [4.0.27] - 2022-11-24

    Features

    • Have Arg::value_parser accept Vec<impl Into<PossibleValue>>
    • Implement Display and FromStr for ColorChoice

    Fixes

    • Remove soundness issue by switching from atty to is-terminal

    [4.0.26] - 2022-11-16

    Fixes

    • (error) Fix typos in ContextKind::as_str

    [4.0.25] - 2022-11-15

    Features

    • (error) Report available subcommands when required subcommand is missing

    [4.0.24] - 2022-11-14

    ... (truncated)

    Commits
    • ec4ccf0 chore: Release
    • 13fdb83 docs: Update changelog
    • b877345 Merge pull request #4573 from epage/conflict
    • 85ecb3e fix(parser): Override required when parent group has conflict
    • d145b8b test(parser): Demonstrate required-overload bug
    • 0eccd55 chore: Release
    • 1e37c25 docs: Update changelog
    • dcd5fec Merge pull request #4572 from epage/group
    • dde22e7 style: Update for latest clippy
    • dd8435d perf(parser): Reduce duplicate lookups
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Port forwarding not working when docker is active

    Port forwarding not working when docker is active

    Hi,

    I am not sure this is the right place to ask nor do I know whether this is unexpected for you, but I would like to get your point of view on the following problem I encountered:

    I am in the middle of moving Docker container workloads to podman 4.3.1 using netavark as network backend. Some containers are still running in docker, while another one, a postgresql database that for dubious reasons exposes its database to the host port and to another container on its own network, has been moved to podman. When Docker is not running, assigning the database container to the network, while publishing port 5432 on the host using -p 5432:5432 works exactly as expected (meaning: pointing an external postgresql client to the host works as if the database is running on the host). However, when I start Docker, the port forward on the host to the podman container stops working. Connecting directly to the database container still works. None of the containers still running in Docker publish to the host's port (not to port 5432 nor to any other one).

    My guess is that Docker overwrites the port forward in the firewall to the podman container. I do not know how to debug this further or fix this though. Do you have ideas/remarks/workarounds that could support this hybrid situation until all of them have been moved to podman?

    opened by bverhagen 4
Releases(v1.4.0)
Owner
Containers
Open Repository for Container Tools
Containers
A tool for defining and running multi-container Docker applications

Ikki Ikki is a tool for defining and running multi-container Docker applications. It is similar to Docker Compose but comes with some differences. Goa

Kirill Vasiltsov 39 Dec 21, 2022
Docker containers on a synthetic network. Run applications in a context that lets you manipulate their network conditions.

Synthetic Network Docker containers on a synthetic network. Run applications in a context that lets you manipulate their network conditions. Dependenc

Daily 58 Dec 15, 2022
a smol tcp/ip stack

smoltcp smoltcp is a standalone, event-driven TCP/IP stack that is designed for bare-metal, real-time systems. Its design goals are simplicity and rob

smoltcp 2.8k Jan 4, 2023
The Rust Implementation of libp2p networking stack.

Central repository for work on libp2p This repository is the central place for Rust development of the libp2p spec. Warning: While we are trying our b

libp2p 3k Jan 4, 2023
Fast User-Space TCP/UDP Stack

Catnip Catnip is a TCP/IP stack that focuses on being an embeddable, low-latency solution for user-space networking. Building and Running 1. Clone Thi

Demikernel 79 Sep 9, 2022
RusTCP is an attempt to rewrite some of the PyTCP stack functionality using Rust language.

RusTCP is an attempt to rewrite some of the PyTCP stack functionality using Rust language. Currently, the main goal of this project is to create a stable IPv6 platform that could be used to facilitate the process of labing the SRv6 technology.

Sebastian Majewski 3 Dec 5, 2022
Network simulation in Rust

netsim - A Rust library for network simulation and testing (currently linux-only). netsim is a crate for simulating networks for the sake of testing n

Andrew Cann 115 Dec 15, 2022
A private network system that uses WireGuard under the hood.

innernet A private network system that uses WireGuard under the hood. See the announcement blog post for a longer-winded explanation. innernet is simi

Tonari, Inc 4.1k Dec 29, 2022
A Curve-like AMM for Secret Network

A Curve-like AMM for Secret Network. Supports a varibale number of tokens with the same underlying value.

Enigma 16 Dec 11, 2022
A multi-protocol network relay

A multi-protocol network relay

zephyr 43 Dec 13, 2022
A Rust library for parsing the SOME/IP network protocol (without payload interpretation).

someip_parse A Rust library for parsing the SOME/IP network protocol (without payload interpretation). Usage Add the following to your Cargo.toml: [de

Julian Schmid 18 Oct 31, 2022
Computational Component of Polkadot Network

Gear is a new Polkadot/Kusama parachain and most advanced L2 smart-contract engine allowing anyone to launch any dApp for networks with untrusted code.

null 145 Dec 19, 2022
Fullstack development framework for UTXO-based dapps on Nervos Network

Trampoline-rs The framework for building powerful dApps on the number one UTXO chain, Nervos Network CKB. This is an early-stage, currently very incom

TannrA 2 Mar 25, 2022
Official Implementation of Findora Network.

Findora Platform Wiki Contribution Guide Licensing The primary license for Platform is the Business Source License 1.1 (BUSL-1.1), see LICENSE. Except

Findora Foundation 61 Dec 9, 2022
Simple in-network file transfer with barely any overhead.

fftp fftp is the "Fast File Transport Protocol". It transfers files quickly between computers on a network with low overhead. Motivation FTP uses two

leo 4 May 12, 2022
A cross-platform, user-space WireGuard port-forwarder that requires no system network configurations.

Cross-platform, user-space WireGuard port-forwarder that requires no system network configurations.

Aram Peres 629 Jan 4, 2023
An implementation of the CESS network supported by CESS LAB.

--------- ?? ---------An infrastructure of decentralized cloud data network built with Substrate-------- ?? -------- ---------------- ?? -------------

Cess Project 249 Dec 26, 2022
A small utility to wake computers up or put them to sleep over the local network

WKSL - a wake and sleep utility An experiment in writing a small CLI utility in Rust. The program lets you wake a machine on your local network up fro

Henrik Ravn 0 Nov 14, 2021
Private swaps for Secret Network using a private entropy pool & differential privacy.

WIP SecretSwap: Anon Edition Private swaps for Secret Network! Uses private entropy pool for differential privacy when reporting pools sizes. Swap amo

SCRT Labs 5 Apr 5, 2022