Skip to content

Releases: smoltcp-rs/smoltcp

v0.12.0

28 Nov 00:26
Compare
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
Compare
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)