NOMBRE
netdevice - acceso de bajo nivel a los dispositivos de red de LinuxSINOPSIS
#include <sys/ioctl.h> #include <net/if.h>
DESCRIPCIÓN
Esta página de manual describe la interfaz de conectores que se usa para configurar los dispositivos de red. Linux incluye soporte para algunas ioctls estándares para configurar los dispositivos de red. Se pueden usar sobre cualquier descriptor de fichero de un conector sin importar la familia o el tipo. La mayoría pasa una estructura ifreq:struct ifreq { char ifr_name[IFNAMSIZ]; /* Nombre de la interfaz */ union { struct sockaddr ifr_addr; struct sockaddr ifr_dstaddr; struct sockaddr ifr_broadaddr; struct sockaddr ifr_netmask; struct sockaddr ifr_hwaddr; short ifr_flags; int ifr_ifindex; int ifr_metric; int ifr_mtu; struct ifmap ifr_map; char ifr_slave[IFNAMSIZ]; char ifr_newname[IFNAMSIZ]; char *ifr_data; }; };
AF_INET6 es una excepción. Passa un estructura in6_ifreq:
struct in6_ifreq { struct in6_addr ifr6_addr; u32 ifr6_prefixlen; int ifr6_ifindex; /* Índice de la interfaz */ };
En general, el usuario especifica a qué dispositivo va a afectar asignando a ifr_name el nombre de la interfaz o a ifr6_ifindex el índice de la misma. Todos los otros miembros de la estructura pueden compartir memoria.
Ioctls
Si se marca una ioctl como privilegiada entonces su uso requiere un identificador de usuario efectivo 0 o la capacidad CAP_NET_ADMIN. Si éste no es el caso se devuelve EPERM.- SIOCGIFNAME
- Dado un ifr_ifindex, devuelve el nombre de la interfaz en ifr_name. Ésta es la única ioctl que devuelve su resultado en ifr_name.
- SIOCGIFINDEX
- Devuelve el índice de interfaz de la interfaz en ifr_ifindex.
- SIOCGIFFLAGS, SIOCSIFFLAGS
- Obtiene o establece la palabra de banderas activas del
dispositivo. ifr_flags contiene una máscara de bits de los
siguientes valores:
Significado de las banderas IFF_UP La interfaz está funcionando. IFF_BROADCAST Dirección de difusión válida asignada. IFF_DEBUG Bandera de depuración interna. IFF_LOOPBACK Ésta es una interfaz loopback. IFF_POINTOPOINT La interfaz es un enlace punto a punto. IFF_RUNNING Recursos necesarios reservados. IFF_NOARP Sin protocolo ARP, la dirección de destino de Nivel 2 no está configurada. IFF_PROMISC La interfaz se encuentra en modo promiscuo. IFF_NOTRAILERS Evitar el uso de terminadores. IFF_ALLMULTI Recibir todos los paquetes multidestino. IFF_MASTER Interfaz maestra de un grupo de balanceo de carga. IFF_SLAVE Interfaz esclava de un grupo de balanceo de carga. IFF_MULTICAST La interfaz soporta multidestino. IFF_PORTSEL La interfaz es capaz de seleccionar el tipo de medio mediante ifmap. IFF_AUTOMEDIA Autoselección de medios activa. IFF_DYNAMIC Las direcciones se pierden cuando la interfaz se desactiva. IFF_LOWER_UP Driver signals L1 up (since Linux 2.6.17) IFF_DORMANT Driver signals dormant (since Linux 2.6.17) IFF_ECHO Echo sent packets (since Linux 2.6.25)
- SIOCGIFPFLAGS, SIOCSIFPFLAGS
- Obtiene o establece banderas ampliadas (privadas) del
dispositivo. ifr_flags contiene una máscara de bits de los
siguientes valores:
Banderas privadas IFF_802_1Q_VLAN Interface is 802.1Q VLAN device. IFF_EBRIDGE La interfaz es un disposotivo puente Ethernet. IFF_SLAVE_INACTIVE La interfaz es un enlace esclavo inactivo. IFF_MASTER_8023AD La interfaz es un enlace maestro 802.3ad. IFF_MASTER_ALB La interfaz es un enlaze maestro balanceado-alb. IFF_BONDING La interfaz es un enlace maestro o esclavo. IFF_SLAVE_NEEDARP La interfaz necesita ARP para la validación. IFF_ISATAP La interfaz es una ISATAP RFC4214.
- SIOCGIFADDR, SIOCSIFADDR, SIOCDIFADDR
- Get, set, or delete the address of the device using ifr_addr, or ifr6_addr with ifr6_prefixlen. Setting or deleting the interface address is a privileged operation. For compatibility, SIOCGIFADDR returns only AF_INET addresses, SIOCSIFADDR accepts AF_INET and AF_INET6 addresses, and SIOCDIFADDR deletes only AF_INET6 addresses. A AF_INET address can be deleted by setting it to zero via SIOCSIFADDR.
- SIOCGIFDSTADDR, SIOCSIFDSTADDR
- Get or set the destination address of a point-to-point device using ifr_dstaddr. For compatibility, only AF_INET addresses are accepted or returned. Setting the destination address is a privileged operation.
- SIOCGIFBRDADDR, SIOCSIFBRDADDR
- Get or set the broadcast address for a device using ifr_brdaddr. For compatibility, only AF_INET addresses are accepted or returned. Setting the broadcast address is a privileged operation.
- SIOCGIFNETMASK, SIOCSIFNETMASK
- Get or set the network mask for a device using ifr_netmask. For compatibility, only AF_INET addresses are accepted or returned. Setting the network mask is a privileged operation.
- SIOCGIFMETRIC, SIOCSIFMETRIC
- Obtiene o establece la métrica del dispositivo usando ifr_metric. Todavía no implementado. Asigna un 0 a ifr_metric cuando se intenta leer y devuelve EOPNOTSUPP cuando se intenta asignarle un valor.
- SIOCGIFMTU, SIOCSIFMTU
- Obtiene o establece la MTU (unidad de transferencia máxima) del dispositivo usando ifr_mtu. La configuración de la MTU es una operación privilegiada. Configurar la MTU con valores demasiado pequeños puede provocar un fallo del núcleo.
- SIOCGIFHWADDR, SIOCSIFHWADDR
- Obtiene o establece la dirección hardware del dispositivo usando ifr_hwaddr. La configuración de la dirección hardware es una operación privilegiada.
- SIOCSIFHWBROADCAST
- Establece la dirección de difusión hardware del dispositivo a partir de ifr_hwaddr. Es una operación privilegiada.
- SIOCGIFMAP, SIOCSIFMAP
- Obtiene o establece los parámetros hardware de la interfaz usando ifr_map. La configuración de los parámetros es una operación privilegiada.
-
struct ifmap { unsigned long mem_start; unsigned long mem_end; unsigned short base_addr; unsigned char irq; unsigned char dma; unsigned char port; };
- La interpretación de la estructura ifmap depende del manejador del dispositivo y de la arquitectura.
- SIOCADDMULTI, SIOCDELMULTI
- Añade una dirección a o borra una dirección de los filtros multidestino de la capa de enlace de la interfaz usando ifr_hwaddr. Estas operaciones son privilegiadas. Si quiere una alternativa, vea también packet(7).
- SIOCGIFTXQLEN, SIOCSIFTXQLEN
- Obtiene o establece la longitud de la cola de transmisión de un dispositivo usando ifr_qlen. La configuración de la longitud de la cola de transmisión es una operación privilegiada.
- SIOCSIFNAME
- Cambia el nombre de la interfaz indicada en ifr_name a ifr_newname. Es una operación privilegiada. Sólo está permitida cuando la interfaz no está activada.
- SIOCGIFCONF
- Return a list of interface (network layer) addresses. This currently means only addresses of the AF_INET (IPv4) family for compatibility. Unlike the others, this ioctl passes an ifconf structure:
-
struct ifconf { int ifc_len; /* tamaño del buffer */ union { char *ifc_buf; /* dirección del buffer */ struct ifreq *ifc_req; /* vector de estructuras */ }; };
- If ifc_req is NULL, SIOCGIFCONF returns the necessary buffer size in bytes for receiving all available addresses in ifc_len. Otherwise, ifc_req contains a pointer to an array of ifreq structures to be filled with all currently active L3 interface addresses. ifc_len contains the size of the array in bytes. Within each ifreq structure, ifr_name will receive the interface name, and ifr_addr the address. The actual number of bytes transferred is returned in ifc_len.
- If the size specified by ifc_len is insufficient to store all the addresses, the kernel will skip the exceeding ones and return success. There is no reliable way of detecting this condition once it has occurred. It is therefore recommended to either determine the necessary buffer size beforehand by calling SIOCGIFCONF with ifc_req set to NULL, or to retry the call with a bigger buffer whenever ifc_len upon return differs by less than sizeof(struct ifreq) from its original value.
- Si sucediese un error durante el acceso a lasestructuras ifconf o ifreq, se devolvería EFAULT.
NOTAS
SIOCGIFCONF y otros ioctls que aceptan o devuelven solamente direcciones de conectores AF_INET son específicos de IP y seguramente sea buena idea que se documenten en ip(7). Los nombres de interfaces que no tiene dirección o que no tienen la opción IFF_RUNNING activa, se pueden encontrar a través de /proc/net/dev. AF_INET6 IPv6 addresses can be read from /proc/net/if_inet6 or via rtnetlink(7). Adding a new IPv6 address and deleting an existing IPv6 address can be done via SIOCSIFADDR and SIOCDIFADDR or via rtnetlink(7). Retrieving or changing destination IPv6 addresses of a point-to-point interface is possible only via rtnetlink(7).ERRORES
glibc 2.1 no posee la macro ifr_newname en <net/if.h>. Añada lo siguiente a su programa como solución:#ifndef ifr_newname #define ifr_newname ifr_ifru.ifru_slave #endif
VÉASE TAMBIÉN
proc(5), capabilities(7), ip(7), rtnetlink(7)TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Juan Piernas <[email protected]> y Marcos Fouces <[email protected]> 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 [email protected]15 Diciembre 2022 | P |