Hello folks, I think specifically Nate. I have a need to get EtherTap
working again, and after a lot of digging around and looking at this
conversation from 5 years ago:

http://thread.gmane.org/gmane.comp.emulators.m5.devel/14675

I've made some progress understanding how to do that. I think one of the
big remaining questions I have is why there was an extra program which
opened the tap device and sent the packets to gem5 over a TCP socket
instead of gem5 just opening the tap device itself and doing the reading on
its own. That would certainly be simpler, at least as far as I can tell
with admittedly not a great deal of expertise to work with.

There are a couple potential reasons I could think of. First, it could have
been a permissions thing. It looks like you need special magical
permissions to create a tap device, and it sounded from that (and this
http://gem5.org/Nate%27s_Wish_List) that folks understandably didn't want
to have to run all of gem5 as root just to get that part to work. Doing a
bit more research, it looks like you can use tunctl to create a persistent
tap device and give it to a particular user. Then that use can open and use
the device without having to be root. root would still need to configure
the device, but that would seem to mitigate that issue.

The other reason could be that the ioctls, etc., needed to create and
interact with tap devices varies between OSes, and folks didn't want to tie
the implementation to any particular OSes scheme. In that case, the little
bridge program could do the right dance for the OS in use, and then
communicate to generic gem5 over the TCP socket. It could even be that a
tap style interface doesn't even exist on a particular OS, and so the
bridge has to do some other fancy trick to get and receive ethernet frames
from the OS.

This seems like a harder problem to address, although is there really a big
group of people out there that would use ethernet bridging on a non-Linux
OS? Maybe? It would be nice to exclude people by design, if possible.

In the email thread I linked to above, the author said they were using
socat to connect between the tap device and gem5. I'd never heard of socat
before and this almost works, except that gem5 expects the size of the data
to appear at the start of the data it gets over port 3500. Since socat
doesn't do that, gem5 thinks the data size is something ridiculous and ends
up waiting to accumulate enough data before sending the incoming frame into
the network. Similarly, it puts the size at the start of the data its
sending, and I think that confuses socat. Surprisingly I think some DHCP
discover packets make it onto the network, but sometimes socat gets upset
and dies because of an "Invalid argument". I think socat just isn't the
right tool for this job, especially considering how it explodes when
certain admittedly incorrect things are sent its way it's not expecting.


Anyway, I can forge ahead doing whatever seems best to me, but I figured
I'd ask for suggestions in case anybody really wanted things done one way
or another for some reason. Let me know!

Gabe
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to