Skip to content

Commit 4ade03a

Browse files
authored
Merge pull request #1909 from hermit-os/feature-net
feat: separate network features
2 parents 8c012c6 + a9cfb14 commit 4ade03a

File tree

29 files changed

+169
-298
lines changed

29 files changed

+169
-298
lines changed

.github/workflows/ci.yml

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,26 @@ jobs:
2626
- run: rustup target add x86_64-unknown-none aarch64-unknown-none-softfloat riscv64gc-unknown-none-elf
2727
- name: cargo hack check (x86_64)
2828
run: |
29-
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target x86_64-unknown-none --exclude-features gem-net
30-
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target x86_64-unknown-none --exclude-features gem-net --features pci
29+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target x86_64-unknown-none --exclude-features dhcpv4,dns,gem-net,net,rtl8139,virtio-net
30+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target x86_64-unknown-none --exclude-features dhcpv4,dns,gem-net,net,rtl8139,virtio-net --features pci
31+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target x86_64-unknown-none --exclude-features gem-net,rtl8139 --features tcp,virtio-net
32+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target x86_64-unknown-none --exclude-features gem-net,rtl8139 --features pci,tcp,virtio-net
33+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target x86_64-unknown-none --exclude-features gem-net,virtio-net --features tcp,rtl8139
34+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target x86_64-unknown-none --exclude-features gem-net,virtio-net --features pci,tcp,rtl8139
3135
- name: cargo hack check (aarch64)
3236
run: |
33-
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64-unknown-none-softfloat --exclude-features gem-net,rtl8139
34-
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64-unknown-none-softfloat --exclude-features gem-net,rtl8139 --features pci
37+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64-unknown-none-softfloat --exclude-features dhcpv4,dns,gem-net,net,rtl8139,virtio-net
38+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64-unknown-none-softfloat --exclude-features dhcpv4,dns,gem-net,net,rtl8139,virtio-net --features pci
39+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64-unknown-none-softfloat --exclude-features gem-net,rtl8139 --features tcp,virtio-net
40+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64-unknown-none-softfloat --exclude-features gem-net,rtl8139 --features pci,tcp,virtio-net
3541
- name: cargo hack check (riscv64)
3642
run: |
37-
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target riscv64gc-unknown-none-elf --exclude-features rtl8139
38-
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target riscv64gc-unknown-none-elf --exclude-features rtl8139 --features pci
43+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target riscv64gc-unknown-none-elf --exclude-features dhcpv4,dns,gem-net,net,rtl8139,virtio-net
44+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target riscv64gc-unknown-none-elf --exclude-features dhcpv4,dns,gem-net,net,rtl8139,virtio-net --features pci
45+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target riscv64gc-unknown-none-elf --exclude-features gem-net,rtl8139 --features tcp,virtio-net
46+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target riscv64gc-unknown-none-elf --exclude-features gem-net,rtl8139 --features pci,tcp,virtio-net
47+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target riscv64gc-unknown-none-elf --exclude-features rtl8139,virtio-net --features tcp,gem-net
48+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target riscv64gc-unknown-none-elf --exclude-features rtl8139,virtio-net --features pci,tcp,gem-net
3949
4050
clippy:
4151
name: Clippy

Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,12 @@ default = ["kernel-stack", "pci", "pci-ids", "acpi", "fsgsbase", "smp", "tcp", "
4949
acpi = []
5050
common-os = []
5151
console = ["virtio"]
52-
dhcpv4 = ["smoltcp", "smoltcp/proto-dhcpv4", "smoltcp/socket-dhcpv4"]
53-
dns = ["smoltcp", "smoltcp/socket-dns"]
52+
dhcpv4 = ["net", "smoltcp", "smoltcp/proto-dhcpv4", "smoltcp/socket-dhcpv4"]
53+
dns = ["net", "smoltcp", "smoltcp/socket-dns"]
5454
fs = ["fuse"]
5555
fsgsbase = []
5656
fuse = ["virtio", "pci", "dep:fuse-abi", "fuse-abi/num_enum"]
57-
gem-net = ["tcp", "dep:tock-registers"]
57+
gem-net = ["net", "dep:tock-registers"]
5858
idle-poll = []
5959
kernel-stack = []
6060
log-target = []
@@ -64,17 +64,17 @@ mmap = ["mman"] # Deprecated in favor of mman
6464
newlib = []
6565
nostd = []
6666
pci = ["virtio?/pci"]
67-
rtl8139 = ["tcp", "pci"]
67+
rtl8139 = ["net", "pci"]
6868
semihosting = ["dep:semihosting"]
6969
shell = ["simple-shell"]
7070
smp = []
7171
strace = []
72-
tcp = ["smoltcp", "smoltcp/socket-tcp"]
72+
tcp = ["net", "smoltcp", "smoltcp/socket-tcp"]
7373
trace = ["smoltcp?/log", "smoltcp?/verbose"]
74-
udp = ["smoltcp", "smoltcp/socket-udp"]
74+
udp = ["net", "smoltcp", "smoltcp/socket-udp"]
7575
vga = []
7676
virtio = ["dep:virtio"]
77-
virtio-net = ["virtio"]
77+
virtio-net = ["net", "virtio"]
7878
vsock = ["virtio", "pci"]
7979

8080
[lints.rust]

hermit-macro/src/system.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ fn emit_func(func: ItemFn, sig: &ParsedSig, errno: bool) -> Result<ItemFn> {
177177
cfg_if::cfg_if! {
178178
if #[cfg(all(
179179
feature = "kernel-stack",
180-
not(any(target_arch = "riscv64", feature = "common-os"))
180+
not(any(target_arch = "riscv64", feature = "common-os")),
181181
))] {
182182
unsafe { crate::arch::kernel::kernel_stack::#kernel_function_ident(#kernel_ident, #(#args),*) }
183183
} else {
@@ -257,7 +257,7 @@ mod tests {
257257
cfg_if::cfg_if! {
258258
if #[cfg(all(
259259
feature = "kernel-stack",
260-
not(any(target_arch = "riscv64", feature = "common-os"))
260+
not(any(target_arch = "riscv64", feature = "common-os")),
261261
))] {
262262
unsafe { crate::arch::kernel::kernel_stack::kernel_function2(_sys_test, a, b) }
263263
} else {
@@ -325,7 +325,7 @@ mod tests {
325325
cfg_if::cfg_if! {
326326
if #[cfg(all(
327327
feature = "kernel-stack",
328-
not(any(target_arch = "riscv64", feature = "common-os"))
328+
not(any(target_arch = "riscv64", feature = "common-os")),
329329
))] {
330330
unsafe { crate::arch::kernel::kernel_stack::kernel_function2(_sys_test, a, b) }
331331
} else {
@@ -395,7 +395,7 @@ mod tests {
395395
cfg_if::cfg_if! {
396396
if #[cfg(all(
397397
feature = "kernel-stack",
398-
not(any(target_arch = "riscv64", feature = "common-os"))
398+
not(any(target_arch = "riscv64", feature = "common-os")),
399399
))] {
400400
unsafe { crate::arch::kernel::kernel_stack::kernel_function2(_sys_test, a, b) }
401401
} else {

src/arch/aarch64/kernel/mmio.rs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ use core::ptr::NonNull;
33

44
use align_address::Align;
55
use arm_gic::{IntId, Trigger};
6-
use hermit_sync::{InterruptTicketMutex, without_interrupts};
6+
#[cfg(feature = "console")]
7+
use hermit_sync::InterruptTicketMutex;
8+
use hermit_sync::without_interrupts;
79
use virtio::mmio::{DeviceRegisters, DeviceRegistersVolatileFieldAccess};
810
use volatile::VolatileRef;
911

@@ -15,17 +17,10 @@ use crate::console::IoDevice;
1517
use crate::drivers::console::VirtioConsoleDriver;
1618
#[cfg(feature = "console")]
1719
use crate::drivers::console::VirtioUART;
18-
#[cfg(any(feature = "tcp", feature = "udp"))]
20+
#[cfg(feature = "virtio-net")]
1921
use crate::drivers::net::virtio::VirtioNetDriver;
2022
use crate::drivers::virtio::transport::mmio::{self as mmio_virtio, VirtioDriver};
21-
#[cfg(all(
22-
any(
23-
all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci")),
24-
all(target_arch = "x86_64", feature = "rtl8139"),
25-
feature = "virtio-net",
26-
),
27-
any(feature = "tcp", feature = "udp")
28-
))]
23+
#[cfg(feature = "virtio-net")]
2924
use crate::executor::device::NETWORK_DEVICE;
3025
use crate::init_cell::InitCell;
3126
use crate::mm::PhysAddr;
@@ -42,17 +37,16 @@ impl MmioDriver {
4237
fn get_console_driver(&self) -> Option<&InterruptTicketMutex<VirtioConsoleDriver>> {
4338
match self {
4439
Self::VirtioConsole(drv) => Some(drv),
45-
#[cfg(any(feature = "tcp", feature = "udp"))]
46-
_ => None,
4740
}
4841
}
4942
}
5043

44+
#[cfg(feature = "console")]
5145
pub(crate) fn register_driver(drv: MmioDriver) {
5246
MMIO_DRIVERS.with(|mmio_drivers| mmio_drivers.unwrap().push(drv));
5347
}
5448

55-
#[cfg(any(feature = "tcp", feature = "udp"))]
49+
#[cfg(feature = "virtio-net")]
5650
pub(crate) type NetworkDevice = VirtioNetDriver;
5751

5852
#[cfg(feature = "console")]
@@ -125,7 +119,7 @@ pub fn init_drivers() {
125119
let cpu_id: usize = 0;
126120

127121
match id {
128-
#[cfg(any(feature = "tcp", feature = "udp"))]
122+
#[cfg(feature = "virtio-net")]
129123
virtio::Id::Net => {
130124
debug!(
131125
"Found network card at {mmio:p}, irq: {irq}, type: {irqtype}, flags: {irqflags}"

src/arch/aarch64/kernel/mod.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,7 @@ pub mod core_local;
22
pub mod interrupts;
33
#[cfg(feature = "kernel-stack")]
44
pub mod kernel_stack;
5-
#[cfg(all(
6-
not(feature = "pci"),
7-
any(
8-
all(any(feature = "tcp", feature = "udp"), feature = "virtio-net"),
9-
feature = "console"
10-
)
11-
))]
5+
#[cfg(all(not(feature = "pci"), any(feature = "virtio-net", feature = "console")))]
126
pub mod mmio;
137
#[cfg(feature = "pci")]
148
pub mod pci;

src/arch/riscv64/kernel/devicetree.rs

Lines changed: 11 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,15 @@
11
#![allow(dead_code)]
22

3-
#[cfg(all(
4-
any(
5-
all(any(feature = "tcp", feature = "udp"), feature = "virtio-net"),
6-
feature = "console"
7-
),
8-
not(feature = "pci")
9-
))]
3+
#[cfg(all(any(feature = "virtio-net", feature = "console"), not(feature = "pci")))]
104
use core::ptr::NonNull;
115

126
use fdt::Fdt;
137
use memory_addresses::PhysAddr;
14-
#[cfg(all(
15-
any(feature = "tcp", feature = "udp", feature = "console"),
16-
feature = "gem-net",
17-
not(feature = "pci")
18-
))]
8+
#[cfg(all(feature = "gem-net", not(feature = "pci")))]
199
use memory_addresses::VirtAddr;
20-
#[cfg(all(
21-
any(
22-
all(any(feature = "tcp", feature = "udp"), feature = "virtio-net"),
23-
feature = "console"
24-
),
25-
not(feature = "pci")
26-
))]
10+
#[cfg(all(any(feature = "virtio-net", feature = "console"), not(feature = "pci")))]
2711
use virtio::mmio::{DeviceRegisters, DeviceRegistersVolatileFieldAccess};
28-
#[cfg(all(
29-
any(
30-
all(any(feature = "tcp", feature = "udp"), feature = "virtio-net"),
31-
feature = "console"
32-
),
33-
not(feature = "pci")
34-
))]
12+
#[cfg(all(any(feature = "virtio-net", feature = "console"), not(feature = "pci")))]
3513
use volatile::VolatileRef;
3614

3715
use crate::arch::riscv64::kernel::get_dtb_ptr;
@@ -45,28 +23,13 @@ use crate::console::IoDevice;
4523
use crate::drivers::console::VirtioUART;
4624
#[cfg(all(feature = "console", not(feature = "pci")))]
4725
use crate::drivers::mmio::get_console_driver;
48-
#[cfg(all(
49-
any(feature = "tcp", feature = "udp"),
50-
feature = "gem-net",
51-
not(feature = "pci")
52-
))]
26+
#[cfg(all(feature = "gem-net", not(feature = "pci")))]
5327
use crate::drivers::net::gem;
5428
#[cfg(all(feature = "console", feature = "pci"))]
5529
use crate::drivers::pci::get_console_driver;
56-
#[cfg(all(
57-
any(
58-
all(any(feature = "tcp", feature = "udp"), feature = "virtio-net"),
59-
feature = "console"
60-
),
61-
not(feature = "pci"),
62-
not(feature = "gem-net")
63-
))]
30+
#[cfg(all(any(feature = "virtio-net", feature = "console"), not(feature = "pci")))]
6431
use crate::drivers::virtio::transport::mmio::{self as mmio_virtio, VirtioDriver};
65-
#[cfg(all(
66-
any(feature = "tcp", feature = "udp"),
67-
any(feature = "gem-net", feature = "virtio-net"),
68-
not(feature = "pci"),
69-
))]
32+
#[cfg(all(any(feature = "gem-net", feature = "virtio-net"), not(feature = "pci")))]
7033
use crate::executor::device::NETWORK_DEVICE;
7134
#[cfg(all(feature = "console", not(feature = "pci")))]
7235
use crate::kernel::mmio::register_driver;
@@ -205,13 +168,7 @@ pub fn init_drivers() {
205168
}
206169

207170
// Init virtio-mmio
208-
#[cfg(all(
209-
any(
210-
all(any(feature = "tcp", feature = "udp"), feature = "virtio-net"),
211-
feature = "console"
212-
),
213-
not(feature = "pci")
214-
))]
171+
#[cfg(all(any(feature = "virtio-net", feature = "console"), not(feature = "pci")))]
215172
if let Some(virtio_node) = fdt.find_compatible(&["virtio,mmio"]) {
216173
debug!("Found virtio mmio device");
217174
let virtio_region = virtio_node
@@ -273,11 +230,7 @@ pub fn init_drivers() {
273230
}
274231

275232
match id {
276-
#[cfg(all(
277-
any(feature = "tcp", feature = "udp"),
278-
feature = "virtio-net",
279-
not(feature = "gem-net")
280-
))]
233+
#[cfg(all(feature = "virtio-net", not(feature = "gem-net")))]
281234
virtio::Id::Net => {
282235
debug!("Found virtio network card at {mmio:p}");
283236

@@ -308,12 +261,8 @@ pub fn init_drivers() {
308261
}
309262

310263
#[cfg(all(
311-
any(
312-
all(any(feature = "tcp", feature = "udp"), feature = "virtio-net"),
313-
feature = "console",
314-
feature = "gem-net"
315-
),
316-
not(feature = "pci")
264+
any(feature = "virtio-net", feature = "console", feature = "gem-net"),
265+
not(feature = "pci"),
317266
))]
318267
super::mmio::MMIO_DRIVERS.finalize();
319268

src/arch/riscv64/kernel/mmio.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use hermit_sync::InterruptSpinMutex;
99
use crate::drivers::console::VirtioConsoleDriver;
1010
#[cfg(feature = "gem-net")]
1111
use crate::drivers::net::gem::GEMDriver;
12-
#[cfg(all(not(feature = "gem-net"), any(feature = "tcp", feature = "udp")))]
12+
#[cfg(all(not(feature = "gem-net"), feature = "virtio-net"))]
1313
use crate::drivers::net::virtio::VirtioNetDriver;
1414
use crate::init_cell::InitCell;
1515

@@ -25,8 +25,6 @@ impl MmioDriver {
2525
fn get_console_driver(&self) -> Option<&InterruptSpinMutex<VirtioConsoleDriver>> {
2626
match self {
2727
Self::VirtioConsole(drv) => Some(drv),
28-
#[cfg(any(feature = "tcp", feature = "udp"))]
29-
_ => None,
3028
}
3129
}
3230
}
@@ -38,7 +36,7 @@ pub(crate) fn register_driver(drv: MmioDriver) {
3836
#[cfg(feature = "gem-net")]
3937
pub(crate) type NetworkDevice = GEMDriver;
4038

41-
#[cfg(all(not(feature = "gem-net"), any(feature = "tcp", feature = "udp")))]
39+
#[cfg(all(not(feature = "gem-net"), feature = "virtio-net"))]
4240
pub(crate) type NetworkDevice = VirtioNetDriver;
4341

4442
#[cfg(feature = "console")]

src/arch/riscv64/kernel/mod.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,8 @@ pub mod core_local;
22
mod devicetree;
33
pub mod interrupts;
44
#[cfg(all(
5-
any(
6-
all(any(feature = "tcp", feature = "udp"), feature = "virtio-net"),
7-
feature = "console",
8-
feature = "gem-net"
9-
),
10-
not(feature = "pci")
5+
any(feature = "virtio-net", feature = "console", feature = "gem-net"),
6+
not(feature = "pci"),
117
))]
128
pub mod mmio;
139
#[cfg(feature = "pci")]

src/arch/riscv64/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ pub mod kernel;
22
pub mod mm;
33

44
#[allow(dead_code)]
5-
#[cfg(target_arch = "riscv64")]
65
#[inline(always)]
76
pub(crate) fn memory_barrier() {
87
riscv::asm::sfence_vma_all();

0 commit comments

Comments
 (0)