Man page - netdevice(7)

Packages contains this manual

Available languages:

en fr es ja zh_TW zh_CN

Manual

netdevice

NOMBRE
SINOPSIS
DESCRIPCIÓN
Ioctls
NOTAS
ERRORES
VÉASE TAMBIÉN
TRADUCCIÓN

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 incluye soporte para algunas ioctls estándares para configurar los dispositivos de red. Se pueden usar sobre cualquier descriptor de archivo 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. Pasa una 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:

Image grohtml-3945722-1.png

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

Obtiene o establece banderas ampliadas (privadas) del dispositivo. ifr_flags contiene una máscara de bits de los siguientes valores:

Image grohtml-3945722-2.png

La configuración de las opciones extendidas (privada) de la interfaz necesita privilegios especiales.
SIOCGIFADDR
SIOCSIFADDR
SIOCDIFADDR

Obtenga, configure o elimine la dirección del dispositivo mediante ifr_addr , o ifr6_addr con ifr6_prefixlen . Configurar o eliminar la dirección de la interfaz es una operación que precisa privilegios de administrador. Por compatibilidad, SIOCGIFADDR devuelve solo direcciones AF_INET , SIOCSIFADDR acepta direcciones AF_INET y AF_INET6 , y SIOCDIFADDR elimina solo direcciones AF_INET6 . Una dirección AF_INET se puede eliminar configurándola como nula mediante de SIOCSIFADDR .

SIOCGIFDSTADDR
SIOCSIFDSTADDR

Obtenga o configure la dirección de destino de un dispositivo punto a punto usando ifr_dstaddr . Por compatibilidad, solo se aceptarán o retornarán direcciones AF_INET . Necesita privilegios de administrador para establecer la dirección de destino.

SIOCGIFBRDADDR
SIOCSIFBRDADDR

Obtenga o configure la dirección de transmisión para un dispositivo usando ifr_brdaddr . Por compatibilidad, solo se aceptarán o retornarán direcciones AF_INET . Necesita privilegios de administrador para configurar la dirección de transmisión.

SIOCGIFNETMASK
SIOCSIFNETMASK

Obtenga o configure la máscara de red para un dispositivo usando ifr_netmask . Por compatibilidad, solo se aceptarán o retornarán direcciones AF_INET . Necesita privilegios de administrador para configurar la máscara de red.

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

Devuelve una lista de direcciones de interfaz (capa de red). Por compatiilidas, serán sólo direcciones de la familia AF_INET (IPv4). A diferencia de los demás, este ioctl pasará una estructura ifconf :

struct ifconf {
int ifc_len; /* tamaño del buffer */
union {
char *ifc_buf; /* dirección del buffer */
struct ifreq *ifc_req; /* vector de estructuras */
};
};

Si ifc_req es NULL, SIOCGIFCONF retornará el tamaño de búfer necesario en bytes para recibir todas las direcciones disponibles en ifc_len . De lo contrario, ifc_req contiene un puntero a un vector de estructuras ifreq que se completarán con todas las direcciones de interfaz L3 activas. ifc_len contiene el tamaño de la matriz en bytes. Dentro de cada estructura ifreq , ifr_name recibirá el nombre de la interfaz y ifr_addr la dirección. El número real de bytes transferidos se devuelve en ifc_len .

Si el tamaño definido en ifc_len es insuficiente para almacenar todas las direcciones, el núcleo omitirá las que sobran y finalizará sin errores. No existe una forma fiable de detectar esta condición una vez que ha ocurrido. Por lo tanto, se recomienda determinar de antemano el tamaño de búfer necesario invocando a SIOCGIFCONF con ifc_req definido al valor NULL, o volver a intentar la llamada con un búfer más grande siempre que ifc_len al regresar difiera en menos de sizeof (struct ifreq) de su valor original.

Si sucediese un error durante el acceso a lasestructuras ifconf o ifreq , se devolvería EFAULT .

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í.

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 .

Las direcciones IPv6 de AF_INET6 pueden leerse desde /proc/net/if_inet6 o a través de rtnetlink (7). Pueden añadirse y/o eliminarse direcciones IPv6 a través de SIOCSIFADDR y SIOCDIFADDR o a través de rtnetlink (7). Obtener o modificar direcciones IPv6 de destino de una interfaz punto a punto sólo es posible a través de 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 <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 .