- Save a bit of memory by changing the way pbufs are allocated for transmission

svn path=/trunk/; revision=54561
This commit is contained in:
Cameron Gutman
2011-12-02 06:55:05 +00:00
parent 857e528264
commit 9bcecdfc3c
2 changed files with 16 additions and 21 deletions
+9 -12
View 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))
+7 -9
View File
@@ -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);
}