From 9bcecdfc3c1742ed0c8373a1bb4f9cd7dd69a290 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 2 Dec 2011 06:55:05 +0000 Subject: [PATCH] [LWIP] - 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 | 21 +++++++++------------ reactos/lib/drivers/lwip/src/rosip.c | 16 +++++++--------- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/reactos/lib/drivers/ip/transport/tcp/if.c b/reactos/lib/drivers/ip/transport/tcp/if.c index bc26c92d135..f8ef99d541b 100644 --- a/reactos/lib/drivers/ip/transport/tcp/if.c +++ b/reactos/lib/drivers/ip/transport/tcp/if.c @@ -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)) diff --git a/reactos/lib/drivers/lwip/src/rosip.c b/reactos/lib/drivers/lwip/src/rosip.c index 07100d268b9..1b60945082c 100755 --- a/reactos/lib/drivers/lwip/src/rosip.c +++ b/reactos/lib/drivers/lwip/src/rosip.c @@ -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); } -- 2.17.1