[Avanti]  [Indietro]  [Su]  

14.3.3 La struttura degli indirizzi IPv6

Essendo IPv6 un'estensione di IPv4, i socket di tipo PF_INET6 sono sostanzialmente identici ai precedenti; la parte in cui si trovano praticamente tutte le differenze fra i due socket è quella della struttura degli indirizzi; la sua definizione, presa da netinet/in.h, è riportata in fig. 14.3.


01: struct sockaddr_in6 { 
02:     sa_family_t     sin6_family;   /* AF_INET6 */ 
03:     in_port_t       sin6_port;     /* port number */ 
04:     uint32_t        sin6_flowinfo; /* IPv6 flow information */ 
05:     struct in6_addr sin6_addr;     /* IPv6 address */ 
06:     uint32_t        sin6_scope_id; /* Scope id (new in 2.4) */ 
07: }; 
08: struct in6_addr { 
09:     uint8_t       s6_addr[16];   /* IPv6 address */ 
10: }; 
Figura 14.3: La struttura degli indirizzi dei socket IPv6 sockaddr_in6.

Il campo sin6_family deve essere sempre impostato ad AF_INET6, il campo sin6_port è analogo a quello di IPv4 e segue le stesse regole; il campo sin6_flowinfo è a sua volta diviso in tre parti di cui i 24 bit inferiori indicano l'etichetta di flusso, i successivi 4 bit la priorità e gli ultimi 4 sono riservati. Questi valori fanno riferimento ad alcuni campi specifici dell'header dei pacchetti IPv6 (vedi sez. A.2.3) ed il loro uso è sperimentale.

Il campo sin6_addr contiene l'indirizzo a 128 bit usato da IPv6, espresso da un vettore di 16 byte. Infine il campo sin6_scope_id è un campo introdotto in Linux con il kernel 2.4, per gestire alcune operazioni riguardanti il multicasting. Si noti infine che sockaddr_in6 ha una dimensione maggiore della struttura sockaddr generica di fig. 14.1, quindi occorre stare attenti a non avere fatto assunzioni riguardo alla possibilità di contenere i dati nelle dimensioni di quest'ultima.


[Avanti]  [Indietro]  [Su]  
© 2000-2003 Simone Piccardi
Pubblicazione web curata da Mirko Maischberger