[LWIP]
authorCameron Gutman <aicommander@gmail.com>
Fri, 2 Dec 2011 06:55:05 +0000 (06:55 +0000)
committerCameron Gutman <aicommander@gmail.com>
Fri, 2 Dec 2011 06:55:05 +0000 (06:55 +0000)
- Save a bit of memory by changing the way pbufs are allocated for transmission

svn path=/trunk/; revision=54561

reactos/lib/drivers/ip/transport/tcp/if.c
reactos/lib/drivers/lwip/src/rosip.c

index bc26c92..f8ef99d 100644 (file)
@@ -15,11 +15,9 @@ TCPSendDataCallback(struct netif *netif, struct pbuf *p, struct ip_addr *dest)
     IP_PACKET Packet = { 0 };
     IP_ADDRESS RemoteAddress, LocalAddress;
     PIPv4_HEADER Header;
-    UINT i;
-    struct pbuf *p1;
-    
+
     /* The caller frees the pbuf struct */
-    
+
     if (((*(u8_t*)p->payload) & 0xF0) == 0x40)
     {
         Header = p->payload;
@@ -47,18 +45,17 @@ TCPSendDataCallback(struct netif *netif, struct pbuf *p, struct ip_addr *dest)
     }
     
     GetDataPtr(Packet.NdisPacket, 0, (PCHAR*)&Packet.Header, &Packet.ContigSize);
-    
-    for (i = 0, p1 = p; i < p->tot_len; i += p1->len, p1 = p1->next)
-    {
-        ASSERT(p1);
-        RtlCopyMemory(((PUCHAR)Packet.Header) + i, p1->payload, p1->len);
-    }
-    
+
+    ASSERT(p->tot_len == p->len);
+    ASSERT(Packet.ContigSize == p->len);
+
+    RtlCopyMemory(Packet.Header, p->payload, p->len);
+
     Packet.HeaderSize = sizeof(IPv4_HEADER);
     Packet.TotalSize = p->tot_len;
     Packet.SrcAddr = LocalAddress;
     Packet.DstAddr = RemoteAddress;
-    
+
     NdisStatus = IPSendDatagram(&Packet, NCE);
     FreeNdisPacket(Packet.NdisPacket);
     if (!NT_SUCCESS(NdisStatus))
index 07100d2..1b60945 100755 (executable)
@@ -12,21 +12,19 @@ LibIPInsertPacket(void *ifarg,
                   const void *const data,
                   const u32_t size)
 {
-    struct pbuf *p, *p1;
-    u32_t i;
-    
+    struct pbuf *p;
+
     ASSERT(ifarg);
     ASSERT(data);
     ASSERT(size > 0);
 
-    p = pbuf_alloc(PBUF_TRANSPORT, size, PBUF_POOL);
+    p = pbuf_alloc(PBUF_RAW, size, PBUF_RAM);
     if (p)
     {
-        for (i = 0, p1 = p; i < size; i += p1->len, p1 = p1->next)
-        {
-            ASSERT(p1);
-            RtlCopyMemory(p1->payload, ((PUCHAR)data) + i, p1->len);
-        }
+        ASSERT(p->tot_len == p->len);
+        ASSERT(p->len == size);
+
+        RtlCopyMemory(p->payload, data, p->len);
 
         ((PNETIF)ifarg)->input(p, (PNETIF)ifarg);
     }