Skip to content

Commit a2c3a65

Browse files
committed
Separate out TestDevice and unix-specific devices
1 parent ef86415 commit a2c3a65

31 files changed

+295
-327
lines changed

Cargo.toml

Lines changed: 21 additions & 23 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"]
56+
"medium-ip" = ["socket", "smoltcp-device/requires-medium-ip", "smoltcp-device-mock/medium-ip"]
57+
"medium-ieee802154" = ["socket", "proto-sixlowpan", "smoltcp-device/requires-medium-ieee802154", "smoltcp-device-mock/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,8 +117,6 @@ default = [
117117

118118
"_proto-fragmentation" = []
119119

120-
"_netsim" = []
121-
122120
# BEGIN AUTOGENERATED CONFIG FEATURES
123121
# Generated by gen_config.py. DO NOT EDIT.
124122
iface-max-addr-count-1 = []
@@ -280,7 +278,7 @@ rpl-parents-buffer-count-32 = []
280278

281279
[[test]]
282280
name = "netsim"
283-
required-features = ["_netsim"]
281+
required-features = ["std", "medium-ethernet", "proto-ipv4"]
284282

285283
[[example]]
286284
name = "packet2pcap"
@@ -289,23 +287,23 @@ required-features = ["std"]
289287

290288
[[example]]
291289
name = "tcpdump"
292-
required-features = ["std", "phy-raw_socket", "proto-ipv4"]
290+
required-features = ["std", "proto-ipv4"]
293291

294292
[[example]]
295293
name = "httpclient"
296-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "proto-ipv6", "socket-tcp"]
294+
required-features = ["std", "medium-ethernet", "medium-ip", "proto-ipv4", "proto-ipv6", "socket-tcp"]
297295

298296
[[example]]
299297
name = "ping"
300-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "proto-ipv6", "socket-icmp"]
298+
required-features = ["std", "medium-ethernet", "medium-ip", "proto-ipv4", "proto-ipv6", "socket-icmp"]
301299

302300
[[example]]
303301
name = "server"
304-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "socket-tcp", "socket-udp"]
302+
required-features = ["std", "medium-ethernet", "medium-ip", "proto-ipv4", "socket-tcp", "socket-udp"]
305303

306304
[[example]]
307305
name = "client"
308-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "socket-tcp", "socket-udp"]
306+
required-features = ["std", "medium-ethernet", "medium-ip", "proto-ipv4", "socket-tcp", "socket-udp"]
309307

310308
[[example]]
311309
name = "loopback"
@@ -317,31 +315,31 @@ required-features = ["std", "log", "medium-ethernet", "proto-ipv4", "socket-tcp"
317315

318316
[[example]]
319317
name = "multicast"
320-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "multicast", "socket-udp"]
318+
required-features = ["std", "medium-ethernet", "medium-ip", "proto-ipv4", "multicast", "socket-udp"]
321319

322320
[[example]]
323321
name = "multicast6"
324-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv6", "socket-udp"]
322+
required-features = ["std", "medium-ethernet", "medium-ip", "proto-ipv6", "socket-udp"]
325323

326324
[[example]]
327325
name = "benchmark"
328-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "socket-raw", "socket-udp"]
326+
required-features = ["std", "medium-ethernet", "medium-ip", "proto-ipv4", "socket-raw", "socket-udp"]
329327

330328
[[example]]
331329
name = "dhcp_client"
332-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "proto-dhcpv4", "socket-raw"]
330+
required-features = ["std", "medium-ethernet", "medium-ip", "proto-ipv4", "proto-dhcpv4", "socket-raw"]
333331

334332
[[example]]
335333
name = "sixlowpan"
336-
required-features = ["std", "medium-ieee802154", "phy-raw_socket", "proto-sixlowpan", "proto-sixlowpan-fragmentation", "socket-udp"]
334+
required-features = ["std", "medium-ieee802154", "proto-sixlowpan", "proto-sixlowpan-fragmentation", "socket-udp"]
337335

338336
[[example]]
339337
name = "sixlowpan_benchmark"
340-
required-features = ["std", "medium-ieee802154", "phy-raw_socket", "proto-sixlowpan", "proto-sixlowpan-fragmentation", "socket-udp"]
338+
required-features = ["std", "medium-ieee802154", "proto-sixlowpan", "proto-sixlowpan-fragmentation", "socket-udp"]
341339

342340
[[example]]
343341
name = "dns"
344-
required-features = ["std", "medium-ethernet", "medium-ip", "phy-tuntap_interface", "proto-ipv4", "socket-dns"]
342+
required-features = ["std", "medium-ethernet", "medium-ip", "proto-ipv4", "socket-dns"]
345343

346344
[profile.release]
347345
debug = 2

ci.sh

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,28 @@ 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=(
@@ -62,7 +62,7 @@ test() {
6262
}
6363

6464
netsim() {
65-
cargo test --release --features _netsim netsim
65+
cargo test --release netsim
6666
}
6767

6868
check() {

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)