FreeRADIUS 4 будет поддерживать динамическое связывание кортежей IP / портов с секретами, что эффективно решает вашу проблему.Если вы хотите что-то создать самостоятельно, то вы можете использовать libfreeradius, но, честно говоря, он предназначен для внутреннего потребления утилитами, которые поставляются с FreeRADIUS и двоичным файлом с радиусом, API (не говоря уже о ABI) чрезвычайно изменчив и часто меняется между незначительнымивыпусков, поэтому вам может потребоваться потратить много времени на поддержание того, что вы придумали.
Если вы настроены на это, вам может оказаться проще работать с FreeRADIUS 4 HEAD, так какпарсеры протоколов разделены на отдельные независимые библиотеки, которые очень легко инициализировать вне основного сервера.
Основные функции, которые вам нужно вызвать, это fr_radius_init
для инициализации библиотеки протокола, а затем fr_radius_encode
для кодирования пакетов и fr_radius_decode
для декодирования пакетов.
Вам нужно придумать свои собственные функции ввода-вывода, хотя некоторые из них в src/lib/util/socket.c
предлагают базовые абстракции.