Le but du module est d'avoir un block device piloté depuis le userland.
Grâce à cela, il est possible d'avoir un block device où les données transite via un tunnel SSH, ou SSL. Un peut comme NBD mais sécurisé.
Ou, si l'envie vous prend (comme moi), d'envoyer les requêtes de lecture/écriture sur plusieurs bécanes, avec répartition de charge, redondance, avec cryptage, contrôle d'accès, ...
On peut imaginer plein de truc, comme avec FUSE, qui a un wikipediaFS http://wikipediafs.sourceforge.net . Ça semble inutile, mais c'est indispensable ! (^_^)
Pour Fuse, il y a un chardev (/dev/fuse) qui ce charge de ça.
Mon problème et que je ne veut pas faire du mono-thread. Avec un chardev, il suffit qu'une requête bloque pour que tout ce qui utilise le chardev se bloque aussi. (dans le cas d'un timeout)
Je vais creuser du coté de netlink a moins que quelqu'un a une autre idée ?
Sinon, je n'ai pas compris :
- Les données qui y transite sont donc privées et ne sont pas soumit à la licence.
en quoi la licence du code aurait un impact sur les données qu'il manipule ?
J'ai précisé ce point car je sait que si gcc était sous GPL, tous les programmes compilés avec celui-ci serait sous GPL.
Ici, j'ai un système SAN qui manipulera des données qui, comme gcc, ne doivent pas se retrouver sous GPL.
Personnellement, je penche pour le flag RTLD_LAZY. Il semble que si le programme n'utilise pas la class avant le chargement, alors le chargement de la librairie exploitant cette même class ne fonctionne pas.
Le but est de vérifier que la fonction recvmsg doit se couper si on ferme la socket.
Dans le morceau de code donné, je ne boucle pas si la socket reçoit un message. Donc ça se termine bien.
Par contre, si tu me dit que tu n'as pas de trafic et que la fonction recvmsg se termine en erreur (c'est le but), c'est que j'ai un bug avec mon noyau.
Pour le mutex => non, car il est délocké avec le pthread_cond_wait
Pour faire un recvmsg non-bloquant => non car le programme bouclerait et donc 100% de cpu. Pas bien
Je vais regarder du coté de select. C'est une bonne alternative.
L'inconvénient c'est que je suit dans l'obligation d'attendre le timeout lors de la fin du programme.
C'est pour cela que je n'ai pas pensé tout de suite à l'utiliser.
Si quelqu'un a une solution autre que select, je prend, c'est peut-être une combinaison de chaque qui fera l'affaire
Commençons par les threads : tu ferme la socket pendant sont utilisation par un autre thread. Il te faudrait un mutex dessus pour faire propre.
Oui, c'est le but. Car recvmsg est un appel bloquant, donc pour l'annuler, un close sur la socket me semblait un bonne idée.
je pense que ton problème est l'utilisation de shutdown. C'est une fonction servant à fermer une connexion, or les socket raw sont des socket non connectées.
Comme mis en commentaire dans mon source, c'est normal qu'il ne marche pas.
Ce que tu peux faire c'est de la fermer avec un close, auquel cas recvmsg te retournera une erreur, ce qui est normal.
C'est là ou ça ne marche plus. Le recvmsg ne termine pas !
Non, pour l'instant, il n'y a pas de dépos officiel. Je sais que je peut en créer un gratuitement sur plein de site mais je préfert attendre d'avoir quelque chose de concret avant de le publier.
Mais rassure toi, dès que je livrerai quelque chose, je ferai un peu de PUB histoire de voir si ça interrese ...
[^] # Re: Plusieurs méthodes
Posté par DeadMaXfr . En réponse au message Patron de conception monteur cohérence des objets montés. Évalué à 1.
Tand que la voiture est en construction, le mutex est vérouillé donc pas de démarrage ...
# Le routeur à combien de ports ?
Posté par DeadMaXfr . En réponse au message Problème de plage IP. Évalué à 1.
Il ne possède que X adresse arp dans sa table et il bug quand tu lui ajoute une de trop ...
[^] # Re: driver vers quoi ?
Posté par DeadMaXfr . En réponse au message Victoire !. Évalué à 3.
Grâce à cela, il est possible d'avoir un block device où les données transite via un tunnel SSH, ou SSL. Un peut comme NBD mais sécurisé.
Ou, si l'envie vous prend (comme moi), d'envoyer les requêtes de lecture/écriture sur plusieurs bécanes, avec répartition de charge, redondance, avec cryptage, contrôle d'accès, ...
On peut imaginer plein de truc, comme avec FUSE, qui a un wikipediaFS http://wikipediafs.sourceforge.net . Ça semble inutile, mais c'est indispensable ! (^_^)
[^] # [ SUJET RESOLU ]
Posté par DeadMaXfr . En réponse au message Aide pour débogger un module. Évalué à 1.
C'est bien un while qui pose problème.
Merci pour ces judicieux conseilles !
[^] # Re: Bon c'est peut etre dans les details....
Posté par DeadMaXfr . En réponse au message Aide pour débogger un module. Évalué à 1.
Pour les while, c'est juste pour être sûr que j'obtient le lock.
Je vais améliorer ce point là, même si je sais que c'est pas ça.
Sinon, j'ai compillé le module avec un noyau 2.6.31, avec les nouvelles API. Je vais voir ce que ça donne ...
To be continued
[^] # Re: netlink
Posté par DeadMaXfr . En réponse au message Communication kernel <=> Userland. Évalué à 1.
Mon problème et que je ne veut pas faire du mono-thread. Avec un chardev, il suffit qu'une requête bloque pour que tout ce qui utilise le chardev se bloque aussi. (dans le cas d'un timeout)
Je vais creuser du coté de netlink a moins que quelqu'un a une autre idée ?
[^] # Re: par défaut droit d'auteur s'applique
Posté par DeadMaXfr . En réponse au message Projet en cours. Évalué à 1.
- Les données qui y transite sont donc privées et ne sont pas soumit à la licence.
en quoi la licence du code aurait un impact sur les données qu'il manipule ?
J'ai précisé ce point car je sait que si gcc était sous GPL, tous les programmes compilés avec celui-ci serait sous GPL.
Ici, j'ai un système SAN qui manipulera des données qui, comme gcc, ne doivent pas se retrouver sous GPL.
A moins que je m'égare ...
# Résolu
Posté par DeadMaXfr . En réponse au message Undefined symbol. Évalué à 1.
J'ai juste oublié le flag -rdynamic
Dans on souhaite qu'une librairie utilise le contenu du binaire, il faut ajouter -rdynamic au linker.
Merci
[^] # Re: dlopen
Posté par DeadMaXfr . En réponse au message Undefined symbol. Évalué à 1.
Merci pour ces pistes, mais c'est pas ça.
J'utilise bien RTLD_GLOBAL mais avec RTLD_LAZY.
Il n'y a pas de doublon sur ce symbole.
Personnellement, je penche pour le flag RTLD_LAZY. Il semble que si le programme n'utilise pas la class avant le chargement, alors le chargement de la librairie exploitant cette même class ne fonctionne pas.
J'essaye de confirmer ça ce matin.
[^] # Re: Détails?
Posté par DeadMaXfr . En réponse au message Undefined symbol. Évalué à 2.
1) La librairie est de moi, et oui, c'est bien le même symbole.
2) Oui, j'utilise les libtools avec kdevelop.
3) Oui, je charge les librairies avec dlopen. Les options que j'utilise sont RTLD_LAZY et RTLD_GLOBAL.
Pour le code minimal, je n'arrive pas à reproduire le bug avec quelque ligne.
J'essaye ce matin.
# [ RESOLU ]
Posté par DeadMaXfr . En réponse au message Raw socket (BUG). Évalué à 3.
[^] # Re: ben chez moi
Posté par DeadMaXfr . En réponse au message Raw socket (BUG). Évalué à 1.
Dans le morceau de code donné, je ne boucle pas si la socket reçoit un message. Donc ça se termine bien.
Par contre, si tu me dit que tu n'as pas de trafic et que la fonction recvmsg se termine en erreur (c'est le but), c'est que j'ai un bug avec mon noyau.
Pourrais tu faire le test à nouveau ?
Merci
[^] # Re: socket non bloquant...
Posté par DeadMaXfr . En réponse au message Raw socket (BUG). Évalué à 1.
Pour faire un recvmsg non-bloquant => non car le programme bouclerait et donc 100% de cpu. Pas bien
Je vais regarder du coté de select. C'est une bonne alternative.
L'inconvénient c'est que je suit dans l'obligation d'attendre le timeout lors de la fin du programme.
C'est pour cela que je n'ai pas pensé tout de suite à l'utiliser.
Si quelqu'un a une solution autre que select, je prend, c'est peut-être une combinaison de chaque qui fera l'affaire
[^] # Re: ben chez moi
Posté par DeadMaXfr . En réponse au message Raw socket (BUG). Évalué à 1.
Tu doit avoir du trafic sur le loopback car le programme écrit reçoit qu'un packet et de n'importe quel type (P_ETH_ALL).
Coupe tout ce qui utilise le loopback avant de lancer le programme.
[^] # Re: Threads
Posté par DeadMaXfr . En réponse au message Raw socket (BUG). Évalué à 1.
Commençons par les threads : tu ferme la socket pendant sont utilisation par un autre thread. Il te faudrait un mutex dessus pour faire propre.
Oui, c'est le but. Car recvmsg est un appel bloquant, donc pour l'annuler, un close sur la socket me semblait un bonne idée.
je pense que ton problème est l'utilisation de shutdown. C'est une fonction servant à fermer une connexion, or les socket raw sont des socket non connectées.
Comme mis en commentaire dans mon source, c'est normal qu'il ne marche pas.
Ce que tu peux faire c'est de la fermer avec un close, auquel cas recvmsg te retournera une erreur, ce qui est normal.
C'est là ou ça ne marche plus. Le recvmsg ne termine pas !
Comment faire ?
[^] # Re: ah
Posté par DeadMaXfr . En réponse au message Programmation d'un nouveau protocol. Évalué à 1.
Mais rassure toi, dès que je livrerai quelque chose, je ferai un peu de PUB histoire de voir si ça interrese ...