.\" -*- coding: UTF-8 -*- .\" This man page is Copyright (C) 1999 Andi Kleen . .\" .\" %%%LICENSE_START(VERBATIM_ONE_PARA) .\" Permission is granted to distribute possibly modified copies .\" of this page provided the header is included verbatim, .\" and in case of nontrivial modification author and date .\" of the modification is added to the header. .\" %%%LICENSE_END .\" .\" $Id: raw.7,v 1.6 1999/06/05 10:32:08 freitag Exp $ .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH RAW 7 "13 Agosto 2020" Linux "Manual del Programador de Linux" .SH NOMBRE raw \- Conectores directos (raw) IPv4 de Linux .SH SINOPSIS \fB#include \fP .br \fB#include \fP .br \fBraw_socket = socket(AF_INET, SOCK_RAW, int \fP\fIprotocol\fP\fB);\fP .SH DESCRIPCIÓN Los conectores directos permiten implementar nuevos protocolos IPv4 en el espacio de usuario. Un conector directo recibe o envía el datagrama crudo sin incluir cabeceras del nivel de enlace. .PP La capa IPv4 genera una cabecera IP cuando se envía un paquete, a menos que se active la opción \fBIP_HDRINCL\fP en el conector. Cuando se activa, el paquete debe contener una cabecera IP. En la recepción, la cabecera IP siempre está incluida en el paquete. .PP Para crea un conector directo, un proceso tiene que poseer la capacidad \fBCAP_NET_RAW\fP en la red y con el usuario que lo ejecute. .PP Todos los paquetes o errores cuyo protocolo coinciden con el número de \fIprotocolo\fP especificado por el conector directo, se pasan a este conector. Para una lista de los protocolos permitidos vea los números asignados en .UR http://www.iana.org/assignments/protocol\-numbers/ .UE y \fBgetprotobyname\fP(3). .PP Un protocolo \fBIPPROTO_RAW\fP implica que \fBIP_HDRINCL\fP está activa y preparada para enviar cualquier protocolo IP especificado en la cabecera pasada. Recibir todos los protocolos IP via \fBIPPROTO_RAW\fP no es posible con conectores directos. .RS .TS tab(:) allbox; c s l l. Campos de cabecera IP modificados en el envío por \fBIP_HDRINCL\fP Suma de comprobación IP:Siempre se rellena Dirección fuente:Se rellena cuando es cero Identificador del paquete:Se rellena cuando es cero Longitud total:Siempre se rellena .TE .RE .PP .PP Si se especifica \fBIP_HDRINCL\fP y la cabecera IP tiene una dirección de destino distinta de cero, la dirección de destino del conector se utiliza para enrutar el paquete. Cuando se especifica \fBMSG_DONTROUTE\fP, la dirección de destino debe referirse a una interfaz local, de lo contrario, se realiza una búsqueda en la tabla de enrutamiento, aunque se ignoran las rutas que se dirigen a enrutadores. .PP Si no se activa \fBIP_HDRINCL\fP, se pueden configurar las opciones de la cabecera IP de los conectores directos con \fBsetsockopt\fP(2). Vea \fBip\fP(7) para más información. .PP A partir de Linux 2.2 todas las opciones y campos de las cabeceras IP se pueden configurar usando las opciones de los conectores IP. Esto significa que los conectores directos suelen ser necesarios sólo para protocolos nuevos o protocolos sin interfaz de usuario (como ICMP). .PP Cuando se recibe un paquete, se pasa a cualquier conector directo que haya sido asociado a su protocolo antes de que sea pasado al manejador de cualquier otro protocolo (por ejemplo, los módulos de protocolo del núcleo). .SS "Formato de las direcciones" .\" commit f59fc7f30b710d45aadf715460b3e60dbe9d3418 Para el envío y la recepción de datagramas (\fBsendto\fP(2), \fBrecvfrom\fP(2) y similar) los conectores directos usan la estructura de direcciones estándar \fBsockaddr_in\fP definida en \fBip\fP(7). El campo \fBsin_port\fP se podría usar para especificar el número de protocolo IP, pero en Linux 2.2 se ignora al enviar y siempre debería valer 0 (vea FALLOS). Para los paquetes de entrada, a \fBsin_port\fP se le asigna el protocolo del paquete. Vea el fichero cabecera \fB\fP para protocolos IP válidos. .SS "Opciones de los conectores" .\" Or SOL_RAW on Linux Las opciones de los conectores directos se pueden configurar con \fBsetsockopt\fP(2) y leer con \fBgetsockopt\fP(2), pasando la opción de familia \fBIPPROTO_RAW\fP. .TP \fBICMP_FILTER\fP Activa un filtro especial para los conectores directos asociados al protocolo \fBIPPROTO_ICMP\fP. El valor tiene un bit activo para cada tipo de mensaje ICMP que debe filtrarse. Por defecto, no se filtra ningún mensaje ICMP. .PP Además, todas las opciones \fBip\fP(7) del conector \fBIPPROTO_IP\fP válidas para conectores de datagramas están implementadas. .SS "Gestión de errores" Sólo se pasan al usuario los errores generados por la red cuando el conector está conectado o está activa la opción \fBIP_RECVERR\fP. Para conectores conectados, sólo se pasan \fBEMSGSIZE\fP y \fBEPROTO\fP por compatibilidad. Con \fBIP_RECVERR\fP todos los errores de red se guardan en la cola de errores. .SH ERRORES .TP \fBEACCES\fP El usuario ha intentado enviar a una dirección de difusión sin tener activa la opción de difusión en el conector. .TP \fBEFAULT\fP Se ha pasado una dirección de memoria inválida. .TP \fBEINVAL\fP Argumento inválido. .TP \fBEMSGSIZE\fP Paquete demasiado grande. O bien el descubrimiento del MTU de la ruta está activo (la opción \fBIP_MTU_DISCOVER\fP de los conectores) o bien el tamaño del paquete excede el máximo tamaño de 64\ kB permitido por IPv4. .TP \fBEOPNOTSUPP\fP Se ha pasado a la llamada socket una opción inválida (como \fBMSG_OOB\fP). .TP \fBEPERM\fP El usuario no tiene permiso para abrir conectores directos. Sólo los procesos con un identificador de usuario efectivo de 0 o el atributo \fBCAP_NET_RAW\fP pueden hacerlo. .TP \fBEPROTO\fP Ha llegado un error ICMP informando de un problema de parámetros. .SH VERSIONES \fBIP_RECVERR\fP y \fBICMP_FILTER\fP son nuevos en la versión 2.2 de Linux. Ambos son extensiones de Linux y no deberían usarse en programas transportables. .PP La versión 2.0 de Linux activaba cierta compatibilidad con BSD en el código de los conectores directos cuando se activaba la opción \fBSO_BSDCOMPAT\fP. Ésto se ha eliminado en la versión 2.2. .SH NOTAS Por defecto, los conectores directos averiguan el MTU de la ruta (unidad máxima de transmisión) por lo que el núcleo realiza un seguimiento del MTU hacia una IP de destino emitiendo \fBEMSGSIZE\fP cuando la escritura deun conector directo lo sobrepasa. Cuando esto ocurre, la aplicación deberá reducir el tamaño de sus paquetes. La averiguación del MTU de las rutas puede desactivarse mediante la opción \fBIP_MTU_DISCOVER\fP del conector o en el archivo \fI/proc/sys/net/ipv4/ip_no_pmtu_disc\fP, consulte \fBip\fP(7) para más información. Si está desactivada, los conectores directores fragmentarán los paquetes salientes que sobrepasen el MTU de la interfaz. Por razones de rendimiento y fiabilidad, no se recomienda desactivarlo. .PP Se puede asociar un conector directo a una dirección local concreta mediante la llamada \fBbind\fP(2). Si no está asociado, se recibirán todos los paquetes con el protocolo IP especificado. Además, se puede asociar un conector directo a un dispositivo de red específico usando \fBSO_BINDTODEVICE\fP. Vea \fBsocket\fP(7). .PP Un conector \fBIPPROTO_RAW\fP es sólo de envío. Si verdaderamente quiere recibir todos los paquetes IP, use un conector \fBpacket\fP(7) con el protocolo \fBETH_P_IP\fP. Dése cuenta que, a diferencia de los conectores directos, los conectores de paquete no reensamblan fragmentos IP. .PP Si quiere recibir todos los paquetes ICMP para un conector de datagramas, normalmente es mejor usar \fBIP_RECVERR\fP en ese conector particular. Vea \fBip\fP(7). .PP Los conectores directos pueden interceptar todos los protocolos IP de Linux, incluso protocolos como ICMP o TCP que poseen un módulo de protocolo dentro del núcleo. En este caso, los paquetes se pasan tanto al módulo del núcleo como al conector (o conectores) directo. No se debería confiar en esto en programas transportables ya que muchas otras implementaciones de conectores BSD tienen limitaciones aquí. .PP Linux nunca cambia las cabeceras pasadas por el usuario (salvo para rellenar algunos campos de valor 0 como se ha descrito en \fBIP_HDRINCL\fP). Esto es diferente de muchas otras implementaciones de conectores directos. .PP Generalmente, los conectores directos son bastante específicos y deberían evitarse en programas que pretendan ser portables. .PP En el envío a través de conectores directos se debería tomar el protocolo IP de \fBsin_port\fP. Esta capacidad se perdió en Linux 2.2. La forma de solucionar esto es usar \fBIP_HDRINCL\fP. .SH ERRORES No se han descrito las extensiones de proxy transparente. .PP Cuando se activa la opción \fBIP_HDRINCL\fP, los datagramas no se fragmentan y están limitados por la MTU de la interfaz. .PP .\" .SH AUTHORS .\" This man page was written by Andi Kleen. La posibilidad de especificar el protocolo IP en \fIsin_port\fP durante el envío desapareció en Linux 2.2. Siempre se usa el protocolo al que se enlazó el conector o el que se especificó en la llamada inicial a \fBsocket\fP(2). .SH "VÉASE TAMBIÉN" \fBrecvmsg\fP(2), \fBsendmsg\fP(2), \fBcapabilities\fP(7), \fBip\fP(7), \fBsocket\fP(7) .PP \fBRFC\ 1191\fP para el descubrimiento del MTU de la ruta. \fBRFC\ 791\fP y el fichero cabecera \fI\fP para el protocolo IP. .SH COLOFÓN Esta página es parte de la versión 5.10 del proyecto Linux \fIman\-pages\fP. 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/. .SH TRADUCCIÓN La traducción al español de esta página del manual fue creada por Juan Piernas y Marcos Fouces . Esta traducción es documentación libre; lea la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE 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 .MT debian-l10n-spanish@lists.debian.org>. .ME .