[Programmation] pile TCPIP pic32mx795f512l
Répondre à la discussion
Affichage des résultats 1 à 28 sur 28

pile TCPIP pic32mx795f512l



  1. #1
    davidif

    pile TCPIP pic32mx795f512l


    ------

    bonjour,

    je suis en train de configurer la pile TCPIP d'un PIC32MX , en autre...

    mon programme source, me permet pas de sauvegarder mes paramètres réseaux mais j'ai pu repérer comment les changer via une interface web d'un serveur hébergé dans la puce, pour les sauvegarder en flash, ceux-ci pour host name, l'IP, mask, passerelle, dns1, dns2 mais pour le DHCP client j'ai eu un peu de difficulté pour trouver comment l'activer et le désactiver.

    Je programme sous harmony et pris un soft existant que je modifie, donc harmony génére son propre code et n'est pas toujours facile de voir ou il intervient mais ou s'habitue et on fini par trouver.

    Il ce trouve que l'activation ou désactivation du dhcp client provient de l'absence ou présence d'un #define comme celui-ci

    #define TCPIP_STACK_USE_DHCP_CLIENT

    seulement, je ne sais pas quel valeur doit-il prendre pour éventuellement activer ou désactiver celui-ci

    Que veux dire un #define qui n'est a priori pas défini , car d'habitude il y a toujours un nom ou valeur en face ? là j'ai rien en face ...


    Merci pour votre aide précieuse

    -----

  2. #2
    Aurélien

    Re : pile TCPIP pic32mx795f512l

    Un label défini par un #define n'a pas besoin d'être associé à une valeur. Le simple fait qu'il soit défini permet de conditionner la compilation de parties de code en utilisant les pragmas #ifdef ou son inverse #ifndef

  3. #3
    davidif

    Re : pile TCPIP pic32mx795f512l

    Citation Envoyé par Aurélien Voir le message
    Un label défini par un #define n'a pas besoin d'être associé à une valeur. Le simple fait qu'il soit défini permet de conditionner la compilation de parties de code en utilisant les pragmas #ifdef ou son inverse #ifndef
    Pour pouvoir modifier le choix d'utiliser le mode DHCP ou pas via l'interface web utilisateur dont je récupère une valeur "1" ou "0" , comment puis-je conditionner l'utilisation de ce #define TCPIP_STACK_USE_DHCP_CLIENT ou pas qui :

    si il est présent me met en mode DHCP CLIENT
    absent mode static .

  4. #4
    davidif

    Re : pile TCPIP pic32mx795f512l

    donc en fait, ça veux dire que si je veux avoir le choix de l'utiliser, je dois quand même laisser le #define pour que le code soit compilé puis après d'utiliser les fonction nécessaire pour valider ou pas la fonction DHCP ?

    puis ensuite utiliser la fonction qui va valider ou pas le DHCP
    http://ww1.microchip.com/downloads/e...ary%20Help.pdf
    en page 117, j'ai ces fonction là que j'ai essayé, certainement mal car ça ne fonctionne pas

    je sais pas si c'est bien la bonne fonction,

    TCPIP_DHCP_Disable(TCPIP_DHCP_ Disable);

    TCPIP_DHCP_Enable(TCPIP_DHCP_E nable);

  5. A voir en vidéo sur Futura
  6. #5
    satinas

    Re : pile TCPIP pic32mx795f512l

    Ce serait pas plutôt les fonctions de la page 91, car il faut spécifier un handle d'interface.
    Il peut y en avoir plusieurs d'interface réseau, comme dans la vidéo.

  7. #6
    davidif

    Re : pile TCPIP pic32mx795f512l

    Citation Envoyé par satinas Voir le message
    Ce serait pas plutôt les fonctions de la page 91, car il faut spécifier un handle d'interface.
    Il peut y en avoir plusieurs d'interface réseau, comme dans la vidéo.
    BAH en fait, je sais pas encore car j'ai repéré cette fonction de validation : void TCPIP_DHCP_Enable( TCPIP_NET_HANDLE hNet)

    en faisant :

    static TCPIP_NET_HANDLE netHandleWiFi;

    TCPIP_DHCP_Enable(netHandleWiF i);

    méthode que j'ai vue dans mon fichier : eth_wifi_app.c

    Par contre, effectivement je cherche quel serait le handle à utilisé, dans mon fichier il utilise un netHandleWiFi , mais je sais pas d'ou ça vient je l'ai quand même essayé dans mon init, mais rien je reste en static.

    Avant ça j'ai déselectionné le use dhcp, qui a priorie me fixait en dure le mode dhcp et pas moyen de changer pour ce mettre en static

    Code:
    //#define TCPIP_STACK_USE_DHCP_CLIENT  
    #define TCPIP_DHCP_TIMEOUT		        		10
    //#define TCPIP_DHCP_TASK_TICK_RATE	    			5
    //#define TCPIP_DHCP_HOST_NAME_SIZE	    			20
    #define TCPIP_DHCP_CLIENT_CONNECT_PORT  			68
    #define TCPIP_DHCP_SERVER_LISTEN_PORT				67
    #define TCPIP_DHCP_CLIENT_ENABLED             		true
    Dernière modification par davidif ; 07/09/2016 à 17h54.

  8. #7
    satinas

    Re : pile TCPIP pic32mx795f512l

    Bonjour,
    dans le configurateur, si tu coches TCPIP commands, i y a un tas de réglages que l'on peut faire en mode texte. Je sais pas si c'est pour le debug ou si on peut les utiliser dans les programmes, mais en tout cas tu peux regarder ce qu'elle font exactement, dans le dossier framework/tcpip.
    Pour la commande dhcp :
    (*pCmdIO->pCmdApi->print)(cmdIoParam, "Usage: %s <interface> <on/off/renew/request/info> \r\n", argv[0]);

  9. #8
    davidif

    Re : pile TCPIP pic32mx795f512l

    Bonjour,

    Dans ma recherche sur la possibilité de changer mes paramètre réseaux via mon interface web, j'ai cherché dans mon soft ou ce fait les changement du ssid et clé wpa2.
    J'ai donc trouvé ou ce situ le changement de ces paramètres dans un fichier "wdrv_mrf24wn_config_data. c" dans lequel les contantes chargé :

    Code:
    #define WDRV_DEFAULT_PSK_PHRASE "DHD545FG5RFG" // customized WPA-PSK or WPA2-PSK passphrase
    #define WDRV_DEFAULT_SSID_NAME "MON SSID"
    Sont appeler dans ma fonction "bool WDRV_CONFIG_DataLoad(void)"

    pour mon ssid
    Code:
            memcpy(WDRV_CONFIG_PARAMS(netSSID), (const void*)parametre_wifi.new_SSID, sizeof(parametre_wifi.new_SSID));
            WDRV_CONFIG_PARAMS(SsidLength) = sizeof(parametre_wifi.new_SSID) - 1;
    et

    pour ma clé
    Code:
                memcpy(WDRV_CONFIG_PARAMS(SecurityKey), (const void*)parametre_wifi.new_WPA2, sizeof(parametre_wifi.new_WPA2) - 1);
                WDRV_CONFIG_PARAMS(SecurityKeyLength) = sizeof(parametre_wifi.new_WPA2) - 1;
    j'ai donc fait une fonction init qui charge les nouvelles valeur en flash ou celle par défaut
    Code:
    void init_para_wifi (void)
    {
    uint8_t i;    
        
        if (appDataTCPIP_WIFI.new_SSID[0]!=0) 
        {
            for (i=0;i<32;i++)
            {
            parametre_wifi.new_SSID[i]=appDataTCPIP_WIFI.new_SSID[i];  //y a t-il une autre façon plutôt qu'une boucle 
            }
        }
        else parametre_wifi.new_SSID=WDRV_DEFAULT_SSID_NAME;    //l'erreur est ici 
        
        if (appDataTCPIP_WIFI.new_WPA[0]!=0)
        {
            for(i=0;i<32;i++)
            {    
            parametre_wifi.new_WPA2[i]=appDataTCPIP_WIFI.new_WPA[i];  //y a t-il une autre façon plutôt qu'une boucle 
            }
        }    
       else parametre_wifi.new_WPA2=WDRV_DEFAULT_PSK_PHRASE;    //l'erreur est ici 
        
    
    }
    Seulement là ou ça passe pas est un problème de compatibilité entre un tableau de 32 et un pointeur qui met retourné que je ne sais pas comment le traiter

    Code:
    ../src/system_config/pic32mx_eth_sk+ioexp+11n+freertos/system_init.c: In function 'init_para_wifi':
    ../src/system_config/pic32mx_eth_sk+ioexp+11n+freertos/system_init.c:1021:33: error: incompatible types when assigning to type 'char[32]' from type 'char *'
         else parametre_wifi.new_SSID=(char*)WDRV_DEFAULT_SSID_NAME;
                                     ^
    make[2]: *** [build/pic32mx_eth_sk+ioexp+11n+freertos/production/_ext/1922377806/system_init.o] Error 1
    make[1]: *** [.build-conf] Error 2
    make: *** [.build-impl] Error 2

  10. #9
    satinas

    Re : pile TCPIP pic32mx795f512l

    Si tu sous-traites tes strcpy(), tout ça va durer, durer

  11. #10
    davidif

    Re : pile TCPIP pic32mx795f512l

    Citation Envoyé par satinas Voir le message
    Si tu sous-traites tes strcpy(), tout ça va durer, durer
    Je sais je sais certaine notion m'échappe encore, mais ça va venir (: que veux tu dire ?

    Je vais revoir le strcpy() , pour la boucle for ou l'histoire de chaîne de caractère à charger dans un tableau

  12. #11
    davidif

    Re : pile TCPIP pic32mx795f512l

    Ha oui ok ! Pour charger un tableau dans un autre ou une chaîne de caractère dans un tableau on utilise strcpy()

  13. #12
    satinas

    Re : pile TCPIP pic32mx795f512l

    Dans les 2 cas, les tableaux que tu remplis sont des tableaux de char, qui contiennent une chaîne (de longueur max sizeof(tableau)-1 )
    Les 2 defines copiés sont aussi des chaînes (constantes).
    Pour copier des chaînes, on utilise strcpy().
    Tu as fait l'impasse sur le C, et tu le payes en passant un temps fou, sur des trucs très simples.

  14. #13
    davidif

    Re : pile TCPIP pic32mx795f512l

    Ok merci satinas,

    Je n'ai pas fait de c dans mes étude, a l'époque ils me faisait faire de l'assembleur mais ces loin tout ça.
    Depuis peu que je me suis mis au c et comme tu dis je perd du temps sur des choses certainement très simple pour un initié

  15. #14
    satinas

    Re : pile TCPIP pic32mx795f512l

    La boucle aussi est inutile car tu fais la même chose que strcpy(), en moins bien car tu copies tout le tableau, alors que strcpy() s'arrête après avoir rencontré et copié un octet nul.

  16. #15
    Aurélien

    Re : pile TCPIP pic32mx795f512l

    Citation Envoyé par satinas Voir le message
    strcpy() s'arrête après avoir rencontré et copié un octet nul.
    Tu le remplaces par un memcpy() et plus de probleme

  17. #16
    Aurélien

    Re : pile TCPIP pic32mx795f512l

    Citation Envoyé par davidif Voir le message
    Depuis peu que je me suis mis au c et comme tu dis je perd du temps sur des choses certainement très simple pour un initié
    Ce n'est pas si difficile surtout si tu viens de l'assembleur. Le C doit être une libération, une montée en puissance. Y'a suffisamment de tutos sur le net pour le maitriser. De plus, il faut lire les PDF fournis avec le compilo pour avoir le détail des fonctions supportées dans les librairies standards.

  18. #17
    davidif

    Re : pile TCPIP pic32mx795f512l

    Merci beaucoup pour votre aide précieuse, car inutile de vous dire que je ne suis pas en avance.

    Oui c'est vrai il y a beaucoup de sources sur le net, peut-être même beaucoup trop (: car parfois pas toujours explicite pour moi , les docs également sont très complets mais ma difficulté est de chercher et trouver la bonne information.

    Exemple: pour la copie d'un tableau vers un autre, moi j'ai fais une lourde boucle "for" ne sachant pas qu'il existe d'autres instructions

    Par contre, je ne vois pas quel problème résout le memcpy() par rapport au strcpy() , c'est plus bien qu'il s'arret dès qu'il y a plus rien à copier ? que fait de plus le memcpy() ?

    Une question : est-il possible de ne pas définir la taille des tableaux, de tel sorte qu'une fois sauvé en mémoire, il n'y est pas un nombre de cases mémoires à "/0" j'usqu'à la taille défini du tableau, histoire de gagner en place.

    Ma déclaration de structure actuelle :
    Code:
    typedef struct
    {
        
    char new_hostname[32];      // peut-être faut-il faire char new_hostname[]; ou char new_hostname[]="";
    char new_IP[16];
    char new_MASK[16];
    char new_GATEWAY[16];
    char new_DNS1[16];
    char new_DNS2[16];
    char new_DHCP;
    char new_SSID[32];
    char new_WEP[32];
    char new_WPA[32];
    char new_mode[3];
    char new_user[32];
    char new_password[32];
    
    char P_corps;
    
    } APP_DATA_TCPIP_WIFI, APP_DATA_TCPIP_ETH;
    Puis je les rempli, comme un tableau normal en n'y insérant le "/0" je suppose

    Code:
            tabIP=0;
            
                        for ( inc=6; inc<19; inc++) 
                        {     
                        appDataTCPIP_WIFI.new_DNS1[tabIP] = *( httpDataBuff+inc);
                        tabIP++;
                        }
                        appDataTCPIP_WIFI.new_DNS1[tabIP]='\0';
    Merci

  19. #18
    Aurélien

    Re : pile TCPIP pic32mx795f512l

    Citation Envoyé par davidif Voir le message
    Exemple: pour la copie d'un tableau vers un autre, moi j'ai fais une lourde boucle "for" ne sachant pas qu'il existe d'autres instructions
    Je fais ça tres souvent...ce n'est pas un probleme...le code est juste un peu plus long à écrire, mais en terme d'execution c'est peu ou prou la même chose.

    Citation Envoyé par davidif Voir le message
    Par contre, je ne vois pas quel problème résout le memcpy() par rapport au strcpy() , c'est plus bien qu'il s'arret dès qu'il y a plus rien à copier ? que fait de plus le memcpy() ?
    memcpy copie une quantité de données d'un tableau vers l'autre sans se soucier du contenu, alors que strcpy() s'arrête une fois une terminaison rencontrée en entrée.

    Citation Envoyé par davidif Voir le message
    Une question : est-il possible de ne pas définir la taille des tableaux, de tel sorte qu'une fois sauvé en mémoire, il n'y est pas un nombre de cases mémoires à "/0" j'usqu'à la taille défini du tableau, histoire de gagner en place.
    Ca s'appelle allocation dynamique. Et la place que tu "gagnes" en RAM tu la perds en code pour la gestion. Et si tu veux la stocker en mémoire non volatile il te faut un système de fichiers, avec les mêmes conséquences.
    Faut mieux réserver de la mémoire statique, c'est quand même bien plus simple si ça concerne peu de variables.

  20. #19
    davidif

    Re : pile TCPIP pic32mx795f512l

    Très bien , merci Aurelien
    Je vais rester comme ça alors

  21. #20
    davidif

    Re : pile TCPIP pic32mx795f512l

    Une question concernant la pile TCPIP :

    J'ai réussi pas mal de chose concernant le réglage de mes paramètres réseau via son interface web, et commence à comprendre comment fonctionne la stack au bout de 6 mois de programmation, une chose mes pour le moment difficile à définir est de savoir si je me connecte sur l'interface wifi ou RJ45 au quels cas je ne charges pas les mêmes paramètres réseau selon sur quels interface que je suis , je ne sais pas quel information récupérer en web pour faire la différence des infos à renvoyer.

  22. #21
    davidif

    Re : pile TCPIP pic32mx795f512l

    Bonjour à tous

    Etant toujours sur ma stack, je comprend de mieux en mieux comment celle ci fonctionne et j'arrive donc à faire ce que je souhaite faire;

    Parmis les choses que j'aimerai faire, une chose m'interroge, je souhaiterai activer ou désactiver la fonction DHCP client via l'interface web et pour ce faire il suffit de faire

    #define TCPIP_STACK_USE_DHCP_CLIENT

    pour rentrer les paramètre ip, j'ai mis ce #define dans le fichier .h en commentaire, seulement comme ça je ne peux pas faire ce choix.

    Evidemment ce #define donne acces au fonction nécessaire pour ce faire, comment puis-je mettre une condition sur ce #define ?
    Faut-il faire des "if" sur toutes les instructions du projet sachant qu'il est sur plusieurs emplacement ?

    Merci pour votre aide

  23. #22
    satinas

    Re : pile TCPIP pic32mx795f512l

    Salut, Harmony te permet certainement de le faire simplement, sans toucher à rien dans le code. Juste une commande textuelle à utiliser.
    Il faut que tu comprennes ce que sont ces commandes texte tcpip, car il y en a un paquet, à toi de voir ça.
    http://forums.futura-sciences.com/el...ml#post5675933

  24. #23
    davidif

    Re : pile TCPIP pic32mx795f512l

    Citation Envoyé par satinas Voir le message
    Salut, Harmony te permet certainement de le faire simplement, sans toucher à rien dans le code. Juste une commande textuelle à utiliser.
    Il faut que tu comprennes ce que sont ces commandes texte tcpip, car il y en a un paquet, à toi de voir ça.
    http://forums.futura-sciences.com/el...ml#post5675933
    Je vais y rejeter un coup d'oeil, seulement ce que je remarque au fil de mon évolution sur la source avec laquelle je travail, c'est que pas mal de réglages sont fixés dans les #défine et ne donne pas la possibilité de les modifier directement via une quelconques variable, on vient cocher dans le MHC les options puis celle-ci sont fixé.

    Exemple :

    pour les paramètres TCPIP, j'étais obligé de remplacer les cibles des #défine par mes tableaux que je rempli des nouveaux paramètres.

    Pour les paramètre wifi :
    INFRASTRUCTURE
    SSID
    TYPE DE CLE
    CLE

    j'ai dû remplacer les étiquettes #define à leur emplacement par mes variables et sa fonctionne.

    Et j'ai l'impression que c'est pas mal comme sa dans leur demo

  25. #24
    satinas

    Re : pile TCPIP pic32mx795f512l

    Il doit y avoir une console système à déclarer, sérielle ou udp, dans laquelle tu tapes les commandes.
    Les commandes texte tcpip sont dans le dossier framework, donc font partie du code Harmony.
    Dans les exemples du dossier app, ils créent d'autres commandes spécifiques de façon similaire.
    Cela permet de piloter la pile ip simplement, à la fois depuis le code ou depuis la console système.

  26. #25
    davidif

    Re : pile TCPIP pic32mx795f512l

    Citation Envoyé par satinas Voir le message
    Il doit y avoir une console système à déclarer, sérielle ou udp, dans laquelle tu tapes les commandes.
    Les commandes texte tcpip sont dans le dossier framework, donc font partie du code Harmony.
    Dans les exemples du dossier app, ils créent d'autres commandes spécifiques de façon similaire.
    Cela permet de piloter la pile ip simplement, à la fois depuis le code ou depuis la console système.
    Honnêtement, peut-être que certaines notions m'échappent, seulement je ne vois pas dans quel console autre que ce que fait harmony par le biais du MHC;

    j'ai pas mal bourlingué dans les sources, pas toutes tellement des variables conditionnes d'autres variables ce qui n'est pas toujours facile de voir ce qui ce passe pour un débutant comme moi en tout cas.

    Sinon, je vais continuer mes recherche pour le DHCP;

    Au début je croyais qu'il suffisait d’appeler cette fonction : TCPIP_DHCP_Disable(netHandleWi Fi); ou TCPIP_DHCP_Disable(0);
    tout en laissant mon #define actif , mais je ne comprend pas à quoi sert cette fonction, car elle n'a aucun effet a priori ...

  27. #26
    satinas

    Re : pile TCPIP pic32mx795f512l

    Dans apps\examples\system il y une exemple de console uart et un exemple de console usb.
    Je te conseille de copier le l'exemple avant de la charger, pour garder une version intacte.
    Pour la console série, il coche dans MHC :
    - dans Drivers une instance USART
    - dans System Services use Console System et use Debug Service

  28. #27
    davidif

    Re : pile TCPIP pic32mx795f512l

    Citation Envoyé par satinas Voir le message
    Dans apps\examples\system il y une exemple de console uart et un exemple de console usb.
    Je te conseille de copier le l'exemple avant de la charger, pour garder une version intacte.
    Pour la console série, il coche dans MHC :
    - dans Drivers une instance USART
    - dans System Services use Console System et use Debug Service
    Le problème c'est que je n'ai pas d'autre interface sur ma carte pour y connecter une console (;
    Sans vouloir passé du cop à l'anne, je suis passé sur l'attribution des paramètres tcpip (ip, mask, passerelle ...) et j'arrive donc bien à récupérer mes paramètres réceptionné via mon fichier

    custom_http_app.c envoyé par l'interface web

    Code:
            
    if(!strcmp((char *)httpDataBuff, (const char *)"ip"))
    {   // Save new static IP Address
            tabIP=0;
            move_para=1;
    
                    for ( inc=6; inc<19; inc++) 
                    {     
                    appDataTCPIP_WIFI.new_IP[tabIP] = *( httpDataBuff+inc);
                    tabIP++;
                    }
                    appDataTCPIP_WIFI.new_IP[15]='\0';
                    //WDRV_NVM_write_new(); 
                    networkConfig[0].ipAddr = appDataTCPIP_WIFI.new_IP;
    
                if(!TCPIP_Helper_StringToIPAddress((char *)(httpDataBuff+6), &newIPAddress))
                {
                    bConfigFailure = true;
                    break;
                }
                strncpy(httpNetData.ipAddr, (char *)httpDataBuff + 6, sizeof(httpNetData.ipAddr));
            }
    Je charge donc mon tableau "appDataTCPIP_WIFI.new_IP" avec les l'IP
    Puis à l'initialisation, je rallume donc mon systeme, je charge les nouveaux paramètre

    Code:
      
        TCPIP_STACK_INIT    tcpipInit;
        TCPIP_NETWORK_CONFIG networkConfig[2];
    
    
    // paramètre interface wifi
    if((appDataTCPIP_WIFI.new_IP[0]==0x00)||(appDataTCPIP_WIFI.new_IP[0]==0xFF))
        { networkConfig[0].ipAddr = TCPIP_NETWORK_DEFAULT_IP_ADDRESS_IDX1;}
        else {networkConfig[0].ipAddr = appDataTCPIP_WIFI.new_IP;}
    
    // paramètre interface ethernet
     if((appDataTCPIP_ETH.new_IP[0]==0x00)||(appDataTCPIP_ETH.new_IP[0]==0xFF))
        {networkConfig[1].ipAddr = TCPIP_NETWORK_DEFAULT_IP_ADDRESS;}
        else {networkConfig[1].ipAddr = appDataTCPIP_ETH.new_IP;}
    Pareil pour les autres puis, au final :


    Code:
     
     tcpipInit.pNetConf = networkConfig;
     tcpipInit.nNets = sizeof (networkConfig) / sizeof (*networkConfig);
    ça fonctionne bien quand je me connecte via l'interface wifi , puisque je charge seulement ma structure wifi "appDataTCPIP_WIFI" dans le custom, seulement je ne sais pas comment dissocier quand je me connecte en wifi ou bien en ethernet pour pouvoir charger les tableau correspondant et ainsi charger les bon à l'init

  29. #28
    davidif

    Re : pile TCPIP pic32mx795f512l

    bonjour,

    comment compare t-on deux tableaux de char :

    j'ai fait comme ça :

    Code:
       
    char password_fixe[16];
    #define  password_init_compteur    "AHGTE45UTR"
    
    if(appDataTCPIP_WIFI.init_compteur==password_fixe)
        {
          tps_cumul=0;
          nbr_seances=0;
          tps_cumul_mn=0;
          
          appDataTCPIP_WIFI.init_compteur[0]=0x00;
          
        }
    suis-je obliger de faire de la boucle for ou peut-on faire une autre instruction moins lourde ?

    Merci

Discussions similaires

  1. Microchip; Commande TCPIP
    Par cedric300 dans le forum Électronique
    Réponses: 6
    Dernier message: 17/11/2012, 16h19
  2. Pile TCPIP microchip
    Par ben1015 dans le forum Électronique
    Réponses: 8
    Dernier message: 24/02/2011, 14h08
  3. freeRTOS TCPIP
    Par inviteec7e9182 dans le forum Électronique
    Réponses: 2
    Dernier message: 15/01/2011, 09h39
  4. Adresse TCPIP
    Par invite863ad3bf dans le forum Internet - Réseau - Sécurité générale
    Réponses: 3
    Dernier message: 30/11/2007, 19h42
  5. TCPIP kernel driver - urgent
    Par invite9eac167e dans le forum Internet - Réseau - Sécurité générale
    Réponses: 1
    Dernier message: 08/02/2004, 09h37
Découvrez nos comparatifs produits sur l'informatique et les technologies.