Bonjour,
Je suis actuellement étudiant en master informatique option réseaux.J'ai donc voulu développez une application, dans l'espace utilisateur, qui a pour but d'écouter tous les paquets circulant sur le réseau.Pour ce faire, j'utilise des sockets de type PF_PACKET et je me met en mode promiscuous.
Illustration du problème :
Par exemple, lorsque j'émets un appel système recvfrom(..) une socket au niveau utilisateur.La libc identifie la fonction d'enveloppe associé à l'appel système puis émet une interruption avec le numéro associé à cette fonction d'enveloppe.
Le noyau lance, alors, un gestionnaire d'interruption qui lance une fonction.
Ma question est donc : A quel moment les fonctions du drivers sont appelées ?? Ou se fait le lien entre la fonction lancé par le gestionnaire d'interruption et les fonctions du pilote ??
Mon but étant d'utiliser cette application pour des réseaux à haut-débit comme l'Ethernet 10-Gigabit par exemple.
Merci.
# tu t'en fous
Posté par NeoX . Évalué à 3.
n'est ce pas là le but de travailler en mode "userland"
se balancer de ce qui se passe en mode noyau
et donc ne pas avoir à se soucier de savoir si ta carte reseau est à 10/100/1000, si elle utilise tel ou tel driver...
c'est ca qui est beau, tu demandes juste à y avoir acces, et le noyau s'occupe de tout
bon OK ca ne repond pas à ta question
# Hmmm...
Posté par Pierre Carrier . Évalué à 5.
Déjà, je vois mal l'intérêt de réimplémenter libpcap, m'enfin...
Tu as envie de comprendre le chemin de code impliqué entre le syscall handler pour une opération sur un socket, jusqu'au driver Ethernet ? Il n'y en a pas. Tout ce qui se passe sur ta carte réseau "en vol" (en dehors de la configuration) sera pris en charge dans la gestion de ses interruptions, donc pas dans le contexte de la prise en charge de ton syscall (même si ton syscall est traité dans le même temps).
Les relations entre les deux sont déraisonnablement compliquées pour faire l'objet d'un commentaire...
Si tu veux comprendre ce qui se passe dans le noyau, je te conseille de jeter un œil à drivers/net/e1000/e1000_hw.c. Si tu es toujours motivé après cet exemple, on peut discuter :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.