Niet al te lang gelden werd ik gewezen op het bestaan van meerdere cursors op één X instantie. Daar moet uiteraard gebruik van gemaakt worden, en wat beter dan tegen elkaar te gamen (via wine, ieder een eigen monitor). Niet geheel onverwacht proberen spellen als je ze twee keer opstart ook 2 keer een port te binden. Ik heb daar een kleine LD_PRELOAD library voor gemaakt die een IP forceert. Met of zonder deze hack is dat genoeg voor de meeste spellen. Het probleem is Civilization 5:
Alle andere games werken omdat ze een 'connect to ip' functie hebben, maar Civ 5 niet. Bij het het aanmaken van een game bind Civ port 62900 (udp). Als de andere instantie een game zoekt dan stuurt deze een broadcast naar het lokale netwerk. Hier gaat het gebruik van de wrapper al mis, want een socket die gebind is op een ip luistert niet naar broadcasts.
De 'oplossing' hiervoor zou binden op een interface zijn. Maar dat lost het probleem niet op dat twee processen dezelfde port willen gebruiken (getest met twee dummy interfaces).
Oftewel een dilemma: óf niet op dezelfde port kunnen binden, óf geen broadcasts ontvangen.
Nu heb ik heel dit verhaal getypt, en wat me dwars zit:
- Ik kan geen Civ 5 spelen (duh)
- Civ maakt gebruik van udp, en udp kan wél twee sockets op dezelfde port binden (vreemd genoeg ontvangt dan maar een van beide iets bij een broadcast?).
- Bij het verzenden krijgen processen het verkeerde source ip, binden op een interface lost dat op. Ik zou ook de routing table kunnen aanpassen, of misschien zelfs gebruik maken van SNAT, maar iets zegt me dat dat makkelijk moet kunnen.
Is hier een mogelijkheid ergens? Heel Civ virtualiseren is geen optie, want dan heb ik geen hardware acceleratie meer. (Geen Civ 5 spelen ook niet, maar wel het overwegen waard
)
TL, DR: Is het mogelijk een netwerk kaart zo te virtualiseren dat ik niet handmatig de volledige routing table hoef aan te passen en misschien zelfs gewoon DHCP zou kunnen gebruiken?
Alle andere games werken omdat ze een 'connect to ip' functie hebben, maar Civ 5 niet. Bij het het aanmaken van een game bind Civ port 62900 (udp). Als de andere instantie een game zoekt dan stuurt deze een broadcast naar het lokale netwerk. Hier gaat het gebruik van de wrapper al mis, want een socket die gebind is op een ip luistert niet naar broadcasts.
De 'oplossing' hiervoor zou binden op een interface zijn. Maar dat lost het probleem niet op dat twee processen dezelfde port willen gebruiken (getest met twee dummy interfaces).
Oftewel een dilemma: óf niet op dezelfde port kunnen binden, óf geen broadcasts ontvangen.
Nu heb ik heel dit verhaal getypt, en wat me dwars zit:
- Ik kan geen Civ 5 spelen (duh)
- Civ maakt gebruik van udp, en udp kan wél twee sockets op dezelfde port binden (vreemd genoeg ontvangt dan maar een van beide iets bij een broadcast?).
- Bij het verzenden krijgen processen het verkeerde source ip, binden op een interface lost dat op. Ik zou ook de routing table kunnen aanpassen, of misschien zelfs gebruik maken van SNAT, maar iets zegt me dat dat makkelijk moet kunnen.
Is hier een mogelijkheid ergens? Heel Civ virtualiseren is geen optie, want dan heb ik geen hardware acceleratie meer. (Geen Civ 5 spelen ook niet, maar wel het overwegen waard
TL, DR: Is het mogelijk een netwerk kaart zo te virtualiseren dat ik niet handmatig de volledige routing table hoef aan te passen en misschien zelfs gewoon DHCP zou kunnen gebruiken?