Могу ли я иметь более 32 сокетов netlink в пространстве ядра?

У меня есть несколько модулей ядра, которые должны взаимодействовать с пользовательским пространством. Следовательно, каждый модуль имеет сокет Netlink.

Моя проблема в том, что эти розетки мешают друг другу. Это потому, что все они регистрируются в одном и том же семействе адресов Netlink (потому что не так много доступных для начала -макс 32 а такжебольше половины уже зарезервировано) а также потому, что все они связывают себя с одним и тем же pid (ядро pid - ноль).

Хотелось бы, чтобы было больше места для адресных семей. Или, еще лучше, я хотел бы связать свои гнезда с другими пидсами. Почему Netlink является предпочтительным каналом ядра пользователя, если одновременно можно открыть только 32 сокета?

документация libnl-3 говорит

Адрес (порт) netlink состоит из 32-битного целого числа. Порт 0 (ноль) зарезервирован для ядра и относится к сокету на стороне ядра каждого семейства протоколов netlink. Другие номера портов обычно относятся к сокетам, принадлежащим пользовательскому пространству, хотя это не применяется.

Это последнее утверждение кажется ложью прямо сейчас. Ядро используетконстанта как пид и не экспортирует более универсальные функции:

if (netlink_insert(sk, 0))
    goto out_sock_release;

Я думаю, я могу перекомпилировать ядро ​​и увеличить предел семейства адресов. Но это модули ядра; Я не должен был этого делать.

Я что-то пропустил?

Ответы на вопрос(2)

Ваш ответ на вопрос