Skip to content

Commit 0acca35

Browse files
committed
update dhcp client to new routes api
1 parent c795485 commit 0acca35

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

examples/dhcp_client.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use std::collections::BTreeMap;
1010
use std::os::unix::io::AsRawFd;
1111
use smoltcp::phy::wait as phy_wait;
1212
use smoltcp::wire::{EthernetAddress, Ipv4Address, IpCidr};
13-
use smoltcp::iface::{NeighborCache, EthernetInterfaceBuilder};
13+
use smoltcp::iface::{NeighborCache, EthernetInterfaceBuilder, Routes};
1414
use smoltcp::socket::{SocketSet, RawSocketBuffer, RawPacketMetadata};
1515
use smoltcp::time::Instant;
1616
use smoltcp::dhcp::Dhcpv4Client;
@@ -28,11 +28,13 @@ fn main() {
2828
let neighbor_cache = NeighborCache::new(BTreeMap::new());
2929
let ethernet_addr = EthernetAddress([0x02, 0x00, 0x00, 0x00, 0x00, 0x01]);
3030
let ip_addrs = [IpCidr::new(Ipv4Address::UNSPECIFIED.into(), 0)];
31+
let mut routes_storage = [None; 1];
32+
let routes = Routes::new(&mut routes_storage[..]);
3133
let mut iface = EthernetInterfaceBuilder::new(device)
3234
.ethernet_addr(ethernet_addr)
3335
.neighbor_cache(neighbor_cache)
3436
.ip_addrs(ip_addrs)
35-
.ipv4_gateway(Ipv4Address::UNSPECIFIED)
37+
.routes(routes)
3638
.finalize();
3739

3840
let mut sockets = SocketSet::new(vec![]);
@@ -56,7 +58,13 @@ fn main() {
5658
let ip_addr = iface.ipv4_addr().unwrap();
5759
if ip_addr != prev_ip_addr {
5860
println!("Assigned a new IPv4 address: {}", ip_addr);
59-
println!("Default gateway: {}", iface.ipv4_gateway().unwrap());
61+
iface.routes_mut()
62+
.update(|routes_map| {
63+
routes_map.get(&IpCidr::new(Ipv4Address::UNSPECIFIED.into(), 0))
64+
.map(|default_route| {
65+
println!("Default gateway: {}", default_route.via_router);
66+
});
67+
});
6068
for dns_server in dhcp.dns_servers() {
6169
println!("DNS servers: {}", dns_server);
6270
}

src/dhcp/clientv4.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,8 @@ impl Client {
150150
// Set gateway
151151
match dhcp_repr.router {
152152
Some(router) if iface.in_same_network(&router.into()) => {
153-
iface.set_ipv4_gateway(router);
153+
let _ = iface.routes_mut()
154+
.add_default_ipv4_route(router.into());
154155
}
155156
_ => ()
156157
}
@@ -361,7 +362,7 @@ fn send_packet<DeviceT: for<'d> Device<'d>>(iface: &mut Interface<DeviceT>, raw_
361362
assert!(dhcp_repr.buffer_len() <= dhcp_payload_buf.len());
362363
let dhcp_payload = &mut dhcp_payload_buf[0..dhcp_repr.buffer_len()];
363364
{
364-
let mut dhcp_packet = DhcpPacket::new(&mut dhcp_payload[..]);
365+
let mut dhcp_packet = DhcpPacket::new_checked(&mut dhcp_payload[..])?;
365366
dhcp_repr.emit(&mut dhcp_packet)?;
366367
}
367368

@@ -388,13 +389,13 @@ fn send_packet<DeviceT: for<'d> Device<'d>>(iface: &mut Interface<DeviceT>, raw_
388389
ipv4_repr.buffer_len() + udp_repr.buffer_len()
389390
)?;
390391
{
391-
let mut ipv4_packet = Ipv4Packet::new(&mut packet);
392+
let mut ipv4_packet = Ipv4Packet::new_checked(&mut packet)?;
392393
ipv4_repr.emit(&mut ipv4_packet, &checksum_caps);
393394
}
394395
{
395-
let mut udp_packet = UdpPacket::new(
396+
let mut udp_packet = UdpPacket::new_checked(
396397
&mut packet[ipv4_repr.buffer_len()..]
397-
);
398+
)?;
398399
udp_repr.emit(&mut udp_packet,
399400
&src_addr.into(), &dst_addr.into(),
400401
checksum_caps);

0 commit comments

Comments
 (0)