VirtualBox

Changeset 10978 in vbox for trunk/src/VBox/Devices/Network


Ignore:
Timestamp:
Jul 30, 2008 12:34:20 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
33851
Message:

tstIntNet-1,iprt: Use iprt/net in tstIntNet-1. Modified the RTNETETHERHDR struct a bit.

Location:
trunk/src/VBox/Devices/Network
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/SrvIntNetR0.cpp

    r10965 r10978  
    13131313        bool fIt = false;
    13141314        if (    (   !pIf->fMacSet
    1315                  || (fIt = !memcmp(&pIf->Mac, &pEthHdr->MacDst, sizeof(pIf->Mac))) )
     1315                 || (fIt = !memcmp(&pIf->Mac, &pEthHdr->DstMac, sizeof(pIf->Mac))) )
    13161316            ||  (   pIf->fPromiscuous
    13171317                 && !(pNetwork->fFlags & (INTNET_OPEN_FLAGS_IGNORE_PROMISC | INTNET_OPEN_FLAGS_QUIETLY_IGNORE_PROMISC))
    13181318                 && pIf != pIfSender /* promiscuous mode: omit the sender */))
    13191319        {
    1320             Log2(("Dst=%.6Rhxs => %.6Rhxs\n", &pEthHdr->MacDst, &pIf->Mac));
     1320            Log2(("Dst=%.6Rhxs => %.6Rhxs\n", &pEthHdr->DstMac, &pIf->Mac));
    13211321            fExactIntNetRecipient |= fIt;
    13221322            intnetR0IfSend(pIf, pIfSender, pSG);
     
    13461346            &&  !fExactIntNetRecipient  /* if you have duplicate mac addresses, you're screwed. */ )
    13471347        {
    1348             if (pTrunkIf->pIfPort->pfnIsHostMac(pTrunkIf->pIfPort, &pEthHdr->MacDst))
     1348            if (pTrunkIf->pIfPort->pfnIsHostMac(pTrunkIf->pIfPort, &pEthHdr->DstMac))
    13491349                fDst |= INTNETTRUNKDIR_HOST;
    13501350            else
     
    13591359    if (    !fExactIntNetRecipient
    13601360        &&  !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));
    13641364
    13651365    return fExactIntNetRecipient;
     
    14271427        AssertReturn(!cbLeft, false);
    14281428    }
    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] == 0xff
    1434         ||  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)
    14351435        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));
    14371437
    14381438    /*
     
    14401440     */
    14411441    if (    pIfSender
    1442         &&  memcmp(&EthHdr.MacSrc, &pIfSender->Mac, sizeof(pIfSender->Mac)))
     1442        &&  memcmp(&EthHdr.SrcMac, &pIfSender->Mac, sizeof(pIfSender->Mac)))
    14431443    {
    14441444        /** @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;
    14471447        pIfSender->fMacSet = true;
    14481448    }
     
    14511451     * Distribute the frame.
    14521452     */
    1453     if (RT_UNLIKELY(EthHdr.MacDst.au8[0] & 1))      /* multicast address */
     1453    if (RT_UNLIKELY(EthHdr.DstMac.au8[0] & 1))      /* multicast address */
    14541454        fRc = intnetR0NetworkSendMulticast(pNetwork, pIfSender, fSrc, pSG, fTrunkLocked, &EthHdr);
    1455     else if (   EthHdr.MacDst.au16[0] == 0xffff     /* broadcast address. */
    1456              && EthHdr.MacDst.au16[1] == 0xffff
    1457              && 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)
    14581458        fRc = intnetR0NetworkSendBroadcast(pNetwork, pIfSender, pSG, fTrunkLocked);
    14591459    else
  • trunk/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp

    r10846 r10978  
    3838#include <iprt/log.h>
    3939#include <iprt/crc32.h>
     40#include <iprt/net.h>
    4041
    4142#include "../Pcap.h"
     
    4647#pragma pack(1)
    4748
    48 struct MyEthHdr
    49 {
    50     PDMMAC      DstMac;
    51     PDMMAC      SrcMac;
    52     uint16_t    u16Type;
    53 };
    54 
    55 struct MyIpHdr
    56 {
    57 #ifdef RT_BIG_ENDIAN
    58     unsigned int    ip_v : 4;
    59     unsigned int    ip_hl : 4;
    60     unsigned int    ip_tos : 8;
    61     unsigned int    ip_len : 16;
    62 #else
    63     unsigned int    ip_hl : 4;
    64     unsigned int    ip_v : 4;
    65     unsigned int    ip_tos : 8;
    66     unsigned int    ip_len : 16;
    67 #endif
    68     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 MyUdpHdr
    80 {
    81     uint16_t    uh_sport;
    82     uint16_t    uh_dport;
    83     uint16_t    uh_ulen;
    84     uint16_t    uh_sum;
    85 };
    8649
    8750struct MyDhcpMsg
     
    367330{
    368331    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);
    373336
    374337    /*
     
    384347    pDhcpMsg->Secs = 0;
    385348    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;
    390353    memset(&pDhcpMsg->CHAddr[0], '\0', sizeof(pDhcpMsg->CHAddr));
    391354    memcpy(&pDhcpMsg->CHAddr[0], pSrcMac, sizeof(*pSrcMac));
     
    437400    pIpHdr->ip_p = 0x11; /* UDP */
    438401    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 */
    441404    pIpHdr->ip_sum = tstIntNet1IpCheckSum(pIpHdr, sizeof(*pIpHdr));
    442405
     
    444407    pUdpHdr->uh_sum = tstIntNet1InetCheckSum(pUdpHdr,
    445408                                             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),
    448411                                             pIpHdr->ip_p);
    449412
     
    451414    memset(&pEthHdr->DstMac, 0xff, sizeof(pEthHdr->DstMac)); /* broadcast */
    452415    pEthHdr->SrcMac = *pSrcMac;
    453     pEthHdr->u16Type = RT_H2BE_U16(0x0800); /* IP */
     416    pEthHdr->EtherType = RT_H2BE_U16(RTNET_ETHERTYPE_IPV4); /* IP */
    454417
    455418    doXmitFrame(hIf, pSession, pBuf, &abFrame[0], (uint8_t *)(pDhcpMsg + 1) - (uint8_t *)&abFrame[0], pFileRaw);
     
    514477                    PcapStreamFrame(pFileRaw, g_StartTS, pvFrame, cbFrame, 0xffff);
    515478
    516                 struct MyEthHdr const *pEthHdr = (struct MyEthHdr const *)pvFrame;
     479                PCRTNETETHERHDR pEthHdr = (PCRTNETETHERHDR)pvFrame;
    517480                if (pFileText)
    518481                    RTStrmPrintf(pFileText, "%3RU64.%09u: cb=%04x dst=%.6Rhxs src=%.6Rhxs type=%04x%s\n",
    519482                                 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),
    521484                                 !memcmp(&pEthHdr->DstMac, pSrcMac, sizeof(*pSrcMac)) ? " Mine!" : "");
    522485
    523486                /* Loop for the DHCP reply. */
    524487                if (    cbFrame > 64
    525                     &&  RT_BE2H_U16(pEthHdr->u16Type) == 0x0800 /* EtherType == IP */)
     488                    &&  RT_BE2H_U16(pEthHdr->EtherType) == 0x0800 /* EtherType == IP */)
    526489                {
    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);
    529492                    if (    pIpHdr->ip_p == 0x11 /*UDP*/
    530493                        &&  RT_BE2H_U16(pUdpHdr->uh_dport) == 68 /* bootp */
    531494                        &&  RT_BE2H_U16(pUdpHdr->uh_sport) == 67 /* bootps */)
    532495                    {
    533                         struct MyDhcpMsg const *pDhcpMsg = (struct MyDhcpMsg const *)(pUdpHdr + 1);
     496                        PCRTNETDHCP pDhcpMsg = (PCRTNETDHCP)(pUdpHdr + 1);
    534497                        if (    pDhcpMsg->Op == 2 /* boot reply */
    535498                            &&  pDhcpMsg->HType == 1 /* ethernet */
     
    540503                            g_fDhcpReply = true;
    541504                            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]);
    546509                        }
    547510                    }
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