Manual del Programador de Linux (7)
2 mayo 1999
 

NOMBRE

netdevice - Acceso de bajo nivel a los dispositivos de red de Linux.  

SINOPSIS

#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 soporta algunas ioctls estándares para configurar los dispositivos de red. Se pueden usar sobre cualquier descriptor de fichero de un conector sin tener en cuenta la familia o el tipo. Se 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;
    };
}
struct ifconf
{
    int ifc_len;                          /* tamaño del buffer */
    union {
                    char *  ifc_buf;      /* dirección del buffer */
                    struct ifreq *ifc_req;/* array de estructuras */
    };
};

Normalmente, el usuario especifica a qué dispositivo va a afectar asignando a ifr_name el nombre de la interfaz. 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.

La configuración de la palabra de banderas activas es una operación privilegiada pero cualquier proceso puede leerla.

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_ifindex a ifr_newname. Es una operación privilegiada.
SIOCGIFCONF
Devuelve una lista de direcciones de interfaces (capa de transporte). Actualmente, esto sólo significa direcciones de la familia AF_INET por compatibilidad. El usuario pasa a la ioctl una estructura ifconf como argumento. Contiene un puntero a un array de estructuras ifreq en ifc_req y sus longitudes en bytes en ifc_len. El núcleo rellena los ifreqs con todas las direcciones de las interfaces de Nivel 3 actuales que están funcionando: ifr_name contiene el nombre de la interfaz (eth0:1 etc.), ifr_addr la dirección. El núcleo regresa con la longitud real en ifc_len. Si es igual a la longitud original, el usuario debe asumir que se desbordó y debe reintentarlo con una buffer mayor. Cuando no se produce ningún error, la ioctl devuelve 0. En otro caso, -1. El desbordamiento no es un error.

La mayoría de los protocolos soportan sus propias ioctls para configurar las opciones de la interfaz específicas del protocolo. Vea las páginas de manual de los protocolos para una descripción más amplia. Para la configuración de direcciones IP, vea ip(7).

Además, algunos dispositivos soportan ioctls privadas. Éstas no se describen aquí.  

NOTA

Si lo vemos de forma estricta, SIOCGIFCONF es específica de IP y pertence a 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.  

VÉASE TAMBIÉN

ip

(7), proc(7)

Nuevo comentario