Divert
Divert copied to clipboard
Passthru: Invalid ip checksum on loopback packet causing error
- 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?
To be clear, WinDivertSendEx is not returning false, it just silently fails.
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.