Provided by: manpages-es_4.27.0-1_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, protocolo);
       udp6_socket = socket(AF_INET6, SOCK_DGRAM, protocolo);

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 recibe una petición de conexión IPv4 o un
       paquete para 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 alíneació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.

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.

Páginas de Manual de Linux 6.9.1                   2 Mayo 2024                                           ipv6(7)