Provided by: manpages-es_1.55-10_all bug

NOMBRE

       ipv6, PF_INET6 - Implementación Linux del protocolo IPv6

SINOPSIS

       #include <sys/socket.h>
       #include <netinet/in.h>

       tcp6_socket = socket(PF_INET6, SOCK_STREAM, 0);
       raw6_socket = socket(PF_INET6, SOCK_RAW, protocol);
       udp6_socket = socket(PF_INET6, SOCK_DGRAM, protocol);

DESCRIPCIÓN

       La  versión  2.2  de  Linux  implementa opcionalmente el Protocolo de Internet, versión 6.
       Esta página de manual contiene  una  descripción  de  la  API  básica  IPv6  tal  como  la
       implementa  el  núcleo  de  Linux  y  glibc 2.1. La interfaz está basada en la interfaz de
       conectores (sockets) BSD; véase socket(7).

       La API IPv6 pretende ser sobre todo compatible con la API ip(7)  v4.  En  esta  página  de
       manual sólo se describen las diferencias.

       Para  enlazar un conector AF_INET6 a cualquier proceso debe copiarse la dirección local de
       la variable in6addr_any cuyo  tipo  es  in6_addr.   En  inicializaciones  estáticas  puede
       utilizarse también IN6ADDR_ANY_INIT , la cual se expande a una expresión constante.  Ambas
       están en el orden de bytes de la red.

       La  dirección  de  loopback  IPv6  (::1)   está   disponible   en   la   variable   global
       in6addr_loopback.  Se debe utilizar IN6ADDR_LOOPBACK_INIT para la inicialización.

       Las  conexiones  IPv4  pueden  ser  manejadas  con  la  API v6 usando el tipo de dirección
       v4-mapeada-a-v6; así un programa  solamente  necesita  soportar  este  tipo  de  API  para
       soportar  ambos  protocolos. Todo esto es manejado de forma transparente por las funciones
       manejadoras de direcciones de libc.

       IPv4 y IPv6 comparten el espacio de  puertos  local.  Cuando  se  envía  una  petición  de
       conexión o paquete IPv4 a un conector IPv6 la dirección de origen se convierte a v6.

FORMATO DE DIRECCIONES

              struct sockaddr_in6 {
                  u_int16_t       sin6_family;/* AF_INET6 */
                  u_int16_t       sin6_port;/* número de puerto */
                  u_int32_t       sin6_flowinfo;/* Información de flujo IPv6 */
                  struct in6_addr sin6_addr;/* dirección IPv6 */
                  u_int32_t       sin6_scope_id;/* identificador de ámbito (nuevo en 2.4) */
              };

              struct in6_addr {
                  unsigned char   s6_addr[16];/* dirección IPv6 */
              };

       sin6_family  siempre  contiene  el  valor  AF_INET6;  sin6_port es el puerto del protocolo
       (véase sin_port en ip(7)); sin6_flowinfo es el identificador de flujo IPv6;  sin6_addr  es
       la  dirección  IPv6 de 128 bits.  sin6_scope_id es un identificador que depende del ámbito
       de la dirección. Esto es nuevo en Linux 2.4. Linux sólo lo soporta  para  direcciones  del
       nivel  de  enlace,  en  cuyo  caso  sin6_scope_id  contiene  el índice de la interfaz (vea
       netdevice(7))

       IPv6 soporta varios tipos de dirección: unidestino para referirse a  un  host  individual,
       multidestino  para  referirse  a  un grupo de hosts, "cualquier destino" para referirse al
       miembro más cercano de un grupo de hosts (no implementado en Linux), IPv4-sobre-IPv6  para
       refererise a un host IPv4, y otros tipos de dirección reservados.

       La  notación para direcciones IPv6 consiste en un grupo de 16 números hexadecimales de dos
       dígitos, separados por ':'. '::' representa una cadena de 0 bits.  Direcciones  especiales
       son ::1 para loopback y ::FFFF:<dirección IPv4> para IPv4-mapeada-a-IPv6.

       El espacio de puertos de IPv6 es compartido con IPv4.

OPCIONES DE CONECTORES

       IPv6  soporta  algunas  opciones  de  conectores  específicas del protocolo que pueden ser
       activadas con  setsockopt(2)  y  leídas  con  getsockopt(2).   El  nivel  de  opciones  de
       conectores  para  IPv6  es  IPPROTO_IPV6.   Una  bandera entera booleana es cero cuando es
       falsa, en otro caso es verdadera.

       IPV6_UNICAST_HOPS
              Establece el límite de saltos unidestino para el  conector.   El  argumento  es  un
              puntero  a un entero. Un valor de -1 implica usar la ruta por defecto, en otro caso
              debe estar entre 0 y 255.

       IPV6_MULTICAST_HOPS
              Establece el límite de saltos multidestino para el conector.  El  argumento  es  un
              puntero  a un entero. Un valor de -1 implica usar la ruta por defecto, en otro caso
              debe estar entre 0 y 255.

       IPV6_MULTICAST_IF
              Establece el dispositivo para los paquetes multidestino  de  salida  del  conector.
              Sólo  se permite para conectores SOCK_DGRAM y SOCK_RAW.  El argumento es un puntero
              a un índice de interfaz (vea netdevice(7)) representado como un número entero.

       IPV6_ADDRFORM
              Convierte un conector AF_INET6  en  un  conector  de  una  familia  de  direcciones
              diferente.  Actualmente,  solamente  se  soporta AF_INET.  Sólo está permitido para
              conectores IPv6 que estén conectados y enlazados a una  dirección  v4-mapeada-a-v6.
              El argumento es un puntero a un entero que contiene el valor AF_INET.  Esto es útil
              para pasar conectores v4-mapeados como descriptores de fichero a los programas  que
              no saben comunicarse con la API IPv6.

       IPV6_PKTINFO
              Activa  la  entrega  del  mensaje  de  control  IPV6_PKTINFO para los datagramas de
              entrada. Sólo es válida para conectores SOCK_DGRAM y SOCK_RAW.  El argumento es  un
              puntero a un valor booleano dado como un número entero.

       IPV6_RTHDR, IPV6_AUTHHDR, IPV6_DSTOPS, IPV6_HOPOPTS, IPV6_FLOWINFO, IPV6_HOPLIMIT
              Activa  la  entrega  de  mensajes  de  control  para  los datagramas de entrada que
              contienen cabeceras de extensión  procedentes  del  paquete  recibido.   IPV6_RTHDR
              entrega   la   cabecera  de  enrutamiento,  IPV6_AUTHHDR  entrega  la  cabecera  de
              autenticación, IPV6_DSTOPTS entrega las opciones de destino,  IPV6_HOPOPTS  entrega
              las   opciones   de   salto,  IPV6_FLOWINFO  entrega  un  entero  que  contiene  el
              identificador del flujo, IPV6_HOPLIMIT entrega un entero que contiene  el  contador
              de  saltos del paquete.  Los mensajes de control tienen el mismo tipo que la opción
              de conector. Todas estas opciones de cabecera también se pueden  activar  para  los
              paquetes de salida poniendo el mensaje de control apropiado en el buffer de control
              de sendmsg(2).  Esto es válido sólo para  conectores  SOCK_DGRAM  y  SOCK_RAW.   El
              argumento es un puntero a un valor booleano.

       IPV6_MULTICAST_LOOP
              Controla  si  el  conector ve o no los paquetes multidestino que se ha enviado a sí
              mismo.  El argumento es un puntero a un booleano.

       IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP
              Controla la pertenencia en grupos multidestino. El argumento es un  puntero  a  una
              estructura struct ipv6_mreq.

       IPV6_MTU
              Establece  la  MTU  a  usar  para  el  conector. La MTU está limitada por la MTU de
              dispositivo o la MTU de la ruta cuando se ha activado el descubrimiento de  la  MTU
              de la ruta. El argumento es un puntero a un entero.

       IPV6_MTU_DISCOVER
              Controla el descubrimiento de la MTU de la ruta en el conector. Vea IP_MTU_DISCOVER
              en ip(7) para más detalles.

       IPV6_RECVERR
              Controla la recepción de opciones de error asíncronas. Vea IP_RECVERR en ip(7) para
              más detalles.  El argumento es un puntero a un booleano.

       IPV6_ROUTER_ALERT
              Pasa al conector todos los paquetes reenviados (forwarded) que contienen una opción
              de alerta del enrutador. Sólo se permite para conectores de datagramas  y  para  el
              root. El argumento es un puntero a un booleano.

VERSIONES

       La  anterior  implementación de la API IPv6 libinet6 basada en libc5 no se descrbie aquí y
       puede variar en algunos detalles.

       Linux 2.4 rompe la compatibilidad binaria para sockaddr_in6 en hosts de 64bit  al  cambiar
       la alineación de in6_addr y al añadir un campo sin6_scope_id adicional. Las interfaces del
       núcleo siguen siendo compatibles, pero un programa que incluya sockaddr_in6 o in6_addr  en
       otras estructuras puede no serlo. Esto no es un problema para hosts de 32bits como i386.

       El  campo  sin6_flowinfo  es  nuevo  en  la  versión  2.4  de Linux. El núcleo lo pasa/lee
       transparentemente cuando la longitud de la dirección pasada lo contiene. Algunos programas
       que pasan un buffer de dirección mayor y comprueban después la longitud de la dirección de
       salida pueden fallar.

OBSERVACIONES PARA LA MIGRACIÓN

       La estructura sockaddr_in6 es mayor que la genérica sockaddr.  Los  programas  que  asumen
       que  todos  los  tipos  de  dirección  se  pueden almacenar de manera segura en una struct
       sockaddr necesitan cambiarse para usar en su lugar struct sockaddr_storage.

FALLOS

       Actualmente, la API IPv6  extendida,  tal  y  como  se  describe  en  RFC2292,  sólo  está
       parcialmente  implementada; aunque el núcleo 2.2 soporta casi por completo las opciones de
       recepción, no existen macros en la glibc 2.1 para generar opciones IPv6.

       No hay soporte IPSec para cabeceras EH y AH.

       La gestión de las etiquetas de flujos no está completa y no se documenta aquí.

       Esta página de manual no está completa.

VÉASE TAMBIÉN

       ip(7), cmsg(3)

       RFC2553: IPv6 BASIC API. Linux intenta amoldarse a esto.

       RFC2460: especificación de IPv6.