mirror of
https://github.com/Djeeberjr/fw-anwesenheit.git
synced 2026-04-30 18:49:09 +00:00
Removed a lot of imports — believe me, so many imports were totally unnecessary. Nobody’s seen imports like these. Cleaned up the code, made it faster, smarter, the best code. People are talking about it! Tremendous work by me. Some say i am the best at it. It may be true.
79 lines
2.4 KiB
Rust
79 lines
2.4 KiB
Rust
use core::{net::Ipv4Addr, str::FromStr};
|
|
use embassy_executor::Spawner;
|
|
use embassy_net::{Ipv4Cidr, Runner, Stack, StackResources, StaticConfigV4};
|
|
use embassy_time::{Duration, Timer};
|
|
use esp_wifi::wifi::WifiDevice;
|
|
use static_cell::make_static;
|
|
|
|
use crate::webserver::WEB_TAKS_SIZE;
|
|
|
|
pub const NETWORK_STACK_SIZE: usize = WEB_TAKS_SIZE + 2; // + 2 for other network taks. Breaks
|
|
// without
|
|
|
|
pub fn setup_network<'a>(seed: u64, wifi: WifiDevice<'static>, spawner: &mut Spawner) -> Stack<'a> {
|
|
let gw_ip_addr_str = "192.168.2.1";
|
|
let gw_ip_addr = Ipv4Addr::from_str(gw_ip_addr_str).expect("failed to parse gateway ip");
|
|
let config = embassy_net::Config::ipv4_static(StaticConfigV4 {
|
|
address: Ipv4Cidr::new(gw_ip_addr, 24),
|
|
gateway: Some(gw_ip_addr),
|
|
dns_servers: Default::default(),
|
|
});
|
|
|
|
let (stack, runner) = embassy_net::new(
|
|
wifi,
|
|
config,
|
|
make_static!(StackResources::<NETWORK_STACK_SIZE>::new()),
|
|
seed,
|
|
);
|
|
|
|
spawner.must_spawn(net_task(runner));
|
|
spawner.must_spawn(run_dhcp(stack, gw_ip_addr_str));
|
|
|
|
stack
|
|
}
|
|
|
|
#[embassy_executor::task]
|
|
async fn run_dhcp(stack: Stack<'static>, gw_ip_addr: &'static str) {
|
|
use core::net::{Ipv4Addr, SocketAddrV4};
|
|
|
|
use edge_dhcp::{
|
|
io::{self, DEFAULT_SERVER_PORT},
|
|
server::{Server, ServerOptions},
|
|
};
|
|
use edge_nal::UdpBind;
|
|
use edge_nal_embassy::{Udp, UdpBuffers};
|
|
|
|
let ip = Ipv4Addr::from_str(gw_ip_addr).expect("dhcp task failed to parse gw ip");
|
|
|
|
let mut buf = [0u8; 1500];
|
|
|
|
let mut gw_buf = [Ipv4Addr::UNSPECIFIED];
|
|
|
|
let buffers = UdpBuffers::<3, 1024, 1024, 10>::new();
|
|
let unbound_socket = Udp::new(stack, &buffers);
|
|
let mut bound_socket = unbound_socket
|
|
.bind(core::net::SocketAddr::V4(SocketAddrV4::new(
|
|
Ipv4Addr::UNSPECIFIED,
|
|
DEFAULT_SERVER_PORT,
|
|
)))
|
|
.await
|
|
.unwrap();
|
|
|
|
loop {
|
|
_ = io::server::run(
|
|
&mut Server::<_, 64>::new_with_et(ip),
|
|
&ServerOptions::new(ip, Some(&mut gw_buf)),
|
|
&mut bound_socket,
|
|
&mut buf,
|
|
)
|
|
.await
|
|
.inspect_err(|e| log::warn!("DHCP server error: {e:?}"));
|
|
Timer::after(Duration::from_millis(500)).await;
|
|
}
|
|
}
|
|
|
|
#[embassy_executor::task]
|
|
async fn net_task(mut runner: Runner<'static, WifiDevice<'static>>) {
|
|
runner.run().await;
|
|
}
|