Re: Re: trouble modifying passthru sample

Home Forums Discussions Support trouble modifying passthru sample Re: Re: trouble modifying passthru sample

#6840
Vadim Smirnov
Keymaster

    SendPacketToAdapter can send any packet on the network even if it is not in correct format. I think you just don’t form the correct INTERMEDIATE_BUFFER. I’m not sure I fully understand what you are doing in your C# code as I’m not really experienced in C#, but to my limited knowledge the code is incorrect.

    byte[] newPacket = new byte[sizeof(ETHER_HEADER) + sizeof(IPHeader) + sizeof(UdpHeader) +
    sizeof(PlatformHeader) + dataLength + sizeof(GPSHeader)];

    ...

    IntPtr outgoingPacket = Marshal.AllocHGlobal((IntPtr)(newPacket.Length));
    Marshal.Copy(newPacket, 0, outgoingPacket, newPacket.Length);

    ETH_REQUEST outgoingRequest = new ETH_REQUEST();
    outgoingRequest.hAdapterHandle = Request.hAdapterHandle;
    outgoingRequest.EthPacket.Buffer = outgoingPacket;

    In your code above you use newPacket as managed INTERMEDIATE_BUFFER and outgoingPacket as unmanaged INTERMEDIATE_BUFFER. However, the size for allocation for newPacket must be sizeof(INTERMEDIATE_BUFFER), not the size you have used above. As well when you copy managed INTERMEDIATE_BUFFER into unmanaged memory once again you should copy sizeof(INTERMEDIATE_BUFFER).

    Note that you have to initialize INTERMEDIATE_BUFFER fields (you can copy values from the original structure and adjust m_Length).

    Also note that the resulted packet must fit into MAX_ETHER_FRAME (more exactly it should not exceed network interface MTU value).