VirtualBox

Changeset 39286 in vbox


Ignore:
Timestamp:
Nov 14, 2011 6:45:27 AM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
74836
Message:

NAT: socket status print.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/slirp/debug.c

    r39285 r39286  
    5454    STRINGIFY(TCPS_FIN_WAIT_2),
    5555    STRINGIFY(TCPS_TIME_WAIT)
     56};
     57
     58typedef struct DEBUGSTRSOCKETSTATE
     59{
     60    uint32_t u32SocketState;
     61    const char *pcszSocketStateName;
     62} DEBUGSTRSOCKETSTATE;
     63
     64#define DEBUGSTRSOCKETSTATE_HELPER(x) {(x), #x}
     65
     66static DEBUGSTRSOCKETSTATE g_apszSocketStates[8] =
     67{
     68    DEBUGSTRSOCKETSTATE_HELPER(SS_NOFDREF),
     69    DEBUGSTRSOCKETSTATE_HELPER(SS_ISFCONNECTING),
     70    DEBUGSTRSOCKETSTATE_HELPER(SS_ISFCONNECTED),
     71    DEBUGSTRSOCKETSTATE_HELPER(SS_FCANTRCVMORE),
     72    DEBUGSTRSOCKETSTATE_HELPER(SS_FCANTSENDMORE),
     73    DEBUGSTRSOCKETSTATE_HELPER(SS_FWDRAIN),
     74    DEBUGSTRSOCKETSTATE_HELPER(SS_FACCEPTCONN),
     75    DEBUGSTRSOCKETSTATE_HELPER(SS_FACCEPTONCE),
    5676};
    5777
     
    248268
    249269static DECLCALLBACK(size_t)
    250 print_socket(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
     270printSocket(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
    251271             const char *pszType, void const *pvValue,
    252272             int cchWidth, int cchPrecision, unsigned fFlags,
     
    280300    in_addr = (struct sockaddr_in *)&addr;
    281301    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "socket %d:(proto:%u) "
    282             "state=%04x "
     302            "state=%R[natsockstate] "
    283303            "f_(addr:port)=%RTnaipv4:%d "
    284304            "l_(addr:port)=%RTnaipv4:%d "
     
    291311            in_addr->sin_addr.s_addr,
    292312            RT_N2H_U16(in_addr->sin_port));
     313}
     314
     315static DECLCALLBACK(size_t)
     316printNATSocketState(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
     317             const char *pszType, void const *pvValue,
     318             int cchWidth, int cchPrecision, unsigned fFlags,
     319             void *pvUser)
     320{
     321    uint32_t u32SocketState = (uint32_t)(uintptr_t)pvValue;
     322    int idxNATState = 0;
     323    NOREF(cchWidth);
     324    NOREF(cchPrecision);
     325    NOREF(fFlags);
     326    NOREF(pvUser);
     327    AssertReturn(strcmp(pszType, "natsockstate") == 0, 0);
     328
     329    for (idxNATState = 0; idxNATState < RT_ELEMENTS(g_apszSocketStates); ++idxNATState)
     330    {
     331        if (u32SocketState == g_apszSocketStates[idxNATState].u32SocketState)
     332            return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, g_apszSocketStates[idxNATState].pcszSocketStateName);
     333    }
     334    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "[unknown state %RX32]", u32SocketState);
    293335}
    294336
     
    502544    {
    503545
    504         rc = RTStrFormatTypeRegister("natsock", print_socket, NULL);            AssertRC(rc);
     546        rc = RTStrFormatTypeRegister("natsock", printSocket, NULL);            AssertRC(rc);
     547        rc = RTStrFormatTypeRegister("natsockstate", printNATSocketState, NULL);            AssertRC(rc);
    505548        rc = RTStrFormatTypeRegister("natwinnetevents",
    506549                                     print_networkevents, NULL);                AssertRC(rc);
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