Tools/NetTest - Add a runner to test networking stack
[tpg/acess2.git] / Tools / NetTest_Runner / arp.c
diff --git a/Tools/NetTest_Runner/arp.c b/Tools/NetTest_Runner/arp.c
new file mode 100644 (file)
index 0000000..308f83e
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ */
+#include "arp.h"
+#include "net.h"
+#include <stdint.h>
+#include <string.h>
+#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;
+}
+

UCC git Repository :: git.ucc.asn.au