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/TcpRamPacketTest.lvt
namespace Livt.Net.Tests
using Livt.Net
/** Prepared TCP regression vectors calculated independently from the wire format. */
@Test
component TcpRamPacketTest
{
data: RamPacketData<64>
tcp: TcpSegment<RamPacketData<64>>
packet: Ipv4Packet<TcpSegment<RamPacketData<64>>>
frame: EthernetFrame<Ipv4Packet<TcpSegment<RamPacketData<64>>>>
new()
{
this.data = new RamPacketData<64>()
this.tcp = new TcpSegment<RamPacketData<64>>(this.data)
this.packet = new Ipv4Packet<TcpSegment<RamPacketData<64>>>(this.tcp)
this.frame = new EthernetFrame<Ipv4Packet<TcpSegment<RamPacketData<64>>>>(this.packet)
}
fn Clean()
{
this.frame.Invalidate()
this.packet.Invalidate()
this.tcp.Invalidate()
if (this.data.IsReady()) {
this.data.TryRelease()
}
else {
this.data.TryClear()
}
}
fn Prepare() PacketDataResult
{
var sourceIp: byte[4] = [0xC0, 0xA8, 0x01, 0x80]
var destinationIp: byte[4] = [0xC0, 0xA8, 0x01, 0xFF]
var sourcePort: byte[2] = [0x00, 0x50]
var destinationPort: byte[2] = [0xC0, 0x81]
var sequence: byte[4] = [0x80, 0x12, 0x34, 0xFF]
var ack: byte[4] = [0xFE, 0xDC, 0xBA, 0x98]
var window: byte[2] = [0x81, 0x23]
var id: byte[2] = [0x00, 0x02]
var sourceMac: byte[6] = [0x02, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE]
var destinationMac: byte[6] = [0x82, 0x10, 0x20, 0x30, 0x40, 0xFE]
var result = this.tcp.TryPrepare(sourceIp, destinationIp, sourcePort, destinationPort, sequence, ack, 0x12, window)
if (result != PacketDataResult.Success) {
return result
}
result = this.packet.TryPrepare(sourceIp, destinationIp, id)
if (result != PacketDataResult.Success) {
return result
}
return this.frame.TryPrepare(sourceMac, destinationMac)
}
@Test
fn EmptySynAck()
{
this.Clean()
var value: byte = 0xFF
assert this.tcp.TryRead(0, value) == PacketDataResult.NotReady
assert this.data.TryPublish() == PacketDataResult.Success
assert this.Prepare() == PacketDataResult.Success
assert this.frame.GetAvailableLength() == 60
assert this.tcp.GetAvailableLength() == 20
var expected: byte[60] = [0x82, 0x10, 0x20, 0x30, 0x40, 0xFE, 0x02, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0x08, 0x00, 0x45, 0x00, 0x00, 0x28, 0x00, 0x02, 0x40, 0x00, 0x40, 0x06, 0xB5, 0xFE, 0xC0, 0xA8, 0x01, 0x80, 0xC0, 0xA8, 0x01, 0xFF, 0x00, 0x50, 0xC0, 0x81, 0x80, 0x12, 0x34, 0xFF, 0xFE, 0xDC, 0xBA, 0x98, 0x50, 0x12, 0x81, 0x23, 0x7A, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
for (var i = 0; i < 60; i++) {
assert this.frame.TryRead(i, value) == PacketDataResult.Success
assert value == expected[i]
}
assert this.frame.TryRead(-1, value) == PacketDataResult.Invalid
assert this.frame.TryRead(60, value) == PacketDataResult.Invalid
this.Clean()
}
@Test
fn OddHighBitPayload()
{
this.Clean()
var value: byte = 0xFF
assert this.tcp.TryRead(0, value) == PacketDataResult.NotReady
assert this.data.TryWrite(0, 0xFF) == PacketDataResult.Success
assert this.data.TryWrite(1, 0x80) == PacketDataResult.Success
assert this.data.TryWrite(2, 0x81) == PacketDataResult.Success
assert this.data.TryPublish() == PacketDataResult.Success
assert this.Prepare() == PacketDataResult.Success
assert this.frame.GetAvailableLength() == 60
assert this.tcp.GetAvailableLength() == 23
var expected: byte[60] = [0x82, 0x10, 0x20, 0x30, 0x40, 0xFE, 0x02, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0x08, 0x00, 0x45, 0x00, 0x00, 0x2B, 0x00, 0x02, 0x40, 0x00, 0x40, 0x06, 0xB5, 0xFB, 0xC0, 0xA8, 0x01, 0x80, 0xC0, 0xA8, 0x01, 0xFF, 0x00, 0x50, 0xC0, 0x81, 0x80, 0x12, 0x34, 0xFF, 0xFE, 0xDC, 0xBA, 0x98, 0x50, 0x12, 0x81, 0x23, 0xFA, 0x01, 0x00, 0x00, 0xFF, 0x80, 0x81, 0x00, 0x00, 0x00]
for (var i = 0; i < 60; i++) {
assert this.frame.TryRead(i, value) == PacketDataResult.Success
assert value == expected[i]
}
assert this.frame.TryRead(-1, value) == PacketDataResult.Invalid
assert this.frame.TryRead(60, value) == PacketDataResult.Invalid
this.Clean()
}
@Test
fn EvenPayload()
{
this.Clean()
var value: byte = 0xFF
assert this.tcp.TryRead(0, value) == PacketDataResult.NotReady
assert this.data.TryWrite(0, 0x00) == PacketDataResult.Success
assert this.data.TryWrite(1, 0xFF) == PacketDataResult.Success
assert this.data.TryWrite(2, 0x80) == PacketDataResult.Success
assert this.data.TryWrite(3, 0x01) == PacketDataResult.Success
assert this.data.TryPublish() == PacketDataResult.Success
assert this.Prepare() == PacketDataResult.Success
assert this.frame.GetAvailableLength() == 60
assert this.tcp.GetAvailableLength() == 24
var expected: byte[60] = [0x82, 0x10, 0x20, 0x30, 0x40, 0xFE, 0x02, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0x08, 0x00, 0x45, 0x00, 0x00, 0x2C, 0x00, 0x02, 0x40, 0x00, 0x40, 0x06, 0xB5, 0xFA, 0xC0, 0xA8, 0x01, 0x80, 0xC0, 0xA8, 0x01, 0xFF, 0x00, 0x50, 0xC0, 0x81, 0x80, 0x12, 0x34, 0xFF, 0xFE, 0xDC, 0xBA, 0x98, 0x50, 0x12, 0x81, 0x23, 0xF9, 0x81, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x01, 0x00, 0x00]
for (var i = 0; i < 60; i++) {
assert this.frame.TryRead(i, value) == PacketDataResult.Success
assert value == expected[i]
}
assert this.frame.TryRead(-1, value) == PacketDataResult.Invalid
assert this.frame.TryRead(60, value) == PacketDataResult.Invalid
this.Clean()
}
}