Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Support de l'ipv6  (Lu 8823 fois)

0 Membres et 1 Invité sur ce sujet

charlesfire

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
Support de l'ipv6
« le: Août 06, 2012, 05:27:47 pm »
Ce serais avantageux pour la sfml de rajouter le support de l'ipv6, car l'ipv4 commence à être dépacé...
Une connaissance générale, mais superficielle vaut-elle mieux qu'une connaissance limitée, mais approfondit ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Support de l'ipv6
« Réponse #1 le: Août 06, 2012, 06:42:53 pm »
Il va se passer encore de nombreuses années avant que l'IPv4 ne soit abandonné, donc y a pas le feu. Mais c'est sûr qu'à un moment donné il faudra le faire.
Laurent Gomila - SFML developer

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Re : Support de l'ipv6
« Réponse #2 le: Août 06, 2012, 07:49:13 pm »
Ah ok, c'est pour ça que l'IPV6 ne fonctionnait pas quand j'ai essayé avec mon jeu....  ;)

Samuel Proulx

  • Full Member
  • ***
  • Messages: 118
    • Voir le profil
Re : Support de l'ipv6
« Réponse #3 le: Septembre 18, 2012, 04:08:17 am »
Juste petite question comme ça : il y a des fournisseurs d'accès internet qui donne des ipv6 ? Je veux dire qu'au québec, Bell, Vidéotron ou encore Distributel ne fournissent que des adresses ipv4...

Question à titre informatif seulement parce que personnellement, je connais aucun FAI qui donne des ipv6... :)

minirop

  • Sr. Member
  • ****
  • Messages: 254
    • Voir le profil
    • http://dev.peyj.com
Re : Support de l'ipv6
« Réponse #4 le: Septembre 18, 2012, 05:25:22 am »
en France oui, au moins Free et SFR le permettent. (pour SFR une choix oui/non dans les options de la box)

Sandburg

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Support de l'ipv6
« Réponse #5 le: Juin 25, 2015, 02:07:54 pm »
Bonjour,

C'est la seule entrée à IPV6 que je trouve via la recherche. Le débat est-il clos ou muet depuis 2012 ?

À bientôt,
Sandburg

Hiura

  • SFML Team
  • Hero Member
  • *****
  • Messages: 4321
    • Voir le profil
    • E-mail
Re : Support de l'ipv6
« Réponse #6 le: Juin 25, 2015, 02:40:29 pm »
Il y a eut quelques autres messages sur le forum anglais mais au final peu de demandes ont été faites donc personne n'a travaillé dessus. Si tu as du temps à y consacrer, tu peux relancer la discussion sur l'autre forum (plus actif, il faut le dire) et peut-être proposer un patch si tout marche bien.  ;)
SFML / OS X developer

Sandburg

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Support de l'ipv6
« Réponse #7 le: Novembre 19, 2016, 10:34:03 pm »
Bon, je reviens après avoir utilisé quelques temps SFML dans mon coin. Jusque là, personne n’a proposé de patch pour l’ipv6, donc je me lance.
En première approche, je précise ici certaines choses. Puis en tenant compte de vos remarques, j’irai faire mon pull request en le commentant sur le forum anglais (Si j’ai bien compris, il est plus actif et fait foi).

À ce jour, 1 seul report sur ce sujet, classé rejected :
https://github.com/SFML/SFML/issues/307

État des lieux
Actuellement, SFML (v. 2.3 rev.746bb9c et antérieures) ne supporte pas l’IPv6. C’est à dire que le type sf::IpAddress ainsi que ses interdépendances sont implémentés autour de l’IPv4 uniquement.

Liste des composants touchés :
  • SFML/Network/IpAddress.hpp
  • SFML/Network/Socket.hpp
  • SFML/Network/TcpSocket.hpp
  • SFML/Network/SocketImpl.hpp
       static sockaddr_in createAddress(Uint32 address, unsigned short port);
  • SFML/Network/Unix/SocketImpl.hpp
       sockaddr_in SocketImpl::createAddress(Uint32 address, unsigned short port)
  • SFML/Network/Win32/SocketImpl.hpp
       sockaddr_in SocketImpl::createAddress(Uint32 address, unsigned short port)

Différentes approches possibles
  • un héritage multiple
    sf::IpAddress ―> sf::IpAddressV4
    sf::IpAddress ―> sf::IpAddressV6
  • une composition
    sf::IpAddress ◄►― sf::IpAddressV4
    sf::IpAddress ◄►― sf::IpAddressV6
  • un type dynamique et ça reste une composition (attention au RAII)
  • une union
    Un type complexe en union qui peut stocker l’un au l’autre. Pas sur que le gain d’espace mémoire (quasi insignifiant) soit intéressant par rapport aux erreurs que ça pourrait occasionner.

Tip : On ne sait pas de quelle structure de stockage on a besoin tant que l’adresse n’est pas saisie et parsée. Donc 2 temps.

Pour comparer les différentes approches possible, j’ai référencé d’autres implémentations dans des libs à forte notoriété :
  • Boost
    boost::asio::ip::address
       composition 2in1, v4 & v6 existent aussi comme classes indépendantes, et sont associées dans un type agglomérat sous forme d’une composition.
  • Lib Standard
    std::ip::address
       (celle du C++17 rejeté dans le TR2 Christopher Kohlhoff mais qui viendra plus tard) pareil que boost, c’est une composition 2in1.
  • WxWidget
    wxIPaddress ―> wxSockAddress
       2in1 via une union mais ensuite 2 classes filles typée v6 ou v4 qui héritent de wxIPaddress et que l’utilisateur à l’obligation d’utiliser. Dans leurs propres exemples, c’est sale.
  • Qt (v5)
    QHostAddress
       2in1 comme boost, un peu plus à leur sauce, mais presque pareil.

Comme première mouture, j’opte pour une approche par composition avec des variables membres comme dans boost::asio (ou le futur std::ip).

Use case. Comment utilisera-t-on les nouveaux types ?
Un seul composant IpAddress servira de classe publique pour l’utilisateur. Mais il existera quand même des classes spécifiques v4 et v6 (surement priv). Cette classe globale IpAddress agrégera les types adresse_v4 et adresse_v6.
Lorsqu’il utilisera IpAddress, l’utilisateur devra s’intéresser au type d’adresse dans ses procédures.

Fix au passage
Dans la version actuelle, tester si une adresse est localhost est à la charge de l’utilisateur.
De la forme
my_address == sf::address::LocalHost
Était-ce la bonne approche ? C’est léger et compréhensible. Mais ne respecte pas la norme maintenue par l’IANA. En IPv4, les adresses qui loopback sont de la forme 127.0.0.1/8, c’est à dire la plage d’adresses de 127.0.0.1 à 127.255.255.255 (le /8 voulant dire 8 bits significatifs). Donc si on fixe ce défaut par rapport à la norme, plus moyen de déléguer ce test à l’utilisateur, il faut une méthode isLoopback().
Tandis qu’en IPv6, seule l’adresse ::1 est loopback.

Nommage de cette méthode, localhost vs loopback ?
« localhost » est en général une adresse de l’interface « loopback ». Ils peuvent être et sont souvent interchangeables. Cependant, si on ne check que les adresses et non pas la réalité du réseau, il vaut mieux l’appeler localhost, c’est moins glorifiant, mais techniquement plus juste.

Extension
Il existe aussi les adresses du domaine Unix, le type AF_UNIX (contrairement aux types ip AF_INET et AF_INET6). Il y a aussi AF_IPX et AF_AX25, mais ce sont des niches (Novell et radio émission).
Est-ce qu’on se limite aux types ip ? D’autres libs gèrent au moins le type UNIX en plus.

PS : les libs citées sont sous leur licence respective
« Modifié: Novembre 19, 2016, 10:38:50 pm par Sandburg »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Support de l'ipv6
« Réponse #8 le: Novembre 19, 2016, 11:08:03 pm »
Tout d'abord merci de vouloir contribuer, surtout sur ce genre de sujet complètement délaissé.

Tu as l'air de savoir de quoi tu parles, et a priori je ne vois rien d'idiot dans ce que tu proposes. Donc je pense que tu devrais aller poster directement sur le forum anglais, mais avant de commencer à bosser sur une éventuelle implémentation.
Laurent Gomila - SFML developer

Sandburg

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Support de l'ipv6
« Réponse #9 le: Novembre 27, 2016, 03:13:02 pm »