Fast User-Space TCP/UDP Stack

Overview

Catnip

Build Test

Catnip is a TCP/IP stack that focuses on being an embeddable, low-latency solution for user-space networking.

Building and Running

1. Clone This Repository

export WORKDIR=$HOME                                  # Change this to whatever you want.
cd $WORKDIR                                           # Switch to working directory.
git clone https://github.com/demikernel/catnip.git    # Clone.

2. Install Prerequisites

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh    # Get Rust toolchain.

3. Build Catnip

cd $WORKDIR/catnip    # Switch to working directory.
cargo build           # Build catnip.

4. Run Regression Tests

cd $WORKDIR/catnip               # Switch to working directory.
cargo test -- --test-threads 1   # Run with a single-thread.

Code of Conduct

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Usage Statement

This project is a prototype. As such, we provide no guarantees that it will work and you are assuming any risks with using the code. We welcome comments and feedback. Please send any questions or comments to one of the following maintainers of the project:

By sending feedback, you are consenting that it may be used in the further development of this project.

You might also like...
A transparent QUIC to SOCKSv5 proxy on Linux, UDP/QUIC verison of moproxy.

quproxy A transparent QUIC to SOCKSv5 proxy on Linux, UDP/QUIC verison of moproxy. 🚧 WORKING IN PROGRESS 🚧 Features: Transparent forward QUIC to ups

Quick Peer-To-Peer UDP file transfer
Quick Peer-To-Peer UDP file transfer

qft QFT is a small application for Quick (and really reliable) Peer-To-Peer UDP file transfer. If a friend sent you here... ...look at the "Releases"

🦀 A bit more reliable UDP written in Rust

AckUDP [EXPERIMENTAL] A bit more reliable version of UDP written in Rust. How to use? use std::{io, thread, time::Duration}; use ack_udp::AckUdp; #[

SOCKS5 implement library, with some useful utilities such as dns-query, socks5-server, dns2socks, udp-client, etc.

socks5-impl Fundamental abstractions and async read / write functions for SOCKS5 protocol and Relatively low-level asynchronized SOCKS5 server impleme

A high performance TCP SYN port scanner.

Armada A High-Performance TCP SYN scanner What is Armada? Armada is a high performance TCP SYN scanner. This is equivalent to the type of scanning tha

A tcp over http2 + tls proxy

mtunnel A tcp over http2 + tls proxy. Usage 1. get certificates, by following steps. 2. make your config client config: { "local_addr": "127.0.0.1

🤖 brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers

brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers (plain text data). That is, although it can be accessed from a browser, brwrs will not correctly interpret the browser's GET request.

TCP is so widely used, however QUIC may have a better performance.

TCP is so widely used, however QUIC may have a better performance. For softwares which use protocols built on TCP, this program helps them take FULL advantage of QUIC.

Library + CLI-Tool to measure the TTFB (time to first byte) of HTTP requests. Additionally, this crate measures the times of DNS lookup, TCP connect and TLS handshake.

TTFB: CLI + Lib to Measure the TTFB of HTTP/1.1 Requests Similar to the network tab in Google Chrome or Mozilla Firefox, this crate helps you find the

Releases(v1.1)
  • v1.1(Jun 24, 2022)

    What's Changed

    • [tcp] Move Congestion Control Out of Sender and Rename It by @BrianZill in https://github.com/demikernel/inetstack/pull/154
    • [build] Use Formatting Rules for Rust by @ppenna in https://github.com/demikernel/inetstack/pull/156
    • [tcp] Move RtoCalculator and retransmit_deadline from Sender to ControlBlock by @BrianZill in https://github.com/demikernel/inetstack/pull/157
    • [contrib] Updating External Dependencies by @ppenna in https://github.com/demikernel/inetstack/pull/158
    • [tcp] Move sender Module from Subdirectory to Single File by @BrianZill in https://github.com/demikernel/inetstack/pull/159
    • [tcp] Remove Queue Descriptor When Closing a Connection by @ppenna in https://github.com/demikernel/inetstack/pull/161
    • [test] Fault Injection Tests for TCP Layer by @ppenna in https://github.com/demikernel/inetstack/pull/164
    • [ipv4] Don't Fail When Parsing Optional Features by @ppenna in https://github.com/demikernel/inetstack/pull/167
    • [tcp] Fixes Bugs in bind() by @ppenna in https://github.com/demikernel/inetstack/pull/166
    • [tcp] Several Bug Fixes for listen() by @ppenna in https://github.com/demikernel/inetstack/pull/176
    • [ip] Dropping Ipv4Endpoint and Port16 by @ppenna in https://github.com/demikernel/inetstack/pull/177
    • [tcp] Enable Binding to Ephemeral Ports by @ppenna in https://github.com/demikernel/inetstack/pull/179
    • [ip] Don't Reassign the Local Port When Connecting a Bound Socket by @ppenna in https://github.com/demikernel/inetstack/pull/182
    • [ip] Accept Zero as a Wildcard Ephemeral Port in bind() by @ppenna in https://github.com/demikernel/inetstack/pull/181
    • [ip] Fixed Misidentification of Fragments in IPv4 Header Parsing by @BrianZill in https://github.com/demikernel/inetstack/pull/184
    • [contrib] Updating runtime and Dropping UtilsRuntime by @ppenna in https://github.com/demikernel/inetstack/pull/185
    • [contrib] Updating Dependencies, Rust Toolchain and Rust Edition by @ppenna in https://github.com/demikernel/inetstack/pull/186

    Full Changelog: https://github.com/demikernel/inetstack/compare/v1.0...v1.1

    Source code(tar.gz)
    Source code(zip)
  • v1.0(May 18, 2022)

    What's Changed

    • [build] Fixing Various Build Warnings by @ppenna in https://github.com/demikernel/inetstack/pull/21
    • [arp] Improvements on ARP Layer by @ppenna in https://github.com/demikernel/inetstack/pull/11
    • [scheduler] Replacing gen-iter for bit-iter by @ppenna in https://github.com/demikernel/inetstack/pull/24
    • [scheduler] with_timeout() for Futures by @gatoWololo in https://github.com/demikernel/inetstack/pull/26
    • [arp] Disabling ARP Cache Eviction by @ppenna in https://github.com/demikernel/inetstack/pull/29
    • [arp] Refactoring Module by @ppenna in https://github.com/demikernel/inetstack/pull/36
    • [icmpv4] Refactoring Module by @ppenna in https://github.com/demikernel/inetstack/pull/35
    • [tcp] Bad Acknowledgement Scheme by @ppenna in https://github.com/demikernel/inetstack/pull/67
    • [tpc] Bad Fast Retransmission on TCP by @ppenna in https://github.com/demikernel/inetstack/pull/66
    • [catnip] Don't Panic on Zero-Length Buffers by @ppenna in https://github.com/demikernel/inetstack/pull/83
    • [tcp] Don't Reset too Early while Establishing Connection by @ppenna in https://github.com/demikernel/inetstack/pull/86
    • [tcp] Adding send_ack() by @BrianZill in https://github.com/demikernel/inetstack/pull/106
    • [tcp] Fix Numerous Receive Processing Problems by @BrianZill in https://github.com/demikernel/inetstack/pull/123
    • [tcp] Remove Obsolete Closer Closures by @BrianZill in https://github.com/demikernel/inetstack/pull/135
    • [catnip] Move SGA System Calls out of the Source Tree by @ppenna in https://github.com/demikernel/inetstack/pull/136
    • [tcp] Sender Naming by @BrianZill in https://github.com/demikernel/inetstack/pull/137
    • [pdpix] Mismatching Interface by @ppenna in https://github.com/demikernel/inetstack/pull/141
    • [pdpix] wait() and wait_any() System Calls Should Return an Error by @ppenna in https://github.com/demikernel/inetstack/pull/142
    • [tcp] Leaking Queue Descriptor in accept() by @ppenna in https://github.com/demikernel/inetstack/pull/144
    • [tcp] Fixes for Processing of Received ACKs, Receiving Out-of-order Segments, Delayed ACKs, etc. by @BrianZill in https://github.com/demikernel/inetstack/pull/145
    • [tcp] Process Futures at Each Packet by @ppenna in https://github.com/demikernel/inetstack/pull/151

    New Contributors

    • @gatoWololo made their first contribution in https://github.com/demikernel/inetstack/pull/26
    • @liam0215 made their first contribution in https://github.com/demikernel/inetstack/pull/64

    Full Changelog: https://github.com/demikernel/inetstack/commits/v1.0

    Source code(tar.gz)
    Source code(zip)
Owner
Demikernel
Demikernel
Rust implementation of TCP + UDP Proxy Protocol (aka. MMProxy)

mmproxy-rs A Rust implementation of MMProxy! ?? Rationale Many previous implementations only support PROXY Protocol for either TCP or UDP, whereas thi

Saikō Technology 3 Dec 29, 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
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
User-space Wireguard gateway allowing sharing network connection from environment where usual routing rules are inaccessible.

wgslirpy A command line tool (and a Rust library) for accepting incoming connections within a Wireguard link and routing them to external network usin

Vitaly Shukela 4 Aug 21, 2023
A small holepunching implementation written in Rust (UDP)

rust-udp-holepunch A small holepunching implementation written in Rust (UDP) Prerequisites Your rendezvous server must lay in a network which doesn't

Amit Katz 8 Dec 26, 2022
Test the interception/filter of UDP 53 of your local networks or hotspots.

udp53_lookup Test the interception/filter of UDP 53 of your local networks or hotspots. Inspired by BennyThink/UDP53-Filter-Type . What's the purpose?

null 1 Dec 6, 2021
Tachyon is a performant and highly parallel reliable udp library that uses a nack based model

Tachyon Tachyon is a performant and highly parallel reliable udp library that uses a nack based model. Strongly reliable Reliable fragmentation Ordere

Chris Ochs 47 Oct 15, 2022
UDP proxy with Proxy Protocol and mmproxy support

udppp UDP proxy with Proxy Protocol and mmproxy support. Features Async Support Proxy Protocol V2 SOCKET preserve client IP addresses in L7 proxies(mm

b23r0 10 Dec 18, 2022
Stream API for tokio-udp.

UDPflow Stream API for tokio-udp. TCP-like UDP stream use tokio::net::UdpSocket; use tokio::io::{AsyncReadExt, AsyncWriteExt}; use udpflow::{UdpListen

zephyr 5 Dec 2, 2022
Aggressively reliable delivery layer. Above UDP. Nothing else.

Aggressively reliable delivery layer. Above UDP. Nothing else.

IchHabeKeineNamen 2 Jun 5, 2022