Ajout de la prise en charge D'IPv6 dans les applications client/serveur IPv4 - sin6 flowinfo et sin6 scope id fields?

je travaille sur la mise en œuvre IPv6 support pour plusieurs applications, mais je me suis demandé à quoi servent ces 2 domaines. Il y a si peu de questions à ce sujet ici, donc je ne suis pas sûr d'avoir raison.

  • au Sujet de la portée de l'ID ( sin6_scope_id ) - eh bien, T1 , T2 , T3 et Q4 m'a donné une idée de l'ID du champ d'application et je pense que je comprends. Donc, je vais devoir ajouter un paramètre de configuration supplémentaire, pour rendre le scope-id configurable. (J'ai décidé d'ajouter ceci ici, au cas où quelqu'un s'y intéresserait). En bref-scope ID est nécessaire pour déterminer de façon unique qui est l'appareil, qui devrait gérer le trafic - parce qu'il peut y avoir plusieurs interfaces, avec la même IP, mais avec différent (interface?) ID. Pour l'instant, donc bon.
  • mais qu'en est-il des "informations de flux"" ( sin6_flowinfo )
    • à quoi ça sert? Je ne pouvais pas trouver quelque chose d'intéressant à ce sujet. J'ai lu le RFC mais il ne m'a pas aidé du tout.
    • y a - t - il des valeurs possibles pour sin6_flowinfo (comme-plusieurs valeurs, comme des drapeaux, qui signifient quelque chose), ou c'est comme le sin6_scope_id - peut être n'importe quelle valeur, selon le périphérique, je suis essayez de vous connecter?
    • dois-je m'inquiéter du tout, ou j'ai juste à laisser 0 (comme dans Beej Guide de Programmation du Réseau . Et Oui , j'ai essayé, ça marche, mais je ne suis pas sûr que ça marche seulement dans ce cas (si ça dépend d'une certaine configuration réseau), ou ça marchera toujours, si c'est réglé sur 0 ?
    • ou, peut-être, je devrais le rendre configurable, je veux dire - ajouter une configuration de plus option et laisser l'utilisateur définir sa valeur?
    • google - ing "sin6_flowinfo" me donne des définitions struct et des pages de manuel, rien d'utile sur ce champ. Une source intéressante? (compréhensible..Non RFC: d)

modifier : Eh bien, après la réponse de @glglgl et après l'allusion, que sin6_flowinfo peut être obsolète, j'ai trouvé certains sources intéressantes: RFC: IPv6 Flow Label Specification , projet de l'IETF: étiquette de flux en tant que couche de Transport Nonce , Guide Pratique Pour solaris et wikipedia .

Le champ n'est pas obsolète (ou je n'ai pas pu trouver une telle source, qui confirme cela), mais il semble comme 0 comme valeur est assez bon.

20
demandé sur Community 2011-11-24 15:57:47

1 réponses

la meilleure façon d'aller est d'utiliser getaddrinfo() .

Pseudo code:

struct addrinfo *restrict hints = { .ai_family = AF_UNSPEC, .ai_socktype = SOCK_STREAM };
struct addrinfo * res, r;
if (0 == getaddrinfo("foo.bar.baz", "http", &hints, &res)) {
    for (r=res; r; r=r->ai_next) {
        sock = socket(r->ai_family, r->ai_socktype, r->ai_protocol);
        connect(sock, r->ai_addr, r->ai_addrlen);
        if error: continue
        break
    }
}
freeaddrinfo(res);

vous devrez vous soucier de sin6_scope_id , qui est normalement 0 , sauf si vous avez des adresses locales comme fe80::1234:56ff:fe78:9abc%eth2 . Ce eth2 est converti à la bonne id scope.

sin6_flowinfo est obsolète (autant que je sache) et donc la valeur 0 dans votre struct addrinfo 's ai_addr .

6
répondu glglgl 2011-11-24 13:38:48