Changeset 22790 in vbox for trunk/src/VBox/HostDrivers/VBoxNetFlt
- Timestamp:
- Sep 4, 2009 5:44:58 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 51983
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
r22769 r22790 385 385 VBOXNETFLTSTREAMTYPE volatile g_VBoxNetFltSolarisStreamType; 386 386 387 #ifdef VBOXNETFLT_SOLARIS_IPV6_POLLING 388 /** Globla IPv6 polling interval */ 389 static int g_VBoxNetFltSolarisPollInterval = 0; 390 #endif 391 387 392 388 393 /** … … 514 519 { 515 520 g_pVBoxNetFltSolarisDip = pDip; 521 522 /* 523 * Get the user prop. for polling interval. 524 */ 525 int Interval = ddi_getprop(DDI_DEV_T_ANY, pDip, DDI_PROP_DONTPASS, VBOXNETFLT_IP6POLLINTERVAL, -1 /* default */); 526 if (Interval == -1) 527 LogFlow((DEVICE_NAME ":vboxNetFltSolarisSetupIp6Polling: no poll interval property specified. Skipping Ipv6 polling.\n")); 528 529 if (Interval < 1 || Interval > 120) 530 { 531 LogRel((DEVICE_NAME ":vboxNetFltSolarisSetupIp6Polling: Invalid polling interval %d. Expected between 1 and 120 secs.\n", 532 Interval)); 533 Interval = -1; 534 } 535 536 g_VBoxNetFltSolarisPollInterval = Interval; 516 537 ddi_report_dev(pDip); 517 538 return DDI_SUCCESS; … … 2123 2144 else 2124 2145 LogRel((DEVICE_NAME ":vboxNetFltSolarisAttachIp4: failed to open UDP. rc=%d\n", rc)); 2146 2147 rc = VERR_INTNET_FLT_IF_FAILED; 2125 2148 } 2126 2149 else … … 2136 2159 ldi_close(Ip4DevHandle, FREAD | FWRITE, kcred); 2137 2160 2138 if (RT_SUCCESS(rc)) 2139 return rc; 2140 2141 return VERR_INTNET_FLT_IF_FAILED; 2161 return rc; 2142 2162 } 2143 2163 … … 2315 2335 else 2316 2336 LogRel((DEVICE_NAME ":vboxNetFltSolarisAttachIp6: failed to get Mux Ids. rc=%d\n", rc)); 2337 2317 2338 vboxNetFltSolarisCloseDev(pUdp6VNodeHeld, pUdp6User); 2318 2339 } 2319 2340 else 2320 2341 LogRel((DEVICE_NAME ":vboxNetFltSolarisAttachIp6: failed to open UDP. rc=%d\n", rc)); 2342 2343 rc = VERR_INTNET_FLT_IF_FAILED; 2321 2344 } 2322 2345 else … … 2328 2351 ldi_close(Ip6DevHandle, FREAD | FWRITE, kcred); 2329 2352 2330 if (RT_SUCCESS(rc)) 2331 return rc; 2332 2333 return VERR_INTNET_FLT_IF_FAILED; 2353 return rc; 2334 2354 } 2335 2355 … … 2347 2367 LogFlow((DEVICE_NAME ":vboxNetFltSolarispIp6Timer pTimer=%p pvData=%p\n", pTimer, pvData)); 2348 2368 2349 /** @todo this callback takes a good deal of time attaching to the Ipv6 stream, optimize it. */2350 2369 PVBOXNETFLTINS pThis = (PVBOXNETFLTINS)pvData; 2351 2370 if ( RT_LIKELY(pThis) … … 2353 2372 { 2354 2373 vboxnetflt_stream_t *pIp6Stream = ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pvIp6Stream); 2355 if (!pIp6Stream) 2356 vboxNetFltSolarisAttachIp6(pThis, true /* fAttach */); 2374 bool fIp6Attaching = ASMAtomicUoReadBool(&pThis->u.s.fAttaching); 2375 if ( !pIp6Stream 2376 && !fIp6Attaching) 2377 { 2378 int rc = RTSemFastMutexRequest(pThis->u.s.hPollMtx); 2379 if (RT_SUCCESS(rc)) 2380 { 2381 ASMAtomicUoWriteBool(&pThis->u.s.fAttaching, true); 2382 2383 vboxNetFltSolarisAttachIp6(pThis, true /* fAttach */); 2384 2385 ASMAtomicUoWriteBool(&pThis->u.s.fAttaching, false); 2386 RTSemFastMutexRelease(pThis->u.s.hPollMtx); 2387 } 2388 else 2389 LogRel((DEVICE_NAME ":vboxNetFltSolarispIp6Timer failed to obtain mutex. rc=%Rrc\n", rc)); 2390 } 2357 2391 } 2358 2392 … … 2379 2413 { 2380 2414 /* 2381 * Get the user prop. forpolling interval.2415 * Validate IPv6 polling interval. 2382 2416 */ 2383 int Interval = ddi_getprop(DDI_DEV_T_ANY, g_pVBoxNetFltSolarisDip, DDI_PROP_DONTPASS, VBOXNETFLT_IP6POLLINTERVAL, -1 /* default */); 2384 if (Interval == -1) 2385 { 2386 LogFlow((DEVICE_NAME ":vboxNetFltSolarisSetupIp6Polling: no poll interval property specified. Skipping Ipv6 polling.\n")); 2387 return VINF_SUCCESS; 2388 } 2389 2417 int Interval = g_VBoxNetFltSolarisPollInterval; 2390 2418 if (Interval < 1 || Interval > 120) 2391 2419 { 2392 2420 LogRel((DEVICE_NAME ":vboxNetFltSolarisSetupIp6Polling: Invalid polling interval %d. Expected between 1 and 120 secs.\n", 2393 Interval));2421 Interval)); 2394 2422 return VINF_SUCCESS; 2395 2423 } … … 2402 2430 if (RT_SUCCESS(rc)) 2403 2431 rc = RTTimerStart(pPromiscStream->pIp6Timer, 0 /* fire ASAP */); 2432 else 2433 LogRel((DEVICE_NAME ":vboxNetFltSolarisSetupIp6Polling: Failed to create timer. rc=%d\n", rc)); 2404 2434 } 2405 2435 else … … 3360 3390 pThis->u.s.hFastMtx = NIL_RTSEMFASTMUTEX; 3361 3391 } 3392 3393 #ifdef VBOXNETFLT_SOLARIS_IPV6_POLLING 3394 if (pThis->u.s.hPollMtx != NIL_RTSEMFASTMUTEX) 3395 { 3396 RTSemFastMutexDestroy(pThis->u.s.hPollMtx); 3397 pThis->u.s.hPollMtx = NIL_RTSEMFASTMUTEX; 3398 } 3399 #endif 3400 3362 3401 return VINF_SUCCESS; 3363 3402 } … … 3388 3427 if (RT_SUCCESS(rc)) 3389 3428 { 3390 rc = vboxNetFltSolarisAttachToInterface(pThis); 3429 #ifdef VBOXNETFLT_SOLARIS_IPV6_POLLING 3430 int rc = RTSemFastMutexCreate(&pThis->u.s.hPollMtx); 3391 3431 if (RT_SUCCESS(rc)) 3392 return rc; 3393 3394 LogRel((DEVICE_NAME ":vboxNetFltSolarisAttachToInterface failed. rc=%Rrc\n", rc)); 3432 { 3433 #endif 3434 rc = vboxNetFltSolarisAttachToInterface(pThis); 3435 if (RT_SUCCESS(rc)) 3436 return rc; 3437 3438 LogRel((DEVICE_NAME ":vboxNetFltSolarisAttachToInterface failed. rc=%Rrc\n", rc)); 3439 3440 #ifdef VBOXNETFLT_SOLARIS_IPV6_POLLING 3441 RTSemFastMutexDestroy(pThis->u.s.hPollMtx); 3442 pThis->u.s.hPollMtx = NIL_RTSEMFASTMUTEX; 3443 } 3444 else 3445 LogRel((DEVICE_NAME ":vboxNetFltOsInitInstance failed to create poll mutex. rc=%Rrc\n", rc)); 3446 #endif 3447 3395 3448 RTSemFastMutexDestroy(pThis->u.s.hFastMtx); 3396 3449 pThis->u.s.hFastMtx = NIL_RTSEMFASTMUTEX; … … 3414 3467 pThis->u.s.pvPromiscStream = NULL; 3415 3468 pThis->u.s.hFastMtx = NIL_RTSEMFASTMUTEX; 3469 #ifdef VBOXNETFLT_SOLARIS_IPV6_POLLING 3470 pThis->u.s.hPollMtx = NIL_RTSEMFASTMUTEX; 3471 #endif 3416 3472 bzero(&pThis->u.s.Mac, sizeof(pThis->u.s.Mac)); 3417 3473 return VINF_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.