X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FIPStack%2Farp.c;h=e152e33d707facb99910caf98b44a1b61d7a62c6;hb=dfe6387e68caf8ffd75f7814131ca2af3be53eb1;hp=9dd48b953e52b8c3de3668eb4c28b3ea79291edc;hpb=880dd63bfcba522dab0a75cc63fdec1d04ff8c89;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/IPStack/arp.c b/KernelLand/Modules/IPStack/arp.c index 9dd48b95..e152e33d 100644 --- a/KernelLand/Modules/IPStack/arp.c +++ b/KernelLand/Modules/IPStack/arp.c @@ -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