diff options
Diffstat (limited to 'src/net')
| -rw-r--r-- | src/net/ipv4.c | 5 | ||||
| -rw-r--r-- | src/net/ipv6.c | 2 | ||||
| -rw-r--r-- | src/net/udp.c | 1 |
3 files changed, 7 insertions, 1 deletions
diff --git a/src/net/ipv4.c b/src/net/ipv4.c index 7959cf355..8eb04a65f 100644 --- a/src/net/ipv4.c +++ b/src/net/ipv4.c @@ -358,8 +358,11 @@ static int ipv4_tx ( struct io_buffer *iobuf, ( ( netdev->rx_stats.good & 0xf ) << 0 ) ); /* Fix up checksums */ - if ( trans_csum ) + if ( trans_csum ) { *trans_csum = ipv4_pshdr_chksum ( iobuf, *trans_csum ); + if ( ! *trans_csum ) + *trans_csum = tcpip_protocol->zero_csum; + } iphdr->chksum = tcpip_chksum ( iphdr, sizeof ( *iphdr ) ); /* Print IP4 header for debugging */ diff --git a/src/net/ipv6.c b/src/net/ipv6.c index 012ba5921..bbc00d33e 100644 --- a/src/net/ipv6.c +++ b/src/net/ipv6.c @@ -522,6 +522,8 @@ static int ipv6_tx ( struct io_buffer *iobuf, *trans_csum = ipv6_pshdr_chksum ( iphdr, len, tcpip_protocol->tcpip_proto, *trans_csum ); + if ( ! *trans_csum ) + *trans_csum = tcpip_protocol->zero_csum; } /* Print IPv6 header for debugging */ diff --git a/src/net/udp.c b/src/net/udp.c index 0f7dfb24a..1fbc12d48 100644 --- a/src/net/udp.c +++ b/src/net/udp.c @@ -328,6 +328,7 @@ static int udp_rx ( struct io_buffer *iobuf, struct tcpip_protocol udp_protocol __tcpip_protocol = { .name = "UDP", .rx = udp_rx, + .zero_csum = TCPIP_NEGATIVE_ZERO_CSUM, .tcpip_proto = IP_UDP, }; |
