Well my order of preference for the interface at the moment would be:
ioctl: ASCII dm messages
ioctl: binary dm messages (i.e. the message content is treated as a binary blob)
mmap: lookups in shared memory (lockless preferably)
netlink
Alasdair