#machine #namespaces #tun #packet #adapter #simulator #embed

netsim-embed-machine

Runs a future in a separate network namespace with a TUN adapter

15 releases

0.6.4 Jan 21, 2024
0.6.3 Nov 28, 2022
0.6.2 Jan 11, 2022
0.5.0 Dec 31, 2021
0.1.0 Jul 20, 2020

#1398 in Network programming

Download history 143/week @ 2023-12-18 18/week @ 2024-01-01 10/week @ 2024-01-15 21/week @ 2024-02-12 5/week @ 2024-02-19 22/week @ 2024-02-26 18/week @ 2024-03-11 241/week @ 2024-04-01

259 downloads per month
Used in 2 crates (via netsim-embed)

MIT license

51KB
1.5K SLoC

netsim-embed

A small embeddable network simulator based on the currently unmaintained netsim.

If you get a no such device error make sure that the tun kernel module is loaded (insmod tun) and that the tun device file exists (/dev/net/tun).

Run the example:

cargo run --example smol
    Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/examples/smol`
[2020-07-09T16:09:17Z TRACE netsim_embed_machine::namespace] created network namespace: /proc/10753/task/10850/ns/net
[2020-07-09T16:09:17Z TRACE netsim_embed_machine::namespace] created network namespace: /proc/10753/task/10849/ns/net
[2020-07-09T16:09:17Z INFO  netsim_embed_machine] machine 192.168.1.5: sending packet
[2020-07-09T16:09:17Z INFO  netsim_embed_machine] machine 8.8.8.4: sending packet
[2020-07-09T16:09:17Z INFO  netsim_embed_machine] machine 192.168.1.5: sending packet
[2020-07-09T16:09:17Z INFO  netsim_embed_nat::nat] nat 8.8.8.8: dropping invalid outbound packet
[2020-07-09T16:09:17Z INFO  netsim_embed_router] router 8.8.8.1: dropping unroutable packet to 71.23.170.98
[2020-07-09T16:09:17Z INFO  netsim_embed_router] router 8.8.8.1: dropping unroutable packet to 71.23.170.98
[2020-07-09T16:09:17Z INFO  netsim_embed_nat::nat] nat 8.8.8.8: rewrote packet source address: 192.168.1.5:33542 => 8.8.8.8:49152
[2020-07-09T16:09:17Z INFO  netsim_embed_router] router 8.8.8.1: dropping unroutable packet to 8.8.8.4
[2020-07-09T16:09:17Z INFO  netsim_embed_router] router 8.8.8.1: routing packet on route Ipv4Route { dest: 8.8.8.4/32, gateway: None }
[2020-07-09T16:09:17Z INFO  netsim_embed_machine] machine 8.8.8.4: received packet
received ping
[2020-07-09T16:09:17Z INFO  netsim_embed_machine] machine 8.8.8.4: sending packet
[2020-07-09T16:09:17Z INFO  netsim_embed_router] router 8.8.8.1: routing packet on route Ipv4Route { dest: 8.8.8.8/32, gateway: None }
[2020-07-09T16:09:17Z INFO  netsim_embed_nat::nat] nat 8.8.8.8: rewrote destination of inbound packet 8.8.8.8:49152 => 192.168.1.5:33542.
[2020-07-09T16:09:17Z INFO  netsim_embed_machine] machine 192.168.1.5: received packet
received pong

Enter the network namespace and debug dropped packets with netstat:

sudo nsenter --net=/proc/10753/task/10850/ns/net
[root@dvc-xps13-2020 dvc]# netstat -suna
Udp:
    0 packets received
    0 packets to unknown port received
    0 packet receive errors
    1 packets sent
    0 receive buffer errors
    0 send buffer errors
UdpLite:
IpExt:
    OutOctets: 32
MPTcpExt:

License

MIT OR Apache-2.0


lib.rs:

Small embeddable network simulator.

Dependencies

~9–21MB
~284K SLoC