Layer 2 Transport Protocol Network ServerThis is a customer-sponsored project that contains significant fixes, plus new features
Our resident bug-eaters have done an excellent job with this. Originally, the program would crash the moment you executed it due to buffer overflows. There were actually a couple of these, some that wouldn't bite until you were in the middle of something. Another bug was in the handling of Radius protocol. As written, it tried to use the same packet number for all transactions between a radius server and a given connection. However, this packet id is designed to detect lost packets on UDP. This meant that the radius server was always thinking that the packets were duplicates when they weren't. It now allocated specific packet ids for each transaction and does not re-use them until 1 - we wrap around all possible ids, and 2 - the transaction has completed or timed-out. If both conditions cannot be resolved, then it re-uses the oldest id number, basically forcing an early time-out. if you use multiple radius servers, this does not currently assign packet ids on a per-server basis for scalability and it should (email me if you need this fixed).
All fixes and changes from every version and fork I can find going back almost a decade has been merged in. This includes an "upstream" github currently maintained in France. I'll merge diffs from the French version every so often if I see any specific bug fixes.
Added to this is all the changes and features, including a PPPOE, a LAC implementation, and more. I've added support for multiple radius pools so that your radius server can specify which pool id you want the particular user to get an IP from. I've also added a maximum connection limit, and made the configuration a bit more user friendly by displaying the current configuration in the menu screen (config terminal).
You can get the latest version of this project from GitHub.