Linux kernel implementation of NoTA Device Interconnect Protocol (DIP)

Purpose

Purpose of the project is to build kernel optimized version of NoTA DIP. The kernel implementation is compatible with DIP reference implementation that can be found at http://www.notaworld.org.

Implementation status

Currently the implementation supports:

  • Socket creation & destroy
  • Local registration of services
  • Local connection to services
  • Sending & receiving data
  • Select() call

Roadmap

Following features are currently being implemented (partial implementation exists)

  • Lup
  • Ldown TCP/IP

Following features are missing from the implementation:

  • Multi-homing Lup (support for multiple PAIs and Ldowns)
  • Gateway feature to Lup
  • Some messages are skipped (e.g. echo_req)
  • Big-endian / little-endian handling.
  • Multi-interface / virtual device support (interface supports this in general, just need some utility to create / delete interfaces)
  • Security features
  • Fetching SID list with sdp_servicediscovery
  • Asynchronous connect
  • Message boundary preserving sockets (SOCK_SEQPACKET)
  • L_IN downs
    • USB
    • Memory bus
    • Bluetooth
  • Porting of all test programs
  • Zero-copy data transfer

Reference implementation

NoTA DIP reference implementation is available from http://www.notaworld.org. There is also a project in gitorious.

Incompatibility between kernel stack and reference implementation

There is one detected incompatibility at the moment. That is with select call. If the socket is closed in one thread, the other thread sleeping in select does not notice it. Reference implementation’s select notices this. Consider the example HselectExample.

Mailing list

Mailing list is available at: http://lists.sourceforge.net/mailman/listinfo/knota-devel