[netfilter-cvslog] r3272 - in trunk/nfsim: core core/ipv4 kernelenv kernelenv/include tools

rusty at netfilter.org rusty at netfilter.org
Thu Nov 11 03:30:32 CET 2004


Author: rusty at netfilter.org
Date: 2004-11-11 03:30:31 +0100 (Thu, 11 Nov 2004)
New Revision: 3272

Modified:
   trunk/nfsim/core/Makefile
   trunk/nfsim/core/core.c
   trunk/nfsim/core/expect.c
   trunk/nfsim/core/fakesockopt.c
   trunk/nfsim/core/ipv4/ipv4.c
   trunk/nfsim/core/log.c
   trunk/nfsim/core/message.c
   trunk/nfsim/core/proc.c
   trunk/nfsim/core/tui.c
   trunk/nfsim/core/utils.c
   trunk/nfsim/core/utils.h
   trunk/nfsim/kernelenv/include/kernelenv.h
   trunk/nfsim/kernelenv/kernelenv.c
   trunk/nfsim/tools/hook.c
   trunk/nfsim/tools/ifconfig.c
   trunk/nfsim/tools/route.c
Log:
COnvert allocation to talloc.  Talloc rocks!


Modified: trunk/nfsim/core/Makefile
===================================================================
--- trunk/nfsim/core/Makefile	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/Makefile	2004-11-11 02:30:31 UTC (rev 3272)
@@ -1,2 +1,2 @@
-OBJS += core/utils.o core/core.o core/message.o core/$(TYPE)/$(TYPE).o core/seq_file.o
+OBJS += core/utils.o core/core.o core/message.o core/$(TYPE)/$(TYPE).o core/seq_file.o core/talloc.o
 HELP_OBJS += core/tui.o core/expect.o core/log.o core/proc.o

Modified: trunk/nfsim/core/core.c
===================================================================
--- trunk/nfsim/core/core.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/core.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -95,7 +95,7 @@
 	for (i = 1; i < DEFAULT_DEVICES; i++) {
 		struct net_device *dev;
 
-		dev = new(struct net_device);
+		dev = talloc(NULL, struct net_device);
 		strncpy(dev->name, default_devnames[i], IFNAMSIZ);
 		dev->ifindex = i;
 
@@ -114,7 +114,7 @@
 {
 	struct nfsim_queueitem *pq;
 
-	pq = new(struct nfsim_queueitem);
+	pq = talloc(skb, struct nfsim_queueitem);
 	pq->skb = skb;
 	pq->info = info;
 	pq->id = queueid++;
@@ -170,6 +170,8 @@
 		}
 	}
 
+	kernelenv_init();
+
 	run_inits();
 
 	nf_register_queue_handler(PF_INET, enqueue_packet, NULL);

Modified: trunk/nfsim/core/expect.c
===================================================================
--- trunk/nfsim/core/expect.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/expect.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -140,7 +140,7 @@
 
 static void expect_pre_command(const char *command)
 {
-	current_command = strdup(command);
+	current_command = talloc_strdup(NULL, command);
 }
 
 static void expect_post_command(const char *command)
@@ -163,11 +163,9 @@
 		*e = (*e)->next;
 		next = e;
 
-		free(old->pattern);
-		free(old->command);
-		free(old);
+		talloc_free(old);
 	}
-	free(current_command);
+	talloc_free(current_command);
 }
 
 static bool expect_cmd(int argc, char **argv)
@@ -200,16 +198,16 @@
 		return false;
 	}
 
-	e = new(struct expect);
+	e = talloc(NULL, struct expect);
 	e->matched = 0;
 	e->invert = invert;
 	e->next = expect;
 
-	e->command = strdup(argv[1]);
+	e->command = talloc_strdup(e, argv[1]);
 
 	for (len = 0, i = 2; i < argc; i++)
 		len += strlen(argv[i])+1;
-	e->pattern = new_array(char, len + 1);
+	e->pattern = talloc_array(e, char, len + 1);
 
 	e->pattern[0] = '\0';
 	for (i = 2; i < argc; i++) {

Modified: trunk/nfsim/core/fakesockopt.c
===================================================================
--- trunk/nfsim/core/fakesockopt.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/fakesockopt.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -152,7 +152,7 @@
 		reply->len = 0;
 		break;
 	case KOP_COPY_FROM_USER:
-		reply = malloc_nofail(m_offset + msg->args[2]);
+		reply = malloc(m_offset + msg->args[2]);
 		memcpy(reply, msg, m_offset);
 		memcpy((char *)reply + m_offset, (char *)msg->args[1], msg->args[2]);
 		reply->len = msg->args[2];
@@ -192,7 +192,7 @@
 		exit(EXIT_FAILURE);
 	}
 
-	reply = new(struct nf_userspace_message);
+	reply = malloc(sizeof(*reply));
 
 	while(1) {
 		if (read(sd, reply, msize) < msize) {
@@ -201,7 +201,7 @@
 		}
 
 		if (reply->len != 0)
-			reply = realloc_nofail(reply, msize + reply->len);
+			reply = realloc(reply, msize + reply->len);
 
 		if (read(sd, (char *)reply + msize, reply->len) < msg->len) {
 			perror("read");

Modified: trunk/nfsim/core/ipv4/ipv4.c
===================================================================
--- trunk/nfsim/core/ipv4/ipv4.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/ipv4/ipv4.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -34,6 +34,27 @@
 
 static int __ip_route_output_key(struct rtable **rp, struct flowi *flp);
 
+static int destroy_route(void *r)
+{
+	struct ipv4_route *route = r;
+	list_del(&route->entry);
+	return 0;
+}
+
+static int destroy_rtable(void *r)
+{
+	struct rtable *rt = r, **p;
+
+	/* Remove from cache if it's there (it should be, currently) */
+	for (p = &rcache; *p; p = &(*p)->u.rt_next) {
+		if (*p == rt) {
+			*p = rt->u.rt_next;
+			break;
+		}
+	}
+	return 0;
+}
+
 /* need the following:
     - interfaces
     - routes
@@ -60,10 +81,10 @@
 		struct in_device *ifdev;
 		struct in_ifaddr *ifaddr;
 
-		ifdev = new(struct in_device);
+		ifdev = talloc(NULL, struct in_device);
 		dev->ip_ptr = ifdev;
 
-		ifaddr = new(struct in_ifaddr);
+		ifaddr = talloc(ifdev, struct in_ifaddr);
 
 		ifdev->ifa_list = ifaddr;
 		
@@ -85,7 +106,8 @@
 			(ifaddr->ifa_address & ifaddr->ifa_mask) +
 			(0xffffffff & ~ifaddr->ifa_mask);
 
-		route = new(struct ipv4_route);
+		route = talloc(ifdev, struct ipv4_route);
+		talloc_set_destructor(route, destroy_route);
 		route->netmask = ifaddr->ifa_mask;
 		route->network = ifaddr->ifa_address & ifaddr->ifa_mask;
 		route->interface = dev;
@@ -197,16 +219,6 @@
 }
 
 
-static struct rtable *alloc_rtable(void)
-{
-	struct rtable *rth;
-	
-	rth = new(struct rtable);
-	memset(rth, 0, sizeof(struct rtable));
-
-	return rth;
-}
-
 unsigned short ip_compute_csum(unsigned char * buff, int len)
 {
     return csum_fold (csum_partial(buff, len, 0));
@@ -243,7 +255,8 @@
 		ifaddr = ((struct in_device *)(dev->ip_ptr))->ifa_list;
 		while (ifaddr) {
 			if (flp->fl4_dst == ifaddr->ifa_local) {
-				rth = alloc_rtable();
+				rth = talloc_zero(dev->ip_ptr, struct rtable);
+				talloc_set_destructor(rth, destroy_rtable);
 
 				rth->u.dst.output = ip_output;
 				rth->u.dst.input  = ip_local_deliver;
@@ -275,7 +288,8 @@
 	list_for_each_entry(route, &routes, entry) {
 		if ((flp->fl4_dst & route->netmask) ==
 		           route->network) {
-			rth = alloc_rtable();
+			rth = talloc_zero(route, struct rtable);
+			talloc_set_destructor(rth, destroy_rtable);
 
 			rth->u.dst.dev    =  route->interface;
 			rth->u.dst.output = ip_output;
@@ -389,7 +403,8 @@
 				log_route(skb,
 					"route:local packet (%s)",
 			 		dev->name);
-				rth = alloc_rtable();
+				rth = talloc_zero(dev->ip_ptr, struct rtable);
+				talloc_set_destructor(rth, destroy_rtable);
 
 				rth->u.dst.output = NULL;
 				rth->u.dst.input  = ip_local_deliver;
@@ -416,7 +431,8 @@
 	list_for_each_entry(route, &routes, entry) {
 		if ((skb->nh.iph->daddr & route->netmask) ==
 		           route->network) {
-			rth = alloc_rtable();
+			rth = talloc_zero(route, struct rtable);
+			talloc_set_destructor(rth, destroy_rtable);
 
 			rth->u.dst.dev = skb->dev = route->interface;
 

Modified: trunk/nfsim/core/log.c
===================================================================
--- trunk/nfsim/core/log.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/log.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -61,14 +61,14 @@
 	bool ret;
 
 	va_start(ap, format);
-	vasprintf(&line, format, ap);
+	line = talloc_vasprintf(NULL, format, ap);
 	va_end(ap);
 
 	if (!type || (type & typemask))
 		fprintf(logstream, "%s\n", line);
 
 	ret = expect_log_hook(line);
-	free(line);
+	talloc_free(line);
 	return ret;
 }
 

Modified: trunk/nfsim/core/message.c
===================================================================
--- trunk/nfsim/core/message.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/message.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -89,43 +89,42 @@
 int handle_userspace_message(int fd)
 {
 	int len;
-	struct nf_userspace_message *msg;
+	struct nf_userspace_message msg;
 
-	msg = new(struct nf_userspace_message);
-	len = read(fd, msg, sizeof(*msg));
-	if (len != sizeof(*msg)) {
-		free(msg);
+	/* FIXME: msg.len?  Presumable always 0? --RR */
+	len = read(fd, &msg, sizeof(msg));
+	if (len != sizeof(msg))
 		return -1;
-	}
+
 	fprintf(stderr, "%s: received %u bytes\n", __FUNCTION__, len);
 
-	if (msg->type == UM_SYSCALL) {
-		switch (msg->opcode) {
+	if (msg.type == UM_SYSCALL) {
+		switch (msg.opcode) {
 
 		case SYS_GETSOCKOPT:
-			msg->retval = nf_getsockopt(NULL, msg->args[0],
-					msg->args[1], (char *)msg->args[2],
-					&msg->args[3]);
-			write(fd, msg, sizeof(struct nf_userspace_message) +
-				msg->len);
+			msg.retval = nf_getsockopt(NULL, msg.args[0],
+					msg.args[1], (char *)msg.args[2],
+					&msg.args[3]);
+			write(fd, &msg, sizeof(struct nf_userspace_message) +
+				msg.len);
 			break;
 		case SYS_SETSOCKOPT:
-			msg->retval = nf_setsockopt(NULL, msg->args[0],
-					msg->args[1], (char *)msg->args[2],
-					msg->args[3]);
-			write(fd, msg, sizeof(struct nf_userspace_message) +
-				msg->len);
+			msg.retval = nf_setsockopt(NULL, msg.args[0],
+					msg.args[1], (char *)msg.args[2],
+					msg.args[3]);
+			write(fd, &msg, sizeof(struct nf_userspace_message) +
+				msg.len);
 			break;
 		default:
 			fprintf(stderr, "Invalid syscall opcode %d\n",
-				msg->opcode);
+				msg.opcode);
 		}
-	} else if (msg->type == UM_KERNELOP) {
-		switch (msg->opcode) {
+	} else if (msg.type == UM_KERNELOP) {
+		switch (msg.opcode) {
 
 		case KOP_COPY_FROM_USER:
-			if (complete_read(fd, (char *)msg->args[0], msg->args[2]) !=
-					msg->args[2])
+			if (complete_read(fd, (char *)msg.args[0], msg.args[2]) !=
+					msg.args[2])
 				barf_perror("read");
 			break;
 		case KOP_COPY_TO_USER:
@@ -133,13 +132,12 @@
 			break;
 		default:
 			fprintf(stderr, "Invalid kernelop opcode %d\n",
-				msg->opcode);
+				msg.opcode);
 		}
 	} else {
-		fprintf(stderr, "Unknown message type %d\n", msg->type);
+		fprintf(stderr, "Unknown message type %d\n", msg.type);
 	}
 
-	free(msg);
 	return 0;
 }
 
@@ -155,11 +153,8 @@
 {
 	struct nf_userspace_message *msg;
 
-	msg = malloc_nofail(sizeof(struct nf_userspace_message) + n);
+	msg = talloc_zero_named_const(NULL, sizeof(struct nf_userspace_message) + n, "copy_to_user");
 
-	/* keep valgrind happy */
-	memset(msg, 0, sizeof(struct nf_userspace_message) + n);
-
 	msg->type = UM_KERNELOP;
 	msg->opcode = KOP_COPY_TO_USER;
 	msg->len = n;
@@ -175,7 +170,7 @@
 
 	send_userspace_message(msg);
 
-	free(msg);
+	talloc_free(msg);
 
 	return 0;
 }

Modified: trunk/nfsim/core/proc.c
===================================================================
--- trunk/nfsim/core/proc.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/proc.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -76,7 +76,7 @@
 		goto out;
 	len = strlen(fn);
 
-	ent = malloc(sizeof(struct proc_dir_entry) + len + 1);
+	ent = talloc_size(NULL, sizeof(struct proc_dir_entry) + len + 1);
 	if (!ent) goto out;
 
 	memset(ent, 0, sizeof(struct proc_dir_entry));
@@ -104,7 +104,7 @@
 			  (S_IFDIR | S_IRUGO | S_IXUGO),2);
 
 	if (ent && proc_register(parent, ent) < 0) {
-		free(ent);
+		talloc_free(ent);
 		ent = NULL;
 	}
 	return ent;
@@ -117,7 +117,7 @@
 
 	ent = proc_create(&parent,name,mode, 0);
 	if (ent && proc_register(parent, ent) < 0) {
-		free(ent);
+		talloc_free(ent);
 		ent = NULL;
 	}
 	return ent;

Modified: trunk/nfsim/core/tui.c
===================================================================
--- trunk/nfsim/core/tui.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/tui.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -253,7 +253,7 @@
 {
 	struct pre_post_hook *h;
 
-	h = new(struct pre_post_hook);
+	h = talloc(NULL, struct pre_post_hook);
 	h->pre = pre;
 	h->post = post;
 	list_add(&h->list, &pre_post_hooks);
@@ -268,7 +268,7 @@
 
 	assert(strlen(command) < TUI_MAX_CMD_LEN);
 
-	cmd = new(struct command);
+	cmd = talloc(NULL, struct command);
 	strncpy(cmd->name, command, TUI_MAX_CMD_LEN);	
 	cmd->handler = handler;
 	cmd->helpfn  = helpfn;

Modified: trunk/nfsim/core/utils.c
===================================================================
--- trunk/nfsim/core/utils.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/utils.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -61,26 +61,3 @@
 	free(str);
 	exit(1);
 }
-
-void *_realloc_array(void *ptr, size_t size, size_t num)
-{
-        if (num >= SIZE_MAX/size)
-                return NULL;
-        return realloc_nofail(ptr, size * num);
-}
-
-void *realloc_nofail(void *ptr, size_t size)
-{
-        ptr = realloc(ptr, size);
-	if (ptr)
-		return ptr;
-	barf("realloc of %zu failed", size);
-}
-
-void *malloc_nofail(size_t size)
-{
-	void *ptr = malloc(size);
-	if (ptr)
-		return ptr;
-	barf("malloc of %zu failed", size);
-}

Modified: trunk/nfsim/core/utils.h
===================================================================
--- trunk/nfsim/core/utils.h	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/utils.h	2004-11-11 02:30:31 UTC (rev 3272)
@@ -40,16 +40,8 @@
 	return streq(a + strlen(a) - strlen(b), b);
 }
 
-/* Convenient wrappers for malloc and realloc.  Use them. */
-#define new(type) ((type *)malloc_nofail(sizeof(type)))
-#define new_array(type, num) realloc_array(0, type, (num))
-#define realloc_array(ptr, type, num) ((type *)_realloc_array((ptr), sizeof(type), (num)))
-
-void *malloc_nofail(size_t size);
-void *realloc_nofail(void *ptr, size_t size);
-void *_realloc_array(void *ptr, size_t size, size_t num);
-
 void barf(const char *fmt, ...) __attribute__((noreturn));
 void barf_perror(const char *fmt, ...) __attribute__((noreturn));
 
+extern void kernelenv_init(void);
 #endif /* _STDRUSTY_H */

Modified: trunk/nfsim/kernelenv/include/kernelenv.h
===================================================================
--- trunk/nfsim/kernelenv/include/kernelenv.h	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/kernelenv/include/kernelenv.h	2004-11-11 02:30:31 UTC (rev 3272)
@@ -88,27 +88,28 @@
 #define __inline
 #define ____cacheline_aligned
 
+#include <stdarg.h>
+#include <talloc.h>
+extern void *__vmalloc_ctx;
+extern void *__kmalloc_atomic_ctx;
+extern void *__kmalloc_ctx;
 
 #define MALLOC_INIT 1
 
 #ifdef MALLOC_INIT
-static inline void *vmalloc(size_t size)
-{
-	void *buf;
-	if ((buf = malloc(size)))
-		memset(buf, 0, size);
-	return buf;
-}
-#define kmalloc(p,f) vmalloc(p)
+#define vmalloc(s) talloc_zero_named_const(__vmalloc_ctx, (s), __location__)
+#define kmalloc(s,f) ((f) & GFP_ATOMIC				\
+		      ? talloc_zero_named_const(__kmalloc_atomic_ctx, (s), __location__)	\
+		      : talloc_zero_named_const(__kmalloc_ctx, (s), __location__))
 #else
-
-#define vmalloc malloc
-#define kmalloc(p,f) malloc(p)
-
+#define vmalloc(s) talloc_size(__vmalloc_ctx, (s))
+#define kmalloc(s,f) ((f) & GFP_ATOMIC				\
+		      ? talloc_size(__kmalloc_atomic_ctx, (s))	\
+		      : talloc_size(__kmalloc_ctx, (s)))
 #endif
 
-#define vfree   free
-#define kfree   free
+#define vfree(p)   talloc_unreference(__vmalloc_ctx, (p))
+#define kfree(p)   talloc_free(p)
 
 #define synchronize_net() 
 

Modified: trunk/nfsim/kernelenv/kernelenv.c
===================================================================
--- trunk/nfsim/kernelenv/kernelenv.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/kernelenv/kernelenv.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -40,6 +40,7 @@
 }
 	
 /* skbuff */
+static void *__skb_ctx;
 
 struct sk_buff *alloc_skb(unsigned int size, int gfp_mask)
 {
@@ -47,8 +48,8 @@
 	static int seq;
 
 	/* skb, followed by data, followed by skb_shinfo */
-	skb = malloc_nofail(sizeof(struct sk_buff) +
-		sizeof(struct skb_shared_info) + size);
+	skb = talloc_size(__skb_ctx, sizeof(struct sk_buff) +
+			  sizeof(struct skb_shared_info) + size);
 	
 	memset(skb, 0, sizeof(struct sk_buff) + size);
 	atomic_set(&skb->users, 1);
@@ -72,8 +73,7 @@
 	if (skb->dst)
 		dst_release(skb->dst);
 
-	free(skb);
-
+	talloc_free(skb);
 }
 
 
@@ -475,7 +475,8 @@
 	void (*dtor)(void *, kmem_cache_t *, unsigned long))
 {
 	kmem_cache_t *cache;
-	cache = new(kmem_cache_t);
+
+	cache = talloc(NULL, kmem_cache_t);
 	cache->name = name;
 	cache->objsize = objsize;
 	cache->ctor = ctor;
@@ -487,12 +488,7 @@
 
 int kmem_cache_destroy(kmem_cache_t *cache)
 {
-	struct list_head *i;
-	list_for_each(i, cache->objs.next) {
-		free(list_entry(i,struct kmem_cache_obj, entry)->ptr);
-		free(list_entry(i,struct kmem_cache_obj, entry));
-	}
-	free(cache);
+	talloc_free(cache);
 	return 0;
 }
 
@@ -501,8 +497,8 @@
 {
 	struct kmem_cache_obj *obj;
 
-	obj = new(struct kmem_cache_obj);
-	obj->ptr = malloc_nofail(cache->objsize);
+	obj = talloc(cache, struct kmem_cache_obj);
+	obj->ptr = talloc_size(obj, cache->objsize);
 
 	list_add(&obj->entry, &cache->objs);
 
@@ -511,21 +507,26 @@
 }
 void kmem_cache_free(kmem_cache_t *cache, void *ptr)
 {
-	struct kmem_cache_obj *i, *obj = 0;
+	struct kmem_cache_obj *i;
 	
 	list_for_each_entry(i, &(cache->objs), entry) {
 		if (i->ptr == ptr) {
-			obj = i;
-			break;
+			list_del(&i->entry);
+			talloc_free(i);
+			return;
 		}
 	}
 
-	if (!obj)
-		panic("[cache] attempting to free non-cache memory\n");
+	panic("[cache] attempting to free non-cache memory\n");
 }
 
+void *__vmalloc_ctx, *__kmalloc_ctx, *__kmalloc_atomic_ctx;
 
-
-
-
-
+void kernelenv_init(void)
+{
+	__vmalloc_ctx = talloc_named_const(NULL, 1, "vmallocs");
+	__kmalloc_ctx = talloc_named_const(NULL, 1, "kmallocs");
+	__kmalloc_atomic_ctx = talloc_named_const(NULL, 1,
+						  "kmallocs (atomic)");
+	__skb_ctx = talloc_named_const(NULL, 1, "skbs");
+}

Modified: trunk/nfsim/tools/hook.c
===================================================================
--- trunk/nfsim/tools/hook.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/tools/hook.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -106,7 +106,7 @@
 		return false;
 	}
 
-	l = new(struct hook_list);
+	l = talloc(NULL, struct hook_list);
 	l->ops.owner = THIS_MODULE;
 	l->ops.priority = atoi(argv[2]);
 
@@ -127,7 +127,7 @@
 		l->ops.hooknum = NF_IP_FORWARD;
 	} else {
 		nfsim_log(LOG_ALWAYS, "Unknown hook %s", argv[1]);
-		free(l);
+		talloc_free(l);
 		return false;
 	}
 
@@ -139,7 +139,7 @@
 		l->ops.hook = hook_queue;
 	else {
 		nfsim_log(LOG_ALWAYS, "Unknown verdict %s", argv[3]);
-		free(l);
+		talloc_free(l);
 		return false;
 	}
 

Modified: trunk/nfsim/tools/ifconfig.c
===================================================================
--- trunk/nfsim/tools/ifconfig.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/tools/ifconfig.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -142,19 +142,17 @@
 			return false;
 		}
 
-		dev = new(struct net_device);
-		indev = new(struct in_device);
+		dev = talloc(NULL, struct net_device);
+		indev = talloc(dev, struct in_device);
 
 		dev->ip_ptr = indev;
-		indev->ifa_list = new(struct in_ifaddr);
+		indev->ifa_list = talloc(indev, struct in_ifaddr);
 		indev->ifa_list->ifa_next = NULL;
 
 		strncpy(dev->name, argv[1], IFNAMSIZ);
 
 		if (!set_device(dev, 3, argv + 2)) {
-			free(indev->ifa_list);
-			free(indev);
-			free(dev);
+			talloc_free(dev);
 			return false;
 		}
 
@@ -174,9 +172,6 @@
 
 	if (argc == 3 && !strncmp(argv[2], "down", 4)) {
 		list_del(&dev->entry);
-		/* FIXME: pain: walk backwards through if_addr list
-		 and free as required */
-		free(dev->ip_ptr);
 		free(dev);
 		return true;
 	}

Modified: trunk/nfsim/tools/route.c
===================================================================
--- trunk/nfsim/tools/route.c	2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/tools/route.c	2004-11-11 02:30:31 UTC (rev 3272)
@@ -143,21 +143,21 @@
 			return false;
 		}
 
-		route = new(struct ipv4_route);
+		route = talloc(NULL, struct ipv4_route);
 		if (get_route_dest(route, argc-3, argv+2)) {
-			free(route);
+			talloc_free(route);
 			return false;
 		}
 
 		if (find_matching_route(route)) {
 			nfsim_log(LOG_UI, "route already exists!");
-			free(route);
+			talloc_free(route);
 			return false;
 		}
 
 		if (!(dev = interface_by_name(argv[argc-1]))) {
 			nfsim_log(LOG_UI, "no such interface %s", argv[argc-1]);
-			free(route);
+			talloc_free(route);
 			return false;
 		}
 
@@ -172,9 +172,9 @@
 		struct ipv4_route *r2;
 		char found=0;
 
-		route = new(struct ipv4_route);
+		route = talloc(NULL, struct ipv4_route);
 		if (get_route_dest(route, argc-2, argv+2)) {
-			free(route);
+			talloc_free(route);
 			return false;
 		}
 
@@ -184,7 +184,7 @@
 			    route->netmask == r2->netmask) {
 				found=1;
 				list_del(&r2->entry);
-				free(r2);
+				talloc_free(r2);
 				nfsim_log(LOG_UI, "route removed");
 				break;
 			}
@@ -193,7 +193,7 @@
 			nfsim_log(LOG_UI, "route not found");
 		}
 
-		free(route);
+		talloc_free(route);
 
 		return true;
 	}




More information about the netfilter-cvslog mailing list