Changeset 97071 in vbox for trunk/src/VBox/NetworkServices
- Timestamp:
- Oct 10, 2022 4:30:56 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 154021
- Location:
- trunk/src/VBox/NetworkServices
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/NetworkServices/Dhcpd/Makefile.kmk
r96407 r97071 65 65 VBoxNetDHCP_DEFS = KBUILD_TYPE=\"$(KBUILD_TYPE)\" 66 66 endif 67 #VBoxNetDHCP_DEFS = IPv6 67 VBoxNetDHCP_DEFS += \ 68 $(if $(VBOX_WITH_INTNET_SERVICE_IN_R3),VBOX_WITH_INTNET_SERVICE_IN_R3,) 69 70 #VBoxNetDHCP_DEFS += IPv6 68 71 #VBoxNetDHCP_DEFS.linux = WITH_VALGRIND 69 72 ifneq ($(KBUILD_TARGET),win) … … 75 78 endif 76 79 endif 80 VBoxNetDHCP_INCS += \ 81 ../NetLib 77 82 VBoxNetDHCP_SOURCES = \ 78 83 ClientId.cpp \ … … 85 90 Timestamp.cpp \ 86 91 VBoxNetDhcpd.cpp \ 92 ../NetLib/IntNetIfCtx.cpp \ 87 93 ../../Main/glue/VBoxLogRelCreate.cpp \ 88 94 ../../Main/glue/GetVBoxUserHomeDirectory.cpp \ -
trunk/src/VBox/NetworkServices/Dhcpd/VBoxNetDhcpd.cpp
r96407 r97071 88 88 #endif 89 89 90 #include "IntNetIf.h" 91 90 92 struct delete_pbuf 91 93 { … … 97 99 98 100 99 #define CALL_VMMR0(op, req) \100 (SUPR3CallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, (op), 0, &(req).Hdr))101 102 103 101 class VBoxNetDhcpd 104 102 { … … 109 107 110 108 /* intnet plumbing */ 111 PSUPDRVSESSION m_pSession; 112 INTNETIFHANDLE m_hIf; 113 PINTNETBUF m_pIfBuf; 109 INTNETIFCTX m_hIf; 110 PINTNETBUF m_pIfBuf; 114 111 115 112 /* lwip stack connected to the intnet */ … … 178 175 VBoxNetDhcpd::VBoxNetDhcpd() 179 176 : m_pStderrReleaseLogger(NULL), 180 m_pSession(NIL_RTR0PTR),181 177 m_hIf(INTNET_HANDLE_INVALID), 182 178 m_pIfBuf(NULL), … … 185 181 m_Dhcp4Pcb(NULL) 186 182 { 187 int rc;188 189 183 logInitStderr(); 190 191 rc = r3Init();192 if (RT_FAILURE(rc))193 return;194 195 vmmInit();196 184 } 197 185 … … 200 188 { 201 189 ifClose(); 202 r3Fini();203 190 } 204 191 … … 241 228 242 229 243 int VBoxNetDhcpd::r3Init()244 {245 AssertReturn(m_pSession == NIL_RTR0PTR, VERR_GENERAL_FAILURE);246 247 int rc = SUPR3Init(&m_pSession);248 return rc;249 }250 251 252 void VBoxNetDhcpd::r3Fini()253 {254 if (m_pSession == NIL_RTR0PTR)255 return;256 257 SUPR3Term();258 m_pSession = NIL_RTR0PTR;259 }260 261 262 int VBoxNetDhcpd::vmmInit()263 {264 char szPathVMMR0[RTPATH_MAX];265 int rc = RTPathExecDir(szPathVMMR0, sizeof(szPathVMMR0));266 if (RT_SUCCESS(rc))267 rc = RTPathAppend(szPathVMMR0, sizeof(szPathVMMR0), "VMMR0.r0");268 if (RT_SUCCESS(rc))269 rc = SUPR3LoadVMM(szPathVMMR0, NULL /*pErrInfo*/);270 return rc;271 }272 273 274 230 int VBoxNetDhcpd::ifInit(const RTCString &strNetwork, 275 231 const RTCString &strTrunk, … … 298 254 INTNETTRUNKTYPE enmTrunkType) 299 255 { 300 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE); 301 AssertReturn(m_hIf == INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 302 303 INTNETOPENREQ OpenReq; 304 RT_ZERO(OpenReq); 305 306 OpenReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 307 OpenReq.Hdr.cbReq = sizeof(OpenReq); 308 OpenReq.pSession = m_pSession; 309 310 int rc = RTStrCopy(OpenReq.szNetwork, sizeof(OpenReq.szNetwork), strNetwork.c_str()); 311 AssertRCReturn(rc, rc); 312 313 rc = RTStrCopy(OpenReq.szTrunk, sizeof(OpenReq.szTrunk), strTrunk.c_str()); 314 AssertRCReturn(rc, rc); 315 316 if (enmTrunkType != kIntNetTrunkType_Invalid) 317 OpenReq.enmTrunkType = enmTrunkType; 318 else 319 OpenReq.enmTrunkType = kIntNetTrunkType_WhateverNone; 320 321 OpenReq.fFlags = 0; 322 OpenReq.cbSend = _128K; 323 OpenReq.cbRecv = _256K; 324 325 OpenReq.hIf = INTNET_HANDLE_INVALID; 326 327 rc = CALL_VMMR0(VMMR0_DO_INTNET_OPEN, OpenReq); 328 if (RT_FAILURE(rc)) 329 return rc; 330 331 m_hIf = OpenReq.hIf; 332 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 333 334 return VINF_SUCCESS; 256 AssertReturn(m_hIf == NULL, VERR_GENERAL_FAILURE); 257 258 if (enmTrunkType == kIntNetTrunkType_Invalid) 259 enmTrunkType = kIntNetTrunkType_WhateverNone; 260 261 return IntNetR3IfCtxCreate(&m_hIf, strNetwork.c_str(), enmTrunkType, 262 strTrunk.c_str(), _128K /*cbSend*/, _256K /*cbRecv*/, 263 0 /*fFlags*/); 335 264 } 336 265 … … 338 267 int VBoxNetDhcpd::ifGetBuf() 339 268 { 340 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE); 341 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 269 AssertReturn(m_hIf != NULL, VERR_GENERAL_FAILURE); 342 270 AssertReturn(m_pIfBuf == NULL, VERR_GENERAL_FAILURE); 343 271 344 INTNETIFGETBUFFERPTRSREQ GetBufferPtrsReq; 345 int rc; 346 347 GetBufferPtrsReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 348 GetBufferPtrsReq.Hdr.cbReq = sizeof(GetBufferPtrsReq); 349 GetBufferPtrsReq.pSession = m_pSession; 350 GetBufferPtrsReq.hIf = m_hIf; 351 352 GetBufferPtrsReq.pRing0Buf = NIL_RTR0PTR; 353 GetBufferPtrsReq.pRing3Buf = NULL; 354 355 rc = CALL_VMMR0(VMMR0_DO_INTNET_IF_GET_BUFFER_PTRS, GetBufferPtrsReq); 356 if (RT_FAILURE(rc)) 357 return rc; 358 359 m_pIfBuf = GetBufferPtrsReq.pRing3Buf; 272 return IntNetR3IfCtxQueryBufferPtr(m_hIf, &m_pIfBuf); 273 } 274 275 276 int VBoxNetDhcpd::ifActivate() 277 { 278 AssertReturn(m_hIf != NULL, VERR_GENERAL_FAILURE); 360 279 AssertReturn(m_pIfBuf != NULL, VERR_GENERAL_FAILURE); 361 280 362 return VINF_SUCCESS; 363 } 364 365 366 int VBoxNetDhcpd::ifActivate() 367 { 368 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE); 369 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 370 AssertReturn(m_pIfBuf != NULL, VERR_GENERAL_FAILURE); 371 372 INTNETIFSETACTIVEREQ ActiveReq; 373 int rc; 374 375 ActiveReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 376 ActiveReq.Hdr.cbReq = sizeof(ActiveReq); 377 ActiveReq.pSession = m_pSession; 378 ActiveReq.hIf = m_hIf; 379 380 ActiveReq.fActive = 1; 381 382 rc = CALL_VMMR0(VMMR0_DO_INTNET_IF_SET_ACTIVE, ActiveReq); 383 return rc; 281 return IntNetR3IfCtxSetActive(m_hIf, true /*fActive*/); 384 282 } 385 283 … … 398 296 * Wait for input: 399 297 */ 400 INTNETIFWAITREQ WaitReq; 401 WaitReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 402 WaitReq.Hdr.cbReq = sizeof(WaitReq); 403 WaitReq.pSession = m_pSession; 404 WaitReq.hIf = m_hIf; 405 WaitReq.cMillies = RT_INDEFINITE_WAIT; 406 int rc = CALL_VMMR0(VMMR0_DO_INTNET_IF_WAIT, WaitReq); 407 298 int rc = IntNetR3IfWait(m_hIf, RT_INDEFINITE_WAIT); 408 299 /* 409 300 * Process any pending input before we wait again: … … 424 315 int VBoxNetDhcpd::ifProcessInput() 425 316 { 426 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE); 427 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 317 AssertReturn(m_hIf != NULL, VERR_GENERAL_FAILURE); 428 318 AssertReturn(m_pIfBuf != NULL, VERR_GENERAL_FAILURE); 429 319 … … 544 434 int VBoxNetDhcpd::ifFlush() 545 435 { 546 INTNETIFSENDREQ SendReq; 547 548 SendReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 549 SendReq.Hdr.cbReq = sizeof(SendReq); 550 SendReq.pSession = m_pSession; 551 552 SendReq.hIf = m_hIf; 553 554 return CALL_VMMR0(VMMR0_DO_INTNET_IF_SEND, SendReq); 436 return IntNetR3IfSend(m_hIf); 555 437 } 556 438 … … 558 440 int VBoxNetDhcpd::ifClose() 559 441 { 560 if (m_hIf == INTNET_HANDLE_INVALID)442 if (m_hIf == NULL) 561 443 return VINF_SUCCESS; 562 444 563 INTNETIFCLOSEREQ CloseReq; 564 565 CloseReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 566 CloseReq.Hdr.cbReq = sizeof(CloseReq); 567 CloseReq.pSession = m_pSession; 568 569 CloseReq.hIf = m_hIf; 570 571 m_hIf = INTNET_HANDLE_INVALID; 572 m_pIfBuf = NULL; 573 574 CALL_VMMR0(VMMR0_DO_INTNET_IF_CLOSE, CloseReq); 575 return VINF_SUCCESS; 445 int rc = IntNetR3IfCtxDestroy(m_hIf); 446 m_hIf = NULL; 447 return rc; 576 448 } 577 449 -
trunk/src/VBox/NetworkServices/IntNetSwitch/main.cpp
r97058 r97071 456 456 { 457 457 /* Send an empty message. */ 458 xpc_object_t hObjPoke = xpc_dictionary_create _empty();458 xpc_object_t hObjPoke = xpc_dictionary_create(NULL, NULL, 0); 459 459 xpc_connection_send_message(pSession->hXpcCon, hObjPoke); 460 460 } -
trunk/src/VBox/NetworkServices/NAT/Makefile.kmk
r96407 r97071 68 68 VBoxNetNAT_TEMPLATE := $(if-expr defined(VBOX_WITH_HARDENING),VBOXMAINDLL,VBOXMAINCLIENTEXE) 69 69 VBoxNetNAT_NAME := VBoxNetNAT 70 VBoxNetNAT_DEFS = IPv6 70 VBoxNetNAT_DEFS = \ 71 IPv6 \ 72 $(if $(VBOX_WITH_INTNET_SERVICE_IN_R3),VBOX_WITH_INTNET_SERVICE_IN_R3,) 71 73 # VBoxNetNAT_DEFS.linux = WITH_VALGRIND # instrument lwip memp.c 72 74 VBoxNetNAT_DEFS.win = VBOX_COM_OUTOFPROC_MODULE _WIN32_WINNT=0x501 # Windows XP … … 104 106 VBoxNetLwipNAT.cpp \ 105 107 ../NetLib/IntNetIf.cpp \ 108 ../NetLib/IntNetIfCtx.cpp \ 106 109 ../NetLib/VBoxNetPortForwardString.cpp \ 107 110 $(addprefix ../../Devices/Network/lwip-new/,$(LWIP_SOURCES)) \ -
trunk/src/VBox/NetworkServices/NetLib/IntNetIf.cpp
r96407 r97071 33 33 #include <VBox/vmm/pdmnetinline.h> 34 34 35 #define CALL_VMMR0(op, req) \36 (SUPR3CallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, (op), 0, &(req).Hdr))37 38 39 40 35 IntNetIf::IntNetIf() 41 : m_pSession(NIL_RTR0PTR), 42 m_hIf(INTNET_HANDLE_INVALID), 36 : m_hIf(NULL), 43 37 m_pIfBuf(NULL), 44 38 m_pfnInput(NULL), … … 57 51 58 52 59 60 /*61 * SUPDrv and VMM initialization and finalization.62 */63 64 int65 IntNetIf::r3Init()66 {67 AssertReturn(m_pSession == NIL_RTR0PTR, VERR_GENERAL_FAILURE);68 69 int rc = SUPR3Init(&m_pSession);70 return rc;71 }72 73 74 void75 IntNetIf::r3Fini()76 {77 if (m_pSession == NIL_RTR0PTR)78 return;79 80 SUPR3Term();81 m_pSession = NIL_RTR0PTR;82 }83 84 85 int86 IntNetIf::vmmInit()87 {88 char szPathVMMR0[RTPATH_MAX];89 int rc;90 91 rc = RTPathExecDir(szPathVMMR0, sizeof(szPathVMMR0));92 if (RT_FAILURE(rc))93 return rc;94 95 rc = RTPathAppend(szPathVMMR0, sizeof(szPathVMMR0), "VMMR0.r0");96 if (RT_FAILURE(rc))97 return rc;98 99 rc = SUPR3LoadVMM(szPathVMMR0, /* :pErrInfo */ NULL);100 return rc;101 }102 103 104 105 53 /* 106 54 * Wrappers for VMM ioctl requests and low-level intnet operations. … … 121 69 const RTCString &strTrunk) 122 70 { 123 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE); 124 AssertReturn(m_hIf == INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 125 126 INTNETOPENREQ OpenReq; 127 RT_ZERO(OpenReq); 128 129 OpenReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 130 OpenReq.Hdr.cbReq = sizeof(OpenReq); 131 OpenReq.pSession = m_pSession; 132 133 int rc = RTStrCopy(OpenReq.szNetwork, sizeof(OpenReq.szNetwork), strNetwork.c_str()); 134 AssertRCReturn(rc, rc); 135 136 rc = RTStrCopy(OpenReq.szTrunk, sizeof(OpenReq.szTrunk), strTrunk.c_str()); 137 AssertRCReturn(rc, rc); 138 139 if (enmTrunkType != kIntNetTrunkType_Invalid) 140 OpenReq.enmTrunkType = enmTrunkType; 141 else 142 OpenReq.enmTrunkType = kIntNetTrunkType_WhateverNone; 143 144 OpenReq.fFlags = 0; 145 OpenReq.cbSend = _128K; 146 OpenReq.cbRecv = _256K; 147 148 OpenReq.hIf = INTNET_HANDLE_INVALID; 149 150 rc = CALL_VMMR0(VMMR0_DO_INTNET_OPEN, OpenReq); 151 if (RT_FAILURE(rc)) 152 return rc; 153 154 m_hIf = OpenReq.hIf; 155 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 156 157 return VINF_SUCCESS; 71 AssertReturn(m_hIf == NULL, VERR_GENERAL_FAILURE); 72 73 if (enmTrunkType == kIntNetTrunkType_Invalid) 74 enmTrunkType = kIntNetTrunkType_WhateverNone; 75 76 return IntNetR3IfCtxCreate(&m_hIf, strNetwork.c_str(), enmTrunkType, 77 strTrunk.c_str(), _128K /*cbSend*/, _256K /*cbRecv*/, 78 0 /*fFlags*/); 158 79 } 159 80 … … 165 86 IntNetIf::ifSetPromiscuous(bool fPromiscuous) 166 87 { 167 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE); 168 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 169 170 INTNETIFSETPROMISCUOUSMODEREQ SetPromiscuousModeReq; 171 int rc; 172 173 SetPromiscuousModeReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 174 SetPromiscuousModeReq.Hdr.cbReq = sizeof(SetPromiscuousModeReq); 175 SetPromiscuousModeReq.pSession = m_pSession; 176 SetPromiscuousModeReq.hIf = m_hIf; 177 178 SetPromiscuousModeReq.fPromiscuous = fPromiscuous; 179 180 rc = CALL_VMMR0(VMMR0_DO_INTNET_IF_SET_PROMISCUOUS_MODE, SetPromiscuousModeReq); 181 if (RT_FAILURE(rc)) 182 return rc; 183 184 return VINF_SUCCESS; 88 AssertReturn(m_hIf != NULL, VERR_GENERAL_FAILURE); 89 90 return IntNetR3IfCtxSetPromiscuous(m_hIf, fPromiscuous); 185 91 } 186 92 … … 194 100 IntNetIf::ifGetBuf() 195 101 { 196 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE); 197 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 102 AssertReturn(m_hIf != NULL, VERR_GENERAL_FAILURE); 198 103 AssertReturn(m_pIfBuf == NULL, VERR_GENERAL_FAILURE); 199 104 200 INTNETIFGETBUFFERPTRSREQ GetBufferPtrsReq; 201 int rc; 202 203 GetBufferPtrsReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 204 GetBufferPtrsReq.Hdr.cbReq = sizeof(GetBufferPtrsReq); 205 GetBufferPtrsReq.pSession = m_pSession; 206 GetBufferPtrsReq.hIf = m_hIf; 207 208 GetBufferPtrsReq.pRing0Buf = NIL_RTR0PTR; 209 GetBufferPtrsReq.pRing3Buf = NULL; 210 211 rc = CALL_VMMR0(VMMR0_DO_INTNET_IF_GET_BUFFER_PTRS, GetBufferPtrsReq); 212 if (RT_FAILURE(rc)) 213 return rc; 214 215 m_pIfBuf = GetBufferPtrsReq.pRing3Buf; 216 AssertReturn(m_pIfBuf != NULL, VERR_GENERAL_FAILURE); 217 218 return VINF_SUCCESS; 105 return IntNetR3IfCtxQueryBufferPtr(m_hIf, &m_pIfBuf); 219 106 } 220 107 … … 228 115 IntNetIf::ifActivate() 229 116 { 230 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE); 231 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 117 AssertReturn(m_hIf != NULL, VERR_GENERAL_FAILURE); 232 118 AssertReturn(m_pIfBuf != NULL, VERR_GENERAL_FAILURE); 233 119 234 INTNETIFSETACTIVEREQ ActiveReq; 235 int rc; 236 237 ActiveReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 238 ActiveReq.Hdr.cbReq = sizeof(ActiveReq); 239 ActiveReq.pSession = m_pSession; 240 ActiveReq.hIf = m_hIf; 241 242 ActiveReq.fActive = 1; 243 244 rc = CALL_VMMR0(VMMR0_DO_INTNET_IF_SET_ACTIVE, ActiveReq); 245 return rc; 120 return IntNetR3IfCtxSetActive(m_hIf, true /*fActive*/); 246 121 } 247 122 … … 257 132 IntNetIf::ifWait(uint32_t cMillies) 258 133 { 259 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE); 260 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 261 262 INTNETIFWAITREQ WaitReq; 263 int rc; 264 265 WaitReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 266 WaitReq.Hdr.cbReq = sizeof(WaitReq); 267 WaitReq.pSession = m_pSession; 268 WaitReq.hIf = m_hIf; 269 270 WaitReq.cMillies = cMillies; 271 272 rc = CALL_VMMR0(VMMR0_DO_INTNET_IF_WAIT, WaitReq); 273 return rc; 134 AssertReturn(m_hIf != NULL, VERR_GENERAL_FAILURE); 135 136 return IntNetR3IfWait(m_hIf, cMillies); 274 137 } 275 138 … … 281 144 IntNetIf::ifAbort() 282 145 { 283 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE); 284 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 285 286 INTNETIFABORTWAITREQ AbortReq; 287 int rc; 288 289 AbortReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 290 AbortReq.Hdr.cbReq = sizeof(AbortReq); 291 AbortReq.pSession = m_pSession; 292 AbortReq.hIf = m_hIf; 293 294 AbortReq.fNoMoreWaits = true; 295 296 rc = CALL_VMMR0(VMMR0_DO_INTNET_IF_ABORT_WAIT, AbortReq); 297 return rc; 146 AssertReturn(m_hIf != NULL, VERR_GENERAL_FAILURE); 147 148 return IntNetR3IfWaitAbort(m_hIf); 298 149 } 299 150 … … 307 158 IntNetIf::ifProcessInput() 308 159 { 309 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE);310 160 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 311 161 AssertReturn(m_pIfBuf != NULL, VERR_GENERAL_FAILURE); … … 374 224 IntNetIf::ifFlush() 375 225 { 376 AssertReturn(m_pSession != NIL_RTR0PTR, VERR_GENERAL_FAILURE); 377 AssertReturn(m_hIf != INTNET_HANDLE_INVALID, VERR_GENERAL_FAILURE); 378 379 INTNETIFSENDREQ SendReq; 380 int rc; 381 382 SendReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 383 SendReq.Hdr.cbReq = sizeof(SendReq); 384 SendReq.pSession = m_pSession; 385 SendReq.hIf = m_hIf; 386 387 rc = CALL_VMMR0(VMMR0_DO_INTNET_IF_SEND, SendReq); 388 return rc; 226 AssertReturn(m_hIf != NULL, VERR_GENERAL_FAILURE); 227 228 return IntNetR3IfSend(m_hIf); 389 229 } 390 230 … … 397 237 IntNetIf::ifClose() 398 238 { 399 if (m_hIf == INTNET_HANDLE_INVALID)239 if (m_hIf == NULL) 400 240 return VINF_SUCCESS; 401 241 402 INTNETIFCLOSEREQ CloseReq; 403 404 CloseReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 405 CloseReq.Hdr.cbReq = sizeof(CloseReq); 406 CloseReq.pSession = m_pSession; 407 CloseReq.hIf = m_hIf; 408 409 m_hIf = INTNET_HANDLE_INVALID; 410 m_pIfBuf = NULL; 411 412 CALL_VMMR0(VMMR0_DO_INTNET_IF_CLOSE, CloseReq); 413 return VINF_SUCCESS; 242 int rc = IntNetR3IfCtxDestroy(m_hIf); 243 m_hIf = NULL; 244 return rc; 414 245 } 415 246 … … 434 265 const RTCString &strTrunk) 435 266 { 436 int rc; 437 438 rc = r3Init(); 439 if (RT_FAILURE(rc)) 440 return rc; 441 442 rc = vmmInit(); 443 if (RT_FAILURE(rc)) 444 return rc; 445 446 rc = ifOpen(strNetwork, enmTrunkType, strTrunk); 267 int rc = ifOpen(strNetwork, enmTrunkType, strTrunk); 447 268 if (RT_FAILURE(rc)) 448 269 return rc; … … 464 285 { 465 286 ifClose(); 466 r3Fini();467 287 } 468 288 -
trunk/src/VBox/NetworkServices/NetLib/IntNetIf.h
r96407 r97071 40 40 #include <VBox/vmm/vmm.h> 41 41 #include <VBox/intnet.h> 42 43 44 45 /** 46 * Low-level internal network access helpers to hide away the different variants (R0 SUP or R3 XPC on macOS). 47 */ 48 /** Internal networking interface context handle. */ 49 typedef struct INTNETIFCTXINT *INTNETIFCTX; 50 /** Pointer to an internal networking interface context handle. */ 51 typedef INTNETIFCTX *PINTNETIFCTX; 52 53 54 DECLHIDDEN(int) IntNetR3IfCtxCreate(PINTNETIFCTX phIfCtx, const char *pszNetwork, INTNETTRUNKTYPE enmTrunkType, 55 const char *pszTrunk, size_t cbSend, size_t cbRecv, uint32_t fFlags); 56 DECLHIDDEN(int) IntNetR3IfCtxDestroy(INTNETIFCTX hIfCtx); 57 DECLHIDDEN(int) IntNetR3IfCtxQueryBufferPtr(INTNETIFCTX hIfCtx, PINTNETBUF *ppIfBuf); 58 DECLHIDDEN(int) IntNetR3IfCtxSetActive(INTNETIFCTX hIfCtx, bool fActive); 59 DECLHIDDEN(int) IntNetR3IfCtxSetPromiscuous(INTNETIFCTX hIfCtx, bool fPromiscuous); 60 DECLHIDDEN(int) IntNetR3IfSend(INTNETIFCTX hIfCtx); 61 DECLHIDDEN(int) IntNetR3IfWait(INTNETIFCTX hIfCtx, uint32_t cMillies); 62 DECLHIDDEN(int) IntNetR3IfWaitAbort(INTNETIFCTX hIfCtx); 42 63 43 64 … … 87 108 88 109 private: 89 PSUPDRVSESSION m_pSession; 90 INTNETIFHANDLE m_hIf; 91 PINTNETBUF m_pIfBuf; 110 INTNETIFCTX m_hIf; 111 PINTNETBUF m_pIfBuf; 92 112 93 113 PFNINPUT m_pfnInput; … … 120 140 121 141 private: 122 int r3Init();123 void r3Fini();124 125 int vmmInit();126 127 142 int ifOpen(const RTCString &strNetwork, 128 143 INTNETTRUNKTYPE enmTrunkType,
Note:
See TracChangeset
for help on using the changeset viewer.