X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Tools%2FNetTest_Runner%2Farp.c;fp=Tools%2FNetTest_Runner%2Farp.c;h=308f83ee7ae1553fa34d82db5dde08b432563f82;hb=50a98c40481c6d1df267f4631228e9a4d107fe74;hp=0000000000000000000000000000000000000000;hpb=7b64f5e7f00e445a5637e9e3289a1332a14d28e5;p=tpg%2Facess2.git diff --git a/Tools/NetTest_Runner/arp.c b/Tools/NetTest_Runner/arp.c new file mode 100644 index 00000000..308f83ee --- /dev/null +++ b/Tools/NetTest_Runner/arp.c @@ -0,0 +1,77 @@ +/* + */ +#include "arp.h" +#include "net.h" +#include +#include +#include "test.h" +#include "tests.h" + +// === CODE === +void ARP_SendRequest(int IfNum, const void *IPv4Addr) +{ + const uint8_t *addr = IPv4Addr; + uint8_t pkt[] = { + // Ethernet + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + HOST_MAC, + 0x08,0x06, + // ARP + 0x00,0x01, 0x08,0x00, + 6,4, 0,1, + HOST_MAC, + HOST_IP, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + addr[0],addr[1],addr[2],addr[3], + }; + Net_Send(IfNum, sizeof(pkt), pkt); +} + +void ARP_SendResponse(int IfNum, const void *IPv4Addr, const void *MacAddr) +{ + +} + +bool ARP_Pkt_IsResponse(size_t Len, const void *Packet, const void *ExpectedIP, const void *ExpectedMac) +{ + const uint8_t *pkt8 = Packet; + if( Len < 2*6+2 ) { + TEST_WARN("Undersized"); + return false; + } + // Ethernet ARP id + if( pkt8[12+0] != 0x08 || pkt8[12+1] != 0x06 ) { + TEST_WARN("Ethernet tag %02x %02x != 08 06", pkt8[12+0], pkt8[12+1]); + return false; + } + + // ARP HWtype/ProtoType + if( pkt8[14+0] != 0x00 || pkt8[14+1] != 0x01 || pkt8[14+2] != 0x08 || pkt8[14+3] != 0x00 ) { + TEST_WARN("ARP Types %02x %02x %02x %02x != 00 01 08 00", + pkt8[14+0], pkt8[14+1], pkt8[14+2], pkt8[14+3]); + return false; + } + // ARP Sizes (HW/Proto) and operation (Response) + if( pkt8[14+4] != 6 || pkt8[14+5] != 4 || pkt8[14+6] != 0 || pkt8[14+7] != 2 ) { + TEST_WARN("Sizes+op %02x %02x %02x %02x != 06 04 00 02", + pkt8[14+4], pkt8[14+5], pkt8[14+6], pkt8[14+7]); + return false; + } + + if( memcmp(pkt8+14+8, ExpectedMac, 6) != 0 ) + return false; + if( memcmp(pkt8+14+14, ExpectedIP, 4) != 0 ) + return false; + if( memcmp(pkt8+14+18, (char[]){HOST_MAC}, 6) != 0 ) + return false; + if( memcmp(pkt8+14+24, (char[]){HOST_IP}, 4) != 0 ) + return false; + + return true; +} + +bool ARP_Pkt_IsRequest(size_t Len, const void *Packet, const void *ExpectedIP) +{ + return false; +} +