obtener un descriptor de archivo ioctl para el puerto Ethernet
Pregunta
necesito para obtener el descriptor de archivo para su uso en ioctl () llama a un puerto Ethernet en Linux. No está seguro de cómo hacer esto.
Solución
Sólo tiene que utilizar el descriptor de archivo de un socket abierto, utilizando el nombre del dispositivo en la estructura ifreq
pasado a ioctl()
, asumiendo que su programa tiene los permisos adecuados para hacerlo.
A partir de los documentos:
Linux soporta algunas ioctls estándares a dispositivos de red configurar. Ellos pueden ser utilizado en cualquier enchufe de archivo descriptor independientemente de la familia o tipo. Pasan una estructura ifreq:
El socket no necesita ser obligado al dispositivo de destino, o ser de cualquier familia específica. Cualquier fd socket abierto va a hacer (de nuevo, con los privilegios adecuados), sólo uno abierto para su tarea específica, espera para ioctl()
de retorno y cerrarla.
Ver man 7 netdevice
para más, o aquí si no tiene la adecuada paquetes de documentación instalados (pista, el paquete se denomina generalmente manpages-dev
o manpages-devel
, dependiendo de su distribución)
También puede echar un vistazo a la fuente para el paquete net-tools
, que puede ser identificado de manera diferente dependiendo de su distribución. Esa es la fuente de ifconfig
(Debian / Ubuntu aquí).
Lo siento por la ambigüedad original, pensé que estaba tratando de configurar un dispositivo multi función especial (no estoy seguro por qué ahora, tal vez la falta de sueño).
Otros consejos
Puede hacer algo como esto fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)
Uso strace
para ver qué funciones ifconfig llamadas.