From 782f75ae95c112920c1c745f3d291983a9be9aae Mon Sep 17 00:00:00 2001 From: Kaspar Schleiser Date: Wed, 20 Dec 2023 14:44:54 +0100 Subject: [PATCH] riot-rs-embassy: allow overriding the network configuration --- src/riot-rs-embassy/Cargo.toml | 2 ++ src/riot-rs-embassy/src/lib.rs | 28 +++++++++++++++++++++------- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/riot-rs-embassy/Cargo.toml b/src/riot-rs-embassy/Cargo.toml index b9805098c..40dad19f0 100644 --- a/src/riot-rs-embassy/Cargo.toml +++ b/src/riot-rs-embassy/Cargo.toml @@ -57,3 +57,5 @@ time = ["dep:embassy-time", "embassy-executor/integrated-timers"] usb = [ "dep:embassy-usb" ] net = [ "dep:embassy-net" ] usb_ethernet = [ "usb", "net" ] + +override_network_config = [] diff --git a/src/riot-rs-embassy/src/lib.rs b/src/riot-rs-embassy/src/lib.rs index a63a07ef6..d96551015 100644 --- a/src/riot-rs-embassy/src/lib.rs +++ b/src/riot-rs-embassy/src/lib.rs @@ -156,6 +156,26 @@ const fn usb_default_config() -> embassy_usb::Config<'static> { config } +#[cfg(feature = "net")] +fn network_config() -> embassy_net::Config { + #[cfg(not(feature = "override_network_config"))] + { + use embassy_net::{Ipv4Address, Ipv4Cidr}; + embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { + address: Ipv4Cidr::new(Ipv4Address::new(10, 42, 0, 61), 24), + dns_servers: heapless::Vec::new(), + gateway: Some(Ipv4Address::new(10, 42, 0, 1)), + }) + } + #[cfg(feature = "override_network_config")] + { + extern "Rust" { + fn riot_rs_network_config() -> embassy_net::Config; + } + unsafe { riot_rs_network_config() } + } +} + #[distributed_slice(riot_rs_rt::INIT_FUNCS)] pub(crate) fn init() { riot_rs_rt::debug::println!("riot-rs-embassy::init()"); @@ -249,13 +269,7 @@ async fn init_task(peripherals: arch::Peripherals) { #[cfg(feature = "usb_ethernet")] let stack = { // network stack - //let config = embassy_net::Config::dhcpv4(Default::default()); - use embassy_net::{Ipv4Address, Ipv4Cidr}; - let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { - address: Ipv4Cidr::new(Ipv4Address::new(10, 42, 0, 61), 24), - dns_servers: heapless::Vec::new(), - gateway: Some(Ipv4Address::new(10, 42, 0, 1)), - }); + let config = network_config(); // Generate random seed // let mut rng = Rng::new(p.RNG, Irqs);