VirtualBox

Changeset 60493 in vbox for trunk


Ignore:
Timestamp:
Apr 14, 2016 1:45:31 PM (9 years ago)
Author:
vboxsync
Message:

ValidationKit/usb: More fixes for the server and client side

Location:
trunk/src/VBox/ValidationKit
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/tests/usb/tdUsb1.py

    r60488 r60493  
    295295        if fRc is True:
    296296            reporter.log('Connect succeeded');
    297             self.oVBox.host.addUSBDeviceSource('USBIP', sGadgetHost, sGadgetHost, [], []);
     297            self.oVBox.host.addUSBDeviceSource('USBIP', sGadgetHost, sGadgetHost + (':%s' % oUsbGadget.getUsbIpPort()), [], []);
    298298
    299299            # Create device filter
     
    341341        if fRc is True:
    342342            reporter.log('Connect succeeded');
    343             self.oVBox.host.addUSBDeviceSource('USBIP', sGadgetHost, sGadgetHost, [], []);
     343            self.oVBox.host.addUSBDeviceSource('USBIP', sGadgetHost, sGadgetHost + ':' + oUsbGadget.getUsbIpPort(), [], []);
    344344
    345345            # Create device filter
  • trunk/src/VBox/ValidationKit/tests/usb/usbgadget2.py

    r60489 r60493  
    416416                        return None;
    417417                    abPayload.extend(u32ToByteArray(o));
     418                elif isinstance(o, types.IntType):
     419                    if o < 0 or o > 0xffffffff:
     420                        reporter.fatal('sendMsg: uint32_t payload is out of range: %s' % (hex(o)));
     421                        return None;
     422                    abPayload.extend(u32ToByteArray(o));
    418423                elif isinstance(o, array.array):
    419424                    abPayload.extend(o);
     
    627632        if sOpcode == "ACK":
    628633            return True;
    629         return (sOpcode, getSZ(abPayload, 0, sOpcode));
     634        return (sOpcode, getSZ(abPayload, 16, sOpcode));
    630635
    631636    def recvAckLogged(self, sCommand, fNoDataOk = False):
     
    659664        if sOpcode == "FALSE":
    660665            return False;
    661         reporter.maybeErr(self.fErr, 'recvAckLogged: %s response was %s: %s' % (sCommand, sOpcode, getSZ(abPayload, 0, sOpcode)));
     666        reporter.maybeErr(self.fErr, 'recvAckLogged: %s response was %s: %s' % (sCommand, sOpcode, getSZ(abPayload, 16, sOpcode)));
    662667        return None;
    663668
     
    721726        sHostname = socket.gethostname().lower();
    722727        cbFill = 68 - len(sHostname) - 1;
    723         rc = self.sendMsg("HOWDY", (long((1 << 16) | 0), long(0x1), long(len(sHostname)), sHostname, zeroByteArray(cbFill)));
     728        rc = self.sendMsg("HOWDY", ((1 << 16) | 0, 0x1, len(sHostname), sHostname, zeroByteArray(cbFill)));
    724729        if rc is True:
    725730            rc = self.recvAckLogged("HOWDY", self.fTryConnect);
     
    746751    def taskGadgetCreate(self, iGadgetType, iGadgetAccess):
    747752        """Creates a new gadget on UTS"""
    748         fRc = self.sendMsg("GDGTCRT", (iGadgetType, iGadgetAccess, 0));
     753        fRc = self.sendMsg("GDGTCRT", (iGadgetType, iGadgetAccess, 0, 0));
    749754        if fRc is True:
    750755            fRc = self.recvAckLogged("GDGTCRT");
     
    842847        """
    843848        return self.startTask(cMsTimeout, fIgnoreErrors, "GadgetCreate", self.taskGadgetCreate, \
    844                               (long(iGadgetType), long(iGadgetAccess)));
     849                              (iGadgetType, iGadgetAccess));
    845850
    846851    def syncGadgetCreate(self, iGadgetType, iGadgetAccess, cMsTimeout = 30000, fIgnoreErrors = False):
     
    857862        """
    858863        return self.startTask(cMsTimeout, fIgnoreErrors, "GadgetDestroy", self.taskGadgetDestroy, \
    859                               (long(iGadgetId), ));
     864                              (iGadgetId, ));
    860865
    861866    def syncGadgetDestroy(self, iGadgetId, cMsTimeout = 30000, fIgnoreErrors = False):
     
    13271332        fRc = False;
    13281333        if sImpersonation == g_ksGadgetImpersonationTest:
    1329             fRc = self.oUtsSession.syncGadgetCreate(g_kiGadgetTypeTest);
     1334            fRc = self.oUtsSession.syncGadgetCreate(g_kiGadgetTypeTest, g_kiGadgetAccessUsbIp);
    13301335        else:
    13311336            reporter.log('Invalid or unsupported impersonation');
     
    13581363                print 'connect: waitForTask -> %s, result %s' % (fDone, self.oUtsSession.getResult());
    13591364                if fDone is True and self.oUtsSession.isSuccess():
    1360                     fRc = True;
     1365                    # Parse the reply.
     1366                    _, _, abPayload = self.oUtsSession.getLastReply();
     1367
     1368                    if getU32(abPayload, 20) is g_kiGadgetAccessUsbIp:
     1369                        fRc = True;
     1370                        self.iUsbIpPort = getU32(abPayload, 24);
     1371                    else:
     1372                        reporter.log('Gadget doesn\'t support access over USB/IP despite being requested');
     1373                        fRc = False;
    13611374                else:
    13621375                    fRc = False;
     
    13761389
    13771390        self._clearImpersonation();
    1378         self._cleanupGadget();
    13791391        if self.oUtsSession is not None:
    13801392            fRc = self.oUtsSession.syncDisconnect();
  • trunk/src/VBox/ValidationKit/utils/usb/UsbTestService.cpp

    r60488 r60493  
    566566    else
    567567        rc = utsReplyBadSize(pClient, pPktHdr, sizeof(UTSPKTHDR));
    568     g_pTransport->pfnNotifyBye(pClient->pTransportClient);
    569568    return rc;
    570569}
  • trunk/src/VBox/ValidationKit/utils/usb/UsbTestServiceGadgetCfg.cpp

    r60303 r60493  
    171171    if (   !pCfgItem
    172172        || pCfgItem->Val.enmType == UTSGADGETCFGTYPE_UINT8)
     173    {
    173174        *pu8 = pCfgItem ? pCfgItem->Val.u.u8 : u8Def;
     175        rc = VINF_SUCCESS;
     176    }
    174177
    175178    return rc;
     
    206209    if (   !pCfgItem
    207210        || pCfgItem->Val.enmType == UTSGADGETCFGTYPE_UINT16)
     211    {
    208212        *pu16 = pCfgItem ? pCfgItem->Val.u.u16 : u16Def;
     213        rc = VINF_SUCCESS;
     214    }
    209215
    210216    return rc;
     
    241247    if (   !pCfgItem
    242248        || pCfgItem->Val.enmType == UTSGADGETCFGTYPE_UINT32)
     249    {
    243250        *pu32 = pCfgItem ? pCfgItem->Val.u.u32 : u32Def;
     251        rc = VINF_SUCCESS;
     252    }
    244253
    245254    return rc;
     
    276285    if (   !pCfgItem
    277286        || pCfgItem->Val.enmType == UTSGADGETCFGTYPE_UINT64)
     287    {
    278288        *pu64 = pCfgItem ? pCfgItem->Val.u.u64 : u64Def;
     289        rc = VINF_SUCCESS;
     290    }
    279291
    280292    return rc;
     
    311323    if (   !pCfgItem
    312324        || pCfgItem->Val.enmType == UTSGADGETCFGTYPE_INT8)
     325    {
    313326        *pi8 = pCfgItem ? pCfgItem->Val.u.i8 : i8Def;
     327        rc = VINF_SUCCESS;
     328    }
    314329
    315330    return rc;
     
    346361    if (   !pCfgItem
    347362        || pCfgItem->Val.enmType == UTSGADGETCFGTYPE_INT16)
     363    {
    348364        *pi16 = pCfgItem ? pCfgItem->Val.u.i16 : i16Def;
     365        rc = VINF_SUCCESS;
     366    }
    349367
    350368    return rc;
     
    381399    if (   !pCfgItem
    382400        || pCfgItem->Val.enmType == UTSGADGETCFGTYPE_INT32)
     401    {
    383402        *pi32 = pCfgItem ? pCfgItem->Val.u.i32 : i32Def;
     403        rc = VINF_SUCCESS;
     404    }
    384405
    385406    return rc;
     
    416437    if (   !pCfgItem
    417438        || pCfgItem->Val.enmType == UTSGADGETCFGTYPE_INT64)
     439    {
    418440        *pi64 = pCfgItem ? pCfgItem->Val.u.i64 : i64Def;
    419 
    420     return rc;
    421 }
    422 
     441        rc = VINF_SUCCESS;
     442    }
     443
     444    return rc;
     445}
     446
  • trunk/src/VBox/ValidationKit/utils/usb/UsbTestServiceGadgetClassTest.cpp

    r60394 r60493  
    184184    if (cbStr <= sizeof(aszPathFunc) - 1)
    185185    {
    186         cbStr = RTStrPrintf(&aszPathCfg[0], sizeof(aszPathCfg), "%s/configs/%s",
    187                             pClass->pszGadgetPath, pszCfg);
     186        cbStr = RTStrPrintf(&aszPathCfg[0], sizeof(aszPathCfg), "%s/configs/%s/%s",
     187                            pClass->pszGadgetPath, pszCfg, pszFunc);
    188188        if (cbStr <= sizeof(aszPathCfg) - 1)
    189189            rc = RTSymlinkCreate(&aszPathCfg[0], &aszPathFunc[0], RTSYMLINKTYPE_DIR, 0);
  • trunk/src/VBox/ValidationKit/utils/usb/UsbTestServiceGadgetHostUsbIp.cpp

    r60488 r60493  
    2929#include <iprt/process.h>
    3030#include <iprt/string.h>
     31#include <iprt/thread.h>
     32#include <iprt/time.h>
    3133#include <iprt/types.h>
    3234
     
    98100
    99101    rc = utsGadgetCfgQueryU16Def(paCfg, "UsbIp/Port", &uPort, UTS_GADGET_HOST_USBIP_PORT_DEF);
    100     if (RT_FAILURE(rc))
     102    if (RT_SUCCESS(rc))
    101103    {
    102104        /* Make sure the kernel drivers are loaded. */
     
    107109            if (RT_SUCCESS(rc))
    108110            {
    109                 char aszPort[10];
    110                 char aszPidFile[64];
    111                 const char *apszArgv[6];
    112 
    113                 RTStrPrintf(aszPort, RT_ELEMENTS(aszPort), "%u", uPort);
    114                 RTStrPrintf(aszPidFile, RT_ELEMENTS(aszPidFile), "/var/run/usbipd-%u.pid", uPort);
    115                 /* Start the USB/IP server process. */
    116                 apszArgv[0] = "usbipd";
    117                 apszArgv[1] = "--tcp-port";
    118                 apszArgv[2] = aszPort;
    119                 apszArgv[3] = "--pid";
    120                 apszArgv[4] = aszPidFile;
    121                 apszArgv[5] = NULL;
    122                 rc = RTProcCreate("usbipd", apszArgv, RTENV_DEFAULT, RTPROC_FLAGS_SEARCH_PATH, &pIf->hProcUsbIp);
     111                rc = utsGadgetHostUsbIpLoadModule("libcomposite");
    123112                if (RT_SUCCESS(rc))
    124113                {
    125                     /* We are done setting it up at the moment. */
     114                    char aszPort[10];
     115                    char aszPidFile[64];
     116                    const char *apszArgv[6];
     117
     118                    RTStrPrintf(aszPort, RT_ELEMENTS(aszPort), "%u", uPort);
     119                    RTStrPrintf(aszPidFile, RT_ELEMENTS(aszPidFile), "/var/run/usbipd-%u.pid", uPort);
     120                    /* Start the USB/IP server process. */
     121                    apszArgv[0] = "usbipd";
     122                    apszArgv[1] = "--tcp-port";
     123                    apszArgv[2] = aszPort;
     124                    apszArgv[3] = "--pid";
     125                    apszArgv[4] = aszPidFile;
     126                    apszArgv[5] = NULL;
     127                    rc = RTProcCreate("usbipd", apszArgv, RTENV_DEFAULT, RTPROC_FLAGS_SEARCH_PATH, &pIf->hProcUsbIp);
     128                    if (RT_SUCCESS(rc))
     129                    {
     130                        /* Wait for a bit to make sure the server started up successfully. */
     131                        uint64_t tsStart = RTTimeMilliTS();
     132                        do
     133                        {
     134                            RTPROCSTATUS ProcSts;
     135                            rc = RTProcWait(pIf->hProcUsbIp, RTPROCWAIT_FLAGS_NOBLOCK, &ProcSts);
     136                            if (rc != VERR_PROCESS_RUNNING)
     137                            {
     138                                rc = VERR_INVALID_HANDLE;
     139                                break;
     140                            }
     141                            RTThreadSleep(1);
     142                            rc = VINF_SUCCESS;
     143                        } while (RTTimeMilliTS() - tsStart < 2 * 1000); /* 2 seconds. */
     144                    }
    126145                }
    127146            }
     
    138157static DECLCALLBACK(void) utsGadgetHostUsbIpTerm(PUTSGADGETHOSTTYPEINT pIf)
    139158{
    140     /* Kill the process. */
     159    /* Kill the process and wait for it to terminate. */
    141160    RTProcTerminate(pIf->hProcUsbIp);
     161
     162    RTPROCSTATUS ProcSts;
     163    RTProcWait(pIf->hProcUsbIp, RTPROCWAIT_FLAGS_BLOCK, &ProcSts);
    142164}
    143165
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette