Livt packages
Livt.Net
Version 1.4.1
Ethernet, IPv4, TCP, UDP, ARP, TFTP, and Telnet networking components for Livt hardware.
Published files (163)
src/udp/UdpChecksum.lvt
namespace Livt.Net
/** IPv4 UDP checksum over addresses, ports, length and an InternetChecksum payload sum. */
class UdpChecksum
{
/** Caller validates ports (0..65535) and UDP length (8..65515). Odd payloads are zero padded. */
public static fn Calculate[](sourceIp: byte[4], destinationIp: byte[4],
sourcePort: int, destinationPort: int, udpLength: int, payloadWordSum: int) int
{
var addressSum = NetworkOrder.Word(sourceIp[0], sourceIp[1])
+ NetworkOrder.Word(sourceIp[2], sourceIp[3])
+ NetworkOrder.Word(destinationIp[0], destinationIp[1])
+ NetworkOrder.Word(destinationIp[2], destinationIp[3])
var sum = addressSum + 17 + udpLength + sourcePort + destinationPort + udpLength
var checksum = ChecksumArithmetic.Finish(sum + payloadWordSum)
// Wire zero means omitted; a computed zero must be encoded as all ones.
if (checksum == 0) { return 65535 }
return checksum
}
}