Der Grund, warum ich den Fehler "Verbindung abgelehnt" bekam, ist, weil die User-Land- und Kernel-Land-Prozesse nicht im selben Netzwerkraum waren. Der Kernel-Land-Prozess lauschte im "root" -Raum, während der User-Land-Prozess einen anderen Raum sendete.
CORE verwendet Linux-Virtualisierung. Es erstellt separate Prozess- und Netzwerkräume für jeden emulierten Knoten. Wenn eine Anwendung auf einem CORE-Knoten ausgeführt wird, hat ihr Benutzerlandprozess einen eigenen Prozess-ID-Raum und Netzwerkstapelspeicherplatz. Die Nachrichten, die von der Anwendung gesendet wurden, waren innerhalb der eigenen Speicherbereiche des CORE-Knotens beschränkt.
Um die Kernel-Land- und User-Land-Kommunikation bei der Verwendung von CORE zu ermöglichen, sollten wir die Anwendung zuerst auf den Netzwerkraum des Kernels schalten und dann einen Netlink-Socket erstellen und Nachrichten über den Socket senden.
Um zum Netzwerkbereich des Kernels zu wechseln, müssen Sie zunächst /proc
an /proc_root
anhängen. Fügen Sie dann in der Anwendung {fd = open("/proc_root/1/ns/net", O_RDONLY); setns(fd, 0);}
hinzu, bevor Sie mithilfe von Netlink Nachrichten an den Kernel-Land-Prozess senden.
Hallo Galka, Vielen Dank für die Beantwortung meiner Frage. Ich habe es vor ungefähr einem Jahr gepostet und jetzt habe ich eine Lösung gefunden. Das Problem war, dass ich Netlink verwendet habe, das nur Kernel-Kommunikation und Benutzer-Space-Kommunikation unterstützt, wenn sich die beiden kommunizierenden Prozesse in denselben Netzwerk- und Prozessräumen befinden. Da ein CORE-Knoten separate Netzwerk- und Prozessräume verwendet, ist ein Fehler aufgetreten. Ich habe versucht, den CORE-Knoten zu den Kernel-Räumen wechseln zu lassen und dann war der Fehler weg. :) – Tina
Hallo, Tina. Warum hast du die Antwort nicht eingereicht, jeder war neugierig :) – galka
Nun, das wusste ich nicht. Das nächste Mal werde ich tun :) – Tina