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  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.

Linux                                           21 Diciembre 2020                                        IPV6(7)