Changeset 10978 in vbox for trunk/src/VBox/Devices/Network
- Timestamp:
- Jul 30, 2008 12:34:20 PM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 33851
- Location:
- trunk/src/VBox/Devices/Network
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/SrvIntNetR0.cpp
r10965 r10978 1313 1313 bool fIt = false; 1314 1314 if ( ( !pIf->fMacSet 1315 || (fIt = !memcmp(&pIf->Mac, &pEthHdr-> MacDst, sizeof(pIf->Mac))) )1315 || (fIt = !memcmp(&pIf->Mac, &pEthHdr->DstMac, sizeof(pIf->Mac))) ) 1316 1316 || ( pIf->fPromiscuous 1317 1317 && !(pNetwork->fFlags & (INTNET_OPEN_FLAGS_IGNORE_PROMISC | INTNET_OPEN_FLAGS_QUIETLY_IGNORE_PROMISC)) 1318 1318 && pIf != pIfSender /* promiscuous mode: omit the sender */)) 1319 1319 { 1320 Log2(("Dst=%.6Rhxs => %.6Rhxs\n", &pEthHdr-> MacDst, &pIf->Mac));1320 Log2(("Dst=%.6Rhxs => %.6Rhxs\n", &pEthHdr->DstMac, &pIf->Mac)); 1321 1321 fExactIntNetRecipient |= fIt; 1322 1322 intnetR0IfSend(pIf, pIfSender, pSG); … … 1346 1346 && !fExactIntNetRecipient /* if you have duplicate mac addresses, you're screwed. */ ) 1347 1347 { 1348 if (pTrunkIf->pIfPort->pfnIsHostMac(pTrunkIf->pIfPort, &pEthHdr-> MacDst))1348 if (pTrunkIf->pIfPort->pfnIsHostMac(pTrunkIf->pIfPort, &pEthHdr->DstMac)) 1349 1349 fDst |= INTNETTRUNKDIR_HOST; 1350 1350 else … … 1359 1359 if ( !fExactIntNetRecipient 1360 1360 && !fDst 1361 && ( (pEthHdr-> MacDst.au8[0] == 0x08 && pEthHdr->MacDst.au8[1] == 0x00 && pEthHdr->MacDst.au8[2] == 0x27)1362 || (pEthHdr-> MacSrc.au8[0] == 0x08 && pEthHdr->MacSrc.au8[1] == 0x00 && pEthHdr->MacSrc.au8[2] == 0x27)))1363 Log2(("Dst=%.6Rhxs ??\n", &pEthHdr-> MacDst));1361 && ( (pEthHdr->DstMac.au8[0] == 0x08 && pEthHdr->DstMac.au8[1] == 0x00 && pEthHdr->DstMac.au8[2] == 0x27) 1362 || (pEthHdr->SrcMac.au8[0] == 0x08 && pEthHdr->SrcMac.au8[1] == 0x00 && pEthHdr->SrcMac.au8[2] == 0x27))) 1363 Log2(("Dst=%.6Rhxs ??\n", &pEthHdr->DstMac)); 1364 1364 1365 1365 return fExactIntNetRecipient; … … 1427 1427 AssertReturn(!cbLeft, false); 1428 1428 } 1429 if ( (EthHdr. MacDst.au8[0] == 0x08 && EthHdr.MacDst.au8[1] == 0x00 && EthHdr.MacDst.au8[2] == 0x27)1430 || (EthHdr. MacSrc.au8[0] == 0x08 && EthHdr.MacSrc.au8[1] == 0x00 && EthHdr.MacSrc.au8[2] == 0x27)1431 || (EthHdr. MacDst.au8[0] == 0x00 && EthHdr.MacDst.au8[1] == 0x16 && EthHdr.MacDst.au8[2] == 0xcb)1432 || (EthHdr. MacSrc.au8[0] == 0x00 && EthHdr.MacSrc.au8[1] == 0x16 && EthHdr.MacSrc.au8[2] == 0xcb)1433 || EthHdr. MacDst.au8[0] == 0xff1434 || EthHdr. MacSrc.au8[0] == 0xff)1429 if ( (EthHdr.DstMac.au8[0] == 0x08 && EthHdr.DstMac.au8[1] == 0x00 && EthHdr.DstMac.au8[2] == 0x27) 1430 || (EthHdr.SrcMac.au8[0] == 0x08 && EthHdr.SrcMac.au8[1] == 0x00 && EthHdr.SrcMac.au8[2] == 0x27) 1431 || (EthHdr.DstMac.au8[0] == 0x00 && EthHdr.DstMac.au8[1] == 0x16 && EthHdr.DstMac.au8[2] == 0xcb) 1432 || (EthHdr.SrcMac.au8[0] == 0x00 && EthHdr.SrcMac.au8[1] == 0x16 && EthHdr.SrcMac.au8[2] == 0xcb) 1433 || EthHdr.DstMac.au8[0] == 0xff 1434 || EthHdr.SrcMac.au8[0] == 0xff) 1435 1435 Log2(("D=%.6Rhxs S=%.6Rhxs T=%04x f=%x z=%x\n", 1436 &EthHdr. MacDst, &EthHdr.MacSrc, RT_BE2H_U16(EthHdr.EtherType), fSrc, pSG->cbTotal));1436 &EthHdr.DstMac, &EthHdr.SrcMac, RT_BE2H_U16(EthHdr.EtherType), fSrc, pSG->cbTotal)); 1437 1437 1438 1438 /* … … 1440 1440 */ 1441 1441 if ( pIfSender 1442 && memcmp(&EthHdr. MacSrc, &pIfSender->Mac, sizeof(pIfSender->Mac)))1442 && memcmp(&EthHdr.SrcMac, &pIfSender->Mac, sizeof(pIfSender->Mac))) 1443 1443 { 1444 1444 /** @todo stats */ 1445 Log2(("IF MAC: %.6Rhxs -> %.6Rhxs\n", &pIfSender->Mac, &EthHdr. MacSrc));1446 pIfSender->Mac = EthHdr. MacSrc;1445 Log2(("IF MAC: %.6Rhxs -> %.6Rhxs\n", &pIfSender->Mac, &EthHdr.SrcMac)); 1446 pIfSender->Mac = EthHdr.SrcMac; 1447 1447 pIfSender->fMacSet = true; 1448 1448 } … … 1451 1451 * Distribute the frame. 1452 1452 */ 1453 if (RT_UNLIKELY(EthHdr. MacDst.au8[0] & 1)) /* multicast address */1453 if (RT_UNLIKELY(EthHdr.DstMac.au8[0] & 1)) /* multicast address */ 1454 1454 fRc = intnetR0NetworkSendMulticast(pNetwork, pIfSender, fSrc, pSG, fTrunkLocked, &EthHdr); 1455 else if ( EthHdr. MacDst.au16[0] == 0xffff /* broadcast address. */1456 && EthHdr. MacDst.au16[1] == 0xffff1457 && EthHdr. MacDst.au16[2] == 0xffff)1455 else if ( EthHdr.DstMac.au16[0] == 0xffff /* broadcast address. */ 1456 && EthHdr.DstMac.au16[1] == 0xffff 1457 && EthHdr.DstMac.au16[2] == 0xffff) 1458 1458 fRc = intnetR0NetworkSendBroadcast(pNetwork, pIfSender, pSG, fTrunkLocked); 1459 1459 else -
trunk/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp
r10846 r10978 38 38 #include <iprt/log.h> 39 39 #include <iprt/crc32.h> 40 #include <iprt/net.h> 40 41 41 42 #include "../Pcap.h" … … 46 47 #pragma pack(1) 47 48 48 struct MyEthHdr49 {50 PDMMAC DstMac;51 PDMMAC SrcMac;52 uint16_t u16Type;53 };54 55 struct MyIpHdr56 {57 #ifdef RT_BIG_ENDIAN58 unsigned int ip_v : 4;59 unsigned int ip_hl : 4;60 unsigned int ip_tos : 8;61 unsigned int ip_len : 16;62 #else63 unsigned int ip_hl : 4;64 unsigned int ip_v : 4;65 unsigned int ip_tos : 8;66 unsigned int ip_len : 16;67 #endif68 uint16_t ip_id;69 uint16_t ip_off;70 uint8_t ip_ttl;71 uint8_t ip_p;72 uint16_t ip_sum;73 uint32_t ip_src;74 uint32_t ip_dst;75 /* more */76 uint32_t ip_options[1];77 };78 79 struct MyUdpHdr80 {81 uint16_t uh_sport;82 uint16_t uh_dport;83 uint16_t uh_ulen;84 uint16_t uh_sum;85 };86 49 87 50 struct MyDhcpMsg … … 367 330 { 368 331 uint8_t abFrame[4096]; 369 struct MyEthHdr *pEthHdr = (struct MyEthHdr *)&abFrame[0];370 struct MyIpHdr *pIpHdr = (struct MyIpHdr *)(pEthHdr + 1);371 struct MyUdpHdr *pUdpHdr = (struct MyUdpHdr *)(pIpHdr + 1);372 struct MyDhcpMsg *pDhcpMsg = (struct MyDhcpMsg *)(pUdpHdr + 1);332 PRTNETETHERHDR pEthHdr = (PRTNETETHERHDR)&abFrame[0]; 333 PRTNETIPV4 pIpHdr = (PRTNETIPV4) (pEthHdr + 1); 334 PRTNETUDP pUdpHdr = (PRTNETUDP) (pIpHdr + 1); 335 PRTNETDHCP pDhcpMsg = (PRTNETDHCP) (pUdpHdr + 1); 373 336 374 337 /* … … 384 347 pDhcpMsg->Secs = 0; 385 348 pDhcpMsg->Flags = 0; /* unicast */ //RT_H2BE_U16(0x8000); /* broadcast */ 386 pDhcpMsg->CIAddr = 0;387 pDhcpMsg->YIAddr = 0;388 pDhcpMsg->SIAddr = 0;389 pDhcpMsg->GIAddr = 0;349 pDhcpMsg->CIAddr.u = 0; 350 pDhcpMsg->YIAddr.u = 0; 351 pDhcpMsg->SIAddr.u = 0; 352 pDhcpMsg->GIAddr.u = 0; 390 353 memset(&pDhcpMsg->CHAddr[0], '\0', sizeof(pDhcpMsg->CHAddr)); 391 354 memcpy(&pDhcpMsg->CHAddr[0], pSrcMac, sizeof(*pSrcMac)); … … 437 400 pIpHdr->ip_p = 0x11; /* UDP */ 438 401 pIpHdr->ip_sum = 0; 439 pIpHdr->ip_src = 0;440 pIpHdr->ip_dst = UINT32_C(0xffffffff); /* broadcast */402 pIpHdr->ip_src.u = 0; 403 pIpHdr->ip_dst.u = UINT32_C(0xffffffff); /* broadcast */ 441 404 pIpHdr->ip_sum = tstIntNet1IpCheckSum(pIpHdr, sizeof(*pIpHdr)); 442 405 … … 444 407 pUdpHdr->uh_sum = tstIntNet1InetCheckSum(pUdpHdr, 445 408 RT_BE2H_U16(pUdpHdr->uh_ulen), 446 RT_BE2H_U32(pIpHdr->ip_src ),447 RT_BE2H_U32(pIpHdr->ip_dst ),409 RT_BE2H_U32(pIpHdr->ip_src.u), 410 RT_BE2H_U32(pIpHdr->ip_dst.u), 448 411 pIpHdr->ip_p); 449 412 … … 451 414 memset(&pEthHdr->DstMac, 0xff, sizeof(pEthHdr->DstMac)); /* broadcast */ 452 415 pEthHdr->SrcMac = *pSrcMac; 453 pEthHdr-> u16Type = RT_H2BE_U16(0x0800); /* IP */416 pEthHdr->EtherType = RT_H2BE_U16(RTNET_ETHERTYPE_IPV4); /* IP */ 454 417 455 418 doXmitFrame(hIf, pSession, pBuf, &abFrame[0], (uint8_t *)(pDhcpMsg + 1) - (uint8_t *)&abFrame[0], pFileRaw); … … 514 477 PcapStreamFrame(pFileRaw, g_StartTS, pvFrame, cbFrame, 0xffff); 515 478 516 struct MyEthHdr const *pEthHdr = (struct MyEthHdr const *)pvFrame;479 PCRTNETETHERHDR pEthHdr = (PCRTNETETHERHDR)pvFrame; 517 480 if (pFileText) 518 481 RTStrmPrintf(pFileText, "%3RU64.%09u: cb=%04x dst=%.6Rhxs src=%.6Rhxs type=%04x%s\n", 519 482 NanoTS / 1000000000, (uint32_t)(NanoTS % 1000000000), 520 cbFrame, &pEthHdr->SrcMac, &pEthHdr->DstMac, RT_BE2H_U16(pEthHdr-> u16Type),483 cbFrame, &pEthHdr->SrcMac, &pEthHdr->DstMac, RT_BE2H_U16(pEthHdr->EtherType), 521 484 !memcmp(&pEthHdr->DstMac, pSrcMac, sizeof(*pSrcMac)) ? " Mine!" : ""); 522 485 523 486 /* Loop for the DHCP reply. */ 524 487 if ( cbFrame > 64 525 && RT_BE2H_U16(pEthHdr-> u16Type) == 0x0800 /* EtherType == IP */)488 && RT_BE2H_U16(pEthHdr->EtherType) == 0x0800 /* EtherType == IP */) 526 489 { 527 struct MyIpHdr const *pIpHdr = (struct MyIpHdr const *)(pEthHdr + 1);528 struct MyUdpHdr const *pUdpHdr = (struct MyUdpHdr const *)((uint32_t *)pIpHdr + pIpHdr->ip_hl);490 PCRTNETIPV4 pIpHdr = (PCRTNETIPV4)(pEthHdr + 1); 491 PCRTNETUDP pUdpHdr = (PCRTNETUDP)((uint32_t *)pIpHdr + pIpHdr->ip_hl); 529 492 if ( pIpHdr->ip_p == 0x11 /*UDP*/ 530 493 && RT_BE2H_U16(pUdpHdr->uh_dport) == 68 /* bootp */ 531 494 && RT_BE2H_U16(pUdpHdr->uh_sport) == 67 /* bootps */) 532 495 { 533 struct MyDhcpMsg const *pDhcpMsg = (struct MyDhcpMsg const *)(pUdpHdr + 1);496 PCRTNETDHCP pDhcpMsg = (PCRTNETDHCP)(pUdpHdr + 1); 534 497 if ( pDhcpMsg->Op == 2 /* boot reply */ 535 498 && pDhcpMsg->HType == 1 /* ethernet */ … … 540 503 g_fDhcpReply = true; 541 504 RTPrintf("tstIntNet-1: DHCP server reply! My IP: %d.%d.%d.%d\n", 542 RT_BYTE4(RT_BE2H_U32(pDhcpMsg->YIAddr)),543 RT_BYTE3(RT_BE2H_U32(pDhcpMsg->YIAddr)),544 RT_BYTE2(RT_BE2H_U32(pDhcpMsg->YIAddr)),545 RT_BYTE1(RT_BE2H_U32(pDhcpMsg->YIAddr)));505 pDhcpMsg->YIAddr.au8[0], 506 pDhcpMsg->YIAddr.au8[1], 507 pDhcpMsg->YIAddr.au8[2], 508 pDhcpMsg->YIAddr.au8[3]); 546 509 } 547 510 }
Note:
See TracChangeset
for help on using the changeset viewer.