Merge branch 'master' of git://git.ucc.asn.au/tpg/acess2
[tpg/acess2.git] / KernelLand / Modules / IPStack / arp.c
index 9dd48b9..e152e33 100644 (file)
@@ -8,6 +8,7 @@
 #include "arp.h"
 #include "link.h"
 #include "ipv4.h"      // For IPv4_Netmask
+#include "include/adapters_int.h"      // for MAC addr
 
 #define ARPv6  0
 #define        ARP_CACHE_SIZE  64
@@ -145,13 +146,18 @@ tMacAddr ARP_Resolve4(tInterface *Interface, tIPv4 Address)
        req.HWSize = 6;
        req.SWSize = 4;
        req.Request = htons(1);
-       req.SourceMac = Interface->Adapter->MacAddr;
+       memcpy(&req.SourceMac, Interface->Adapter->HWAddr, 6);  // TODO: Remove hard size
        req.SourceIP = *(tIPv4*)Interface->Address;
        req.DestMac = cMAC_BROADCAST;
        req.DestIP = Address;
-       
+
+       tIPStackBuffer  *buffer = IPStack_Buffer_CreateBuffer(3);       // Assumes only a header and footer at link layer
+       IPStack_Buffer_AppendSubBuffer(buffer, sizeof(struct sArpRequest4), 0, &req, NULL, NULL);
+
        // Send Request
-       Link_SendPacket(Interface->Adapter, 0x0806, req.DestMac, sizeof(struct sArpRequest4), &req);
+       Link_SendPacket(Interface->Adapter, 0x0806, req.DestMac, buffer);
+
+       IPStack_Buffer_DestroyBuffer(buffer);
        
        timeout = now() + Interface->TimeoutDelay;
        
@@ -327,13 +333,18 @@ void ARP_int_GetPacket(tAdapter *Adapter, tMacAddr From, int Length, void *Buffe
                                req4->DestIP = req4->SourceIP;
                                req4->DestMac = req4->SourceMac;
                                req4->SourceIP = *(tIPv4*)iface->Address;;
-                               req4->SourceMac = Adapter->MacAddr;
+                               memcpy(&req4->SourceMac, Adapter->HWAddr, 6);   // TODO: Remove hard size
                                req4->Request = htons(2);
                                Log_Debug("ARP", "Sending back us (%02x:%02x:%02x:%02x:%02x:%02x)",
                                        req4->SourceMac.B[0], req4->SourceMac.B[1],
                                        req4->SourceMac.B[2], req4->SourceMac.B[3],
                                        req4->SourceMac.B[4], req4->SourceMac.B[5]);
-                               Link_SendPacket(Adapter, 0x0806, req4->DestMac, sizeof(tArpRequest4), req4);
+                               
+                               // Assumes only a header and footer at link layer
+                               tIPStackBuffer  *buffer = IPStack_Buffer_CreateBuffer(3);
+                               IPStack_Buffer_AppendSubBuffer(buffer, sizeof(struct sArpRequest4), 0, req4, NULL, NULL);
+                               Link_SendPacket(Adapter, 0x0806, req4->DestMac, buffer);
+                               IPStack_Buffer_DestroyBuffer(buffer);
                        }
                        break;
                #if ARPv6

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