You can find the patches and full version on: ftp://ftp.linux.lu/pub/people/thierry/l2tp-patch-0.70.tgz ftp://ftp.linux.lu/pub/people/thierry/l2tp-0.70.tgz
We also patched the doesn't-close-secrets-file problem :)
In addition to changing the name of the logging function (we changed it to log_message), we changed all the bzero and bcopy calls to memset and memcopy, since bzero and bcopy are deprecated.
We're keen to get l2tpd doing all the packet handling in kernel space, since this means reducing the number of memory transfers required - the packets can be handed over to pppd in-situ. We're aiming to handle as many as 2000 users on our hardware - this should be possible using kernel space packet handling.
In the existing implementation, packets are copied from the incoming network card, handled in kernel space by PPPD, sent to L2TPD in user space (that's another copy), which then sends the L2TP packet to the outgoing ethernet card (that's two more copies - one back to kernel space, then to the network card). With L2TPD in kernel space, the packet is copied off the incoming interface, edited inplace by PPPD and L2TPD, then copied to the outgoing interface. Even with 400MHz DDR RAM, we'd much prefer to not copy stuff around memory needlessly.
I'll try to incorporate Thierry's changes into our code to provide a diff against his v0.70.
One of the things I want to do in the future is get the make process to automatically increment the firmware revision as a "build number". This will make it easier for us to keep track of which version of code is running on which machine. No need to slow the RAD process down with paper work if the build number is in the protocol headers ;)
Is rp-l2tp realy so much better ?
From what I've been told by my colleague, the rp-l2tp code is a lot cleaner - Roaring Penguin seem to be fairly consistent in producing very clear and readable code.
IIRC, rp-l2tp does not support any kind of "kernel space" component at all.
I run l2tpd on production servers and it works pretty well now.
Although it runs, it's not necessarily efficient in what it does. I find the code really hard to follow right now.