Zwei Kernel-Module verwenden jeweils einen Netlink-Socket. Wie man sie beide gleichzeitig benutzt?

8

Guten Tag. Ich möchte zwei (fast gleiche) Module erstellen - jedes Modul verwendet netlink socket und antwortet auf die eingehende Nachricht aus dem Userspace-Programm.

Während der Initialisierung des ersten Moduls wird der folgende Befehl erfolgreich ausgeführt:

%Vor%

Wenn ich jedoch ein zweites Modul mit den gleichen Argumenten starte, wird derselbe Befehl einen Fehler verursachen.

Ich dachte, dass dieser Fehler passiert, weil der NETLINK_USER-Wert beider Module derselbe ist - deshalb konnte ich nicht die zweite Socket-Verbindung für denselben Netlink-Benutzer erstellen. Wenn ich jedoch NETLINK_USER Wert als 32 versuche, würde es einen Kernel-Fehler geben. Jeder andere Wert - auch Fehler.

Bitte sagen Sie mir, was ich tun muss, um zwei Kernel-Module gleichzeitig zu benutzen?

    
Jake Badlands 12.09.2013, 14:32
quelle

1 Antwort

8

Im Kernel sind standardmäßig 32 NetLink-Slots verfügbar. Einige davon werden vom System verwendet (z. B. vom Audit-Subsystem). Sie finden die Details zu vordefinierten Konstanten hier . Wie für Ihre Frage, versuchen Sie Folgendes zu verwenden:

%Vor%

MAX_LINKS hier ist die Grenze von netlink Slots, die der Kernel unterstützt.

    
Ilya Matveychikov 04.10.2013, 07:28
quelle