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 diagram

Process Supervision

The overall supervision of the stack and user's application is depicted below.

supervison diagram

Callback Modules

Initialization

When the radius_server starts it calls Module:init/2 to initialize the callback handler.

init diagram

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.

request diagram

Termination

The radius_server process calls the Module:terminate/2 callback function when it is about to shutdown.

terminate diagram