Skip to content

Commit 34d0962

Browse files
committed
Separate out TestDevice and unix-specific devices
1 parent 02c6297 commit 34d0962

34 files changed

+310
-328
lines changed

Cargo.toml

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[workspace]
2-
members = ["smoltcp-device"]
2+
members = ["smoltcp-device", "smoltcp-device-mock", "smoltcp-device-unix"]
33

44
[package]
55
name = "smoltcp"
@@ -42,18 +42,19 @@ rstest = "0.17"
4242
insta = "1.41.1"
4343
rand_chacha = "0.3.1"
4444
idna = { version = "=1.0.1" }
45+
smoltcp-device-mock = { path = "smoltcp-device-mock" }
46+
47+
[target.'cfg(unix)'.dev-dependencies]
48+
smoltcp-device-unix = { path = "smoltcp-device-unix" }
4549

4650
[features]
4751
std = ["managed/std", "alloc", "smoltcp-device/std"]
4852
alloc = ["managed/alloc", "defmt?/alloc"]
4953
verbose = []
5054
defmt = ["dep:defmt", "heapless/defmt-03", "smoltcp-device/defmt"]
51-
"medium-ethernet" = ["socket", "smoltcp-device/requires-medium-ethernet"]
52-
"medium-ip" = ["socket", "smoltcp-device/requires-medium-ip"]
53-
"medium-ieee802154" = ["socket", "proto-sixlowpan", "smoltcp-device/requires-medium-ieee802154"]
54-
55-
"phy-raw_socket" = ["std", "libc", "smoltcp-device/provides-medium-ethernet", "smoltcp-device/provides-medium-ieee802154", "smoltcp-device/provides-medium-ip", "medium-ethernet", "medium-ieee802154", "medium-ip"]
56-
"phy-tuntap_interface" = ["std", "libc", "medium-ethernet"]
55+
"medium-ethernet" = ["socket", "smoltcp-device/requires-medium-ethernet", "smoltcp-device-mock/medium-ethernet", "smoltcp-device-unix/medium-ethernet"]
56+
"medium-ip" = ["socket", "smoltcp-device/requires-medium-ip", "smoltcp-device-mock/medium-ip", "smoltcp-device-unix/medium-ip"]
57+
"medium-ieee802154" = ["socket", "proto-sixlowpan", "smoltcp-device/requires-medium-ieee802154", "smoltcp-device-mock/medium-ieee802154", "smoltcp-device-unix/medium-ieee802154"]
5758

5859
"proto-ipv4" = []
5960
"proto-ipv4-fragmentation" = ["proto-ipv4", "_proto-fragmentation"]
@@ -104,7 +105,6 @@ defmt = ["dep:defmt", "heapless/defmt-03", "smoltcp-device/defmt"]
104105
default = [
105106
"std", "log", # needed for `cargo test --no-default-features --features default` :/
106107
"medium-ethernet", "medium-ip", "medium-ieee802154",
107-
"phy-raw_socket", "phy-tuntap_interface",
108108
"proto-ipv4", "proto-dhcpv4", "proto-ipv6", "proto-dns",
109109
"proto-ipv4-fragmentation", "proto-sixlowpan-fragmentation",
110110
"socket-raw", "socket-icmp", "socket-udp", "socket-tcp", "socket-dhcpv4", "socket-dns", "socket-mdns",
@@ -117,6 +117,7 @@ default = [
117117

118118
"_proto-fragmentation" = []
119119

120+
# Prevents running netsim (slow) with the other tests.
120121
"_netsim" = []
121122

122123
# BEGIN AUTOGENERATED CONFIG FEATURES
@@ -289,59 +290,59 @@ required-features = ["std"]
289290

290291
[[example]]
291292
name = "tcpdump"
292-
required-features = ["std", "phy-raw_socket", "proto-ipv4"]
293+
required-features = ["std", "log", "medium-ethernet", "proto-ipv4"]
293294

294295
[[example]]
295296
name = "httpclient"
296-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "proto-ipv6", "socket-tcp"]
297+
required-features = ["std", "log", "medium-ethernet", "medium-ip", "proto-ipv4", "proto-ipv6", "socket-tcp"]
297298

298299
[[example]]
299300
name = "ping"
300-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "proto-ipv6", "socket-icmp"]
301+
required-features = ["std", "log", "medium-ethernet", "medium-ip", "proto-ipv4", "proto-ipv6", "socket-icmp"]
301302

302303
[[example]]
303304
name = "server"
304-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "socket-tcp", "socket-udp"]
305+
required-features = ["std", "log", "medium-ethernet", "medium-ip", "proto-ipv4", "socket-tcp", "socket-udp"]
305306

306307
[[example]]
307308
name = "client"
308-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "socket-tcp", "socket-udp"]
309+
required-features = ["std", "log", "medium-ethernet", "medium-ip", "proto-ipv4", "socket-tcp", "socket-udp"]
309310

310311
[[example]]
311312
name = "loopback"
312-
required-features = ["log", "medium-ethernet", "proto-ipv4", "socket-tcp"]
313+
required-features = ["log", "medium-ethernet", "medium-ip", "medium-ieee802154", "proto-ipv4", "socket-tcp"]
313314

314315
[[example]]
315316
name = "loopback_benchmark"
316-
required-features = ["std", "log", "medium-ethernet", "proto-ipv4", "socket-tcp"]
317+
required-features = ["std", "log", "medium-ethernet", "medium-ip", "medium-ieee802154", "proto-ipv4", "socket-tcp"]
317318

318319
[[example]]
319320
name = "multicast"
320-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "multicast", "socket-udp"]
321+
required-features = ["std", "log", "medium-ethernet", "medium-ip", "proto-ipv4", "multicast", "socket-udp"]
321322

322323
[[example]]
323324
name = "multicast6"
324-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv6", "socket-udp"]
325+
required-features = ["std", "log", "medium-ethernet", "medium-ip", "proto-ipv6", "socket-udp"]
325326

326327
[[example]]
327328
name = "benchmark"
328-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "socket-raw", "socket-udp"]
329+
required-features = ["std", "log", "medium-ethernet", "medium-ip", "proto-ipv4", "socket-raw", "socket-udp"]
329330

330331
[[example]]
331332
name = "dhcp_client"
332-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "proto-dhcpv4", "socket-raw"]
333+
required-features = ["std", "log", "medium-ethernet", "medium-ip", "proto-ipv4", "proto-dhcpv4", "socket-raw"]
333334

334335
[[example]]
335336
name = "sixlowpan"
336-
required-features = ["std", "medium-ieee802154", "phy-raw_socket", "proto-sixlowpan", "proto-sixlowpan-fragmentation", "socket-udp"]
337+
required-features = ["std", "log", "medium-ethernet", "medium-ieee802154", "medium-ip", "proto-sixlowpan", "proto-sixlowpan-fragmentation", "socket-udp"]
337338

338339
[[example]]
339340
name = "sixlowpan_benchmark"
340-
required-features = ["std", "medium-ieee802154", "phy-raw_socket", "proto-sixlowpan", "proto-sixlowpan-fragmentation", "socket-udp"]
341+
required-features = ["std", "log", "medium-ethernet", "medium-ieee802154", "medium-ip", "proto-sixlowpan", "proto-sixlowpan-fragmentation", "socket-udp"]
341342

342343
[[example]]
343344
name = "dns"
344-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "socket-dns"]
345+
required-features = ["std", "log", "medium-ethernet", "medium-ip", "proto-ipv4", "socket-dns"]
345346

346347
[profile.release]
347348
debug = 2

ci.sh

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,33 +15,34 @@ RUSTC_VERSIONS=(
1515
FEATURES_TEST=(
1616
"default"
1717
"std,proto-ipv4"
18-
"std,medium-ethernet,phy-raw_socket,proto-ipv6,socket-udp,socket-dns,smoltcp-device/provides-medium-ethernet"
19-
"std,medium-ethernet,phy-tuntap_interface,proto-ipv6,socket-udp,smoltcp-device/provides-medium-ethernet"
20-
"std,medium-ethernet,proto-ipv4,proto-ipv4-fragmentation,socket-raw,socket-dns,smoltcp-device/provides-medium-ethernet"
21-
"std,medium-ethernet,proto-ipv4,multicast,socket-raw,socket-dns,smoltcp-device/provides-medium-ethernet"
22-
"std,medium-ethernet,proto-ipv4,socket-udp,socket-tcp,socket-dns,smoltcp-device/provides-medium-ethernet"
23-
"std,medium-ethernet,proto-ipv4,proto-dhcpv4,socket-udp,smoltcp-device/provides-medium-ethernet"
24-
"std,medium-ethernet,medium-ip,medium-ieee802154,proto-ipv6,multicast,proto-rpl,socket-udp,socket-dns,smoltcp-device/provides-medium-ethernet,smoltcp-device/provides-medium-ip,smoltcp-device/provides-medium-ieee802154"
25-
"std,medium-ethernet,proto-ipv6,socket-tcp,smoltcp-device/provides-medium-ethernet"
26-
"std,medium-ethernet,medium-ip,proto-ipv4,socket-icmp,socket-tcp,smoltcp-device/provides-medium-ethernet,smoltcp-device/provides-medium-ip"
27-
"std,medium-ip,proto-ipv6,socket-icmp,socket-tcp,smoltcp-device/provides-medium-ip"
28-
"std,medium-ieee802154,proto-sixlowpan,socket-udp,smoltcp-device/provides-medium-ieee802154"
29-
"std,medium-ieee802154,proto-sixlowpan,proto-sixlowpan-fragmentation,socket-udp,smoltcp-device/provides-medium-ieee802154"
30-
"std,medium-ieee802154,proto-rpl,proto-sixlowpan,proto-sixlowpan-fragmentation,socket-udp,smoltcp-device/provides-medium-ieee802154"
31-
"std,medium-ip,proto-ipv4,proto-ipv6,socket-tcp,socket-udp,smoltcp-device/provides-medium-ip"
32-
"std,medium-ethernet,medium-ip,medium-ieee802154,proto-ipv4,proto-ipv6,multicast,proto-rpl,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async,smoltcp-device/provides-medium-ethernet,smoltcp-device/provides-medium-ip,smoltcp-device/provides-medium-ieee802154"
33-
"std,medium-ip,proto-ipv4,proto-ipv6,multicast,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async,smoltcp-device/provides-medium-ip"
34-
"std,medium-ieee802154,medium-ip,proto-ipv4,socket-raw,smoltcp-device/provides-medium-ieee802154,smoltcp-device/provides-medium-ip"
35-
"std,medium-ethernet,proto-ipv4,proto-ipsec,socket-raw,smoltcp-device/provides-medium-ethernet"
18+
"std,medium-ethernet,proto-ipv6,socket-udp,socket-dns"
19+
"std,medium-ethernet,proto-ipv6,socket-udp"
20+
"std,medium-ethernet,proto-ipv4,proto-ipv4-fragmentation,socket-raw,socket-dns"
21+
"std,medium-ethernet,proto-ipv4,multicast,socket-raw,socket-dns"
22+
"std,medium-ethernet,proto-ipv4,socket-udp,socket-tcp,socket-dns"
23+
"std,medium-ethernet,proto-ipv4,proto-dhcpv4,socket-udp"
24+
"std,medium-ethernet,medium-ip,medium-ieee802154,proto-ipv6,multicast,proto-rpl,socket-udp,socket-dns"
25+
"std,medium-ethernet,proto-ipv6,socket-tcp"
26+
"std,medium-ethernet,medium-ip,proto-ipv4,socket-icmp,socket-tcp"
27+
"std,medium-ip,proto-ipv6,socket-icmp,socket-tcp"
28+
"std,medium-ieee802154,proto-sixlowpan,socket-udp"
29+
"std,medium-ieee802154,proto-sixlowpan,proto-sixlowpan-fragmentation,socket-udp"
30+
"std,medium-ieee802154,proto-rpl,proto-sixlowpan,proto-sixlowpan-fragmentation,socket-udp"
31+
"std,medium-ip,proto-ipv4,proto-ipv6,socket-tcp,socket-udp"
32+
"std,medium-ethernet,medium-ip,medium-ieee802154,proto-ipv4,proto-ipv6,multicast,proto-rpl,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async"
33+
"std,medium-ip,proto-ipv4,proto-ipv6,multicast,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async"
34+
"std,medium-ieee802154,medium-ip,proto-ipv4,socket-raw"
35+
"std,medium-ethernet,proto-ipv4,proto-ipsec,socket-raw"
3636
)
3737

3838
FEATURES_TEST_NIGHTLY=(
39-
"alloc,medium-ethernet,proto-ipv4,proto-ipv6,socket-raw,socket-udp,socket-tcp,socket-icmp,smoltcp-device/provides-medium-ethernet"
39+
"alloc,medium-ethernet,proto-ipv4,proto-ipv6,socket-raw,socket-udp,socket-tcp,socket-icmp"
4040
)
4141

4242
FEATURES_CHECK=(
4343
"medium-ip,medium-ethernet,medium-ieee802154,proto-ipv6,proto-ipv6,multicast,proto-dhcpv4,proto-ipsec,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async,smoltcp-device/provides-medium-ethernet,smoltcp-device/provides-medium-ip,smoltcp-device/provides-medium-ieee802154"
4444
"defmt,medium-ip,medium-ethernet,proto-ipv6,proto-ipv6,multicast,proto-dhcpv4,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async,smoltcp-device/provides-medium-ethernet,smoltcp-device/provides-medium-ip"
45+
"log,medium-ip,medium-ethernet,proto-ipv6,proto-ipv6,multicast,proto-dhcpv4,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async,smoltcp-device/provides-medium-ethernet,smoltcp-device/provides-medium-ip"
4546
"defmt,alloc,medium-ip,medium-ethernet,proto-ipv6,proto-ipv6,multicast,proto-dhcpv4,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async,smoltcp-device/provides-medium-ethernet,smoltcp-device/provides-medium-ip"
4647
"medium-ieee802154,proto-sixlowpan,socket-dns,smoltcp-device/provides-medium-ieee802154"
4748
)
@@ -50,6 +51,8 @@ test() {
5051
local version=$1
5152
rustup toolchain install $version
5253

54+
cargo +$version test -p smoltcp-device
55+
5356
for features in ${FEATURES_TEST[@]}; do
5457
cargo +$version test --no-default-features --features "$features"
5558
done
@@ -99,6 +102,8 @@ build_16bit() {
99102
}
100103

101104
coverage() {
105+
cargo llvm-cov --no-report -p smoltcp-device
106+
cargo llvm-cov --no-report -p smoltcp-device --features std
102107
for features in ${FEATURES_TEST[@]}; do
103108
cargo llvm-cov --no-report --no-default-features --features "$features"
104109
done

examples/benchmark.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ use std::sync::atomic::{AtomicBool, Ordering};
88
use std::thread;
99

1010
use smoltcp::iface::{Config, Interface, SocketSet};
11-
use smoltcp::phy::{wait as phy_wait, Device, Medium};
1211
use smoltcp::socket::tcp;
1312
use smoltcp::time::{Duration, Instant};
1413
use smoltcp::wire::{EthernetAddress, IpAddress, IpCidr};
14+
use smoltcp_device::{Device, Medium};
15+
use smoltcp_device_unix::wait as phy_wait;
1516

1617
const AMOUNT: usize = 1_000_000_000;
1718

examples/client.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ use std::os::unix::io::AsRawFd;
55
use std::str::{self, FromStr};
66

77
use smoltcp::iface::{Config, Interface, SocketSet};
8-
use smoltcp::phy::{wait as phy_wait, Device, Medium};
98
use smoltcp::socket::tcp;
109
use smoltcp::time::Instant;
1110
use smoltcp::wire::{EthernetAddress, IpAddress, IpCidr, Ipv4Address, Ipv6Address};
11+
use smoltcp_device::{Device, Medium};
12+
use smoltcp_device_unix::wait as phy_wait;
1213

1314
fn main() {
1415
utils::setup_logging("");

examples/dhcp_client.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@ use std::os::unix::io::AsRawFd;
66

77
use smoltcp::iface::{Config, Interface, SocketSet};
88
use smoltcp::socket::dhcpv4;
9+
use smoltcp::time::Duration;
910
use smoltcp::time::Instant;
1011
use smoltcp::wire::{EthernetAddress, IpCidr, Ipv4Cidr};
11-
use smoltcp::{
12-
phy::{wait as phy_wait, Device, Medium},
13-
time::Duration,
14-
};
12+
use smoltcp_device::{Device, Medium};
13+
use smoltcp_device_unix::wait as phy_wait;
1514

1615
fn main() {
1716
#[cfg(feature = "log")]

examples/dns.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
mod utils;
22

33
use smoltcp::iface::{Config, Interface, SocketSet};
4-
use smoltcp::phy::Device;
5-
use smoltcp::phy::{wait as phy_wait, Medium};
64
use smoltcp::socket::dns::{self, GetQueryResultError};
75
use smoltcp::time::Instant;
86
use smoltcp::wire::{DnsQueryType, EthernetAddress, IpAddress, IpCidr, Ipv4Address, Ipv6Address};
7+
use smoltcp_device::{Device, Medium};
8+
use smoltcp_device_unix::wait as phy_wait;
99
use std::os::unix::io::AsRawFd;
1010

1111
fn main() {

examples/httpclient.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ use std::str::{self, FromStr};
66
use url::Url;
77

88
use smoltcp::iface::{Config, Interface, SocketSet};
9-
use smoltcp::phy::{wait as phy_wait, Device, Medium};
109
use smoltcp::socket::tcp;
1110
use smoltcp::time::Instant;
1211
use smoltcp::wire::{EthernetAddress, IpAddress, IpCidr, Ipv4Address, Ipv6Address};
12+
use smoltcp_device::{Device, Medium};
13+
use smoltcp_device_unix::wait as phy_wait;
1314

1415
fn main() {
1516
utils::setup_logging("");

examples/multicast.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ mod utils;
33
use std::os::unix::io::AsRawFd;
44

55
use smoltcp::iface::{Config, Interface, SocketSet};
6-
use smoltcp::phy::{wait as phy_wait, Device, Medium};
6+
use smoltcp::phy::{Device, Medium};
77
use smoltcp::socket::{raw, udp};
88
use smoltcp::time::Instant;
99
use smoltcp::wire::{
1010
EthernetAddress, IgmpPacket, IgmpRepr, IpAddress, IpCidr, IpProtocol, IpVersion, Ipv4Address,
1111
Ipv4Packet, Ipv6Address,
1212
};
13+
use smoltcp_device_unix::wait as phy_wait;
1314

1415
const MDNS_PORT: u16 = 5353;
1516
const MDNS_GROUP: Ipv4Address = Ipv4Address::new(224, 0, 0, 251);

examples/multicast6.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ mod utils;
33
use std::os::unix::io::AsRawFd;
44

55
use smoltcp::iface::{Config, Interface, SocketSet};
6-
use smoltcp::phy::wait as phy_wait;
76
use smoltcp::phy::{Device, Medium};
87
use smoltcp::socket::udp;
98
use smoltcp::time::Instant;
109
use smoltcp::wire::{EthernetAddress, IpAddress, IpCidr, Ipv6Address};
10+
use smoltcp_device_unix::wait as phy_wait;
1111

1212
// Note: If testing with a tap interface in linux, you may need to specify the
1313
// interface index when addressing. E.g.,

examples/ping.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use std::os::unix::io::AsRawFd;
88
use std::str::FromStr;
99

1010
use smoltcp::iface::Config;
11-
use smoltcp::phy::wait as phy_wait;
1211
use smoltcp::phy::Device;
1312
use smoltcp::socket::icmp;
1413
use smoltcp::wire::{
@@ -19,6 +18,7 @@ use smoltcp::{
1918
phy::Medium,
2019
time::{Duration, Instant},
2120
};
21+
use smoltcp_device_unix::wait as phy_wait;
2222

2323
macro_rules! send_icmp_ping {
2424
( $repr_type:ident, $packet_type:ident, $ident:expr, $seq_no:expr,

0 commit comments

Comments
 (0)