Design - sigscale/radierl GitHub Wiki
The radierl project provides a RADIUS protocol stack application.
The stack handles receiving UDP packets on sockets, silently discarding packets with invalid RADIUS Code or Length, starting a process to handle the transaction and calling the stack user's defined handler. The transaction handler then responds directly to retransmitted requests without calling the user's handler again.
Process Communication
The basics of the process communication is depicted below. A radius_server process handles all packets received from the socket. The radius_server process sends valid requests to a radius_fsm process which handles all requests in a transaction. The radius_fsm process sends responses directly to the socket.
Process Supervision
The overall supervision of the stack and user's application is depicted below.
Callback Modules
Initialization
When the radius_server starts it calls Module:init/2 to initialize the callback handler.
Handling Requests
The radius_fsm transaction handler process calls the Module:request/4 callback function when a request is first received. The result should be a RADIUS response packet, as returned by radius:codec/1.
Termination
The radius_server process calls the Module:terminate/2 callback function when it is about to shutdown.