Skip to content

Releases: libcsp/libcsp


23 Apr 08:15
Choose a tag to compare


  • CSP Header 2.0. Support for 14-bit network addresses.
  • CFP (Can fragmentation protocol) 2.0
  • Layer-3 broadcast (last address of each subnet)
  • One CSP address per interface
  • Meson build system
  • CMake build system
  • Went back to use more compile time configuration for less runtime checks and simpler memory allocation
  • Connection less callbacks. The router now supports executing small services directly using a callback saving memory
  • csp_if_udp: New UDP interface for point to point UDP links
  • csp_if_tun: New IPsec like tunnel interface for secured links
  • csp_crc32_verify: now checks data + header, but still accepts checksum on data only. Default is still data only (will change in 2.1)


  • Support for 2k packets on CAN, KISS, UDP, ZMQ and others
  • Uses only static memory allocation
  • FreeRTOS 8+ support
  • Decrease csp_dedup timeout from 1s to 100ms to avoid removing duplicate ACK packets in RDP streams
  • Shorter debug message texts for smaller flash footprint
  • uart driver linux. enable low latency mode
  • socketcan: Setup sjw in can driver
  • Portability. No more use of packed bitfields.
  • RDP RX/TX queue is now global, saving a lot of memory
  • FreeRTOS now uses taskNotify API instead of binary semaphores


  • --install-csp option from waf (replaced with waf install)
  • XTEA has been removed, use a dedicated encryption library instead
  • csp_endian.h: Use the system provided <endian.h> instead (which is faster and smaller)
  • csp_malloc.h: libcsp no longer uses dynamic allocation
  • Windows Support (moved to contrib, maintainer needed)
  • Mac OSX Support (moved to contrib, maintainer needed)
  • Incoming QoS. This didn't make much sense anyways, so a single fifo is now used
  • Tasklist


  • csp_send(): Now always frees the packet and returns void.
  • csp_init(): Now a void function, because allocation cannot fail
  • python bindings: Refreshed to new 2.0 api, builds with meson too
  • Interface names are now case sensitive (this is faster and avoids pulling in ctypes and saves 340 bytes of flash)
  • csp_socket(): is replaced by simply csp_socket_t my_sock; static allocation. This is very leightweight
  • csp_bind_callback(): instead of using a socket, and binding that socket to a port.
  • new debug API. CSP does not print error messages any longer. Instead a new series of error counters has been added and a new error code system. There are flags to enable the old level 4 and 5 debug to stdout with printf.
  • csp reboot and shutdown are now implemented using hooks instaed of callback functions (see


  • Router counts incoming packets before deduplication
  • RDP: Fix ack_delay_count off by one error
  • RTable CIDR: continue parsing, even if an unknown interface is found
  • Fix buffer overflow in KISS mode if packets are too long
  • Buffer overrun in RDP EACK #157