Changeset 13769 in vbox
- Timestamp:
- Nov 3, 2008 7:13:51 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 38746
- Location:
- trunk/src/VBox/HostDrivers/VBoxNetFlt
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.c
r13435 r13769 740 740 */ 741 741 cRefs = ASMAtomicIncU32(&pThis->cRefs); 742 Assert(cRefs > 0&& cRefs < UINT32_MAX / 2);742 Assert(cRefs > 1 && cRefs < UINT32_MAX / 2); 743 743 744 744 /* … … 748 748 { 749 749 cRefs = ASMAtomicIncU32(&pThis->cBusy); 750 Assert(cRefs > 0&& cRefs < UINT32_MAX / 2);750 Assert(cRefs > 1 && cRefs < UINT32_MAX / 2); 751 751 } 752 752 -
trunk/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
r13746 r13769 367 367 static VBOXNETFLTGLOBALS g_VBoxNetFltSolarisGlobals; 368 368 369 /** Mutex protecting dynamic binding of the filter. */370 RTSEMFASTMUTEX g_VBoxNetFltSolarisMtx = NIL_RTSEMFASTMUTEX;371 372 369 /** The list of all opened streams. */ 373 370 vboxnetflt_stream_t *g_VBoxNetFltSolarisStreams; … … 413 410 g_VBoxNetFltSolarisStreams = NULL; 414 411 g_VBoxNetFltSolarisInstance = NULL; 415 rc = RTSemFastMutexCreate(&g_VBoxNetFltSolarisMtx); 412 413 /* 414 * Initialize the globals and connect to the support driver. 415 * 416 * This will call back vboxNetFltOsOpenSupDrv (and maybe vboxNetFltOsCloseSupDrv) 417 * for establishing the connect to the support driver. 418 */ 419 memset(&g_VBoxNetFltSolarisGlobals, 0, sizeof(g_VBoxNetFltSolarisGlobals)); 420 rc = vboxNetFltInitGlobals(&g_VBoxNetFltSolarisGlobals); 416 421 if (RT_SUCCESS(rc)) 417 422 { 418 /* 419 * Initialize the globals and connect to the support driver. 420 * 421 * This will call back vboxNetFltOsOpenSupDrv (and maybe vboxNetFltOsCloseSupDrv) 422 * for establishing the connect to the support driver. 423 */ 424 memset(&g_VBoxNetFltSolarisGlobals, 0, sizeof(g_VBoxNetFltSolarisGlobals)); 425 rc = vboxNetFltInitGlobals(&g_VBoxNetFltSolarisGlobals); 426 if (RT_SUCCESS(rc)) 427 { 428 rc = mod_install(&g_VBoxNetFltSolarisModLinkage); 429 if (!rc) 430 return rc; 431 432 LogRel((DEVICE_NAME ":mod_install failed. rc=%d\n", rc)); 433 vboxNetFltTryDeleteGlobals(&g_VBoxNetFltSolarisGlobals); 434 } 435 else 436 LogRel((DEVICE_NAME ":failed to initialize globals.\n")); 437 438 RTSemFastMutexDestroy(g_VBoxNetFltSolarisMtx); 439 g_VBoxNetFltSolarisMtx = NIL_RTSEMFASTMUTEX; 423 rc = mod_install(&g_VBoxNetFltSolarisModLinkage); 424 if (!rc) 425 return rc; 426 427 LogRel((DEVICE_NAME ":mod_install failed. rc=%d\n", rc)); 428 vboxNetFltTryDeleteGlobals(&g_VBoxNetFltSolarisGlobals); 440 429 } 441 430 else 442 LogRel((DEVICE_NAME ":failed to create mutex.\n"));431 LogRel((DEVICE_NAME ":failed to initialize globals.\n")); 443 432 444 433 RTR0Term(); … … 465 454 LogRel((DEVICE_NAME ":_fini - busy!\n")); 466 455 return EBUSY; 467 }468 469 if (g_VBoxNetFltSolarisMtx != NIL_RTSEMFASTMUTEX)470 {471 RTSemFastMutexDestroy(g_VBoxNetFltSolarisMtx);472 g_VBoxNetFltSolarisMtx = NIL_RTSEMFASTMUTEX;473 456 } 474 457 … … 858 841 } 859 842 843 vboxNetFltRelease(pStream->pThis, false /* fBusy */); 860 844 RTMemFree(pStream); 861 845 pQueue->q_ptr = NULL; … … 906 890 RTSpinlockAcquire(pThis->hSpinlock, &Tmp); 907 891 const bool fActive = ASMAtomicUoReadBool(&pThis->fActive); 908 vboxNetFltRetain(pThis, true );892 vboxNetFltRetain(pThis, true /* fBusy */); 909 893 RTSpinlockRelease(pThis->hSpinlock, &Tmp); 910 894 … … 1074 1058 } 1075 1059 1076 vboxNetFltRelease(pThis, true );1060 vboxNetFltRelease(pThis, true /* fBusy */); 1077 1061 } 1078 1062 else … … 1717 1701 static void vboxNetFltSolarisCloseStream(PVBOXNETFLTINS pThis) 1718 1702 { 1703 LogFlow((DEVICE_NAME ":vboxNetFltSolarisCloseStream pThis=%p\n")); 1704 1705 vboxNetFltRetain(pThis, false /* fBusy */); 1706 1719 1707 ldi_close(pThis->u.s.hIface, FREAD | FWRITE, kcred); 1720 1708 } … … 1730 1718 static int vboxNetFltSolarisAttachIp4(PVBOXNETFLTINS pThis, bool fAttach) 1731 1719 { 1720 LogFlow((DEVICE_NAME ":vboxNetFltSolarisAttachIp4 pThis=%p fAttach=%d\n", pThis, fAttach)); 1721 1732 1722 /* 1733 1723 * Statuatory Warning: Hackish code ahead. … … 1777 1767 1778 1768 /* 1779 * Obtain the interface flags from IP .1769 * Obtain the interface flags from IPv4. 1780 1770 */ 1781 1771 rc = vboxNetFltSolarisGetIfFlags(Ip4DevHandle, &Ip4Interface); … … 1851 1841 * Inject/Eject from the host IP stack. 1852 1842 */ 1843 if (!fAttach) 1844 vboxNetFltRetain(pThis, false /* fBusy */); 1853 1845 rc = strioctl(pIp4VNode, fAttach ? _I_INSERT : _I_REMOVE, (intptr_t)&StrMod, 0, K_TO_K, 1854 1846 kcred, &ret); 1855 1847 if (!rc) 1856 1848 { 1849 if (!fAttach) 1850 vboxNetFltRetain(pThis, false /* fBusy */); 1851 1857 1852 /* 1858 1853 * Inject/Eject from the host ARP stack. … … 1902 1897 LogRel((DEVICE_NAME ":vboxNetFltSolarisAttachIp4: failed to %s the ARP stack. rc=%d\n", 1903 1898 fAttach ? "inject into" : "eject from", rc)); 1899 if (!fAttach) 1900 vboxNetFltRelease(pThis, false /* fBusy */); 1904 1901 } 1905 1902 … … 1913 1910 LogRel((DEVICE_NAME ":vboxNetFltSolarisAttachIp4: failed to %s the IP stack. rc=%d\n", 1914 1911 fAttach ? "inject into" : "eject from", rc)); 1912 if (!fAttach) 1913 vboxNetFltRelease(pThis, false /* fBusy */); 1915 1914 } 1916 1915 } … … 1962 1961 static int vboxNetFltSolarisAttachIp6(PVBOXNETFLTINS pThis, bool fAttach) 1963 1962 { 1963 LogFlow((DEVICE_NAME ":vboxNetFltSolarisAttachIp6 pThis=%p fAttach=%d\n", pThis, fAttach)); 1964 1964 1965 /* 1965 1966 * Statuatory Warning: Hackish code ahead. … … 2055 2056 g_VBoxNetFltSolarisStreamType = kIp6Stream; 2056 2057 2058 if (!fAttach) 2059 vboxNetFltRetain(pThis, false /* fBusy */); 2060 2057 2061 /* 2058 2062 * Inject/Eject from the host IPv6 stack. … … 2099 2103 LogRel((DEVICE_NAME ":vboxNetFltSolarisAttachIp6: failed to %s the IP stack. rc=%d\n", 2100 2104 fAttach ? "inject into" : "eject from", rc)); 2105 if (!fAttach) 2106 vboxNetFltRelease(pThis, false /* fBusy */); 2101 2107 } 2102 2108 } … … 2173 2179 static int vboxNetFltSolarisAttachToInterface(PVBOXNETFLTINS pThis) 2174 2180 { 2175 int rc = RTSemFastMutexRequest(g_VBoxNetFltSolarisMtx); 2176 AssertRC(rc); 2177 2178 rc = vboxNetFltSolarisOpenStream(pThis); 2181 int rc = vboxNetFltSolarisOpenStream(pThis); 2179 2182 if (RT_SUCCESS(rc)) 2180 2183 { … … 2193 2196 LogRel((DEVICE_NAME ":vboxNetFltSolarisAttachToInterface vboxNetFltSolarisOpenStream failed rc=%Vrc\n", rc)); 2194 2197 2195 RTSemFastMutexRelease(g_VBoxNetFltSolarisMtx);2196 2198 return rc; 2197 2199 } … … 2208 2210 static int vboxNetFltSolarisDetachFromInterface(PVBOXNETFLTINS pThis) 2209 2211 { 2210 int rc = RTSemFastMutexRequest(g_VBoxNetFltSolarisMtx); 2211 AssertRC(rc); 2212 LogFlow((DEVICE_NAME ":vboxNetFltSolarisDetachFromInterface pThis=%p\n", pThis)); 2212 2213 2213 2214 ASMAtomicWriteBool(&pThis->fDisconnectedFromHost, true); 2214 2215 vboxNetFltSolarisCloseStream(pThis); 2215 rc = vboxNetFltSolarisModSetup(pThis, false, kIp4Stream);2216 int rc = vboxNetFltSolarisModSetup(pThis, false, kIp4Stream); 2216 2217 if (pThis->u.s.pvIp6Stream) 2217 vboxNetFltSolarisModSetup(pThis, false, kIp6Stream); 2218 2219 RTSemFastMutexRelease(g_VBoxNetFltSolarisMtx); 2218 rc = vboxNetFltSolarisModSetup(pThis, false, kIp6Stream); 2219 2220 2220 return rc; 2221 2221 } … … 3077 3077 int vboxNetFltOsDisconnectIt(PVBOXNETFLTINS pThis) 3078 3078 { 3079 LogFlow((DEVICE_NAME ":vboxNetFltOsDisconnectIt pThis=%p\n", pThis)); 3080 3081 vboxNetFltSolarisDetachFromInterface(pThis); 3082 3083 if (pThis->u.s.hFastMtx != NIL_RTSEMFASTMUTEX) 3084 { 3085 RTSemFastMutexDestroy(pThis->u.s.hFastMtx); 3086 pThis->u.s.hFastMtx = NIL_RTSEMFASTMUTEX; 3087 } 3088 return VINF_SUCCESS; 3089 } 3090 3091 3092 int vboxNetFltOsConnectIt(PVBOXNETFLTINS pThis) 3093 { 3079 3094 /* Nothing to do here. */ 3080 3095 return VINF_SUCCESS; … … 3082 3097 3083 3098 3084 int vboxNetFltOsConnectIt(PVBOXNETFLTINS pThis) 3085 { 3099 void vboxNetFltOsDeleteInstance(PVBOXNETFLTINS pThis) 3100 { 3101 LogFlow((DEVICE_NAME ":vboxNetFltOsDeleteInstance pThis=%p\n", pThis)); 3086 3102 /* Nothing to do here. */ 3087 return VINF_SUCCESS;3088 }3089 3090 3091 void vboxNetFltOsDeleteInstance(PVBOXNETFLTINS pThis)3092 {3093 LogFlow((DEVICE_NAME ":vboxNetFltOsDeleteInstance pThis=%p\n"));3094 vboxNetFltSolarisDetachFromInterface(pThis);3095 3096 if (pThis->u.s.hFastMtx != NIL_RTSEMFASTMUTEX)3097 {3098 RTSemFastMutexDestroy(pThis->u.s.hFastMtx);3099 pThis->u.s.hFastMtx = NIL_RTSEMFASTMUTEX;3100 }3101 3103 } 3102 3104 … … 3284 3286 freemsg(pMsg); /* Should really never happen... */ 3285 3287 } 3286 else if (pEthHdr->EtherType == RT_H2BE_U16(RTNET_ETHERTYPE_IPV6))3287 {3288 /*3289 * Send messages up IPv6 stream.3290 */3291 LogFlow((DEVICE_NAME ":vboxNetFltPortOsXmit INTNETTRUNKDIR_HOST IPv6\n"));3292 3293 vboxnetflt_stream_t *pIp6Stream = ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pvIp6Stream);3294 if (pIp6Stream)3295 {3296 pMsg->b_rptr += sizeof(RTNETETHERHDR);3297 queue_t *pIp6ReadQueue = pIp6Stream->pReadQueue;3298 putnext(pIp6ReadQueue, pMsg);3299 }3300 else3301 freemsg(pMsg);3302 }3303 3288 else 3304 3289 { 3305 /* 3306 * Send messages up IPv4 stream. 3307 */ 3308 LogFlow((DEVICE_NAME ":vboxNetFltPortOsXmit INTNETTRUNKDIR_HOST IPv4\n")); 3309 3310 pMsg->b_rptr += sizeof(RTNETETHERHDR); 3311 queue_t *pIp4ReadQueue = pIp4Stream->pReadQueue; 3312 putnext(pIp4ReadQueue, pMsg); 3290 vboxnetflt_stream_t *pIp6Stream = ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pvIp6Stream); 3291 if ( pEthHdr->EtherType == RT_H2BE_U16(RTNET_ETHERTYPE_IPV6) 3292 && pIp6Stream) 3293 { 3294 /* 3295 * Send messages up IPv6 stream. 3296 */ 3297 LogFlow((DEVICE_NAME ":vboxNetFltPortOsXmit INTNETTRUNKDIR_HOST IPv6\n")); 3298 3299 pMsg->b_rptr += sizeof(RTNETETHERHDR); 3300 queue_t *pIp6ReadQueue = pIp6Stream->pReadQueue; 3301 putnext(pIp6ReadQueue, pMsg); 3302 } 3303 else 3304 { 3305 /* 3306 * Send messages up IPv4 stream. 3307 */ 3308 LogFlow((DEVICE_NAME ":vboxNetFltPortOsXmit INTNETTRUNKDIR_HOST IPv4\n")); 3309 3310 pMsg->b_rptr += sizeof(RTNETETHERHDR); 3311 queue_t *pIp4ReadQueue = pIp4Stream->pReadQueue; 3312 putnext(pIp4ReadQueue, pMsg); 3313 } 3313 3314 } 3314 3315 }
Note:
See TracChangeset
for help on using the changeset viewer.