Modules/IPStack - Fix UDP checksums, logging cleanup
[tpg/acess2.git] / KernelLand / Modules / IPStack / ipv4.c
index 36e2200..71a0533 100644 (file)
@@ -8,7 +8,9 @@
 #include "ipv4.h"
 #include "firewall.h"
 
+// === CONSTANTS ===
 #define DEFAULT_TTL    32
+#define IPV4_TRACE     1       // set to 1 to enable packet tracing
 
 // === IMPORTS ===
 extern tInterface      *gIP_Interfaces;
@@ -118,8 +120,10 @@ int IPv4_SendPacket(tInterface *Iface, tIPv4 Address, int Protocol, int ID, tIPS
 
        IPStack_Buffer_AppendSubBuffer(Buffer, sizeof(tIPv4Header), 0, &hdr, NULL, NULL);
 
+       #if IPV4_TRACE
        Log_Log("IPv4", "Sending packet to %i.%i.%i.%i",
                Address.B[0], Address.B[1], Address.B[2], Address.B[3]);
+       #endif
        Link_SendPacket(Iface->Adapter, IPV4_ETHERNET_ID, to, Buffer);
        return 1;
 }
@@ -181,17 +185,20 @@ void IPv4_int_GetPacket(tAdapter *Adapter, tMacAddr From, int Length, void *Buff
        
        // TODO: Handle packet fragmentation
        
+       #if IPV4_TRACE
        Log_Debug("IPv4", " From %i.%i.%i.%i to %i.%i.%i.%i",
                hdr->Source.B[0], hdr->Source.B[1], hdr->Source.B[2], hdr->Source.B[3],
                hdr->Destination.B[0], hdr->Destination.B[1], hdr->Destination.B[2], hdr->Destination.B[3]
                );
-
-       // TODO: Tell ARP?
-       ARP_UpdateCache4(hdr->Source, From);
+       #endif
        
        // Get Data and Data Length
        dataLength = ntohs(hdr->TotalLength) - sizeof(tIPv4Header);
        data = &hdr->Options[0];
+
+       // Populate ARP cache from sniffing.
+       // - Downside: Poisoning, polluting from routed packets
+       //ARP_UpdateCache4(hdr->Source, From);
        
        // Get Interface (allowing broadcasts)
        iface = IPv4_GetInterface(Adapter, hdr->Destination, 1);
@@ -267,6 +274,10 @@ void IPv4_int_GetPacket(tAdapter *Adapter, tMacAddr From, int Length, void *Buff
                
                return ;
        }
+
+       // Populate ARP cache from recieved packets
+       // - Should be safe
+       ARP_UpdateCache4(hdr->Source, From);
        
        // Send it on
        if( !gaIPv4_Callbacks[hdr->Protocol] ) {

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