11 void ARP_SendRequest(int IfNum, const void *IPv4Addr)
13 const uint8_t *addr = IPv4Addr;
16 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
24 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
25 addr[0],addr[1],addr[2],addr[3],
27 Net_Send(IfNum, sizeof(pkt), pkt);
30 void ARP_SendResponse(int IfNum, const void *IPv4Addr, const void *MacAddr)
35 bool ARP_Pkt_IsResponse(size_t Len, const void *Packet, const void *ExpectedIP, const void *ExpectedMac)
37 const uint8_t *pkt8 = Packet;
39 TEST_WARN("Undersized");
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]);
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]);
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]);
61 if( memcmp(pkt8+14+8, ExpectedMac, 6) != 0 )
63 if( memcmp(pkt8+14+14, ExpectedIP, 4) != 0 )
65 if( memcmp(pkt8+14+18, (char[]){HOST_MAC}, 6) != 0 )
67 if( memcmp(pkt8+14+24, (char[]){HOST_IP}, 4) != 0 )
73 bool ARP_Pkt_IsRequest(size_t Len, const void *Packet, const void *ExpectedIP)