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/PacketConvenienceTest.lvt
namespace Livt.Net.Tests
using Livt.Net
/**
* Compares concise and explicit graphs with independent complete-frame vectors.
*/
@Test
component PacketConvenienceTest
{
// Both graphs borrow the same published provider; all reads are serialized.
data: RamPacketData<96>
echo: IcmpEchoReply<RamPacketData<96>>
packet: IcmpEchoReplyPacket<RamPacketData<96>>
frame: IcmpEchoReplyFrame<RamPacketData<96>>
explicitPacket: Ipv4Packet<IcmpEchoReply<RamPacketData<96>>>
explicitFrame: EthernetFrame<Ipv4Packet<IcmpEchoReply<RamPacketData<96>>>>
limited: IcmpEchoReplyFrame<RamPacketData<96>, 28>
// ARP has a standard reply payload and needs no generic arguments.
arp: ArpReply
arpFrame: ArpReplyFrame
explicitArp: EthernetFrame<ArpReply>
// A user-defined protocol remains usable without a service or platform adapter.
custom: PacketMetadataStub
customPacket: Ipv4Packet<PacketMetadataStub>
customFrame: Ipv4Frame<PacketMetadataStub>
explicitCustom: EthernetFrame<Ipv4Packet<PacketMetadataStub>>
/**
* Inherited constructors bind existing instances; no convenience type copies data.
*/
new()
{
data = new RamPacketData<96>()
echo = new IcmpEchoReply<RamPacketData<96>>(data)
packet = new IcmpEchoReplyPacket<RamPacketData<96>>(echo)
frame = new IcmpEchoReplyFrame<RamPacketData<96>>(packet)
explicitPacket = new Ipv4Packet<IcmpEchoReply<RamPacketData<96>>>(echo)
explicitFrame = new EthernetFrame<Ipv4Packet<IcmpEchoReply<RamPacketData<96>>>>(explicitPacket)
limited = new IcmpEchoReplyFrame<RamPacketData<96>, 28>(packet)
arp = new ArpReply()
arpFrame = new ArpReplyFrame(arp)
explicitArp = new EthernetFrame<ArpReply>(arp)
custom = new PacketMetadataStub()
customPacket = new Ipv4Packet<PacketMetadataStub>(custom)
customFrame = new Ipv4Frame<PacketMetadataStub>(customPacket)
explicitCustom = new EthernetFrame<Ipv4Packet<PacketMetadataStub>>(customPacket)
}
/**
* Checks odd data, both checksums, padding, borrowed storage and failed replacement.
*/
@Test
fn EchoFramesMatchAndPreserveLifetime()
{
var mac: byte[6] = [0x02, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE]
var peer: byte[6] = [0x82, 0x10, 0x20, 0x30, 0x40, 0xFE]
var address: byte[4] = [0xC0, 0xA8, 0x01, 0x80]
var remote: byte[4] = [0xC0, 0xA8, 0x01, 0xFF]
var id: byte[2] = [0x12, 0x34]
var value: byte = 0x00
var identifier: byte[2] = [0xAB, 0xCD]
var sequence: byte[2] = [0x80, 0xFE]
frame.Invalidate()
explicitFrame.Invalidate()
limited.Invalidate()
packet.Invalidate()
explicitPacket.Invalidate()
echo.Invalidate()
data.TryRelease()
data.TryClear()
assert frame.TryRead(0, value) == PacketDataResult.NotReady
assert frame.TryPrepare(mac, peer) == PacketDataResult.NotReady
assert data.TryWrite(0, 0x80) == PacketDataResult.Success
assert data.TryWrite(1, 0x81) == PacketDataResult.Success
assert data.TryWrite(2, 0x82) == PacketDataResult.Success
assert data.TryPublish() == PacketDataResult.Success
assert echo.TryPrepare(identifier, sequence) == PacketDataResult.Success
assert packet.TryPrepare(address, remote, id) == PacketDataResult.Success
assert explicitPacket.TryPrepare(address, remote, id) == PacketDataResult.Success
assert frame.TryPrepare(mac, peer) == PacketDataResult.Success
assert explicitFrame.TryPrepare(mac, peer) == PacketDataResult.Success
assert limited.TryPrepare(mac, peer) == PacketDataResult.Invalid
assert !limited.IsReady()
assert packet.GetAvailableLength() == 31
assert frame.GetAvailableLength() == 60
assert explicitFrame.GetAvailableLength() == 60
assert data.TryWrite(0, 0xFF) == PacketDataResult.Busy
var expected: byte[60] = [0x82, 0x10, 0x20, 0x30, 0x40, 0xFE, 0x02, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0x08, 0x00, 0x45, 0x00, 0x00, 0x1F, 0x12, 0x34, 0x40, 0x00, 0x40, 0x01, 0xA3, 0xDA, 0xC0, 0xA8, 0x01, 0x80, 0xC0, 0xA8, 0x01, 0xFF, 0x00, 0x00, 0xD0, 0xB1, 0xAB, 0xCD, 0x80, 0xFE, 0x80, 0x81, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
for (var i = 0; i < 60; i++) {
assert frame.TryRead(i, value) == PacketDataResult.Success
assert value == expected[i]
assert explicitFrame.TryRead(i, value) == PacketDataResult.Success
assert value == expected[i]
}
assert frame.TryRead(-1, value) == PacketDataResult.Invalid
assert frame.TryRead(60, value) == PacketDataResult.Invalid
frame.Invalidate()
explicitFrame.Invalidate()
packet.Invalidate()
explicitPacket.Invalidate()
echo.Invalidate()
assert data.TryRelease() == PacketDataResult.Success
assert packet.TryPrepare(address, remote, id) == PacketDataResult.NotReady
assert frame.TryPrepare(mac, peer) == PacketDataResult.NotReady
assert frame.GetAvailableLength() == 0
}
/**
* Checks the complete standard ARP reply and independently prepared envelopes.
*/
@Test
fn ArpFramesMatch()
{
var mac: byte[6] = [0x02, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE]
var peer: byte[6] = [0x82, 0x10, 0x20, 0x30, 0x40, 0xFE]
var address: byte[4] = [0xC0, 0xA8, 0x01, 0x80]
var remote: byte[4] = [0xC0, 0xA8, 0x01, 0xFF]
var id: byte[2] = [0x12, 0x34]
var value: byte = 0x00
arpFrame.Invalidate()
explicitArp.Invalidate()
arp.Invalidate()
assert arpFrame.TryPrepare(mac, peer) == PacketDataResult.NotReady
assert arp.TryPrepare(mac, address, peer, remote) == PacketDataResult.Success
assert arpFrame.TryPrepare(mac, peer) == PacketDataResult.Success
assert explicitArp.TryPrepare(mac, peer) == PacketDataResult.Success
var expected: byte[60] = [0x82, 0x10, 0x20, 0x30, 0x40, 0xFE, 0x02, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x02, 0x02, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xC0, 0xA8, 0x01, 0x80, 0x82, 0x10, 0x20, 0x30, 0x40, 0xFE, 0xC0, 0xA8, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
for (var i = 0; i < 60; i++) {
assert arpFrame.TryRead(i, value) == PacketDataResult.Success
assert value == expected[i]
assert explicitArp.TryRead(i, value) == PacketDataResult.Success
assert value == expected[i]
}
assert arpFrame.GetAvailableLength() == 60
assert arpFrame.TryRead(60, value) == PacketDataResult.Invalid
arpFrame.Invalidate()
explicitArp.Invalidate()
arp.Invalidate()
}
/**
* Checks a custom protocol's bytes and propagation of provider read failures.
*/
@Test
fn CustomPayloadRemainsComposable()
{
var mac: byte[6] = [0x02, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE]
var peer: byte[6] = [0x82, 0x10, 0x20, 0x30, 0x40, 0xFE]
var address: byte[4] = [0xC0, 0xA8, 0x01, 0x80]
var remote: byte[4] = [0xC0, 0xA8, 0x01, 0xFF]
var id: byte[2] = [0x12, 0x34]
var value: byte = 0x00
customFrame.Invalidate()
explicitCustom.Invalidate()
customPacket.Invalidate()
custom.Configure(3, 0x88B5, 253, true, -1)
assert customPacket.TryPrepare(address, remote, id) == PacketDataResult.Success
assert customFrame.TryPrepare(mac, peer) == PacketDataResult.Success
assert explicitCustom.TryPrepare(mac, peer) == PacketDataResult.Success
var expected: byte[60] = [0x82, 0x10, 0x20, 0x30, 0x40, 0xFE, 0x02, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0x08, 0x00, 0x45, 0x00, 0x00, 0x17, 0x12, 0x34, 0x40, 0x00, 0x40, 0xFD, 0xA2, 0xE6, 0xC0, 0xA8, 0x01, 0x80, 0xC0, 0xA8, 0x01, 0xFF, 0xA5, 0xA5, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
for (var i = 0; i < 60; i++) {
assert customFrame.TryRead(i, value) == PacketDataResult.Success
assert value == expected[i]
assert explicitCustom.TryRead(i, value) == PacketDataResult.Success
assert value == expected[i]
}
customFrame.Invalidate()
explicitCustom.Invalidate()
customPacket.Invalidate()
custom.Configure(3, 0x88B5, 253, true, 1)
assert customPacket.TryPrepare(address, remote, id) == PacketDataResult.Success
assert customFrame.TryPrepare(mac, peer) == PacketDataResult.Success
assert customFrame.TryRead(35, value) == PacketDataResult.Invalid
customFrame.Invalidate()
customPacket.Invalidate()
custom.Configure(3, 0x88B5, 256, true, -1)
assert customPacket.TryPrepare(address, remote, id) == PacketDataResult.Invalid
assert customFrame.TryPrepare(mac, peer) == PacketDataResult.NotReady
}
}