[ UDEV ] Montrez vos règles de nommage

Montrez vos règles de nommage [ UDEV ] - Logiciels - Linux et OS Alternatifs

Marsh Posté le 14-03-2004 à 17:10:21    

un bon lien pour apprendre :
http://www.reactivated.net/udevrules.php
 
en résumé :
vous chopper les informations nécessaires pour faire vos règles via la commande :
udevinfo -a -p /sys/path/to/hardware/info
/sys/path/to/hardware/info est un chemin vers un fichier dev correspondant au matériel que vous voulez gérer
pour trouver la liste des rep :
find /sys -name dev
 
sinon y-a man udev qui donne aussi quelques infos supplémentaires
 
 
Mes règles :
les deux premieres sont pour ma clé usb
Les deux suivantes pour mon dd usb

BUS="scsi", KERNEL="sd[a-z]", SYSFS{scsi_level}="3", SYSFS{vendor}="TwinMOS ", PROGRAM="/etc/udev/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="usbkey"
BUS="scsi", KERNEL="sd[a-z][0-9]*", SYSFS{scsi_level}="3", SYSFS{vendor}="TwinMOS ", PROGRAM="/etc/udev/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="usbkey%n"
BUS="scsi", KERNEL="sd[a-z]", SYSFS{scsi_level}="3", PROGRAM="/etc/udev/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="extdd"
BUS="scsi", KERNEL="sd[a-z][0-9]*", SYSFS{scsi_level}="3", PROGRAM="/etc/udev/scsi-devfs.sh %k %b %n", NAME="%c{1}", SYMLINK="extdd%n"


dans ma debian sid j'ai mis ça dans /dev/udev/udev.rules en dessous de # SCSI block devices (il lit les règles une par une dans l'ordre façon iptables donc l'ordre est important)
 
voilà, avec ça je peux monter ma clé et mon dd sans me prendre la tete avec le nom du bordel
 
par contre si qq'un à une méthode pour monter automatiquement toutes les partitions présente sur un dd sans que j'ai à le faire manuellement, ça serait parfait :)


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 14-03-2004 à 17:10:21   

Reply

Marsh Posté le 14-03-2004 à 17:14:27    

par contre il met 3 sec à créer les devices apres que j'ai branché le tout ... spa super rapide :/


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 14-03-2004 à 19:30:11    

content de voir que ça vous interesse  [:god]  
vous avez pas des règles bien à vous ? [:opus dei]


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 14-03-2004 à 19:48:01    

ben en fait, ya déjà pas grand monde qui utilise le 2.6... donc udev.........


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 14-03-2004 à 19:49:15    

Mjules a écrit :

ben en fait, ya déjà pas grand monde qui utilise le 2.6... donc udev.........


 
oué mais y-en a quand même, et ils le disent pas :o
n'est ce pas 911 par exemple :o


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 14-03-2004 à 19:51:01    

ca sert a quoi udev :??:
 
 
 
 
 
 
 
 
 
 
 
 
non j'deconne mais j'en ai pas l'utilite [:ddr555]

Reply

Marsh Posté le 22-03-2004 à 19:03:32    

--offline--
bon, je remet ce que je viens de poster dans le topic du kernel 2.6
--online--
pour les pingouins qui utilisent 2.6+udev+supermount et des périph mass-storage, j'ai pondu ça :

Code :
  1. #detect and automatically mount usb-storage media
  2. #use udev and supermount
  3. #looking for devices of type sda1 or sdz100
  4. list=`find /sys/block/ -type d | grep "sd.[0-9]\+"`
  5. #for each of these device, we are going to see whether they are already in udev.rules
  6. for i in $list; do
  7.     echo "$i"
  8.     #retrieve serial and product info for the current device
  9.     serial=`udevinfo -a -p $i | grep -m 1 serial | sed 's/ *SYSFS{serial}= *//g'| sed 's/"//g'`
  10.     product=`udevinfo -a -p $i | grep -m 1 product | sed 's/ *SYSFS{product}= *//g'| sed 's/ /_/g' | sed 's/"//g'`
  11.     echo "$serial \| $product"
  12.    
  13.     #$product will be the alias in /dev and the mountpoint for the device, so we have to avoid an empty product name
  14.     if [ -z "${product}" ]; then
  15. product=`echo "UnknowDevice"`
  16.     fi
  17.    
  18.     #check whether it's already in udev.rules
  19.     if [ -z "${serial}"]; then
  20. idVendor=`udevinfo -a -p $i | grep -m 1 idVendor | sed 's/ *SYSFS{idVendor}= *//g'| sed 's/"//g'`
  21. doesUdevRuleExists=`cat /etc/udev/udev.rules | grep $idVendor`
  22.     else
  23. doesUdevRuleExists=`cat /etc/udev/udev.rules | grep $serial`
  24.     fi
  25.     #if not present, create udev.rules entry, fstab entrys and mountpoint
  26.     if [ -z "${doesUdevRuleExists}" ]; then
  27.         #update udev.rules
  28.  cp /etc/udev/udev.rules /etc/udev/udev.rules.up
  29.  j=`echo "$i" | cut -d / -f 5 | cut -c 4-`
  30. if [ -z "${serial}"]; then
  31.     echo "BUS=\"usb\", SYSFS{idVendor}=\"$idVendor\", KERNEL=\"sd?$j\",NAME=\"%k\", SYMLINK=\"$product\"" > /etc/udev/udev.rules
  32. else
  33.     echo "BUS=\"usb\", SYSFS{serial}=\"$serial\", KERNEL=\"sd?$j\",NAME=\"%k\", SYMLINK=\"$product\"" > /etc/udev/udev.rules
  34. fi
  35. cat /etc/udev/udev.rules.up >> /etc/udev/udev.rules
  36.  rm /etc/udev/udev.rules.up
  37.         #create mountpoint
  38.  if [ ! -d /mnt/${product} ]; then
  39.      mkdir /mnt/$product
  40.  fi
  41.  #update fstab
  42.  echo "none /mnt/$product supermount fs=auto,dev=/dev/$product,--,sync,umask=000 0 0" >> /etc/fstab
  43. umount -a
  44. mount -a
  45.     fi
  46. done


 
faut l'appeler updfstab et le placer dans /usr/sbin (et le rendre exécutable bien sûr). pour l'explication de l'idée de base : https://linuxfr.org/~ccomb/8866.html
 
si jamais vous testez et que vous voyez un bug, ça serait sympa de me le dire
 
@+
 
--edit--
au fait, merci udok pour la doc udev
 
--re-edit--
un pote vien de passer : ça marche avec sa première clé usb, mais pas avec la seconde, qui n'a pas de serial!!!! chuis vert là!  :cry:
 
--re-re-edit--
correction du bug précédent. j'ai ajouté la détection du idVendor (obligatoire, sinon hotplug peut pas trouver le périph). le seul problème, c'est si plusieurs périph sont branchés en même temps avec le même vendorId. @+


Message édité par arghbis le 22-03-2004 à 21:48:46
Reply

Marsh Posté le 22-03-2004 à 19:11:53    

aller hop, au boulot, faut corriger ça :D


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 22-03-2004 à 20:05:00    

Pour mon imprimante:  
BUS="usb",   SYSFS{serial}="0NJ220110251043020",  NAME="usblp0"
 
Pour mon stick "lexar":
BUS="usb", SYSFS{product}="JUMPDRIVE PRO       ", KERNEL="sd?1",  NAME="%k",  SYMLINK="lexar"
 
Pour mon diske usb2 archos:
BUS="usb", SYSFS{product}="ARCHOS USB2.0 (P4a)",  KERNEL="sd?1",  NAME="%k",  SYMLINK="archos"

Reply

Marsh Posté le 22-03-2004 à 21:47:49    

bon, comme tout le monde l'aura remarqué, vu que tout le monde est spécialiste en script bash (:) ), il y avait deux erreurs dans la deuxième version, d'où re-edit

Reply

Marsh Posté le 22-03-2004 à 21:47:49   

Reply

Marsh Posté le 22-03-2004 à 22:05:14    

arghbis a écrit :

bon, comme tout le monde l'aura remarqué, vu que tout le monde est spécialiste en script bash (:) ), il y avait deux erreurs dans la deuxième version, d'où re-edit


 
Une 'erreur' peu grave: peripherique inconnu, en anglais c'est Unknown Device.
 
sinon

arghbis a écrit a écrit :

 
#$product will be the alias in /dev and the mountpoint for the device, so we have to avoid an empty product name
if [ -z "${product}" ]; then
product=`echo "UnknowDevice"`
fi  




 
Ridicule, et a plusieurs termes:
1 si plusieurs disques sont marques inconnues tu va avoir un soucis, ils auront tous le meme dev et le meme point de montage.
2 en bash quand on veut pas ce casser la tete on ecrit

Code :
  1. if [ -z "${product}" ]; then
  2. product="UnknownDevice"
  3. fi


voire:

Code :
  1. [ -z "${product}" ] && product="UnknownDevice"


 
Et enfin, pour chaque peripherique trouvé tu fait un 'umount -a' ce qui n'est pas du plus bel effet et meme completement inutile vu que tu a rajouter un ligne dans le fstab elle ne peut pas etre utilisée.
un simple 'mount /mnt/$product' ou un 'mount -a' A LA FIN du script , pas pour chaque occurence.
 
M'enfin ce que j'en dit moi hein :)


Message édité par MaxMaverick le 22-03-2004 à 22:06:06
Reply

Marsh Posté le 22-03-2004 à 22:10:16    

ca m'a l'air bien chiant pour pas grand chose ;) :D

Reply

Marsh Posté le 22-03-2004 à 22:36:29    

maxmaverick a écrit :


 
Une 'erreur' peu grave: peripherique inconnu, en anglais c'est Unknown Device.
 
sinon
 
 
Ridicule, et a plusieurs termes:
1 si plusieurs disques sont marques inconnues tu va avoir un soucis, ils auront tous le meme dev et le meme point de montage.
2 en bash quand on veut pas ce casser la tete on ecrit

Code :
  1. if [ -z "${product}" ]; then
  2. product="UnknownDevice"
  3. fi


voire:

Code :
  1. [ -z "${product}" ] && product="UnknownDevice"


 
Et enfin, pour chaque peripherique trouvé tu fait un 'umount -a' ce qui n'est pas du plus bel effet et meme completement inutile vu que tu a rajouter un ligne dans le fstab elle ne peut pas etre utilisée.
un simple 'mount /mnt/$product' ou un 'mount -a' A LA FIN du script , pas pour chaque occurence.
 
M'enfin ce que j'en dit moi hein :)


 
ce que t'en dis, tu as raison, par contre le "ridicule", tu peux te le garder!  :kaola:  
 
non mais oh! mon script est pas parfait, je sais bien, et les problèmes que tu soulèves je les connais déjà. il n'empêche que c'est un truc vite fait que je mets la paske udok me l'a demandé. alors plutôt que de faire la fine gueule, tu corriges les erreurs et en fait profiter le monde!
 
sur ce, je vous souhaite le bonsoir!  :ange:

Reply

Marsh Posté le 26-03-2004 à 09:44:55    

re! est-ce que quelqu'un saurait comment lancer un script juste après que le symlink soit créé dans les règles udev? j'ai essayé en ajoutant une directive PROGRAM="monScript", mais toutes les directives s'exécutent en même temps, et le symlink n'existe pas au moment où le script est lancé!
 
si vous avez une idée

Reply

Marsh Posté le 26-03-2004 à 12:34:00    

arghbis a écrit :

re! est-ce que quelqu'un saurait comment lancer un script juste après que le symlink soit créé dans les règles udev? j'ai essayé en ajoutant une directive PROGRAM="monScript", mais toutes les directives s'exécutent en même temps, et le symlink n'existe pas au moment où le script est lancé!
 
si vous avez une idée


 
peut-être en créant le lien dans le script/program ?


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 26-03-2004 à 13:35:57    

vouaip, j'étais en train d'y penser, mais je trouve ça dommage. le mécanisme de création de lien est intégré à udev, alors pourquoi pas l'appel d'un script?
 
la doc de udev, pour le moment, n'est pas très fournie quand même!!

Reply

Marsh Posté le 26-03-2004 à 16:54:38    

arghbis a écrit :


 
la doc de udev, pour le moment, n'est pas très fournie quand même!!


c'est encore en cours de devel ;)
mais avec le lien dans le premier post, t'as déjà pas mal d'indication

Reply

Marsh Posté le 26-03-2004 à 18:17:28    

ben pour faire des trucs simples ouais, mais pour des plus compliqués (montage/démontage des clé usb sans utiliser supermount, exécution de code à l'insertion/suppression).
 
en plus, y'a quand même un truc vachement bizarre je trouve. dans hotplug (dont a besoin udev), pour toute les catégories (scsi, pci, firewire) y'a des évènments add et remove, sauf l'usb qui n'a que le remove! c'est pas très pratique! ;(
 
--edit--
enfin, c'est pas pour critiquer les dev que je dis ça. Par contre, je trouve que dans son état actuel, on peut faire moins de choses automatisées avec un 2.6+udev qu'avec un 2.4+devfs


Message édité par arghbis le 26-03-2004 à 18:18:43
Reply

Marsh Posté le 26-03-2004 à 19:00:49    

postes tes remarques sur la mailing list, elle est là pour ça

Reply

Marsh Posté le 26-03-2004 à 19:41:42    

ouaip, pas bête. je vais le faire dès que j'ai 5 minutes

Reply

Marsh Posté le 27-03-2004 à 11:16:53    

dans la version 0.23, ils ont intégré un mecanisme qui fait que lorsqu'un noeud est créé, si un fichier du type nomDuNoeud.dev se trouve au bon endroit, il peut capter les évènements de type add/remove device! super cool pour le montage/démontage auto des device!
 
vivement que la version debian sid passe en 0.23! ;)

Reply

Marsh Posté le 27-03-2004 à 11:21:31    

arghbis a écrit :

dans la version 0.23, ils ont intégré un mecanisme qui fait que lorsqu'un noeud est créé, si un fichier du type nomDuNoeud.dev se trouve au bon endroit, il peut capter les évènements de type add/remove device! super cool pour le montage/démontage auto des device!
 
vivement que la version debian sid passe en 0.23! ;)


 
ah ouai, y-a plus besoin de supermount du coup si ?  [:jar jar]  
faut juste faire le montage avec l'option -sync ?  :wahoo:


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 27-03-2004 à 11:57:21    

ben là déjà, j'ai modifié le script que j'ai mis plus haut pour qu'il monte les devices déclarées mais non montées, et qu'il démonte celles qui sont montées mais qui n'existent plus dans /dev
 
ça marche pas trop mal. encore un tit bug et ça roule. je suis obligé de faire ça, car monté avec supermount, mon dd usb2 plante lors de gros transferts!!
 
sinon, oui, il faut monter les périph en sync

Reply

Marsh Posté le 27-03-2004 à 12:07:48    

plus besoin de supermount, ça c'est le bonheur [:udok]
par contre le périph doit encore être présent quand on démonte non ? donc sur un évt remove, comment faut faire ?


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 27-03-2004 à 12:48:56    

ben non, le périph a pas besoin d'être là quand tu démontes!
 
genre, ce que je fais, c'est de voir si un périph monté n'est pas présent dans /dev, et si c le cas, je le démonte
 
est-ce que tu saurais comment, à partir du chemin complet d'un lien symbolique, on peut avoir le chemin complet de sa cible? j'ai essayé rapidos différents trucs, mais rien de vraiment bien.
 
je te filerais le script ce soir si ça t'intéresse
 
sinon, pour les évènements, ils faut la version 0.23. je te fillerais la méthode que m'a donné  le developpeur

Reply

Marsh Posté le 27-03-2004 à 13:04:22    

arghbis a écrit :

ben non, le périph a pas besoin d'être là quand tu démontes!
 
genre, ce que je fais, c'est de voir si un périph monté n'est pas présent dans /dev, et si c le cas, je le démonte


ok
 

arghbis a écrit :


est-ce que tu saurais comment, à partir du chemin complet d'un lien symbolique, on peut avoir le chemin complet de sa cible? j'ai essayé rapidos différents trucs, mais rien de vraiment bien.


à part ls -l je vois pas

arghbis a écrit :


je te filerais le script ce soir si ça t'intéresse


non  [:anathema]  
 

arghbis a écrit :


sinon, pour les évènements, ils faut la version 0.23. je te fillerais la méthode que m'a donné  le developpeur


oui  :)


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 27-03-2004 à 14:45:58    

voici mes régles:


#Usb Key
BUS="usb", SYSFS{product}="USB DISK*", KERNEL="sd?1", NAME="usbkey%n", SYMLINK="usb/usbkey%n"
 
#Ipod
BUS="scsi", SYSFS{vendor}="Apple   ", KERNEL="sd?2",  PROGRAM="/etc/udev/scripts/ipod", NAME="ieee1394/ipod%n", SYMLINK="ipod%n"
 
#Cdrw
BUS="scsi", SYSFS{vendor}="YAMAHA*", SYSFS{model}="CRW3200S*", NAME="cdrw%n"
BUS="scsi", KERNEL="sr[0-9]",NAME="cdroms/cdrom0", SYMLINK="cdrom%n scsi/%k"
 
#Périphériques SCSI
BUS="scsi", KERNEL="sd?[0-9]", NAME="%k", SYMLINK="scsi/%k"
 
#Webcam
BUS="usb", SYSFS{name}="Logitech QuickCam Pro 3000", NAME="webcam%n", SYMLINK="usb/webcam%n"


 
la règle de la webcam ne marche pas (reconnu comme v4l/video0)


Message édité par bobor le 27-03-2004 à 14:52:34

---------------
Gitan des temps modernes
Reply

Marsh Posté le 27-03-2004 à 19:44:22    

[citation]
de greg k-h :
if you want to catch the fact when udev removes a /dev node (which
> >odds are is what you really want to catch), put your script, or a link
> >to it in /etc/dev.d/block/ with the extension .dev and you will get both
> >add and remove events that corrisponded to a udev create or remove
> >device node
[/citation]
 
voilà c simple non? si tu arrive à faire quelquechose, fais péter ton code (moi, je vais virer celui que j'ai mis plus haut, il est pas très bon)

Reply

Marsh Posté le 27-03-2004 à 20:22:02    

bah j'attends le 0.23 avant de tenter quoique ce soit ;)
il est pas encore dans deb :o

Reply

Marsh Posté le 27-03-2004 à 20:22:34    

ah bah si, il est dans incoming :D

Reply

Marsh Posté le 27-03-2004 à 21:39:00    

respect...
Dire que je me suis cassé la tête avec supermount .... :)

Reply

Marsh Posté le 27-03-2004 à 23:38:34    

supermount, c'est bien pour les cdroms, sinon, ça fout la merde! pis j'aime pas ce comportement bizarre. c'est jamais vraiment monté ou démonté, c'est entre les deux...
 
par contre, les développements actuels de hotplug/udev ont l'air bien sympa (d'ailleurs, je me demande si en émulant les cdroms en scsi, on a pas moyen de récupérer l'ouverture /fermeture du tiroir du mange disque)

Reply

Marsh Posté le 28-03-2004 à 14:41:22    

ayé la version 023 est dans SID!!!
 
bon par contre, je comprends pas comment marche le truc du /etc/dev.d/block
un lien ici : http://www.kernel.org/pub/linux/ut [...] /RFC-dev.d
 
mais comprends pas!

Reply

Marsh Posté le 28-03-2004 à 14:45:36    

arghbis a écrit :

ayé la version 023 est dans SID!!!
 
bon par contre, je comprends pas comment marche le truc du /etc/dev.d/block
un lien ici : http://www.kernel.org/pub/linux/ut [...] /RFC-dev.d
 
mais comprends pas!


 
cette doc est dans /usr/share/doc/udev
j'ai essayé pendant une bonne heure de faire marcher le bordel, mais ça veut pas :/
ce que j'ai compris de la doc, c'est qu'il fallait créer un repertoire dans /etc/dev.d qui porte le nom du block ou lien créé dans /dev et y mettre des exécutable avec l'extension .dev
alors j'ai fait ça avec pour contenu :

#!/bin/bash
 
case $ACTION in
 
add)
        umount /mnt/diskusb
        mount -t vfat -o sync /dev/sda1 /mnt/diskusb
esac


 
dans un repertoire nommé SDA1 (j'ai aussi essayé sda, SDA et sda1), mais ça fait rien :/
bon là c'est pas terrible comme script mais ça devrait au moins faire qq'chose  :'(


Message édité par udok le 28-03-2004 à 14:46:03

---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 28-03-2004 à 14:47:59    

je précise que ce script fait qqchose quand je le mets dans /etc/dev.d/defaults mais c'est pas comme ça qu'il faut faire et d'ailleurs le comportement est pas terrible
 
donc c'est une histoire de répertoire que j'ai mal crée ... ou alors un bug peut-être
 
 
 
 
 
 
par contre maintenant on peut utiliser le flag RESULT apres PROGRAM dans les règles et il doit y avoir moyen de faire des trucs bien puissant de manière plus simple qu'avant, c'est bien  :jap:


Message édité par udok le 28-03-2004 à 14:49:00

---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 28-03-2004 à 15:34:47    

chais pas, pour l'instant, j'arrive à rien. en tous cas, c'est normal que defaults marche, c'est son nom qui l'indique!

Reply

Marsh Posté le 28-03-2004 à 15:51:45    

arghbis a écrit :

chais pas, pour l'instant, j'arrive à rien. en tous cas, c'est normal que defaults marche, c'est son nom qui l'indique!


 
oui je sais bien, c'était juste pour souligner que c'était bien un pb avec mes répertoires dans /etc/dev.d et pas avec mon script


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 28-03-2004 à 16:00:56    

http://marc.theaimsgroup.com/?l=li [...] 113339&w=2
on dirait moi, même question que je me pose, quazi même kernel et tout  [:anathema]


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le 28-03-2004 à 19:56:05    

ouais, c'est bon... tout le monde utilises des pseudos, alors hein bon!
 
en attendant, si tu avais suivi la discussion, tu saurais que ça marche (enfin maintenant). j'arrive à choper les add/remove.
 
par contre, si tu mets un script sda1.dev, il chope tous les évènements add/remove, pas seulement ceux de sda1. Faut que je vois si c'est normal ou pas.
 
en attendant, si ça t'intéresse, tu ferais bien de t'inscrire sur la liste! :na:

Reply

Marsh Posté le 28-03-2004 à 20:27:20    

arghbis a écrit :

ouais, c'est bon... tout le monde utilises des pseudos, alors hein bon!


c'est toi ?   [:anathema]  
 

arghbis a écrit :


en attendant, si tu avais suivi la discussion, tu saurais que ça marche (enfin maintenant). j'arrive à choper les add/remove.
 
par contre, si tu mets un script sda1.dev, il chope tous les évènements add/remove, pas seulement ceux de sda1. Faut que je vois si c'est normal ou pas.
 
en attendant, si ça t'intéresse, tu ferais bien de t'inscrire sur la liste! :na:


mais je la suis la liste, mais j'ai pas fait que ça toute l'apres midi donc j'avais pas encore vu le résultat :o


---------------
Non au projet de loi DADVSI ! (droits d'auteurs)
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed