2012-06-27 12 views
5

Tworzę symulator cyfrowego radia za pomocą Pythona. Przekaźniki radiowe nad RF przesyłają po jednym porcie RS-232 i porcie Ethernet, z parą radiotelefonów tworzących bezszwowe rury. W związku z tym symulator będzie używany w parach, z rurami pomiędzy nimi symulującymi łącze RF, umożliwiając użytkownikom łączenie się z każdym końcem za pomocą fizycznych interfejsów, wirtualnych interfejsów lub tuneli.Symulacja interfejsu sieciowego w Pythonie?

Dla portu szeregowego RF używam PySerial i wirtualnych portów szeregowych, aby symulator był jak najbardziej wszechstronny: mogę podłączyć symulator do fizycznego portu szeregowego, do gniazda sieciowego lub do innego lokalnego programu . Oprócz narzędzi używanych do tworzenia wirtualnych portów szeregowych na każdym innym systemie operacyjnym, podejście to jest całkowicie wieloplatformowe.

Chciałbym, aby symulator mógł łączyć się z lokalnym programem za pośrednictwem wirtualnego interfejsu, ze zdalnym programem za pośrednictwem współdzielonego interfejsu sieciowego oraz ze zdalnym programem poprzez lokalny fizyczny interfejs, który byłby dedykowany symulator. Ale do tej pory nie znalazłem prostego sposobu na zrobienie tego. Patrzyłem na SLIP/PPP, TAP/DUN, pcap/SOCK_RAW i inne możliwości i nie widzę oczywistego ani ogólnego rozwiązania.

Kluczowa trudność polega na tym, że dotyczy to całego interfejsu Ethernet, poniżej poziomu IP, na poziomie samego protokołu Ethernet: gdyby było to tylko kilka portów, rozwiązanie byłoby stosunkowo proste. Czy może brakuje mi czegoś oślepiająco oczywistego?

Jak używać języka Python do tworzenia i korzystania z interfejsu RF Ethernet w sposób tak wszechstronny, jak rozwiązanie interfejsu szeregowego RF?

+0

[Dummynet] (http://info.iet.unipi.it/~luigi/dummynet/) i [ns-3] (http://www.nsnam.org/wiki/index.php/Main_Page) wydają się interesujące i są wieloplatformowe. – BobC

+0

Dodaj interfejsy TAP (lub może TUN), a ja mogę być gotowy! – BobC

Odpowiedz

3

Ogromna liczba odpowiedzi zamieszczonych przez ludzi zachęciła mnie do myślenia poza polem.

Moje podejście będzie polegało na wykorzystaniu Dummynet, naprawdę niesamowitego i wszechstronnego narzędzia. Niestety porty Windows i Linux Dummynet nie są dobrze utrzymane, co oznacza, że ​​będę działać * BSD.

To jednak upraszcza, ponieważ obraz * BSD może być również uruchamiany jako maszyna wirtualna, co znacznie upraszcza obsługę wirtualnych interfejsów.

Jeśli martwię się rozmiarem, mogę użyć picoBSD lub nanoBSD do stworzenia małego dopasowanego do mojego symulatora systemu.