Skip to content

Commit 20e5455

Browse files
committed
Release v0.9.0
1 parent 739e7a5 commit 20e5455

File tree

3 files changed

+66
-21
lines changed

3 files changed

+66
-21
lines changed

CHANGELOG.md

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,56 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased]
88

9-
- Remove IpRepr::Unspecified (#579)
10-
- Remove IpVersion::Unspecified
11-
- Remove IpAddress::Unspecified
12-
- When sending packets with a raw socket, the source IP address is sent unmodified (it was previously replaced with the interface's address if it was unspecified).
13-
- Fix enable `defmt/alloc` if `alloc` or `std` is enabled.
9+
## [0.9.0] - 2023-02-06
10+
1411
- Minimum Supported Rust Version (MSRV) **bumped** from 1.56 to 1.65
12+
- Added DNS client support.
13+
- Add DnsSocket (#465)
14+
- Add support for one-shot mDNS resolution (#669)
15+
- Added support for packet fragmentation and reassembly, both for IPv4 and 6LoWPAN. (#591, #580, #624, #634, #645, #653, #684)
16+
- Major error handling overhaul.
17+
- Previously, _smoltcp_ had a single `Error` enum that all methods returned. Now methods that can fail have their own error enums, with only the actual errors they can return. (#617, #667, #730)
18+
- Consuming `phy::Device` tokens is now infallible.
19+
- In the case of "buffer full", `phy::Device` implementations must return `None` from the `transmit`/`receive` methods. (Previously, they could either do that, or return tokens and then return `Error::Exhausted` when consuming them. The latter wasted computation since it'd make _smoltcp_ pointlessly spend effort preparing the packet, and is now disallowed).
20+
- For all other phy errors, `phy::Device` implementations should drop the packet and handle the error themselves. (Either log it and forget it, or buffer/count it and offer methods to let the user retrieve the error queue/counts.) Returning the error to have it bubble up to `Interface::poll()` is no longer supported.
21+
- phy: the `trait Device` now uses Generic Associated Types (GAT) for the TX and RX tokens. The main impact of this is `Device` impls can now borrow data (because previously, the`for<'a> T: Device<'a>` bounds required to workaround the lack of GATs essentially implied `T: 'static`.) (#572)
22+
- iface: The `Interface` API has been significantly simplified and cleaned up.
23+
- The builder has been removed (#736)
24+
- SocketSet and Device are now borrowed in methods that need them, instead of owning them. (#619)
25+
- `Interface` now owns the list of addresses (#719), routes, neighbor cache (#722), 6LoWPAN address contexts, and fragmentation buffers (#736) instead of borrowing them with `managed`.
26+
- A new compile-time configuration mechanism has been added, to configure the size of the (now owned) buffers (#742)
27+
- iface: Change neighbor discovery timeout from 3s to 1s, to match Linux's behavior. (#620)
28+
- iface: Remove implicit sized bound on device generics (#679)
29+
- iface/6lowpan: Add address context information for resolving 6LoWPAN addresses (#687)
30+
- iface/6lowpan: fix incorrect SAM value in IPHC when address is not compressed (#630)
31+
- iface/6lowpan: packet parsing fuzz fixes (#636)
32+
- socket: Add send_with to udp, raw, and icmp sockets. These methods enable reserving a packet buffer with a greater size than you need, and then shrinking the size once you know it. (#625)
33+
- socket: Make `trait AnySocket` object-safe (#718)
34+
- socket/dhcpv4: add waker support (#623)
35+
- socket/dhcpv4: indicate new config if there's a packet buffer provided (#685)
36+
- socket/dhcpv4: Use renewal time from DHCP server ACK, if given (#683)
37+
- socket/dhcpv4: allow for extra configuration
38+
- setting arbitrary options in the request. (#650)
39+
- retrieving arbitrary options from the response. (#650)
40+
- setting custom parameter request list. (#650)
41+
- setting custom timing for retries. (#650)
42+
- Allow specifying different server/client DHCP ports (#738)
43+
- socket/raw: Add `peek` and `peek_slice` methods (#734)
44+
- socket/raw: When sending packets, send the source IP address unmodified (it was previously replaced with the interface's address if it was unspecified). (#616)
45+
- socket/tcp: Do not reset socket-level settings, such as keepalive, on reset (#603)
46+
- socket/tcp: ensure we always accept the segment at offset=0 even if the assembler is full. (#735, #452)
47+
- socket/tcp: Refactored assembler, now more robust and faster (#726, #735)
48+
- socket/udp: accept packets with checksum field set to `0`, since that means the checksum is not computed (#632)
49+
- wire: make many functions const (#693)
50+
- wire/dhcpv4: remove Option enum (#656)
51+
- wire/dhcpv4: use heapless Vec for DNS server list (#678)
52+
- wire/icmpv4: add support for TimeExceeded packets (#609)
53+
- wire/ip: Remove `IpRepr::Unspecified`, `IpVersion::Unspecified`, `IpAddress::Unspecified` (#579, #616)
54+
- wire/ip: support parsing unspecified IPv6 IpEndpoints from string (like `[::]:12345`) (#732)
55+
- wire/ipv6: Make Public Ipv6RoutingType (#691)
56+
- wire/ndisc: do not error on unrecognized options. (#737)
57+
- Switch to Rust 2021 edition. (#729)
58+
- Remove obsolete Cargo feature `rust-1_28` (#725)
1559

1660
## [0.8.2] - 2022-11-27
1761

@@ -152,7 +196,8 @@ only processed when directed to the 255.255.255.255 address. ([377](https://gith
152196
- Use #[non_exhaustive] for enums and structs ([409](https://github.com/smoltcp-rs/smoltcp/pull/409), [411](https://github.com/smoltcp-rs/smoltcp/pull/411))
153197
- 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))
154198

155-
[Unreleased]: https://github.com/smoltcp-rs/smoltcp/compare/v0.8.2...HEAD
199+
[Unreleased]: https://github.com/smoltcp-rs/smoltcp/compare/v0.9.0...HEAD
200+
[0.9.0]: https://github.com/smoltcp-rs/smoltcp/compare/v0.8.2...v0.9.0
156201
[0.8.2]: https://github.com/smoltcp-rs/smoltcp/compare/v0.8.1...v0.8.2
157202
[0.8.1]: https://github.com/smoltcp-rs/smoltcp/compare/v0.8.0...v0.8.1
158203
[0.8.0]: https://github.com/smoltcp-rs/smoltcp/compare/v0.7.0...v0.8.0

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "smoltcp"
3-
version = "0.8.1"
3+
version = "0.9.0"
44
edition = "2021"
55
rust-version = "1.65"
66
authors = ["whitequark <[email protected]>"]

README.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ There are 3 supported mediums.
4949
* IPv4 time-to-live value is configurable per socket, set to 64 by default.
5050
* IPv4 default gateway is supported.
5151
* Routing outgoing IPv4 packets is supported, through a default gateway or a CIDR route table.
52-
* IPv4 fragmentation is **not** supported.
52+
* IPv4 fragmentation and reassembly is supported.
5353
* IPv4 options are **not** supported and are silently ignored.
5454

5555
#### IPv6
@@ -86,7 +86,7 @@ The ICMPv4 protocol is supported, and ICMP sockets are available.
8686

8787
#### ICMPv6
8888

89-
The ICMPv6 protocol is supported, but is **not** available via ICMP sockets.
89+
The ICMPv6 protocol is supported, and ICMP sockets are available.
9090

9191
* ICMPv6 header checksum is supported.
9292
* ICMPv6 echo replies are generated in response to echo requests.
@@ -227,51 +227,51 @@ Any value can be set, unlike with Cargo features.
227227
Environment variables take precedence over Cargo features. If two Cargo features are enabled for the same setting
228228
with different values, compilation fails.
229229

230-
### IFACE_MAX_ADDR_COUNT
230+
### `IFACE_MAX_ADDR_COUNT`
231231

232232
Max amount of IP addresses that can be assigned to one interface (counting both IPv4 and IPv6 addresses). Default: 2.
233233

234-
### IFACE_MAX_MULTICAST_GROUP_COUNT
234+
### `IFACE_MAX_MULTICAST_GROUP_COUNT`
235235

236236
Max amount of multicast groups that can be joined by one interface. Default: 4.
237237

238-
### IFACE_MAX_SIXLOWPAN_ADDRESS_CONTEXT_COUNT
238+
### `IFACE_MAX_SIXLOWPAN_ADDRESS_CONTEXT_COUNT`
239239

240240
Max amount of 6LoWPAN address contexts that can be assigned to one interface. Default: 4.
241241

242-
### IFACE_NEIGHBOR_CACHE_COUNT
242+
### `IFACE_NEIGHBOR_CACHE_COUNT`
243243

244244
Amount of "IP address -> hardware address" entries the neighbor cache (also known as the "ARP cache" or the "ARP table") holds. Default: 4.
245245

246-
### IFACE_MAX_ROUTE_COUNT
246+
### `IFACE_MAX_ROUTE_COUNT`
247247

248248
Max amount of routes that can be added to one interface. Includes the default route. Includes both IPv4 and IPv6. Default: 2.
249249

250-
### FRAGMENTATION_BUFFER_SIZE
250+
### `FRAGMENTATION_BUFFER_SIZE`
251251

252252
Size of the buffer used for fragmenting outgoing packets larger than the MTU. Packets larger than this setting will be dropped instead of fragmented. Default: 1500.
253253

254-
### ASSEMBLER_MAX_SEGMENT_COUNT
254+
### `ASSEMBLER_MAX_SEGMENT_COUNT`
255255

256256
Maximum number of non-contiguous segments the assembler can hold. Used for both packet reassembly and TCP stream reassembly. Default: 4.
257257

258-
### REASSEMBLY_BUFFER_SIZE
258+
### `REASSEMBLY_BUFFER_SIZE`
259259

260260
Size of the buffer used for reassembling (de-fragmenting) incoming packets. If the reassembled packet is larger than this setting, it will be dropped instead of reassembled. Default: 1500.
261261

262-
### REASSEMBLY_BUFFER_COUNT
262+
### `REASSEMBLY_BUFFER_COUNT`
263263

264264
Number of reassembly buffers, i.e how many different incoming packets can be reassembled at the same time. Default: 1.
265265

266-
### DNS_MAX_RESULT_COUNT
266+
### `DNS_MAX_RESULT_COUNT`
267267

268268
Maximum amount of address results for a given DNS query that will be kept. For example, if this is set to 2 and the queried name has 4 `A` records, only the first 2 will be returned. Default: 1.
269269

270-
### DNS_MAX_SERVER_COUNT
270+
### `DNS_MAX_SERVER_COUNT`
271271

272272
Maximum amount of DNS servers that can be configured in one DNS socket. Default: 1.
273273

274-
### DNS_MAX_NAME_SIZE
274+
### `DNS_MAX_NAME_SIZE`
275275

276276
Maximum length of DNS names that can be queried. Default: 255.
277277

0 commit comments

Comments
 (0)