Ich arbeite an Netlink-Sockets, geschriebenen Code für Anwendung und Kernel-Modul. Das Kernelmodul sendet regelmäßig Benachrichtigungen an die Benutzerbereichsanwendung. Wenn die Anwendung beendet wird, hört das Kernel-Modul nicht auf, Benachrichtigungen zu senden. Wie wird der Kernel wissen, wenn die Anwendung beendet wird? Können wir Benutzer in netlink_kernel_cfg für diesen Zweck binden und lösen? Ich habe viel gesucht, aber keine Informationen dazu gefunden.Wie erkennt Kernel das Vorhandensein von Netlink im Userspace?
Antwort
Wenn eine Anwendung unter Linux beendet wird, werden alle Dateideskriptoren (einschließlich Socket-Deskriptoren) geschlossen. Um Ihre Kernel-Modul benachrichtigt zu haben, wenn die Anwendung der netlink Buchse Sie das optionale .unbind op in struct netlink_kernel_cfg implementieren müssen geschlossen wird.
include/linux/netlink.h
/* optional Netlink kernel configuration parameters */
struct netlink_kernel_cfg {
unsigned int groups;
unsigned int flags;
void (*input)(struct sk_buff *skb);
struct mutex *cb_mutex;
int (*bind)(struct net *net, int group);
void (*unbind)(struct net *net, int group);
bool (*compare)(struct net *net, struct sock *sk);
};
die Konfigurationsparameter in Ihrem Modul Set:
struct netlink_kernel_cfg cfg = {
.unbind = my_unbind,
};
netlink = netlink_kernel_create(&my_netlink, ... , &cfg);
Um zu verstehen, wie diese genutzt werden, ist folgendes beachten Fragment aus dem netlink Protokoll Familie proto_ops Definition:
static const struct proto_ops netlink_ops = {
.family = PF_NETLINK,
.owner = THIS_MODULE,
.release = netlink_release,
.freigabe wird beim Schließen des Sockels aufgerufen (in Ihrem Fall aufgrund der Anwendung wird getötet).
Als Teil seiner Bereinigungsprozess, netlink_release() hat die folgende Umsetzung:
net/netlink/af_netlink.c
if (nlk->netlink_unbind) {
int i;
for (i = 0; i < nlk->ngroups; i++)
if (test_bit(i, nlk->groups))
nlk->netlink_unbind(sock_net(sk), i + 1);
Hier können Sie sehen, dass, wenn die optionale netlink_unbind wurde zur Verfügung gestellt, dann wird es ausgeführt werden, bietet Ihnen einen Rückruf, wenn Ihre ap plication hat den Socket geschlossen (entweder elegant oder als Ergebnis der Tötung).
- 1. Wie erstelle ich einen "netlink" zwischen Kernel und Userspace?
- 2. NETLINK Eingabefunktion im Kernel
- 3. Abrufen nicht ausgerichteter Netlink-Nachrichtengröße im Kernel-Bereich
- 4. Netlink User-Space und Kernel-Space-Kommunikation
- 5. Wie erkennt man das Vorhandensein eines Standard-Aufnahmegeräts im System?
- 6. Userspace vs Kernel-Space-Treiber
- 7. der virtuelle Maschine und die Kernel-Kommunikation über netlink
- 8. VLAN-Informationen mit NETLINK
- 9. Linux Kernel Generisches Netlink - Ist es gleichzeitig?
- 10. Killing ein Userspace-Programm von einem Kernel-Modul
- 11. Verschieben von Daten aus dem Kernel-Puffer in Userspace-Puffer im Interrupt-Handler
- 12. Ist Netlink das Medium für Syscall-Ereignisse?
- 13. Aufruf einer Userspace-Funktion innerhalb eines Linux-Kernel-Moduls
- 14. Netlink Sockets in C den 3.X Linux-Kernel
- 15. Unterstützt Libevent Netlink-Socket
- 16. Wie kann ich das Vorhandensein einer Eigenschaftendatei im Klassenpfad verspotten?
- 17. Wie erkennt man das Vorhandensein von App in Universal Windows Plateform
- 18. Wie ruft man Linux Kernel Treiber Funktionen von einem Userspace Programm auf?
- 19. Wie schreibe ich Pakete im Kernel-Bereich
- 20. Verwendet jemand Netlink für IPC?
- 21. Wie erkenne ich das Vorhandensein dieser Linie?
- 22. Linux netlink mutlicast Routing-Updates
- 23. Wie erkennt man das Vorhandensein einer TXT-Datei mit einem Batch-Befehle
- 24. Wie schlafen im Linux-Kernel?
- 25. Wie kann ich kombinierte Kernel- und Userspace-Stacks mit perf erfassen?
- 26. Verwenden von physikalisch zusammenhängenden Seiten in UserSpace
- 27. Wie kann das dynamische Debugging im Linux-Kernel aktiviert werden?
- 28. Android erkennt das Bild im Ressourcenordner nicht
- 29. Schreibkombinationsfunktion in der Linux-Userspace-App aktivieren?
- 30. Ioremaped Adresse im Kernel