Kann ich mehr als 32 Netlink-Sockets im Kernelspace haben?

Ich habe mehrere Kernelmodule, die mit dem Userspace interagieren müssen. Daher verfügt jedes Modul über einen Netlink-Socket.

Mein Problem ist, dass diese Buchsen sich gegenseitig stören. Dies liegt daran, dass sich alle bei derselben Netlink-Adressfamilie registrieren (da zunächst nicht viele zur Verfügung stehen - dasmax ist 32 undmehr als die Hälfte sind bereits reserviert) und auch, weil sie sich alle an dieselbe PID binden (die Kernel-PID - Null).

Ich wünschte, es gäbe mehr Platz für Adressfamilien. Oder noch besser, ich wünschte, ich könnte meine Sockel an andere Pids binden. Warum ist Netlink der bevorzugte User-Kernel-Kanal, wenn nur 32 Sockets gleichzeitig geöffnet sein können?

libnl-3's Dokumentation sagt

Die Netlink-Adresse (Port) besteht aus einer 32-Bit-Ganzzahl. Port 0 (Null) ist für den Kernel reserviert und bezieht sich auf den kernseitigen Socket jeder Netlink-Protokollfamilie. Andere Portnummern beziehen sich normalerweise auf Sockets im Besitz des Benutzerbereichs, obwohl dies nicht erzwungen wird.

Diese letzte Behauptung scheint momentan eine Lüge zu sein. Der Kernel verwendet einconstant as pid und exportiert keine vielseitigeren Funktionen:

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

Ich schätze, ich kann den Kernel neu kompilieren und das Adressfamilienlimit erhöhen. Dies sind jedoch Kernelmodule. Ich sollte das nicht tun müssen.

Habe ich etwas verpasst?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage