Provided by: manpages-es_4.13-4_all bug

NOMBRE

       ipv6 - Implementación Linux del protocolo IPv6

SINOPSIS

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

       tcp6_socket = socket(AF_INET6, SOCK_STREAM, 0);
       raw6_socket = socket(AF_INET6, SOCK_RAW, protocol);
       udp6_socket = socket(AF_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 IPv4 (consulte ip(7)).  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 tener soporte para este  tipo  de  API
       para  gestionar ambos protocolos. Esto se gestiona de forma transparente por las funciones
       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 las direcciones
           struct sockaddr_in6 {
               sa_family_t     sin6_family;   /* AF_INET6 */
               in_port_t       sin6_port;     /* número de puerto */
               uint32_t        sin6_flowinfo; /* Información de flujo IPv6 */
               struct in6_addr sin6_addr;     /* dirección IPv6 */
               uint32_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 tiene soporte  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 8 números hexadecimales de 4
       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 los 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_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 archivo a los programas  que
              no saben comunicarse con la API IPv6.

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

       IPV6_MTU
              getsockopt(): obtiene la actual ruta MTU del conector. Sólo es válido una vez se ha
              conectado. Es un número entero.

              setsockopt(): 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_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_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_RECVPKTINFO (desde Linux 2.6.14)
              Activa  la  entrega  del  mensaje  de  control  IPV6_PKTINFO para los datagramas de
              entrada. En  cumplimiento  del  RFC  3542,  estos  mensajes  contienen  una  struct
              in6_pktinfo.  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_DSTOPTS, 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_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  paquetes reenviados y que contiene una alerta 'hop-by-hop' (que tiene que ser
              revisada por cada nodo por los que para el paquete)  para  ese  conector.  Sólo  se
              permite en conectores SOCK_RAW. Estos paquetes no son reenviados por el núcleo sino
              que correponde al usuario la responsabilidad  de  enviarlos.  El  argumento  es  un
              puntero  a  un número entero. Un número positivo indicará una alerta de router para
              interceptar el paquete y se entregará al conector. Un número  negativo  desactivará
              la entrega al conector.

       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_V6ONLY (desde Linux 2.4.21 y 2.6)
              Si esta opción está como 'true' (distinto de cero), el conector sólo podrá enviar y
              recibir paquetes  Ipv6.  En  éste  caso,  puede  conectarse  al  mismo  puerto  una
              aplicación Ipv4 y una Ipv6 al mismo tiempo.

              Si  esta  opción  está  como  'false'  (cero), el conector podrá usarse para enviar
              paquetes entre direcciones Ipv6 y/o direcciones IPv6 mapeadas como IPv4.

              El argumento es un puntero a un valor booleano como un entero.

              El  valor  por  defecto   de   esta   opción   viene   definida   en   el   archivo
              /proc/sys/net//ipv6/bindv6only siendo '0' por defecto.

ERRORES

       ENODEV El  intentó conectarse (con bind(2)) a una dirección local IPv6, pero sin6_scope_id
              en la estructura sockaddr_in6 proporcionada no es un índice de interfaz válido.

VERSIONES

       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.

NOTAS

       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.

       SOL_IP, SOL_IPV6, SOL_ICMPV6 y otras opciones de conector de la forma SOL_* son  variantes
       no portables de IPPROTO_*. Consulte ip(7).

ERRORES

       Actualmente,  la  API  IPv6  extendida,  tal  y  como  se  describe en RFC 2292, 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

       cmsg(3), ip(7)

       RFC 2553:  IPv6  BASIC  API.  Linux  intenta amoldarse a esto. RFC 2460: especificación de
       IPv6.

COLOFÓN

       Esta página es parte de la versión 5.10 del proyecto Linux man-pages. Puede encontrar  una
       descripción  del  proyecto, información sobre cómo informar errores y la última versión de
       esta página en https://www.kernel.org/doc/man-pages/.

TRADUCCIÓN

       La traducción  al  español  de  esta  página  del  manual  fue  creada  por  Juan  Piernas
       <piernas@ditec.um.es> y Marcos Fouces <marcos@debian.org>

       Esta  traducción  es  documentación  libre;  lea  la  GNU General Public License Version 3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ o posterior con respecto a las condiciones  de
       copyright.  No existe NINGUNA RESPONSABILIDAD.

       Si  encuentra  algún  error  en  la  traducción de esta página del manual, envíe un correo
       electrónico a debian-l10n-spanish@lists.debian.org ⟨⟩.