Skip to content

Commit

Permalink
Merge branch 'master' into updown
Browse files Browse the repository at this point in the history
  • Loading branch information
dlrobertson committed Jun 29, 2021
2 parents 9db954f + ef6c268 commit e500a6e
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 0 deletions.
18 changes: 18 additions & 0 deletions .github/workflows/rustfmt.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
on:
push:
branches: [ staging, trying, master ]
pull_request:

name: Rustfmt check
jobs:
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
components: rustfmt
- name: Check fmt
run: cargo fmt -- --check
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Update `managed` from 0.7 to 0.8 ([442](https://github.com/smoltcp-rs/smoltcp/pull/442))
- udp: Add `close()` method to unbind socket.

## [0.7.5] - 2021-06-28

- dhcpv4: emit DNS servers in repr (#505)

## [0.7.4] - 2021-06-11

- tcp: fix "subtract sequence numbers with underflow" on remote window shrink. (#490)
- tcp: fix substract with overflow when receiving a SYNACK with unincremented ACK number. (#491)
- tcp: use nonzero initial sequence number to workaround misbehaving servers. (#492)

## [0.7.3] - 2021-05-29

- Fix "unused attribute" error in recent nightlies.
Expand Down Expand Up @@ -73,6 +83,8 @@ only processed when directed to the 255.255.255.255 address. ([377](https://gith
- Simplify lifetime parameters of sockets, SocketSet, EthernetInterface ([410](https://github.com/smoltcp-rs/smoltcp/pull/410), [413](https://github.com/smoltcp-rs/smoltcp/pull/413))

[Unreleased]: https://github.com/smoltcp-rs/smoltcp/compare/v0.7.0...HEAD
[0.7.5]: https://github.com/smoltcp-rs/smoltcp/compare/v0.7.4...v0.7.5
[0.7.4]: https://github.com/smoltcp-rs/smoltcp/compare/v0.7.3...v0.7.4
[0.7.3]: https://github.com/smoltcp-rs/smoltcp/compare/v0.7.2...v0.7.3
[0.7.2]: https://github.com/smoltcp-rs/smoltcp/compare/v0.7.1...v0.7.2
[0.7.1]: https://github.com/smoltcp-rs/smoltcp/compare/v0.7.0...v0.7.1
Expand Down
51 changes: 51 additions & 0 deletions src/wire/dhcpv4.rs
Original file line number Diff line number Diff line change
Expand Up @@ -727,6 +727,10 @@ impl<'a> Repr<'a> {
if self.lease_duration.is_some() {
len += 6;
}
if let Some(dns_servers) = self.dns_servers {
len += 2;
len += dns_servers.iter().flatten().count() * core::mem::size_of::<u32>();
}
if let Some(list) = self.parameter_request_list {
len += list.len() + 2;
}
Expand Down Expand Up @@ -892,6 +896,25 @@ impl<'a> Repr<'a> {
if let Some(duration) = self.lease_duration {
options = DhcpOption::IpLeaseTime(duration).emit(options);
}
if let Some(dns_servers) = self.dns_servers {
const IP_SIZE: usize = core::mem::size_of::<u32>();
let mut servers = [0; MAX_DNS_SERVER_COUNT * IP_SIZE];

let data_len = dns_servers
.iter()
.flatten()
.enumerate()
.inspect(|(i, ip)| {
servers[(i * IP_SIZE)..((i + 1) * IP_SIZE)].copy_from_slice(ip.as_bytes());
})
.count()
* IP_SIZE;
let option = DhcpOption::Other {
kind: field::OPT_DOMAIN_NAME_SERVER,
data: &servers[..data_len],
};
options = option.emit(options);
}
if let Some(list) = self.parameter_request_list {
options = DhcpOption::Other {
kind: field::OPT_PARAMETER_REQUEST_LIST,
Expand Down Expand Up @@ -1151,6 +1174,34 @@ mod test {
repr.emit(&mut packet).unwrap();
}

#[test]
fn test_emit_offer_dns() {
let repr = {
let mut repr = offer_repr();
repr.dns_servers = Some([
Some(Ipv4Address([163, 1, 74, 6])),
Some(Ipv4Address([163, 1, 74, 7])),
Some(Ipv4Address([163, 1, 74, 3])),
]);
repr
};
let mut bytes = vec![0xa5; repr.buffer_len()];
let mut packet = Packet::new_unchecked(&mut bytes);
repr.emit(&mut packet).unwrap();

let packet = Packet::new_unchecked(&bytes);
let repr_parsed = Repr::parse(&packet).unwrap();

assert_eq!(
repr_parsed.dns_servers,
Some([
Some(Ipv4Address([163, 1, 74, 6])),
Some(Ipv4Address([163, 1, 74, 7])),
Some(Ipv4Address([163, 1, 74, 3]))
])
);
}

#[test]
fn test_emit_dhcp_option() {
static DATA: &[u8] = &[1, 3, 6];
Expand Down

0 comments on commit e500a6e

Please sign in to comment.