2 votes

Lien réseau générique - PID non unique

J'écris un module noyau qui reçoit des messages de l'espace utilisateur via un lien réseau générique. Lorsque j'accède à genl_info->snd_pid, dans la fonction de rappel du noyau, j'obtiens l'ID du processus.

Selon la documentation de libnl :

libnl génère des numéros de port uniques basés sur l'identifiant du processus et y ajoute un décalage permettant l'utilisation de plusieurs sockets. Le socket initial sera toujours égal à l'identifiant du processus pour des raisons de compatibilité ascendante.

Mon application userspace utilise plusieurs threads et je dois les différencier. Merci pour toute aide.

3voto

svinota Points 731

Vous pouvez utiliser deux options :

  1. Partager un socket netlink à travers tous les threads, mais utiliser votre propre NLA générique du protocole netlink pour identifier le thread.

  2. Ouvrez votre propre socket netlink dans chaque thread et utilisez l'astuce suivante :

L'actuel PID_MAX_LIMIT == 2 ^ 22, tandis que le pid est de type uint32 . On peut donc utiliser pid pour regrouper le pid du processus et un certain id <= 1024. Veuillez vous référer aux exemples : en C (libnl) et en Python (pyroute2).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X