aboutsummaryrefslogtreecommitdiff
path: root/examples/std/src/bin
diff options
context:
space:
mode:
authorMathias <[email protected]>2023-02-13 14:55:15 +0100
committerMathias <[email protected]>2023-02-13 14:55:15 +0100
commit218b44652c149f895919b606a660b6eff30e8177 (patch)
tree5f985f6edd12926a6f374c17a3a0c3a4226088e7 /examples/std/src/bin
parent86113e199f37fe0888979608a08bfdaf21bff19a (diff)
parent41a563aae3e474955892b27487e185f5f486f525 (diff)
Rebase on master
Diffstat (limited to 'examples/std/src/bin')
-rw-r--r--examples/std/src/bin/net.rs15
-rw-r--r--examples/std/src/bin/net_dns.rs98
-rw-r--r--examples/std/src/bin/net_udp.rs13
3 files changed, 108 insertions, 18 deletions
diff --git a/examples/std/src/bin/net.rs b/examples/std/src/bin/net.rs
index 9b1450b72..451850d99 100644
--- a/examples/std/src/bin/net.rs
+++ b/examples/std/src/bin/net.rs
@@ -1,9 +1,11 @@
1#![feature(type_alias_impl_trait)] 1#![feature(type_alias_impl_trait)]
2 2
3use std::default::Default;
4
3use clap::Parser; 5use clap::Parser;
4use embassy_executor::{Executor, Spawner}; 6use embassy_executor::{Executor, Spawner};
5use embassy_net::tcp::TcpSocket; 7use embassy_net::tcp::TcpSocket;
6use embassy_net::{ConfigStrategy, Ipv4Address, Ipv4Cidr, Stack, StackResources}; 8use embassy_net::{Config, Ipv4Address, Ipv4Cidr, Stack, StackResources};
7use embedded_io::asynch::Write; 9use embedded_io::asynch::Write;
8use heapless::Vec; 10use heapless::Vec;
9use log::*; 11use log::*;
@@ -48,13 +50,13 @@ async fn main_task(spawner: Spawner) {
48 50
49 // Choose between dhcp or static ip 51 // Choose between dhcp or static ip
50 let config = if opts.static_ip { 52 let config = if opts.static_ip {
51 ConfigStrategy::Static(embassy_net::Config { 53 Config::Static(embassy_net::StaticConfig {
52 address: Ipv4Cidr::new(Ipv4Address::new(192, 168, 69, 2), 24), 54 address: Ipv4Cidr::new(Ipv4Address::new(192, 168, 69, 2), 24),
53 dns_servers: Vec::new(), 55 dns_servers: Vec::new(),
54 gateway: Some(Ipv4Address::new(192, 168, 69, 1)), 56 gateway: Some(Ipv4Address::new(192, 168, 69, 1)),
55 }) 57 })
56 } else { 58 } else {
57 ConfigStrategy::Dhcp 59 Config::Dhcp(Default::default())
58 }; 60 };
59 61
60 // Generate random seed 62 // Generate random seed
@@ -63,12 +65,7 @@ async fn main_task(spawner: Spawner) {
63 let seed = u64::from_le_bytes(seed); 65 let seed = u64::from_le_bytes(seed);
64 66
65 // Init network stack 67 // Init network stack
66 let stack = &*singleton!(Stack::new( 68 let stack = &*singleton!(Stack::new(device, config, singleton!(StackResources::<2>::new()), seed));
67 device,
68 config,
69 singleton!(StackResources::<1, 2, 8>::new()),
70 seed
71 ));
72 69
73 // Launch network task 70 // Launch network task
74 spawner.spawn(net_task(stack)).unwrap(); 71 spawner.spawn(net_task(stack)).unwrap();
diff --git a/examples/std/src/bin/net_dns.rs b/examples/std/src/bin/net_dns.rs
new file mode 100644
index 000000000..e1cc45a38
--- /dev/null
+++ b/examples/std/src/bin/net_dns.rs
@@ -0,0 +1,98 @@
1#![feature(type_alias_impl_trait)]
2
3use std::default::Default;
4
5use clap::Parser;
6use embassy_executor::{Executor, Spawner};
7use embassy_net::dns::DnsQueryType;
8use embassy_net::{Config, Ipv4Address, Ipv4Cidr, Stack, StackResources};
9use heapless::Vec;
10use log::*;
11use rand_core::{OsRng, RngCore};
12use static_cell::StaticCell;
13
14#[path = "../tuntap.rs"]
15mod tuntap;
16
17use crate::tuntap::TunTapDevice;
18
19macro_rules! singleton {
20 ($val:expr) => {{
21 type T = impl Sized;
22 static STATIC_CELL: StaticCell<T> = StaticCell::new();
23 STATIC_CELL.init_with(move || $val)
24 }};
25}
26
27#[derive(Parser)]
28#[clap(version = "1.0")]
29struct Opts {
30 /// TAP device name
31 #[clap(long, default_value = "tap0")]
32 tap: String,
33 /// use a static IP instead of DHCP
34 #[clap(long)]
35 static_ip: bool,
36}
37
38#[embassy_executor::task]
39async fn net_task(stack: &'static Stack<TunTapDevice>) -> ! {
40 stack.run().await
41}
42
43#[embassy_executor::task]
44async fn main_task(spawner: Spawner) {
45 let opts: Opts = Opts::parse();
46
47 // Init network device
48 let device = TunTapDevice::new(&opts.tap).unwrap();
49
50 // Choose between dhcp or static ip
51 let config = if opts.static_ip {
52 Config::Static(embassy_net::StaticConfig {
53 address: Ipv4Cidr::new(Ipv4Address::new(192, 168, 69, 1), 24),
54 dns_servers: Vec::from_slice(&[Ipv4Address::new(8, 8, 4, 4).into(), Ipv4Address::new(8, 8, 8, 8).into()])
55 .unwrap(),
56 gateway: Some(Ipv4Address::new(192, 168, 69, 100)),
57 })
58 } else {
59 Config::Dhcp(Default::default())
60 };
61
62 // Generate random seed
63 let mut seed = [0; 8];
64 OsRng.fill_bytes(&mut seed);
65 let seed = u64::from_le_bytes(seed);
66
67 // Init network stack
68 let stack: &Stack<_> = &*singleton!(Stack::new(device, config, singleton!(StackResources::<2>::new()), seed));
69
70 // Launch network task
71 spawner.spawn(net_task(stack)).unwrap();
72
73 let host = "example.com";
74 info!("querying host {:?}...", host);
75 match stack.dns_query(host, DnsQueryType::A).await {
76 Ok(r) => {
77 info!("query response: {:?}", r);
78 }
79 Err(e) => {
80 warn!("query error: {:?}", e);
81 }
82 };
83}
84
85static EXECUTOR: StaticCell<Executor> = StaticCell::new();
86
87fn main() {
88 env_logger::builder()
89 .filter_level(log::LevelFilter::Debug)
90 .filter_module("async_io", log::LevelFilter::Info)
91 .format_timestamp_nanos()
92 .init();
93
94 let executor = EXECUTOR.init(Executor::new());
95 executor.run(|spawner| {
96 spawner.spawn(main_task(spawner)).unwrap();
97 });
98}
diff --git a/examples/std/src/bin/net_udp.rs b/examples/std/src/bin/net_udp.rs
index 392a97f0d..f1923f180 100644
--- a/examples/std/src/bin/net_udp.rs
+++ b/examples/std/src/bin/net_udp.rs
@@ -3,7 +3,7 @@
3use clap::Parser; 3use clap::Parser;
4use embassy_executor::{Executor, Spawner}; 4use embassy_executor::{Executor, Spawner};
5use embassy_net::udp::UdpSocket; 5use embassy_net::udp::UdpSocket;
6use embassy_net::{ConfigStrategy, Ipv4Address, Ipv4Cidr, PacketMetadata, Stack, StackResources}; 6use embassy_net::{Config, Ipv4Address, Ipv4Cidr, PacketMetadata, Stack, StackResources};
7use heapless::Vec; 7use heapless::Vec;
8use log::*; 8use log::*;
9use rand_core::{OsRng, RngCore}; 9use rand_core::{OsRng, RngCore};
@@ -47,13 +47,13 @@ async fn main_task(spawner: Spawner) {
47 47
48 // Choose between dhcp or static ip 48 // Choose between dhcp or static ip
49 let config = if opts.static_ip { 49 let config = if opts.static_ip {
50 ConfigStrategy::Static(embassy_net::Config { 50 Config::Static(embassy_net::StaticConfig {
51 address: Ipv4Cidr::new(Ipv4Address::new(192, 168, 69, 2), 24), 51 address: Ipv4Cidr::new(Ipv4Address::new(192, 168, 69, 2), 24),
52 dns_servers: Vec::new(), 52 dns_servers: Vec::new(),
53 gateway: Some(Ipv4Address::new(192, 168, 69, 1)), 53 gateway: Some(Ipv4Address::new(192, 168, 69, 1)),
54 }) 54 })
55 } else { 55 } else {
56 ConfigStrategy::Dhcp 56 Config::Dhcp(Default::default())
57 }; 57 };
58 58
59 // Generate random seed 59 // Generate random seed
@@ -62,12 +62,7 @@ async fn main_task(spawner: Spawner) {
62 let seed = u64::from_le_bytes(seed); 62 let seed = u64::from_le_bytes(seed);
63 63
64 // Init network stack 64 // Init network stack
65 let stack = &*singleton!(Stack::new( 65 let stack = &*singleton!(Stack::new(device, config, singleton!(StackResources::<2>::new()), seed));
66 device,
67 config,
68 singleton!(StackResources::<1, 2, 8>::new()),
69 seed
70 ));
71 66
72 // Launch network task 67 // Launch network task
73 spawner.spawn(net_task(stack)).unwrap(); 68 spawner.spawn(net_task(stack)).unwrap();