Tools/NetTest - Add TCP retransmit test
[tpg/acess2.git] / Tools / NetTest_Runner / arp.c
1 /*
2  */
3 #include "arp.h"
4 #include "net.h"
5 #include <stdint.h>
6 #include <string.h>
7 #include "test.h"
8 #include "tests.h"
9
10 // === CODE ===
11 void ARP_SendRequest(int IfNum, const void *IPv4Addr)
12 {
13         const uint8_t   *addr = IPv4Addr;
14         uint8_t pkt[] = {
15                 // Ethernet
16                 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
17                 HOST_MAC,
18                 0x08,0x06,
19                 // ARP
20                 0x00,0x01, 0x08,0x00,
21                 6,4, 0,1,
22                 HOST_MAC,
23                 HOST_IP,
24                 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
25                 addr[0],addr[1],addr[2],addr[3],
26         };
27         Net_Send(IfNum, sizeof(pkt), pkt);
28 }
29
30 void ARP_SendResponse(int IfNum, const void *IPv4Addr, const void *MacAddr)
31 {
32         
33 }
34
35 bool ARP_Pkt_IsResponse(size_t Len, const void *Packet, const void *ExpectedIP, const void *ExpectedMac)
36 {
37         const uint8_t   *pkt8 = Packet;
38         if( Len < 2*6+2 ) {
39                 TEST_WARN("Undersized");
40                 return false;
41         }
42         // Ethernet ARP id
43         if( pkt8[12+0] != 0x08 || pkt8[12+1] != 0x06 ) {
44                 TEST_WARN("Ethernet tag %02x %02x != 08 06", pkt8[12+0], pkt8[12+1]);
45                 return false;
46         }
47         
48         // ARP HWtype/ProtoType
49         if( pkt8[14+0] != 0x00 || pkt8[14+1] != 0x01 || pkt8[14+2] != 0x08 || pkt8[14+3] != 0x00 ) {
50                 TEST_WARN("ARP Types %02x %02x %02x %02x != 00 01 08 00",
51                         pkt8[14+0], pkt8[14+1], pkt8[14+2], pkt8[14+3]);
52                 return false;
53         }
54         // ARP Sizes (HW/Proto) and operation (Response)
55         if( pkt8[14+4] != 6 || pkt8[14+5] != 4 || pkt8[14+6] != 0 || pkt8[14+7] != 2 ) {
56                 TEST_WARN("Sizes+op %02x %02x %02x %02x != 06 04 00 02",
57                         pkt8[14+4], pkt8[14+5], pkt8[14+6], pkt8[14+7]);
58                 return false;
59         }
60         
61         if( memcmp(pkt8+14+8, ExpectedMac, 6) != 0 )
62                 return false;
63         if( memcmp(pkt8+14+14, ExpectedIP, 4) != 0 )
64                 return false;
65         if( memcmp(pkt8+14+18, (char[]){HOST_MAC}, 6) != 0 )
66                 return false;
67         if( memcmp(pkt8+14+24, (char[]){HOST_IP}, 4) != 0 )
68                 return false;
69         
70         return true;
71 }
72
73 bool ARP_Pkt_IsRequest(size_t Len, const void *Packet, const void *ExpectedIP)
74 {
75         return false;
76 }
77

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