|
há 8 anos atrás | |
---|---|---|
examples | há 8 anos atrás | |
src | há 8 anos atrás | |
.gitignore | há 8 anos atrás | |
Cargo.toml | há 8 anos atrás | |
LICENSE-APACHE | há 8 anos atrás | |
LICENSE-MIT | há 8 anos atrás | |
README.md | há 8 anos atrás |
smoltcp is a standalone, event-driven TCP/IP stack that is designed for bare-metal, real-time systems. Its design goals are simplicity and robustness. Its design anti-goals include complicated compile-time computations, such as macro or type tricks, even at cost of performance degradation.
smoltcp is missing many widely deployed features, whether by design or simply because no one implemented them yet. To set expectations right, both implemented and omitted features are listed.
The only supported medium is Ethernet.
IP is not supported yet.
UDP is not supported yet.
TCP is not supported yet.
To use the smoltcp library in your project, add the following to Cargo.toml
:
[dependencies]
smoltcp = "0.1"
smoltcp, being a userspace networking stack, needs to be able to send and receive raw frames. This normally requires superuser privileges, but on Linux it is possible to create a persistent tap interface that can be manipulated by a specific user:
sudo ip tuntap add name tap0 mode tap user $USER
sudo ip link set tap0 up
sudo ip addr add 192.168.69.100 dev tap0
smoltcpdump is a tiny clone of the tcpdump utility.
Unlike the rest of the examples, it uses raw sockets, and so it can be used on regular interfaces,
e.g. eth0
or wlan0
, as well as the tap0
interface we've created above.
Read its source code, then run it as:
cargo build --example smoltcpdump
sudo ./target/debug/smoltcpdump eth0
smoltcpserver emulates a network host that can serve requests.
The host is assigned the hardware address 02-00-00-00-00-01
and IPv4 address 192.168.69.1
.
Read its source code, then run it as:
cargo run --example smoltcpserver -- tap0
It responds to:
ping 192.168.69.1
) (actually not yet).smoltcp is distributed under the terms of both the MIT license and the Apache License (Version 2.0).
See LICENSE-APACHE and LICENSE-MIT for details.