ip

IP(7)                   Manual del Programador de Linux                  IP(7)



NOMBRE
       ip - Implementación Linux del protocolo IPv4

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

       tcp_socket = socket(PF_INET, SOCK_STREAM, 0);
       raw_socket = socket(PF_INET, SOCK_RAW, protocol);
       udp_socket = socket(PF_INET, SOCK_DGRAM, protocol);

DESCRIPCIÃN
       Linux implementa el Protocolo de Internet (Internet Protocol, IP),
       version 4, descrito en RFC791 y RFC1122.  ip contiene una
       implementación de multidestino del Nivel 2 según el RFC1112.
       También contiene un enrutador IP incluyendo un filtro de paquetes.

       La interfaz del programador es compatible con la de los conectores BSD.
       Para más información sobre conectores, vea socket(7).

       Un conector IP se crea llamando a la función socket(2) de la forma
       socket(PF_INET, socket_type, protocol).  Los tipos de conectores
       válidos son SOCK_STREAM para abrir un conector tcp(7), SOCK_DGRAM para
       abrir un conector udp(7) o SOCK_RAW para abrir un conector directo (
       raw(7)) para acceder al protocolo IP directamente.  protocol es el
       protocolo IP en la cabecera IP a enviar o recibir. Los únicos valores
       válidos para protocol son 0 y IPPROTO_TCP para conectores TCP, y 0 y
       IPPROTO_UDP para conectores UDP. Para SOCK_RAW debe especificar un
       protocolo IP válido del IANA definido por uno de los números
       asignados en el RFC1700.

       Cuando un proceso quiere recibir nuevos paquetes de entrada o
       conexiones, debe enlazar un conector a una dirección de la interfaz
       local usando bind(2).  Sólo se puede ligar un conector IP a un par
       (dirección, puerto) dado.  Cuando en la llamada a bind se especifica
       INADDR_ANY, el conector será ligado a todas las interfaces locales.
       Cuando se llama a listen(2) o connect(2) con un conector no enlazado,
       el conector será automáticamente ligado a un puerto aleatorio libre
       cuya dirección local sea INADDR_ANY.  Una dirección local de conector
       TCP que haya sido enlazada, no estará disponible durante un cierto
       tiempo después de que se cierre, a menos que se haya activado la
       opción SO_REUSEADDR.  Se debe tener cuidado al usar esta opción ya
       que hace que TCP sea menos fiable.


FORMATO DE LAS DIRECCIONES
       Una dirección de conector IP se define como una combinación de una
       dirección de interfaz IP y un número de puerto. El protocolo IP
       básico no proporciona números de puerto. Estos son implementados por
       protocolos de un nivel más alto como udp(7) y tcp(7).  En los
       conectores directos, a sin_port se le asigna el protocolo IP.

              struct sockaddr_in {
                  sa_family_t    sin_family; /* familia de direcciones:
                                                AF_INET */
                  u_int16_t      sin_port;   /* puerto con los bytes en el
                                                orden de red */
                  struct in_addr  sin_addr;  /* dirección de Internet */
              };

              /* Dirección de Internet. */
              struct in_addr {
                  u_int32_t      s_addr;     /* dirección con los bytes en
                                                el orden de red */
              };

       A sin_family siempre se le asigna el valor AF_INET.  Este valor es
       necesario. En Linux 2.2, la mayorÃa de las funciones de red devuelven
       EINVAL cuando se ha omitido este valor.  sin_port contiene el puerto
       con los bytes en orden de red. Los números de puerto por debajo de
       1024 se llaman puertos reservados.  Sólo los procesos con
       identificador de usuario efectivo 0 o la capacidad CAP_NET_BIND_SERVICE
       pueden realizar enlaces mediante bind(2) a estos conectores. Dese
       cuenta que el protocolo IPv4 puro no posee como tal el concepto de
       puerto. Estos son implementados por protocolos superiores como tcp(7) y
       udp(7).

       sin_addr es la dirección IP del anfitrión (host).  El miembro s_addr
       de struct in_addr contiene la dirección de la interfaz del anfitrión
       con los bytes en orden de red.  Sólo se deberÃa acceder a in_addr
       usando las funciones de biblioteca inet_aton(3), inet_addr(3) y
       inet_makeaddr(3), o directamente mediante el mecanismo de resolución
       de nombres (vea gethostbyname(3)).  Las direcciones IPv4 se dividen en
       direcciones unidestino, de difusión y multidestino. Las direcciones
       unidestino especifican una única interfaz de un anfitrión, las
       direcciones de difusión especifican todos los anfitriones de una red y
       las direcciones multidestino identifican a todos los anfitriones de un
       grupo multidestino. Sólo se pueden enviar datagramas a o recibir
       datagramas de direcciones de difusión cuando está activa la opción
       de conector SO_BROADCAST.  En la implementación actual, los conectores
       orientados a conexión sólo pueden usar direcciones unidestino.

       Dese cuenta que la dirección y el puerto se almacenan siempre en orden
       de red. En particular, esto significa que necesita llamar a htons(3)
       con el número que se ha asignado al puerto. Todas las funciones de
       manipulación de dirección/puerto en la biblioteca estándar trabajan
       en orden de red.

       Existen varias direcciones especiales: INADDR_LOOPBACK (127.0.0.1)
       siempre se refiere al ordenador local a través del dispositvo
       `loopback'.  INADDR_ANY (0.0.0.0) significa cualquier dirección para
       enlazar.  INADDR_BROADCAST (255.255.255.255) significa cualquier
       ordenador y, por razones históricas, tiene el mismo efecto en el
       enlace que INADDR_ANY.

OPCIONES DE LOS CONECTORES
       IP soporta algunas opciones de conector especÃficas del protocolo que
       se pueden configurar con setsockopt(2) y leer con getsockopt(2).  El
       nivel de opciones de conector para IP es SOL_IP.  Una opción entera
       booleana es cero cuando es falsa y cualquier otra cosa cuando es
       cierta.


       IP_OPTIONS
              Establece u obtiene las opciones IP a enviar con cada paquete
              desde este conector. Los argumentos son punteros a un buffer de
              memoria que contiene las opciones y la longitud de las opciones.
              La llamada setsockopt(2) establece las opciones IP asociadas a
              un conector. El tamaño máximo de opción para IPv4 es de 40
              bytes. Vea RFC791 para las opciones permitidas.  Cuando el
              paquete inicial de petición de conexión para un conector
              SOCK_STREAM contiene opciones IP, las opciones IP se
              configurarán automáticamente al valor de las opciónes del
              paquete inicial con las cabeceras de enrutamiento invertidas. No
              se permite que los paquetes de entrada cambien las opciones
              después de que la conexión se haya establecido.  El
              procesamiento de todas las opciones de enrutamiento de la fuente
              de entrada está desactivado por defecto y se puede activar
              usando la sysctl accept_source_route.  Otras opciones, como las
              marcas de tiempo, todavÃa se siguen manejando. Para los
              conectores de datagramas, las opciones IP sólo pueden ser
              configuradas por el usuario local.  Llamar a getsockopt(2) con
              IP_OPTIONS coloca en el buffer proporcionado las opciones IP
              actuales usadas para enviar.


       IP_PKTINFO
              Pasa un mensaje auxiliar IP_PKTINFO que contiene una estructura
              pktinfo que proporciona alguna información sobre los paquetes
              de entrada. Esto sólo funciona para conectores orientados a
              datagramas.  El argumento es un indicador que le dice al
              conector si deberÃa pasar el mensaje IP_PKTINFO. El mensaje en
              sà mismo sólo puede ser enviado/obtenido como un mensaje de
              control con un paquete usando recvmsg(2) o sendmsg(2).


              struct in_pktinfo {
                  unsigned int   ipi_ifindex;  /* Ãndice de la interfaz */
                  struct in_addr ipi_spec_dst; /* Dirección local */
                  struct in_addr ipi_addr;     /* Dirección de destino en la
                                                  cabecera */
              };

              ipi_ifindex es el Ãndice de la interfaz en la que se recibió el
              paquete.  ipi_spec_dst es la dirección local del paquete y
              ipi_addr es la dirección de destino en la cabecera del paquete.
              Si se pasa IP_PKTINFO a sendmsg(2), el paquete de salida se
              enviará a través de la interfaz especificada en ipi_ifindex
              con la dirección de destino indicada en ipi_spec_dst.


       IP_RECVTOS
              Cuando está activa, se pasa el mensaje auxiliar IP_TOS con los
              paquetes de entrada. Contiene un byte que especifica el campo
              Tipo de Servicio/Precedencia de la cabecera del paquete.  Espera
              una opción entera booleana.


       IP_RECVTTL
              Cuando esta opción está activa, pasa un mensaje de control
              IP_RECVTTL con el campo "tiempo de vida" (time to live) del
              paquete recibido dado por un byte. No soportada por conectores
              SOCK_STREAM.


       IP_RECVOPTS
              Pasa todas las opciones IP de entrada al usuario en un mensaje
              de control IP_OPTIONS.  La cabecera de enrutamiento y otras
              opciones ya las completa el anfitrión local. No soportada para
              conectores SOCK_STREAM.


       IP_RETOPTS
              Identica a IP_RECVOPTS pero devuelve opciones directas sin
              procesar cuyas marcas de tiempo y opciones del registro de ruta
              no son completadas por este anfitrión.


       IP_TOS Establece o devuelve el campo Tipo de Servicio (Type-Of-Service,
              TOS) a enviar con cada paquete IP creado desde este conector. Se
              usa para priorizar los paquetes en la red. TOS es un byte.
              Existen algunas opciones TOS estándares definidas:
              IPTOS_LOWDELAY para minizar los retrasos en el caso de tráfico
              interactivo, IPTOS_THROUGHPUT para optimizar el rendimiento,
              IPTOS_RELIABILITY para optimizar la fiabilidad e IPTOS_MINCOST,
              que se deberÃa usar para "datos de relleno" donde no tenga
              sentido una transmisión lenta. Como mucho, se puede especificar
              uno de estos valores TOS. Los otros bits son inválidos y se
              limpiarán.  Por defecto, Linux envÃa primero datagramas
              IPTOS_LOWDELAY pero el comportamiento exacto depende de la
              disciplina de encolamiento configurada.  Algunos niveles de
              prioridad alta pueden necesitar un identificador de usuario
              efectivo 0 o la capacidad CAP_NET_ADMIN.  La prioridad también
              se puede configurar de una manera independiente del protocolo
              mediante la opción de conector ( SOL_SOCKET, SO_PRIORITY) (vea
              socket(7)).

       IP_TTL Establece u obtiene el campo "tiempo de vida" actual que se
              envÃa en cada paquete enviado desde este conector.

       IP_HDRINCL
              Cuando está activa, el usuario proporciona una cabecera IP
              delante de los datos de usuario. Sólo válida para conectores
              SOCK_RAW.  Vea raw(7) para más información. Cuando esta
              opción está activa los valores configurados mediante
              IP_OPTIONS, IP_TTL y IP_TOS se ignoran.


       IP_RECVERR (definido en <linux/errqueue.h>)
              Habilita el paso adicional fiable de mensajes de error. Cuando
              se activa en un conector de datagramas todos los errores
              generados se encolarán en una cola de errores por conector.
              Cuando el usuario recibe un errore procedente de una operación
              con un conector, se pueden recibir el errore llamando a
              recvmsg(2) con la opción MSG_ERRQUEUE activa. La estructura
              sock_extended_err que describe el error se pasará en un mensaje
              auxiliar con el tipo IP_RECVERR y el nivel SOL_IP.  Esto es
              útil para el manejo fiable de errores en conectores no
              conectados.  La parte de datos recibida de la cola de errores
              contiene el paquete de error.

              El mensaje de control IP_RECVERR contiene una estructura
              sock_extended_err:

              #define SO_EE_ORIGIN_NONE       0
              #define SO_EE_ORIGIN_LOCAL      1
              #define SO_EE_ORIGIN_ICMP       2
              #define SO_EE_ORIGIN_ICMP6      3

              struct sock_extended_err {
                  u_int32_t       ee_errno;   /* número de error */
                  u_int8_t        ee_origin;  /* dónde se originó el error */
                  u_int8_t        ee_type;    /* tipo */
                  u_int8_t        ee_code;    /* código */
                  u_int8_t        ee_pad;
                  u_int32_t       ee_info;    /* información adicional */
                  u_int32_t       ee_data;    /* otros datos */
                  /* More data may follow */
              };

              struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);

              ee_errno contiene el número de error del error puesto en cola.
              ee_origin es el código de origen que identifica al origen del
              error.  Los otros campos son especÃficos del protocolo. La macro
              SO_EE_OFFENDER devuelve un puntero a la dirección del objeto de
              red dónde se originó el error dado un puntero al mensaje
              auxiliar.  Si la dirección no es conocida, el miembro sa_family
              de sockaddr valdrá AF_UNSPEC y los otros campos de sockaddr
              serán indefinidos.

              IP usa la estructura sock_extended_err como sigue: a ee_origin
              se le asigna el valor SO_EE_ORIGIN_ICMP para errores recibidos
              en un paquete ICMP o SO_EE_ORIGIN_LOCAL para errores generados
              localmente. Los valores desconocidos deben ser ignorados.  A
              ee_type y ee_code se les asignan los campos tipo y código de la
              cabecera ICMP.  ee_info contiene la MTU descubierta para errores
              EMSGSIZE.  El mensaje contiene también la estructura
              sockaddr_in del nodo que provocó el error, a la cual se puede
              acceder con la macro SO_EE_OFFENDER.  El campo sin_family de la
              dirección devuelta por SO_EE_OFFENDER valdrá AF_UNSPEC cuando
              la fuente sea desconocida.  Cuando el error se originó en la
              red, todas las opciones IP (IP_OPTIONS, IP_TTL, etc.) activas en
              el conector y contenidas en el paquete de error, se pasan como
              mensajes de control. El contenido útil del paquete que ha
              provocado el error se devuelve como datos normales.

              Dese cuenta que TCP no posee una cola de errores.  MSG_ERRQUEUE
              es ilegal en conectores SOCK_STREAM.  Por tanto, todos los
              errores son devueltos sólo por funciones de conector o mediante
              SO_ERROR.

              Para conectores directos (raw), IP_RECVERR activa el paso de
              todos los errores ICMP recibidos a la aplicación. En otro caso,
              sólo se informa de los errores que se producen en conectores
              conectados.

              Esta opción establece u obtiene un valor booleano entero.  Por
              defecto, IP_RECVERR está desactivada.


       IP_PMTU_DISCOVER
              Establece o recibe la configuración del "descubrimiento de la
              MTU de la ruta" para el conector. Cuando se activa, Linux
              realizará el descubrimiento de la MTU de la ruta en este
              conector tal y como se define en RFC1191. La opción de "no
              fragmentar" se activa en todos los datagramas de salida. El
              valor global por defecto del sistema se controla mediante la
              sysctl ip_no_pmtu_disc para los conectores SOCK_STREAM y para
              todos los demás está desactivado. Para conectores que no son
              SOCK_STREAM es responsabilidad del usuario enpaquetar los datos
              en trozos de tamaño MTU y realizar la retransmisión si es
              necesario. El núcleo rechazará aquellos paquetes que sean más
              grandes que la MTU de ruta conocida si esta opción está activa
              (con EMSGSIZE ).


              Opciones del               Significado
              descubrimiento de la MTU
              de la ruta
              IP_PMTUDISC_WANT           Usar configuraciones por ruta.
              IP_PMTUDISC_DONT           Nunca realizar el
                                         descubrimiento de la MTU de la
                                         ruta.
              IP_PMTUDISC_DO             Realizar siempre el
                                         descubrimiento de la MTU de la
                                         ruta.

              Cuando se activa el descubrimiento de la MTU de la ruta, el
              núcleo automáticamente memoriza la MTU de la ruta por
              anfitrión de destino.  Cuando se está conectado a un extremo
              especÃfico mediante connect(2), se puede obtener
              convenientemente la MTU de la ruta conocida actualmente usando
              la opción de conector IP_MTU (por ejemplo, después de que haya
              ocurrido un error EMSGSIZE).  La MTU puede cambiar con el
              tiempo. Para conectores no orientados a conexión con muchos
              destinos, también se puede acceder a la nueva MTU usando la
              cola de errores (vea IP_RECVERR).  Se encolará un nuevo error
              para cada actualización que llegue de la MTU.

              Mientras se está realizando el descubrimiento de la MTU, se
              pueden perder paquetes iniciales de los conectores de
              datagramas. Las aplicaciones que usan UDP deben se conscientes
              de esto y no tenerlo en cuenta para sus estrategias de
              retransmisión de paquetes.

              Para iniciar el proceso de descubrimiento de la MTU de la ruta
              en conectores no orientados a conexión, es posible comenzar con
              un tamaño grande de datagramas (con logitudes de bytes de hasta
              64KB en las cabeceras) y dejar que se reduzca mediante
              actualizaciones de la MTU de la ruta.

              Para obtener una estimación inicial de la MTU de la ruta,
              conecte un conector de datagramas a una dirección de destino
              usando connect(2) y obtenga la MTU llamando a getsockopt(2) con
              la opción IP_MTU.


       IP_MTU Obtiene la MTU de la ruta conocida actualmente para el conector
              actual. Sólo válida cuando el conector ha sido conectado.
              Devuelve un entero.  Sólo válida para getsockopt(2).

       IP_ROUTER_ALERT
              Pasar a este conector todos los paquetes "a reenviar" que tengan
              activa la opción "alarma del enrutador IP" (IP Router Alert).
              Sólo válida para conectores directos. Esto es útil, por
              ejemplo, para demonios RSVP en el espacio de usuario. Los
              paquetes interceptados no son reenviados por el núcleo, es
              responsabilidad de los usuarios envilarlos de nuevo. Se ignora
              el enlace del conector, tales paquetes sólo son filtrados por
              el protocolo. Espera una opción entera.

       IP_MULTICAST_TTL
              Establece o lee el valor "tiempo de vida" (time-to-live, TTL) de
              los paquetes multidestino de salida para este conector. Es muy
              importante para los paquetes multidestino utilizar el TTL más
              pequeño posible. El valor por defecto es 1 lo que significa que
              los paquetes multidestino no abandonarán la red local a menos
              que el programa de usuario lo solicite explÃcitamente. El
              argumento es un entero.

       IP_MULTICAST_LOOP
              Establece o lee un argumento entero booleano que indica si los
              paquetes multidestino enviados deben o no ser devueltos a los
              conectores locales.

       IP_ADD_MEMBERSHIP
              Unirse a un grupo multidestino. El argumento es una estructura
              struct ip_mreqn.

              struct ip_mreqn {
                  struct in_addr imr_multiaddr; /* Dirección IP del grupo
                                                   multidestino */
                  struct in_addr imr_address;   /* Dirección IP de la
                                                   interfaz local */
                  int            imr_ifindex;   /* Ãndice de la interfaz */
              };

              imr_multiaddr contiene la dirección del grupo multidestino al
              que la aplicación se quiere unir o quiere dejar. Debe ser una
              dirección multidestino válida.  imr_address es la dirección
              de la interfaz local con la que el sistema debe unirse al grupo
              multidestino. Si es igual a INADDR_ANY el sistema elige una
              interfaz adecuada.  imr_ifindex es el Ãndice de la interfaz que
              debe unirse a o dejar el grupo imr_multiaddr, o 0 para indicar
              cualquier interfaz.

              Por compatibilidad, todavÃa se soporta la antigua estructura
              ip_mreq.  Difiere de ip_mreqn sólo en que no incluye el campo
              imr_ifindex.  Ãsta opción sólo es válida para setsockopt(2).

       IP_DROP_MEMBERSHIP
              Dejar un grupo multidestino. El argumento es una estructura
              ip_mreqn o ip_mreq similar a la de IP_ADD_MEMBERSHIP.

       IP_MULTICAST_IF
              Establece el dispositivo local para un conector multidestino. El
              argumento es una estructura ip_mreqn o ip_mreq similar a la de
              IP_ADD_MEMBERSHIP.

              Cuando se pasa una opción de conector inválida, se devuelve el
              error ENOPROTOOPT.


SYSCTLS
       El protocolo IP soporta la interfaz sysctl para configurar algunas
       opciones globales. Se puede acceder a las sysctls leyendo o escribiendo
       los ficheros /proc/sys/net/ipv4/* o usando la interfaz sysctl(2).

       ip_default_ttl
              Establece el valor "tiempo de vida" (TTL) por defecto de los
              paquetes de salida. Ãste se puede cambiar para cada conector con
              la opción IP_TTL.

       ip_forward
              Activa el reenvÃo IP con una opción booleana. También se puede
              configurar el reenvÃo IP interfaz a interfaz.

       ip_dynaddr
              Activa la reescritura dinámica de la dirección del conector y
              de las entradas de enmascaramiento (masquerading) para cuando
              cambie la dirección de la interfaz. Esto es útil para
              interfaces dialup (como las telefónicas) con direcciones IP
              cambiantes. 0 significa no reescritura, 1 la activa y 2 activa
              el modo verboso.

       ip_autoconfig
              No documentado.

       ip_local_port_range
              Contiene dos enteros que definen el intervalo de puertos locales
              por defecto reservados para los conectores. La reserva comienza
              con el primer número y termina con el segundo. Dése cuenta que
              estos no deben entrar en conflicto con los puertos usados por el
              enmascaramiento (aunque se trate el caso).  También, las
              elecciones arbitrarias pueden producir problemas con algunos
              filtros de paquetes del cortafuegos que realizan suposiciones
              sobre los puertos locales en uso. El primer número debe ser al
              menos >1024, mejor >4096 para evitar conflictos con puertos bien
              conocidos y para minimizar los problemas con el cortafuegos.

       ip_no_pmtu_disc
              Si está activa, por defecto no realiza el descubrimiento de la
              MTU de la ruta para los conectores TCP. El descubrimiento de la
              MTU de la ruta puede fallar si se encuentran en la ruta
              cortafuegos mal configurados (como los que pierden todos los
              paquetes ICMP) o interfaces mal configuradas (por ejemplo, un
              enlace punto a punto en donde ambos extremos no se ponen de
              acuerdo en la MTU). Es mejor arreglar los enrutadores
              defectuosos de la ruta que desactivar globalmente el
              descubrimiento de la MTU de la ruta ya que el no realizarlo
              incurre en un alto coste para la red.

       ipfrag_high_thresh, ipfrag_low_thresh
              Si el número de fragmentos IP encolados alcanza el valor
              ipfrag_high_thresh, la cola se recorta al valor
              ipfrag_low_thresh.  Contiene un entero con el número de bytes.

       ip_always_defrag
              [Nueva con la versión 2.2.13 del núcleo. En anteriores
              versiones del núcleo la caracterÃstica era controlada en tiempo
              de compilación por la opción CONFIG_IP_ALWAYS_DEFRAG]

              Cuanda esta opción booleana se habilita (es distinta de 0) los
              fragmentos de entrada (partes de paquetes IP que aparecen cuando
              algún anfitrión entre el origen y el destino decidió que los
              paquetes eran demasiado grandes y los dividió en pedazos) se
              reensamblarán (desfragmentarán) antes de ser procesados,
              incluso aunque vayan a ser reenviados.

              Sólo habilÃtelo cuando tenga en funcionamiento un cortafuegos
              que sea el único enlace de su red o un proxy transparente.
              Nunca lo active para un enrutador u ordenador normal. En otro
              caso, se puede perturbar la comunicación fragmentada cuando los
              fragmentos viajen a través de diferentes enlaces. La
              desfragmentación también tiene un alto coste de tiempo de CPU
              y de memoria.

              Esto se activa automágicamente cuando se configura un
              enmascaramiento o un proxy transparente.

       neigh/*
              Vea arp(7).

IOCTLS
       Todas las ioctls descritas en socket(7) se aplican a IP.

       Las ioctls para configurar el cortafuegos se documentan en la página
       ipfw(7) del paquete ipchains.

       Las ioctls para configurar los parámetros de los dispositivos
       genéricos se describen en netdevice(7).

OBSERVACIONES
       Tenga mucho cuidado con la opción SO_BROADCAST (no es privilegiada en
       Linux). Es fácil sobrecargar la red realizando difusiones sin tomar
       precauciones. Para los nuevos protocolos de aplicación es mejor usar
       un grupo multidestino que usar la difusión. La difusión no está
       recomendada.

       Otras implementaciones de conectores BSD proporcionan las opciones de
       conector IP_RCVDSTADDR y IP_RECVIF para obtener la dirección de
       destino y la interfaz de los datagramas recibidos. Linux posee la
       opción más general IP_PKTINFO para la misma tarea.

ERRORES
       ENOTCONN
              La operación sólo está definida en conectores conectados,
              pero el conector no lo está.

       EINVAL Se ha pasado un argumento inválido. Para las operaciones de
              envÃo, éste se puede producir al enviar a una ruta blackhole.

       EMSGSIZE
              El datagrama es mayor que una MTU de la ruta y no puede ser
              fragmentado.

       EACCES El usuario ha intentado ejecutar una operación sin los permisos
              necesarios.  Estos incluyen: enviar un paquete a una dirección
              de difusión sin haber activado la opción SO_BROADCAST, enviar
              un paquete a través de una ruta prohibida, modificar la
              configuración del cortafuegos sin tener la capacidad
              CAP_NET_ADMIN ni un identificador de usuario efectivo 0, y
              realizar un enlace a un puerto reservado sin la capacidad
              CAP_NET_BIND_SERVICE ni un identificador de usuario efectivo 0.


       EADDRINUSE
              Se ha intentado el enlace a una dirección ya en uso.

       ENOPROTOOPT y EOPNOTSUPP
              Se han pasado una opción de conector inválida.

       EPERM  El usuario no tiene permiso para establecer una prioridad alta,
              cambiar la configuración o enviar señales al proceso o grupo
              solicitado.

       EADDRNOTAVAIL
              Se ha solicitado una interfaz inexistente o la dirección fuente
              solicitada no es local.

       EAGAIN La operación se bloquearÃa en un conector bloqueante.

       ESOCKTNOSUPPORT
              El conector no está configurado o se ha solicitado un tipo de
              conector desconocido.

       EISCONN
              Se ha llamado a connect(2) con un conector ya conectado.

       EALREADY
              Ya se está realizando una operación de conexión sobre un
              conector no bloqueante.

       ECONNABORTED
              Se ha cerrado la conexión durante un accept(2).

       EPIPE  La conexión se ha cerrado inesperadamente o el otro extremo la
              ha cancelado.

       ENOENT Se ha llamado a SIOCGSTAMP con un conector en donde no ha
              llegado ningún paquete.

       EHOSTUNREACH
              Ninguna entrada válida de la tabla de enrutamiento coincide con
              la dirección de destino. Este error puede ser provocado por un
              mensaje ICMP procedente de un enrutador remoto o por la tabla
              local de enrutamiento.

       ENODEV Dispositivo de red no disponible o incapaz de enviar paquetes
              IP.

       ENOPKG No se ha configurado un subsistema del núcleo.

       ENOBUFS, ENOMEM
              No hay suficiente memoria libre. Esto a menudo significa que la
              reserva de memoria está limitada por los lÃmites del búfer de
              conectores, no por la memoria del sistema, aunque esto no es
              coherente al 100%.

       Los protocolos superpuestos pueden generar otros errores. Vea tcp(7),
       raw(7), udp(7) y socket(7).

VERSIONES
       IP_PKTINFO, IP_MTU, IP_PMTU_DISCOVER, IP_PKTINFO, IP_RECVERR y
       IP_ROUTER_ALERT son opciones nuevas del núcleo 2.2 de Linux.  También
       son todas especÃficas de Linux y no deberÃan usarse en programas que
       pretendan ser portables.

       struct ip_mreqn es nueva en Linux 2.2.  Linux 2.0 sólo soportaba
       ip_mreq.

       Las sysctls se introdujeron en la versión 2.2 de Linux.

COMPATIBILIDAD
       Por compatibilidad con Linux 2.0, todavÃa se soporta la sintáxis
       obsoleta socket(PF_INET, SOCK_RAW, protocol) para abrir un conector de
       paquetes (packet(7)).  Se recomienda no usar esta sintaxis y deberÃa
       reemplazarse por socket(PF_PACKET, SOCK_RAW, protocol).  La principal
       diferencia es la nueva estructura de direcciones sockaddr_ll para la
       información genérica de la capa de enlace en lugar de la antigua
       sockaddr_pkt.

FALLOS
       Existen demasiados valores de error inconsistentes.

       No se han descrito las ioctls para configurar las opciones de interfaz
       especÃficas de IP y las tablas ARP.

       Algunas versiones de glibc olvidan declarar in_pktinfo.  Actualmente
       ésto se soluciona copiándolo en su programa desde esta página de
       manual.

       Recibir la dirección de destino original con MSG_ERRQUEUE en msg_name
       a través de recvmsg(2) no funciona bien en algunos núcleos de la
       serie 2.2.

AUTORES
       Esta página de manual fue escrita por Andi Kleen.

VÃASE TAMBIÃN
       sendmsg(2), recvmsg(2), socket(7), netlink(7), tcp(7), udp(7), raw(7),
       ipfw(7)

       RFC791 para la especificación IP original.
       RFC1122 para los requerimientos IPv4 para lo anfitriones.
       RFC1812 para los requeremientos IPv4 para los enrutadores.




Página man de Linux             19 junio 2001                           IP(7)