Livt packages
Livt.Net
Version 1.4.1
Ethernet, IPv4, TCP, UDP, ARP, TFTP, and Telnet networking components for Livt hardware.
Published files (163)
- ethernet
- services
- tftp
- ArpCompositionChecks.lvt
- ArpPacketParserTest.lvt
- ArpResponderTest.lvt
- ChecksumApiTest.lvt
- ChecksumWordSumTest.lvt
- CompactPacketFieldsTest.lvt
- CountingPacketData.lvt
- EthernetFrameBuilderTest.lvt
- EthernetFrameParserTest.lvt
- EthernetLiteDeviceFixture.lvt
- EthernetLiteDriverTest.lvt
- EthernetLiteReceiveWindowTest.lvt
- EthernetLiteResetScenario.lvt
- EthernetLiteResetTest.lvt
- FaultingFrameData.lvt
- FaultingPacketData.lvt
- FrameCapacityTest.lvt
- FrameCompositionTest.lvt
- FrameForwarder.lvt
- FrameLinkTest.lvt
- FrameMii10Link.lvt
- FrameMiiLink.lvt
- FrameMiiPins.lvt
- GenericPacketTest.lvt
- IcmpCapacityChecks.lvt
- IcmpEchoResponderTest.lvt
- IcmpStorageBackendTest.lvt
- InternetChecksumTest.lvt
- Ipv4HeaderBuilderTest.lvt
- Ipv4HeaderChecksumTest.lvt
- Ipv4PacketFieldsTest.lvt
- Ipv4PacketParserTest.lvt
- MiiFrame10Test.lvt
- MiiFrameTest.lvt
- PacketConvenienceTest.lvt
- PacketDataTest.lvt
- PacketMetadataStub.lvt
- PacketMetadataTest.lvt
- PacketParserFailureTest.lvt
- PacketStorageParityTest.lvt
- RamIpv4PacketParserTest.lvt
- ReceiveContractChecks.lvt
- ScheduledWordSumTest.lvt
- SynAckCompositionChecks.lvt
- TcpChecksumTest.lvt
- TcpConnectionRecognizerTest.lvt
- TcpHeaderParserTest.lvt
- TcpMultiSessionArrayStorageTest.lvt
- TcpMultiSessionAutoStorageTest.lvt
- TcpMultiSessionDistributedStorageTest.lvt
- TcpMultiSessionMixedStorageTest.lvt
- TcpMultiSessionStorageChecks.lvt
- TcpMultiSessionTest.lvt
- TcpRamPacketTest.lvt
- TcpRetryTimerTest.lvt
- TcpSegmentBuilderTest.lvt
- TcpSegmentTest.lvt
- TcpStreamServerArrayStorageTest.lvt
- TcpStreamServerAutoStorageTest.lvt
- TcpStreamServerDistributedStorageTest.lvt
- TcpStreamServerMixedStorageTest.lvt
- TcpStreamServerStorageChecks.lvt
- TcpStreamServerTest.lvt
- TelnetSessionTest.lvt
- TransmitContractChecks.lvt
- UdpPacketTest.lvt
tests/ChecksumApiTest.lvt
namespace Livt.Net.Tests
using Livt.Net
/**
* Literal expectations computed independently from complete network-order packets.
*/
@Test
component ChecksumApiTest
{
stream: InternetChecksum
/**
* Owns the accumulator used to supply payload word sums to static checksum calls.
*/
new()
{
stream = new InternetChecksum()
}
/** Checks the full documented non-negative sum range through a scheduled argument. */
@Test
fn FoldsNonNegativeIntBoundaries()
{
this.CheckFold(0, 0, 65535)
this.CheckFold(65535, 65535, 0)
this.CheckFold(65536, 1, 65534)
this.CheckFold(2147483647, 98302, 32768)
}
fn CheckFold(value: int, expectedFold: int, expectedChecksum: int)
{
assert ChecksumArithmetic.Fold(value) == expectedFold
assert ChecksumArithmetic.Finish(value) == expectedChecksum
}
/**
* Compares the supplied network-order inputs with an independent expected checksum or sum.
*/
@Test
fn ChecksTypicalIpv4Header()
{
var length: byte[2] = [0x00, 0xBB]
var identification: byte[2] = [0x00, 0x01]
var local: byte[4] = [0x0A, 0x00, 0x00, 0x01]
var remote: byte[4] = [0x0A, 0x00, 0x00, 0x02]
assert Ipv4HeaderChecksum.Calculate(NetworkOrder.Word(length[0], length[1]), identification, local, remote, 0x06) == 9786
assert Ipv4HeaderChecksum.Calculate(NetworkOrder.Word(length[0], length[1]), identification, local, remote, 0x01) == 9791
}
/**
* Compares the supplied network-order inputs with an independent expected checksum or sum.
*/
@Test
fn InterpretsHighIpv4OctetsAsUnsigned()
{
var length: byte[2] = [0x81, 0x23]
var identification: byte[2] = [0xFE, 0xDC]
var local: byte[4] = [0xC0, 0xA8, 0xFF, 0x80]
var remote: byte[4] = [0xFE, 0xDC, 0xBA, 0x98]
assert Ipv4HeaderChecksum.Calculate(NetworkOrder.Word(length[0], length[1]), identification, local, remote, 0x06) == 16729
assert Ipv4HeaderChecksum.Calculate(NetworkOrder.Word(length[0], length[1]), identification, local, remote, 0x01) == 16734
}
/**
* Compares the supplied network-order inputs with an independent expected checksum or sum.
*/
@Test
fn FoldsCarriesAcrossIpv4Words()
{
var length: byte[2] = [0xFF, 0xFF]
var identification: byte[2] = [0xFF, 0xFF]
var local: byte[4] = [0xFF, 0xFF, 0xFF, 0xFF]
var remote: byte[4] = [0xFF, 0xFF, 0xFF, 0xFF]
assert Ipv4HeaderChecksum.Calculate(NetworkOrder.Word(length[0], length[1]), identification, local, remote, 0x06) == 15097
assert Ipv4HeaderChecksum.Calculate(NetworkOrder.Word(length[0], length[1]), identification, local, remote, 0x01) == 15102
}
/**
* Compares the supplied network-order inputs with an independent expected checksum or sum.
*/
@Test
fn ChecksTcpHeaderWithoutPayload()
{
var local: byte[4] = [0xC0, 0xA8, 0x01, 0x80]
var remote: byte[4] = [0xFE, 0xDC, 0xBA, 0x98]
var port: byte[2] = [0x00, 0x50]
var remotePort: byte[2] = [0xC0, 0x81]
var sequence: byte[4] = [0x80, 0x12, 0x34, 0xFF]
var acknowledgment: byte[4] = [0xFE, 0xDC, 0xBA, 0x98]
var window: byte[2] = [0x81, 0x23]
stream.Reset()
var wordSum = stream.GetWordSum()
assert wordSum == 0
assert TcpChecksum.CalculatePayloadChecksum(local, remote, port, remotePort, sequence, acknowledgment, 0x12, window, 20, wordSum) == 33720
assert TcpChecksum.CalculateFixedHeaderChecksum(local, remote, port, remotePort, sequence, acknowledgment, 0x12, window) == 33720
}
/**
* Compares the supplied network-order inputs with an independent expected checksum or sum.
*/
@Test
fn PadsOddTcpPayloadForChecksum()
{
var local: byte[4] = [0xC0, 0xA8, 0x01, 0x80]
var remote: byte[4] = [0xFE, 0xDC, 0xBA, 0x98]
var port: byte[2] = [0x00, 0x50]
var remotePort: byte[2] = [0xC0, 0x81]
var sequence: byte[4] = [0x80, 0x12, 0x34, 0xFF]
var acknowledgment: byte[4] = [0xFE, 0xDC, 0xBA, 0x98]
var window: byte[2] = [0x81, 0x23]
stream.Reset()
var payload: byte[3] = [0x80, 0xFF, 0x01]
for (var i = 0; i < 3; i++) {
stream.AddByte(payload[i])
}
var wordSum = stream.GetWordSum()
assert wordSum == 33279
assert TcpChecksum.CalculatePayloadChecksum(local, remote, port, remotePort, sequence, acknowledgment, 0x12, window, 23, wordSum) == 438
}
/**
* Compares the supplied network-order inputs with an independent expected checksum or sum.
*/
@Test
fn ChecksEvenTcpPayload()
{
var local: byte[4] = [0xC0, 0xA8, 0x01, 0x80]
var remote: byte[4] = [0xFE, 0xDC, 0xBA, 0x98]
var port: byte[2] = [0x00, 0x50]
var remotePort: byte[2] = [0xC0, 0x81]
var sequence: byte[4] = [0x80, 0x12, 0x34, 0xFF]
var acknowledgment: byte[4] = [0xFE, 0xDC, 0xBA, 0x98]
var window: byte[2] = [0x81, 0x23]
stream.Reset()
var payload: byte[4] = [0xFF, 0xFF, 0xFF, 0xFF]
for (var i = 0; i < 4; i++) {
stream.AddByte(payload[i])
}
var wordSum = stream.GetWordSum()
assert wordSum == 131070
assert TcpChecksum.CalculatePayloadChecksum(local, remote, port, remotePort, sequence, acknowledgment, 0x12, window, 24, wordSum) == 33716
}
/**
* Compares the supplied network-order inputs with an independent expected checksum or sum.
*/
@Test
fn FoldsCarriesAcrossTcpPayload()
{
var local: byte[4] = [0xFF, 0xFF, 0xFF, 0xFF]
var remote: byte[4] = [0xFF, 0xFF, 0xFF, 0xFF]
var port: byte[2] = [0xFF, 0xFF]
var remotePort: byte[2] = [0xFF, 0xFF]
var sequence: byte[4] = [0xFF, 0xFF, 0xFF, 0xFF]
var acknowledgment: byte[4] = [0xFF, 0xFF, 0xFF, 0xFF]
var window: byte[2] = [0xFF, 0xFF]
// Sum of 65495 bytes of 0xFF, with the final odd byte padded by zero.
var wordSum = 2146139925
assert TcpChecksum.CalculatePayloadChecksum(local, remote, port, remotePort, sequence, acknowledgment, 0xFF, window, 65515, wordSum) == 45069
}
/**
* Compares the supplied network-order inputs with an independent expected checksum or sum.
*/
@Test
fn FoldsNonNegativeIntBoundary()
{
assert ChecksumArithmetic.Finish(0) == 65535
assert ChecksumArithmetic.Finish(65535) == 0
assert ChecksumArithmetic.Finish(65536) == 65534
assert ChecksumArithmetic.Finish(2147483647) == 32768
}
}