DNS_LOCAL_HOSTLIST_IS_DYNAMIC uses its own MEMP pool instead of the heap

This commit is contained in:
goldsimon 2010-05-16 13:36:51 +00:00
parent 6ffd29507c
commit 03bd61c799
4 changed files with 34 additions and 11 deletions

View File

@ -78,6 +78,7 @@
#include "lwip/udp.h" #include "lwip/udp.h"
#include "lwip/mem.h" #include "lwip/mem.h"
#include "lwip/memp.h"
#include "lwip/dns.h" #include "lwip/dns.h"
#include <string.h> #include <string.h>
@ -180,14 +181,6 @@ struct dns_table_entry {
}; };
#if DNS_LOCAL_HOSTLIST #if DNS_LOCAL_HOSTLIST
/** struct used for local host-list */
struct local_hostlist_entry {
/** static hostname */
const char *name;
/** static host address in network byteorder */
ip_addr_t addr;
struct local_hostlist_entry *next;
};
#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC #if DNS_LOCAL_HOSTLIST_IS_DYNAMIC
/** Local host-list. For hostnames in this list, no /** Local host-list. For hostnames in this list, no
@ -329,7 +322,8 @@ dns_init_local()
struct local_hostlist_entry *init_entry = &local_hostlist_init[i]; struct local_hostlist_entry *init_entry = &local_hostlist_init[i];
LWIP_ASSERT("invalid host name (NULL)", init_entry->name != NULL); LWIP_ASSERT("invalid host name (NULL)", init_entry->name != NULL);
namelen = strlen(init_entry->name); namelen = strlen(init_entry->name);
entry = mem_malloc((mem_size_t)(sizeof(struct local_hostlist_entry) + namelen + 1)); LWIP_ASSERT("namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN", namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN);
entry = (struct local_hostlist_entry *)memp_malloc(MEMP_LOCALHOSTLIST);
LWIP_ASSERT("mem-error in dns_init_local", entry != NULL); LWIP_ASSERT("mem-error in dns_init_local", entry != NULL);
if (entry != NULL) { if (entry != NULL) {
entry->name = (char*)entry + sizeof(struct local_hostlist_entry); entry->name = (char*)entry + sizeof(struct local_hostlist_entry);
@ -398,7 +392,7 @@ dns_local_removehost(const char *hostname, const ip_addr_t *addr)
} }
free_entry = entry; free_entry = entry;
entry = entry->next; entry = entry->next;
mem_free(free_entry); memp_free(MEMP_LOCALHOSTLIST, free_entry);
removed++; removed++;
} else { } else {
last_entry = entry; last_entry = entry;
@ -423,7 +417,8 @@ dns_local_addhost(const char *hostname, const ip_addr_t *addr)
size_t namelen; size_t namelen;
LWIP_ASSERT("invalid host name (NULL)", hostname != NULL); LWIP_ASSERT("invalid host name (NULL)", hostname != NULL);
namelen = strlen(hostname); namelen = strlen(hostname);
entry = mem_malloc((mem_size_t)(sizeof(struct local_hostlist_entry) + namelen + 1)); LWIP_ASSERT("namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN", namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN);
entry = (struct local_hostlist_entry *)memp_malloc(MEMP_LOCALHOSTLIST);
if (entry == NULL) { if (entry == NULL) {
return ERR_MEM; return ERR_MEM;
} }

View File

@ -73,6 +73,23 @@
sizeof(struct addrinfo) + sizeof(struct sockaddr_in) + DNS_MAX_NAME_LENGTH + 1 byte zero-termination */ sizeof(struct addrinfo) + sizeof(struct sockaddr_in) + DNS_MAX_NAME_LENGTH + 1 byte zero-termination */
#define NETDB_ELEM_SIZE (32 + 16 + DNS_MAX_NAME_LENGTH + 1) #define NETDB_ELEM_SIZE (32 + 16 + DNS_MAX_NAME_LENGTH + 1)
#if DNS_LOCAL_HOSTLIST
/** struct used for local host-list */
struct local_hostlist_entry {
/** static hostname */
const char *name;
/** static host address in network byteorder */
ip_addr_t addr;
struct local_hostlist_entry *next;
};
#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC
#ifndef DNS_LOCAL_HOSTLIST_MAX_NAMELEN
#define DNS_LOCAL_HOSTLIST_MAX_NAMELEN DNS_MAX_NAME_LENGTH
#endif
#define LOCALHOSTLIST_ELEM_SIZE ((sizeof(struct local_hostlist_entry) + DNS_LOCAL_HOSTLIST_MAX_NAMELEN + 1))
#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
#endif /* DNS_LOCAL_HOSTLIST */
/** Callback which is invoked when a hostname is found. /** Callback which is invoked when a hostname is found.
* A function of this type must be implemented by the application using the DNS resolver. * A function of this type must be implemented by the application using the DNS resolver.
* @param name pointer to the name that was looked up. * @param name pointer to the name that was looked up.

View File

@ -79,6 +79,9 @@ LWIP_MEMPOOL(SNMP_VALUE, MEMP_NUM_SNMP_VALUE, SNMP_MAX_VALUE_SIZE,
#if LWIP_DNS && LWIP_SOCKET #if LWIP_DNS && LWIP_SOCKET
LWIP_MEMPOOL(NETDB, MEMP_NUM_NETDB, NETDB_ELEM_SIZE, "NETDB") LWIP_MEMPOOL(NETDB, MEMP_NUM_NETDB, NETDB_ELEM_SIZE, "NETDB")
#endif /* LWIP_DNS && LWIP_SOCKET */ #endif /* LWIP_DNS && LWIP_SOCKET */
#if LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC
LWIP_MEMPOOL(LOCALHOSTLIST, MEMP_NUM_LOCALHOSTLIST, LOCALHOSTLIST_ELEM_SIZE, "LOCALHOSTLIST")
#endif /* LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
/* /*
* A list of pools of pbuf's used by LWIP. * A list of pools of pbuf's used by LWIP.

View File

@ -370,6 +370,14 @@
#define MEMP_NUM_NETDB 1 #define MEMP_NUM_NETDB 1
#endif #endif
/**
* MEMP_NUM_LOCALHOSTLIST: the number of host entries in the local host list
* if DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1.
*/
#ifndef MEMP_NUM_LOCALHOSTLIST
#define MEMP_NUM_LOCALHOSTLIST 1
#endif
/** /**
* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. * PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
*/ */