XOP-440 checksum corner cases.
XOP-440 checksum corner cases.

Windows seems to take RFC 2460 a bit too far and replace zero TCP checksum
values with 0xFFFF. Thus we need to treat IPv6 TCP packets with an embedded
checksum of 0xFFFF as actually containing checksum 0.
I've also added code to allow IPv4 UDP packets with a checksum value of 0 to
be accepted, as this is the 'no checksum' option that only exists for IPv4
UDP. For IPv6 UDP we again translate 0xFFFF to 0 but insist on the checksum
matching after this translation.

When we calculate checksum for IPv6 UDP packets, I've also made sure we
insert 0xFFFF rather than 0 before passing the packet up the stack.

Signed-off-by: Paul Durrant <dba6cd059c0054f8a3c62ba902cd9d7238853ee4@citrix.com>

xenserver/win-xenvif,xenserver/win-xenvif,xenserver/win-xenvif,xenserver/win-xenvif