2012-06-27 22 views
5

Estoy haciendo un simulador para una radio digital usando Python. La radio transmite por RF uno cada uno de un puerto RS-232 y un puerto Ethernet, con un par de radios que hacen tubos sin costura. Por lo tanto, el simulador se usará en pares, con tuberías entre ellos que simulan el enlace de RF, lo que permite a los usuarios conectarse a cada extremo utilizando interfaces físicas, interfaces virtuales o túneles.Simulación de interfaz de red en Python?

Para el puerto serie RF, utilizo puertos seriales PySerial y virtuales para hacer que el simulador sea lo más versátil posible: puedo conectar el simulador a un puerto serie físico, a un socket de red oa otro programa local . Además de las herramientas utilizadas para crear los puertos seriales virtuales en cada sistema operativo diferente, este enfoque es completamente multiplataforma.

Me gustaría que el simulador pueda conectarse en red con un programa local a través de una interfaz virtual, con un programa remoto a través de una interfaz de red compartida y con un programa remoto a través de una interfaz física local dedicada a la simulador. Pero hasta ahora, no he encontrado una manera directa de hacer esto. He estado mirando SLIP/PPP, TAP/DUN, pcap/SOCK_RAW y otras posibilidades, y no veo ninguna solución obvia o general.

La dificultad clave parece ser que esto implica una interfaz Ethernet completa, por debajo del nivel de IP, al nivel del protocolo Ethernet en sí: si se tratara de unos pocos puertos, la solución sería relativamente simple. ¿O me estoy perdiendo algo cegadoramente obvio?

¿Cómo utilizo Python para crear y utilizar una interfaz RF Ethernet de una manera tan versátil como la solución de interfaz serial RF?

+0

[Dummynet] (http://info.iet.unipi.it/~luigi/dummynet/) y [ns-3] (http://www.nsnam.org/wiki/index.php/Main_Page) parece interesante y ambos son multiplataforma. – BobC

+0

Agregue interfaces TAP (o tal vez TUN), ¡y podría estar listo para empezar! – BobC

Respuesta

3

La enorme cantidad de respuestas que las personas publicaron me animaron a pensar fuera de la caja.

Mi enfoque será utilizar Dummynet, una herramienta verdaderamente sorprendente y versátil. Lamentablemente, los puertos Dummynet para Windows y Linux no están bien mantenidos, lo que significa que estaré ejecutando * BSD.

Pero esto simplifica las cosas, ya que una * imagen BSD también se puede ejecutar como una máquina virtual, lo que simplifica enormemente el manejo de las interfaces virtuales.

Y si me preocupa el tamaño, puedo usar picoBSD o nanoBSD para crear un pequeño sistema a medida para mi simulador.

Cuestiones relacionadas