You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+51-6Lines changed: 51 additions & 6 deletions
Original file line number
Diff line number
Diff line change
@@ -6,12 +6,56 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
7
7
## [Unreleased]
8
8
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
+
14
11
- 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)
@@ -152,7 +196,8 @@ only processed when directed to the 255.255.255.255 address. ([377](https://gith
152
196
- 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))
153
197
- 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))
Copy file name to clipboardExpand all lines: README.md
+14-14Lines changed: 14 additions & 14 deletions
Original file line number
Diff line number
Diff line change
@@ -49,7 +49,7 @@ There are 3 supported mediums.
49
49
* IPv4 time-to-live value is configurable per socket, set to 64 by default.
50
50
* IPv4 default gateway is supported.
51
51
* 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.
53
53
* IPv4 options are **not** supported and are silently ignored.
54
54
55
55
#### IPv6
@@ -86,7 +86,7 @@ The ICMPv4 protocol is supported, and ICMP sockets are available.
86
86
87
87
#### ICMPv6
88
88
89
-
The ICMPv6 protocol is supported, but is **not** available via ICMP sockets.
89
+
The ICMPv6 protocol is supported, and ICMP sockets are available.
90
90
91
91
* ICMPv6 header checksum is supported.
92
92
* ICMPv6 echo replies are generated in response to echo requests.
@@ -227,51 +227,51 @@ Any value can be set, unlike with Cargo features.
227
227
Environment variables take precedence over Cargo features. If two Cargo features are enabled for the same setting
228
228
with different values, compilation fails.
229
229
230
-
### IFACE_MAX_ADDR_COUNT
230
+
### `IFACE_MAX_ADDR_COUNT`
231
231
232
232
Max amount of IP addresses that can be assigned to one interface (counting both IPv4 and IPv6 addresses). Default: 2.
233
233
234
-
### IFACE_MAX_MULTICAST_GROUP_COUNT
234
+
### `IFACE_MAX_MULTICAST_GROUP_COUNT`
235
235
236
236
Max amount of multicast groups that can be joined by one interface. Default: 4.
237
237
238
-
### IFACE_MAX_SIXLOWPAN_ADDRESS_CONTEXT_COUNT
238
+
### `IFACE_MAX_SIXLOWPAN_ADDRESS_CONTEXT_COUNT`
239
239
240
240
Max amount of 6LoWPAN address contexts that can be assigned to one interface. Default: 4.
241
241
242
-
### IFACE_NEIGHBOR_CACHE_COUNT
242
+
### `IFACE_NEIGHBOR_CACHE_COUNT`
243
243
244
244
Amount of "IP address -> hardware address" entries the neighbor cache (also known as the "ARP cache" or the "ARP table") holds. Default: 4.
245
245
246
-
### IFACE_MAX_ROUTE_COUNT
246
+
### `IFACE_MAX_ROUTE_COUNT`
247
247
248
248
Max amount of routes that can be added to one interface. Includes the default route. Includes both IPv4 and IPv6. Default: 2.
249
249
250
-
### FRAGMENTATION_BUFFER_SIZE
250
+
### `FRAGMENTATION_BUFFER_SIZE`
251
251
252
252
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.
253
253
254
-
### ASSEMBLER_MAX_SEGMENT_COUNT
254
+
### `ASSEMBLER_MAX_SEGMENT_COUNT`
255
255
256
256
Maximum number of non-contiguous segments the assembler can hold. Used for both packet reassembly and TCP stream reassembly. Default: 4.
257
257
258
-
### REASSEMBLY_BUFFER_SIZE
258
+
### `REASSEMBLY_BUFFER_SIZE`
259
259
260
260
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.
261
261
262
-
### REASSEMBLY_BUFFER_COUNT
262
+
### `REASSEMBLY_BUFFER_COUNT`
263
263
264
264
Number of reassembly buffers, i.e how many different incoming packets can be reassembled at the same time. Default: 1.
265
265
266
-
### DNS_MAX_RESULT_COUNT
266
+
### `DNS_MAX_RESULT_COUNT`
267
267
268
268
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.
269
269
270
-
### DNS_MAX_SERVER_COUNT
270
+
### `DNS_MAX_SERVER_COUNT`
271
271
272
272
Maximum amount of DNS servers that can be configured in one DNS socket. Default: 1.
273
273
274
-
### DNS_MAX_NAME_SIZE
274
+
### `DNS_MAX_NAME_SIZE`
275
275
276
276
Maximum length of DNS names that can be queried. Default: 255.
0 commit comments