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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top