Skip to content

Releases: smoltcp-rs/smoltcp

v0.13.0

20 Mar 15:00

Choose a tag to compare

Highlights of this release are IPv6 SLAAC support, TCP improvements (zero window probes, retransmit fixes, RFC compliance), raw socket enhancements, and a bump to Rust Edition 2024.

  • Minimum Supported Rust Version (MSRV) bumped to 1.91.
  • Rust Edition bumped to 2024. (#1084)
  • heapless dependency bumped to v0.9. (#1083)
  • iface
    • IPv6 SLAAC (Stateless Address Autoconfiguration), gated behind a new slaac feature flag. (#1039)
    • Add slaac_updated_at method to check when SLAAC addresses were last updated. (#1130)
    • Add getters for the default IPv4/IPv6 route and is_ipv4_gateway/is_ipv6_gateway helpers. (#1129)
    • Exhaust egress socket state on poll, so sockets don't have to wait for the next poll to send queued data. (#1059)
    • Remove always-Ok Results in consume(). (#1093)
    • Honor any_ip when checking local address. (#1119)
    • Add iface_max_route_count-0 feature flag to disable the routing table entirely. (#1057)
    • Improve IPv4 source address selection for multi-subnet interfaces. (#1074)
    • Fix poll_at returning stale timestamps due to silent_until expiry check. (#1127)
    • Fix fragment payload sizes not being a multiple of eight octets. (#1116)
    • Fix incorrect packet length after defragmentation. (#1094)
    • Fix compilation of IPv6+Multicast without Ethernet. (#1043)
    • Log and drop IPv6 packets requiring fragmentation (IPv6 routers must not fragment). (#1038)
  • tcp
    • Add zero window probe support. (#1026)
    • Close socket if the local IP is no longer assigned to the interface. (#1113)
    • Reject bytes outside the receive window. (#1079)
    • Don't accept RST packets on listening sockets. (#1058)
    • Don't send TCP RST when packet is handled by a raw socket. (#1069)
    • Send challenge ACK for duplicate ACK in LAST-ACK state. (#1126)
    • Fix retransmit exponential backoff, align to RFC 6298. (#1023)
    • Restart retransmit timer on new data ACK. (#1018)
    • Fix FIN retransmit in CLOSING state. (#1026)
    • Add pause_synack feature flag to allow user code to withhold SYN|ACK. (#1063)
  • socket
    • ICMP: support binding to a TCP port. (#1089)
    • ICMP: add no-auto-icmp-echo-reply feature flag to disable automatic echo replies. (#1106)
    • Raw: allow receiving all protocols and IP versions (unfiltered mode). (#1067)
    • Raw: fix panic when payload buffer exceeds packet size during fragmentation. (#1077)
    • DHCPv4: reuse DHCPOFFER transaction ID in DHCPREQUEST. (#1061)
    • DHCPv4: fix panic when T1 < T2 < lease duration is not respected by server. (#1029)
    • DNS: fix compilation when socket-dns is enabled but socket-udp isn't. (#1041)
    • Implement AnySocket for the Socket enum. (#1092)
  • phy
    • Tracer: update public API to allow custom inspection and printing of packets. (#1076)
    • TunTapInterface: no longer automatically enables medium-ethernet feature. (#1055)
  • wire
    • Add generic IPv4/IPv6 packet parsing support to IpRepr. (#1087)
    • Make Cidr initialization const. (#1036)
    • Add conversion from Endpoint into SocketAddr. (#1124)
    • Use newly stable IP methods from core::net. (#1115)
    • Fix RawHardwareAddress panic when parsing to specific link-layer address. (#1027)
    • Fix multicast panic when max_resp_code is zero. (#1047)
    • Fix partial checksum in tcpdump/pcap. (#1015)

v0.12.0

28 Nov 00:26

Choose a tag to compare

Almost a year in the making, the highlights of the release are the migration to core::net IP types, IPv6 multicast, TCP improvements, and many fixes. Smoltcp now connects your gadgets to the Internet better than ever.

  • Minimum Supported Rust Version (MSRV) bumped to 1.80.
  • iface
    • IPv6 multicast (#914, #976, #988, #1009, #1012)
    • Add poll_egress() and poll_ingress_single() methods for finer-grained control of what and how many packets are processed. (#954, #991, #993)
    • Multicast join/leave no longer requires access to device+timestamp. (#985)
    • Reset expiry of entries in the neighbor cache on packet reception (#966)
    • Honor any_ip for ARP (#880)
    • Honor any_ip for IPv6 (#900)
    • Use own source address for ARP and NDISC Solicitations (#984)
    • fix panic when discarding HBH Option with multicast destination address (#996)
    • fix panic with 6lowpan frag datagram_size < 40 (#997)
    • fix panic if no suitable IPv6 src_addr is found (#895)
    • Fix specific length IP packets not being fragmented (#1008)
  • tcp
    • Add support for congestion control (#907)
    • Add support for simultaneous open (#1001)
    • Add support for Timestamp option (#939)
    • Send immediate ACKs after RMSS bytes of data (#1002)
    • Do not ignore FIN if segment is partially outside the window. (#977)
    • Correctly set internal sACK flag for client sockets (#995)
    • Only reset remote_last_ts if some data is enqueued (#917)
    • Don't delay ACKs for significant window updates (#935)
    • Add listen_endpoint getter (#1005)
  • socket
    • UDP,ICMP,raw: Add send_queue/recv_queue (#1003)
    • ICMP: split ICMPv4/v6 accept and process (#887)
    • UDP: Store local and use local address in metadata (#904)
    • DNS: fix panic if server list is too long (#986)
    • DNS: fix panic if no valid source address is found (#987)
  • phy
    • Change mutability of RxToken's consume argument. (#924)
    • Add support for NetBSD (#883)
    • Add minimum support for iOS (#896)
    • Add BPF support for FreeBSD (#906)
    • disable checksums on loopback (#919)
  • wire
    • Use core::net types for IP addresses. (#937, #994)
    • Add missing exports in wire for DNS (#891)
    • rename Scope to MulticastScope (#898)
    • Re-export dhcpv4::Flags and dhcpv4::OpCode (#901)
    • Make Address:v6() constructor const (#975)
    • Ipv6RoutingHeader::clear_reserved: fix offsets for Type 2 routing headers. (#882)

v0.11.0

23 Dec 19:34

Choose a tag to compare

Additions

  • wire/ipsec: add basic IPsec parsing/emitting (#821).
  • phy: add support for TUNSETIFF on MIPS, PPC and SPARC (#839).
  • socket/tcp: accept FIN on zero window (#845).
  • wire/ipv6: add is_unique_local() to IPv6 addresses (#862).
  • wire/ipv6: add is_global_unicast() to IPv6 addresses (#864).
  • iface/neigh: add fill_with_expiration (#871).

Fixes

  • icmpv6: truncate packet to MTU (#807, #808).
  • wire/rpl: DAO-ACK DODAG ID was wrongly read (#824).
  • socket/tcp: don't panic when calling listen again on the same local endpoint (#841).
  • wire/dhcpv4: don't panic when parsing addresses with incorrect amount of bytes (#843).
  • iface/ndisc: prevent ndisc when the medium is IP (#865).
  • wire/ieee802154: better parsing of security fields. Correctly parse frame type (3 bits instead of 2 bits) (#868).
  • wire/ieee802154: better handle address fields for new frame version (#870).
  • iface/tcp: don't send TCP RST with unspecified addresses (#867).
  • iface: don't handle empty packets (this would panic when reading the IP version) (#866).
  • socket/dhcp: Add an upper bound to the renew/rebind timeout in RetryConfig (#835).

Changes

  • iface: rewrite IpPacket such that IPv6 packets can contain owned extension headers (#802).
  • iface: remove generic T: [u8] in functions. This reduced the server example by 10KB (#810).
  • SocketSet: add comment about using static lifetime for SocketSets with owned storage (#813).
  • phy/RawSocket: open raw socket with O_NONBLOCK (#817).
  • tests/rstest: use rstest for fixture based testing (#823).
  • docs/readme: update readme about IEEE802.15.4 and 6LoWPAN (#826).
  • wire/ipv6-hbh: IPv6 HBH has owned options instead of references (#827).
  • wire/sixlowpan: 6LoWPAN is split into multiple modules (#828).
  • sockets: match the behaviour of peek_slice and recv_slice (#834).
  • dependencies: update to headpless v0.8 (#853).
  • config: make config constants public (#855).
  • phy/ieee802154: clarify mtu+=2 for IEEE802.15.4 (#857).
  • sockets: recv_slice returns RcvError::Truncated when the length of the slice is smaller than the data received by the socket (#859).
  • iface/ipv6: get_source_address uses RFC 6724 for address selection (#864).
  • pcap: use IEEE 802.15.4 without FCS for PCAP link types (#874).
  • iface: rename IpPacket/Ipv4Packet/Ipv6Packet to Pacet/PacketV4/PacketV4. This is to remove the ambiguity with IpPacket in src/wire/ (#873).
  • wire/ndisc: rewrite parse function (3.1KiB -> 1.9KiB) (#878)
  • iface: Check IPv6 address after processing HBH (#861)