Divert icon indicating copy to clipboard operation
Divert copied to clipboard

Passthru: Invalid ip checksum on loopback packet causing error

Open SizzlingCalamari opened this issue 3 years ago • 2 comments

  • Hardware checksum offload is enabled
  • Running the passthru.c example compiled locally
  • Client and server running locally are sending packets to/from each other (loopback).

When passthru is running, WinDivertRecvEx is showing packets from the client to the server as not having valid ip checksums (addr->IPChecksum is 0). A missing ip checksum makes sense because checksum offload is enabled, but causes passthru to fail because WinDivertSendEx expects valid checksums from the addr.

I'm not sure where afterwards in the chain the failure happens, but adding a call to WinDivertHelperCalcChecksums before WinDivertSendEx allows passthru to work in my case.

Is there something here that needs fixing in WinDivertSendEx? or is it the sample code that's just incorrect?

SizzlingCalamari avatar May 14 '22 08:05 SizzlingCalamari

To be clear, WinDivertSendEx is not returning false, it just silently fails.

SizzlingCalamari avatar May 14 '22 08:05 SizzlingCalamari

If addr->IPChecksum is zero, then it should still be possible to inject the packet with WinDivertSendEx. In this case, the driver is supposed to call WinDivertHelperCalcChecksums internally.

So I am not sure why it would not be working. I will try to do some testing and get back on this.

basil00 avatar Jun 07 '22 01:06 basil00