Hi Arpit,

ok, so you wish to forward SATA commands received by DevAHCI.cpp. That's doable.

In VirtualBox's pluggable device/driver model (PDM) we usually try to put code 
accessing host OS services or similar in drivers.  A typical device emulation 
will have one or more drivers attached to its ports (called LUNs by PDM - don't 
ask why). The storage related drivers are shared among all storage device 
emulations, saving code duplication. With one exception (DrvIntNet.cpp) all 
drivers lives exclusively in ring-3 context and can do socket calls and almost 
whatever else they wish.

In your case, I'm not sure if implementing a driver is the best solution 
though, since you probably want the SATA commands that the guest sends and not 
stuff broken down into generic storage driver method calls. This is a bit more 
work though...  And there are no examples of devices doing socket I/O or 
similar at the moment.

I can see two way of approaching the task of making DevAHCI.cpp forward SATA 
commands:
 1. Disable the ring-0 and raw-mode context compilation and execution 
completion, forcing the 
     entire device emulation to be executed in ring-3:
      1a. Remove DevAHCI.cpp and ATAController.cpp from the VBoxDDGC and 
          VBoxDDR0 targets in the src/VBox/Devices/Makefile.kmk.
      1b. Force fR0Enabled and fGCEnabled in ahciR3Construct to false.
    This approach is potentially slower than the next one as it may result it 
lots of context 
    switching between ring-0 and ring-3 to service AHCI accesses.
 2.  Put the #ifdef IN_RING3 around all the socket code. If some code path 
requiring 
    socket activity is executed in ring-0 (or raw-mode), force it to return to 
ring-3 and be
    serviced there.  This approach is much trickier and but may perform better. 

Hope this was of some help,
 Knut.

On Sep 20, 2011, at 6:23 PM, Arpit Patel wrote:

> Thanks for your reply. I need to talk to some socket level 
> application/server(which can possibly be running on another system) that is 
> simulating SATA behavior and I need to generate those SATA commands via 
> socket comm from within AHCI emulation code.  Since this is done for some new 
> AHCI hardware development as well as some new storage hw protocol emulation, 
> I am using the AHCI emulation to test my drivers and on the back end would 
> like to generate SATA commands via socket comm to the simulation app. running 
> on other end. That's why I want to initiate this socket comm from  AHCI 
> emulation code. Is there any other better approach to this problem you can 
> suggest in virtualbox?
> Thanks.
> Arpit.
> 
> From: Klaus Espenlaub <[email protected]>
> To: [email protected]
> Sent: Monday, September 19, 2011 10:34 AM
> Subject: Re: [vbox-dev] Using Sockets in Device emulation
> 
> On 16.09.2011 22:20, Arpit Patel wrote:
> > Hi,
> > I wanted to use tcp sockets from Device Emulation (eg. DevAHCI.cpp) and
> > connect to a socket server running on one of the Guest OS or to another
> > system on the network. I have following questions -
> 
> DevAHCI is a rather complex device... which means it's not the ideal starting 
> point.
> 
> What do you actually want to achieve? Accessing remote storage? It would help 
> a lot of you'd say a few words about your general idea before setting out to 
> implement it.
> 
> > 1. Would this kind of socket comm possible from Device Emulation code?
> > 2. As device emulation code runs in Ring0 mode, if I try to even include
> > iprt/sockets.h file, it complains that RTSocket APIs are not available
> > in Ring-0 context. If that is so, what sockets can I use from within
> > Device Emulation code?
> > 3. How do I know which code of Virtualbox is running in Ring0 and which
> > is running in Ring3? I was under the impression that the vbox host
> > drivers that are built and installed on the host OS is the only code
> > that runs in Ring0 and everything else should be Ring3.
> > 4. Is there any sample code of this socket comm that can be used from
> > device emulation in virtualbox, that you can point me to?.
> 
> In general you need to make sure that the socket code is ONLY used by Ring3 
> code, then it would compile. However this all may be unnecessary if you 
> actually want a new storage "format".
> 
> Klaus
> 
> 
> > Thanks.
> > Arpit.
> > 
> > 
> > 
> > 
> > _______________________________________________
> > vbox-dev mailing list
> > [email protected]
> > http://vbox.innotek.de/mailman/listinfo/vbox-dev
> 
> 
> -- Oracle <http://www.oracle.com>
> Dr. Klaus Espenlaub | Snr. Manager Software Development Desktop
> Virtualization
> Phone: +49 7151 60405 205 <tel:+49715160405205>
> Oracle VM VirtualBox
> 
> ORACLE Deutschland B.V. & Co. KG | Werkstr. 24 | 71384 Weinstadt
> 
> ORACLE Deutschland B.V. & Co. KG
> Hauptverwaltung: Riesstr. 25, D-80992 München
> Registergericht: Amtsgericht München, HRA 95603
> 
> Komplementärin: ORACLE Deutschland Verwaltung B.V.
> Hertogswetering 163/167, 3543 AS Utrecht, Niederlande
> Handelsregister der Handelskammer Midden-Niederlande, Nr. 30143697
> Geschäftsführer: Jürgen Kunz, Marcel van de Molen, Alexander van der Ven
> 
> Green Oracle <http://www.oracle.com/commitment>     Oracle is committed to
> developing practices and products that help protect the environment
> 
> 
> _______________________________________________
> vbox-dev mailing list
> [email protected]
> http://vbox.innotek.de/mailman/listinfo/vbox-dev
> 
> 
> _______________________________________________
> vbox-dev mailing list
> [email protected]
> http://vbox.innotek.de/mailman/listinfo/vbox-dev

_______________________________________________
vbox-dev mailing list
[email protected]
http://vbox.innotek.de/mailman/listinfo/vbox-dev

Reply via email to