patch-2.1.56 linux/net/appletalk/ddp.c

Next file: linux/net/appletalk/sysctl_net_atalk.c
Previous file: linux/net/appletalk/aarp.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.55/linux/net/appletalk/ddp.c linux/net/appletalk/ddp.c
@@ -25,6 +25,10 @@
  *		Alan Cox		:	Posix bits
  *		Alan Cox/Mike Freeman	:	Possible fix to NBP problems
  *		Bradford Johnson	:	IP-over-DDP (experimental)
+ *		Jay Schulist		:	Moved IP-over-DDP to its own
+ *						driver file. (ipddp.c & ipddp.h)
+ *		Jay Schulist		:	Made work as module with 
+ *						Appletalk drivers, cleaned it.
  *
  *		This program is free software; you can redistribute it and/or
  *		modify it under the terms of the GNU General Public License
@@ -34,6 +38,7 @@
  */
 
 #include <linux/config.h>
+#if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)
 #include <linux/module.h>
 #include <asm/uaccess.h>
 #include <asm/system.h>
@@ -72,35 +77,34 @@
 
 #undef APPLETALK_DEBUG
 
-
 #ifdef APPLETALK_DEBUG
 #define DPRINT(x)		print(x)
 #else
 #define DPRINT(x)
-#endif
+#endif /* APPLETALK_DEBUG */
 
 #ifdef CONFIG_SYSCTL
 extern inline void atalk_register_sysctl(void);
 extern inline void atalk_unregister_sysctl(void);
-#endif
+#endif /* CONFIG_SYSCTL */
 
 struct datalink_proto *ddp_dl, *aarp_dl;
 static struct proto_ops atalk_dgram_ops;
 
 #define min(a,b)	(((a)<(b))?(a):(b))
 
-/***********************************************************************************************************************\
-*															*
-*						Handlers for the socket list.						*
-*															*
-\***********************************************************************************************************************/
-
-static struct sock *atalk_socket_list=NULL;
+/**************************************************************************\
+*                                                                          *
+* Handlers for the socket list.                                            *
+*                                                                          *
+\**************************************************************************/
+
+static struct sock *atalk_socket_list = NULL;
 
 /*
- *	Note: Sockets may not be removed _during_ an interrupt or inet_bh
- *	handler using this technique. They can be added although we do not
- *	use this facility.
+ * Note: Sockets may not be removed _during_ an interrupt or inet_bh
+ * handler using this technique. They can be added although we do not
+ * use this facility.
  */
 
 extern inline void atalk_remove_socket(struct sock *sk)
@@ -117,70 +121,73 @@
 {
 	struct sock *s;
 
-	for( s = atalk_socket_list; s != NULL; s = s->next )
+	for(s = atalk_socket_list; s != NULL; s = s->next)
 	{
-		if ( to->sat_port != s->protinfo.af_at.src_port )
+		if(to->sat_port != s->protinfo.af_at.src_port)
 		{
 			continue;
 	   	}
 
-	    	if ( to->sat_addr.s_net == 0 &&
-		    to->sat_addr.s_node == ATADDR_BCAST &&
-		    s->protinfo.af_at.src_net == atif->address.s_net )
+	    	if(to->sat_addr.s_net == 0
+			&& to->sat_addr.s_node == ATADDR_BCAST
+			&& s->protinfo.af_at.src_net == atif->address.s_net)
 		{
 			break;
 	    	}
 
-	    	if ( to->sat_addr.s_net == s->protinfo.af_at.src_net &&
-		    (to->sat_addr.s_node == s->protinfo.af_at.src_node
-		     ||to->sat_addr.s_node == ATADDR_BCAST
-			||to->sat_addr.s_node == ATADDR_ANYNODE ))
+	    	if(to->sat_addr.s_net == s->protinfo.af_at.src_net
+			&& (to->sat_addr.s_node == s->protinfo.af_at.src_node
+		     	|| to->sat_addr.s_node == ATADDR_BCAST
+			|| to->sat_addr.s_node == ATADDR_ANYNODE))
 		{
 			break;
 	   	}
 
 	    	/* XXXX.0 */
 	}
-	return( s );
+
+	return (s);
 }
 
 /*
- *	Find a socket in the list.
+ * Find a socket in the list.
  */
-
 static struct sock *atalk_find_socket(struct sockaddr_at *sat)
 {
 	struct sock *s;
 
-	for ( s = atalk_socket_list; s != NULL; s = s->next )
+	for(s = atalk_socket_list; s != NULL; s = s->next)
 	{
-		if ( s->protinfo.af_at.src_net != sat->sat_addr.s_net )
+		if(s->protinfo.af_at.src_net != sat->sat_addr.s_net)
 		{
 			continue;
 		}
-		if ( s->protinfo.af_at.src_node != sat->sat_addr.s_node )
+
+		if(s->protinfo.af_at.src_node != sat->sat_addr.s_node)
 		{
 			continue;
 		}
-		if ( s->protinfo.af_at.src_port != sat->sat_port )
+
+		if(s->protinfo.af_at.src_port != sat->sat_port)
 		{
 			continue;
 		}
+
 		break;
 	}
-	return( s );
+
+	return (s);
 }
 
 extern inline void atalk_destroy_socket(struct sock *sk)
 {
-	sklist_destroy_socket(&atalk_socket_list,sk);
+	sklist_destroy_socket(&atalk_socket_list, sk);
 	MOD_DEC_USE_COUNT;
 }
 
 /*
- *	Called from proc fs
+ * Called from proc fs
  */
-
 int atalk_get_info(char *buffer, char **start, off_t offset, int length, int dummy)
 {
 	struct sock *s;
@@ -189,76 +196,74 @@
 	off_t begin=0;
 
 	/*
-	 *	Output the appletalk data for the /proc virtual fs.
+	 * Output the appletalk data for the /proc virtual fs.
 	 */
 
-	len += sprintf (buffer,"Type local_addr  remote_addr tx_queue rx_queue st uid\n");
-	for (s = atalk_socket_list; s != NULL; s = s->next)
+	len += sprintf(buffer,"Type local_addr  remote_addr tx_queue rx_queue st uid\n");
+	for(s = atalk_socket_list; s != NULL; s = s->next)
 	{
-		len += sprintf (buffer+len,"%02X   ", s->type);
-		len += sprintf (buffer+len,"%04X:%02X:%02X  ",
+		len += sprintf(buffer+len,"%02X   ", s->type);
+		len += sprintf(buffer+len,"%04X:%02X:%02X  ",
 			ntohs(s->protinfo.af_at.src_net),
 			s->protinfo.af_at.src_node,
 			s->protinfo.af_at.src_port);
-		len += sprintf (buffer+len,"%04X:%02X:%02X  ",
+		len += sprintf(buffer+len,"%04X:%02X:%02X  ",
 			ntohs(s->protinfo.af_at.dest_net),
 			s->protinfo.af_at.dest_node,
 			s->protinfo.af_at.dest_port);
-		len += sprintf (buffer+len,"%08X:%08X ",
-				atomic_read(&s->wmem_alloc),
-				atomic_read(&s->rmem_alloc));
-		len += sprintf (buffer+len,"%02X %d\n", s->state, SOCK_INODE(s->socket)->i_uid);
+		len += sprintf(buffer+len,"%08X:%08X ",
+			atomic_read(&s->wmem_alloc),
+			atomic_read(&s->rmem_alloc));
+		len += sprintf(buffer+len,"%02X %d\n", s->state, 
+			SOCK_INODE(s->socket)->i_uid);
 
 		/* Are we still dumping unwanted data then discard the record */
-		pos=begin+len;
+		pos = begin + len;
 
-		if(pos<offset)
+		if(pos < offset)
 		{
-			len=0;			/* Keep dumping into the buffer start */
-			begin=pos;
+			len = 0;	/* Keep dumping into the buffer start */
+			begin = pos;
 		}
-		if(pos>offset+length)		/* We have dumped enough */
+		if(pos > offset + length)	/* We have dumped enough */
 			break;
 	}
 
 	/* The data in question runs from begin to begin+len */
-	*start=buffer+(offset-begin);	/* Start of wanted data */
-	len-=(offset-begin);		/* Remove unwanted header data from length */
-	if(len>length)
-		len=length;		/* Remove unwanted tail data from length */
+	*start = buffer + (offset - begin);	/* Start of wanted data */
+	len -= (offset - begin);   /* Remove unwanted header data from length */
+	if(len > length)
+		len = length;	   /* Remove unwanted tail data from length */
 
-	return len;
+	return (len);
 }
 
-/*******************************************************************************************************************\
-*													            *
-*	            			Routing tables for the Appletalk socket layer			       	    *
-*														    *
-\*******************************************************************************************************************/
-
+/**************************************************************************\
+*                                                                          *
+* Routing tables for the Appletalk socket layer.                           *
+*                                                                          *
+\**************************************************************************/
 
-static struct atalk_route *atalk_router_list=NULL;
-static struct atalk_route atrtr_default;		/* For probing devices or in a routerless network */
-static struct atalk_iface *atalk_iface_list=NULL;
+static struct atalk_route *atalk_router_list = NULL;
+static struct atalk_iface *atalk_iface_list  = NULL;
+static struct atalk_route atrtr_default; /* For probing devices or in a routerless network */
 
 /*
- *	Appletalk interface control
+ * Appletalk interface control
  */
 
 /*
- *	Drop a device. Doesn't drop any of its routes - that is the
- *	the callers problem. Called when we down the interface or
- *	delete the address.
+ * Drop a device. Doesn't drop any of its routes - that is the the callers
+ * problem. Called when we down the interface or delete the address.
  */
-
 static void atif_drop_device(struct device *dev)
 {
 	struct atalk_iface **iface = &atalk_iface_list;
 	struct atalk_iface *tmp;
 
-	while ((tmp = *iface) != NULL)
+	while((tmp = *iface) != NULL)
 	{
-		if (tmp->dev == dev)
+		if(tmp->dev == dev)
 		{
 			*iface = tmp->next;
 			kfree_s(tmp, sizeof(struct atalk_iface));
@@ -267,15 +272,19 @@
 		else
 			iface = &tmp->next;
 	}
+
+	MOD_DEC_USE_COUNT;
 }
 
 static struct atalk_iface *atif_add_device(struct device *dev, struct at_addr *sa)
 {
-	struct atalk_iface *iface=(struct atalk_iface *)
-					kmalloc(sizeof(*iface), GFP_KERNEL);
+	struct atalk_iface *iface = (struct atalk_iface *)
+		kmalloc(sizeof(*iface), GFP_KERNEL);
 	unsigned long flags;
+
 	if(iface==NULL)
-		return NULL;
+		return (NULL);
+
 	iface->dev=dev;
 	dev->atalk_ptr=iface;
 	iface->address= *sa;
@@ -285,13 +294,15 @@
 	iface->next=atalk_iface_list;
 	atalk_iface_list=iface;
 	restore_flags(flags);
-	return iface;
+
+	MOD_INC_USE_COUNT;
+
+	return (iface);
 }
 
 /*
- *	Perform phase 2 AARP probing on our tentative address.
+ * Perform phase 2 AARP probing on our tentative address.
  */
-
 static int atif_probe_device(struct atalk_iface *atif)
 {
 	int ct;
@@ -310,19 +321,20 @@
  *	addresses. This needs tidying up when someone does localtalk
  *	drivers
  */
+
 	if((atif->dev->type == ARPHRD_LOCALTLK || atif->dev->type == ARPHRD_PPP)
 		&& atif->dev->do_ioctl)
 	{
 		/* fake up the request and pass it down */
 		sa = (struct sockaddr_at*)&atreq.ifr_addr;
 		sa->sat_addr.s_node = probe_node;
-        	sa->sat_addr.s_net = probe_net;
-		if (!(err=atif->dev->do_ioctl(atif->dev,&atreq,SIOCSIFADDR)))
+        	sa->sat_addr.s_net  = probe_net;
+		if(!(err=atif->dev->do_ioctl(atif->dev,&atreq,SIOCSIFADDR)))
 		{
 			(void)atif->dev->do_ioctl(atif->dev,&atreq,SIOCGIFADDR);
 			atif->address.s_net=htons(sa->sat_addr.s_net);
 			atif->address.s_node=sa->sat_addr.s_node;
-			return 0;
+			return (0);
 		}
 		/*
 		 *	If it didn't like our faked request then fail:
@@ -330,190 +342,197 @@
 		 *	through. That needs us to fix all the devices up
 		 *	properly. We can then also dump the localtalk test.
 		 */
-		return err;
+		return (err);
 	}
 	/*
-	 *	Offset the network we start probing with.
+	 * Offset the network we start probing with.
 	 */
 
-	if(probe_net==ATADDR_ANYNET)
+	if(probe_net == ATADDR_ANYNET)
 	{
 		if(!netrange)
-			probe_net=ntohs(atif->nets.nr_firstnet);
+			probe_net = ntohs(atif->nets.nr_firstnet);
 		else
-			probe_net=ntohs(atif->nets.nr_firstnet) + (jiffies%netrange);
+			probe_net = ntohs(atif->nets.nr_firstnet) + (jiffies%netrange);
 	}
 
 	if(probe_node == ATADDR_ANYNODE)
 		probe_node = jiffies&0xFF;
 
-
 	/*
-	 *	Scan the networks.
+	 * Scan the networks.
 	 */
 
-	for(netct=0;netct<=netrange;netct++)
+	for(netct = 0; netct <= netrange; netct++)
 	{
 		/*
-		 *	Sweep the available nodes from a given start.
+		 * Sweep the available nodes from a given start.
 		 */
 
-		atif->address.s_net=htons(probe_net);
-		for(nodect=0;nodect<256;nodect++)
+		atif->address.s_net = htons(probe_net);
+		for(nodect = 0; nodect < 256; nodect++)
 		{
-			atif->address.s_node=((nodect+probe_node)&0xFF);
-			if(atif->address.s_node>0&&atif->address.s_node<254)
+			atif->address.s_node = ((nodect+probe_node) & 0xFF);
+			if(atif->address.s_node > 0 && atif->address.s_node<254)
 			{
 				/*
-				 *	Probe a proposed address.
+				 * Probe a proposed address.
 				 */
-				for(ct=0;ct<AARP_RETRANSMIT_LIMIT;ct++)
+				for(ct = 0; ct < AARP_RETRANSMIT_LIMIT; ct++)
 				{
 					aarp_send_probe(atif->dev, &atif->address);
 					/*
-					 *	Defer 1/10th
+					 * Defer 1/10th
 					 */
 					current->timeout = jiffies + (HZ/10);
 					current->state = TASK_INTERRUPTIBLE;
 					schedule();
-					if(atif->status&ATIF_PROBE_FAIL)
+					if(atif->status & ATIF_PROBE_FAIL)
 						break;
 				}
-				if(!(atif->status&ATIF_PROBE_FAIL))
-					return 0;
+				if(!(atif->status & ATIF_PROBE_FAIL))
+					return (0);
 			}
-			atif->status&=~ATIF_PROBE_FAIL;
+			atif->status &= ~ATIF_PROBE_FAIL;
 		}
 		probe_net++;
-		if(probe_net>ntohs(atif->nets.nr_lastnet))
-			probe_net=ntohs(atif->nets.nr_firstnet);
+		if(probe_net > ntohs(atif->nets.nr_lastnet))
+			probe_net = ntohs(atif->nets.nr_firstnet);
 	}
-	return -EADDRINUSE;	/* Network is full... */
+
+	return (-EADDRINUSE);	/* Network is full... */
 }
 
 struct at_addr *atalk_find_dev_addr(struct device *dev)
 {
 	struct atalk_iface *iface=dev->atalk_ptr;
+
 	if(iface)
-		return &iface->address;
-	return NULL;
+		return (&iface->address);
+
+	return (NULL);
 }
 
 static struct at_addr *atalk_find_primary(void)
 {
 	struct atalk_iface *iface;
-	struct atalk_iface *fiface;
+	struct atalk_iface *fiface = NULL;
+
 	/*
-	 *	Return a point-to-point interface only if
-	 *	there is no non-ptp interface available.
+	 * Return a point-to-point interface only if
+	 * there is no non-ptp interface available.
 	 */
-	fiface=NULL;
-	for(iface=atalk_iface_list;iface!=NULL;iface=iface->next)
+	for(iface=atalk_iface_list; iface != NULL; iface=iface->next)
 	{
-		if(!fiface && !(iface->dev->flags&IFF_LOOPBACK))
+		if(!fiface && !(iface->dev->flags & IFF_LOOPBACK))
 			fiface=iface;
-		if(!(iface->dev->flags&(IFF_LOOPBACK|IFF_POINTOPOINT)))
-			return &iface->address;
+		if(!(iface->dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT)))
+			return (&iface->address);
 	}
-	if (fiface)
-		return &fiface->address;
-	if ( atalk_iface_list != NULL )
-		return &atalk_iface_list->address;
+
+	if(fiface)
+		return (&fiface->address);
+	if(atalk_iface_list != NULL)
+		return (&atalk_iface_list->address);
 	else
-		return NULL;
+		return (NULL);
 }
 
 /*
- *	Find a match for 'any network' - ie any of our interfaces with that
- *	node number will do just nicely.
+ * Find a match for 'any network' - ie any of our interfaces with that
+ * node number will do just nicely.
  */
-
 static struct atalk_iface *atalk_find_anynet(int node, struct device *dev)
 {
 	struct atalk_iface *iface=dev->atalk_ptr;
-	if (iface==NULL || ( iface->status & ATIF_PROBE ))
-		return NULL;
-	if ( node == ATADDR_BCAST || iface->address.s_node == node || node == ATADDR_ANYNODE)
-		return iface;
-	return NULL;
+
+	if(iface==NULL || (iface->status & ATIF_PROBE))
+		return (NULL);
+	if(node == ATADDR_BCAST || iface->address.s_node == node
+		|| node == ATADDR_ANYNODE)
+		return (iface);
+
+	return (NULL);
 }
 
 /*
- *	Find a match for a specific network:node pair
+ * Find a match for a specific network:node pair
  */
-
 static struct atalk_iface *atalk_find_interface(int net, int node)
 {
 	struct atalk_iface *iface;
-	for(iface=atalk_iface_list;iface!=NULL;iface=iface->next)
+
+	for(iface=atalk_iface_list; iface != NULL; iface=iface->next)
 	{
 		if((node==ATADDR_BCAST || node==ATADDR_ANYNODE 
 			|| iface->address.s_node==node)
 			&& iface->address.s_net==net 
-			&& !(iface->status&ATIF_PROBE))
-			return iface;
+			&& !(iface->status & ATIF_PROBE))
+			return (iface);
 	}
-	return NULL;
+
+	return (NULL);
 }
 
 
 /*
- *	Find a route for an appletalk packet. This ought to get cached in
- *	the socket (later on...). We know about host routes and the fact
- *	that a route must be direct to broadcast.
+ * Find a route for an appletalk packet. This ought to get cached in
+ * the socket (later on...). We know about host routes and the fact
+ * that a route must be direct to broadcast.
  */
-
 static struct atalk_route *atrtr_find(struct at_addr *target)
 {
 	struct atalk_route *r;
-	for(r=atalk_router_list;r!=NULL;r=r->next)
+
+	for(r=atalk_router_list; r != NULL; r=r->next)
 	{
-		if(!(r->flags&RTF_UP))
+		if(!(r->flags & RTF_UP))
 			continue;
-		if(r->target.s_net==target->s_net)
+		if(r->target.s_net == target->s_net)
 		{
-			if(!(r->flags&RTF_HOST) || r->target.s_node==target->s_node)
-				return r;
+			if(!(r->flags&RTF_HOST) 
+				|| r->target.s_node == target->s_node)
+				return (r);
 		}
 	}
+
 	if(atrtr_default.dev)
-		return &atrtr_default;
-	return NULL;
+		return (&atrtr_default);
+
+	return (NULL);
 }
 
 
 /*
- *	Given an appletalk network find the device to use. This can be
- *	a simple lookup.
+ * Given an appletalk network find the device to use. This can be
+ * a simple lookup.
  */
-
-static struct device *atrtr_get_dev(struct at_addr *sa)
+struct device *atrtr_get_dev(struct at_addr *sa)
 {
 	struct atalk_route *atr=atrtr_find(sa);
-	if(atr==NULL)
-		return NULL;
+
+	if(atr == NULL)
+		return (NULL);
 	else
-		return atr->dev;
+		return (atr->dev);
 }
 
 /*
- *	Set up a default router.
+ * Set up a default router.
  */
-
 static void atrtr_set_default(struct device *dev)
 {
-	atrtr_default.dev=dev;
-	atrtr_default.flags= RTF_UP;
-	atrtr_default.gateway.s_net=htons(0);
-	atrtr_default.gateway.s_node=0;
+	atrtr_default.dev = dev;
+	atrtr_default.flags = RTF_UP;
+	atrtr_default.gateway.s_net = htons(0);
+	atrtr_default.gateway.s_node = 0;
 }
 
 /*
- *	Add a router. Basically make sure it looks valid and stuff the
- *	entry in the list. While it uses netranges we always set them to one
- *	entry to work like netatalk.
+ * Add a router. Basically make sure it looks valid and stuff the
+ * entry in the list. While it uses netranges we always set them to one
+ * entry to work like netatalk.
  */
-
 static int atrtr_create(struct rtentry *r, struct device *devhint)
 {
 	struct sockaddr_at *ta=(struct sockaddr_at *)&r->rt_dst;
@@ -525,113 +544,113 @@
 	save_flags(flags);
 
 	/*
-	 *	Fixme: Raise/Lower a routing change semaphore for these
-	 *	operations.
+	 * Fixme: Raise/Lower a routing change semaphore for these
+	 * operations.
 	 */
 
 	/*
-	 *	Validate the request
+	 * Validate the request
 	 */
-	if(ta->sat_family!=AF_APPLETALK)
-		return -EINVAL;
+	if(ta->sat_family != AF_APPLETALK)
+		return (-EINVAL);
 	if(devhint == NULL && ga->sat_family != AF_APPLETALK)
-		return -EINVAL;
+		return (-EINVAL);
 
 	/*
-	 *	Now walk the routing table and make our decisions
+	 * Now walk the routing table and make our decisions.
 	 */
-
-	for(rt=atalk_router_list;rt!=NULL;rt=rt->next)
+	for(rt=atalk_router_list; rt!=NULL; rt=rt->next)
 	{
 		if(r->rt_flags != rt->flags)
 			continue;
 
 		if(ta->sat_addr.s_net == rt->target.s_net)
 		{
-			if(!(rt->flags&RTF_HOST))
+			if(!(rt->flags & RTF_HOST))
 				break;
 			if(ta->sat_addr.s_node == rt->target.s_node)
 				break;
 		}
 	}
 
-	if ( devhint == NULL )
+	if(devhint == NULL)
 	{
-		for ( riface = NULL, iface = atalk_iface_list; iface; iface = iface->next )
+		for(riface = NULL, iface = atalk_iface_list; iface; iface = iface->next)
 		{
-			if ( riface == NULL && ntohs( ga->sat_addr.s_net ) >= ntohs( iface->nets.nr_firstnet ) &&
-				ntohs( ga->sat_addr.s_net ) <=	ntohs( iface->nets.nr_lastnet ))
+			if(riface == NULL && ntohs(ga->sat_addr.s_net) >= ntohs(iface->nets.nr_firstnet) &&
+				ntohs(ga->sat_addr.s_net) <= ntohs(iface->nets.nr_lastnet))
 			{
 				riface = iface;
 			}
-			if ( ga->sat_addr.s_net == iface->address.s_net && ga->sat_addr.s_node == iface->address.s_node )
+			if(ga->sat_addr.s_net == iface->address.s_net 
+				&& ga->sat_addr.s_node == iface->address.s_node)
 				riface = iface;
 		}
-		if ( riface == NULL )
-			return -ENETUNREACH;
+
+		if(riface == NULL)
+			return (-ENETUNREACH);
 		devhint = riface->dev;
 	}
 
-	if(rt==NULL)
+	if(rt == NULL)
 	{
-		rt=(struct atalk_route *)kmalloc(sizeof(struct atalk_route), GFP_KERNEL);
-		if(rt==NULL)
-			return -ENOBUFS;
+		rt = (struct atalk_route *)kmalloc(sizeof(struct atalk_route), GFP_KERNEL);
+		if(rt == NULL)
+			return (-ENOBUFS);
 		cli();
-		rt->next=atalk_router_list;
-		atalk_router_list=rt;
+		rt->next = atalk_router_list;
+		atalk_router_list = rt;
 	}
 
 	/*
-	 *	Fill in the entry.
+	 * Fill in the routing entry.
 	 */
-	rt->target=ta->sat_addr;
-	rt->dev=devhint;
-	rt->flags=r->rt_flags;
-	rt->gateway=ga->sat_addr;
+	rt->target  = ta->sat_addr;
+	rt->dev     = devhint;
+	rt->flags   = r->rt_flags;
+	rt->gateway = ga->sat_addr;
 
 	restore_flags(flags);
-	return 0;
-}
 
+	return (0);
+}
 
 /*
- *	Delete a route. Find it and discard it.
+ * Delete a route. Find it and discard it.
  */
-
 static int atrtr_delete( struct at_addr *addr )
 {
 	struct atalk_route **r = &atalk_router_list;
 	struct atalk_route *tmp;
 
-	while ((tmp = *r) != NULL)
+	while((tmp = *r) != NULL)
 	{
-		if (tmp->target.s_net == addr->s_net &&
-			    (!(tmp->flags&RTF_GATEWAY) ||
-			    tmp->target.s_node == addr->s_node ))
+		if(tmp->target.s_net == addr->s_net
+			&& (!(tmp->flags&RTF_GATEWAY)
+			|| tmp->target.s_node == addr->s_node))
 		{
 			*r = tmp->next;
 			kfree_s(tmp, sizeof(struct atalk_route));
-			return 0;
+			return (0);
 		}
 		r = &tmp->next;
 	}
-	return -ENOENT;
+
+	return (-ENOENT);
 }
 
 /*
- *	Called when a device is downed. Just throw away any routes
- *	via it.
+ * Called when a device is downed. Just throw away any routes
+ * via it.
  */
-
 void atrtr_device_down(struct device *dev)
 {
 	struct atalk_route **r = &atalk_router_list;
 	struct atalk_route *tmp;
 
-	while ((tmp = *r) != NULL)
+	while((tmp = *r) != NULL)
 	{
-		if (tmp->dev == dev)
+		if(tmp->dev == dev)
 		{
 			*r = tmp->next;
 			kfree_s(tmp, sizeof(struct atalk_route));
@@ -639,53 +658,51 @@
 		else
 			r = &tmp->next;
 	}
-	if(atrtr_default.dev==dev)
+
+	if(atrtr_default.dev == dev)
 		atrtr_set_default(NULL);
 }
 
 /*
- *	A device event has occurred. Watch for devices going down and
- *	delete our use of them (iface and route).
+ * A device event has occurred. Watch for devices going down and
+ * delete our use of them (iface and route).
  */
-
 static int ddp_device_event(struct notifier_block *this, unsigned long event, void *ptr)
 {
-	if(event==NETDEV_DOWN)
+	if(event == NETDEV_DOWN)
 	{
 		/* Discard any use of this */
 		atrtr_device_down((struct device *)ptr);
 		atif_drop_device((struct device *)ptr);
 	}
-	return NOTIFY_DONE;
+
+	return (NOTIFY_DONE);
 }
 
 /*
- *	ioctl calls. Shouldn't even need touching.
+ * ioctl calls. Shouldn't even need touching.
  */
 
 /*
- *	Device configuration ioctl calls.
+ * Device configuration ioctl calls.
  */
-
 int atif_ioctl(int cmd, void *arg)
 {
 	struct ifreq atreq;
-	static char aarp_mcast[6]={0x09,0x00,0x00,0xFF,0xFF,0xFF};
+	static char aarp_mcast[6] = {0x09, 0x00, 0x00, 0xFF, 0xFF, 0xFF};
 	struct netrange *nr;
 	struct sockaddr_at *sa;
 	struct device *dev;
 	struct atalk_iface *atif;
-	int err;
 	int ct;
 	int limit;
 	struct rtentry rtdef;
 
-	err = copy_from_user(&atreq,arg,sizeof(atreq));
-	if (err)
-		return -EFAULT;
+	if(copy_from_user(&atreq,arg,sizeof(atreq)))
+		return (-EFAULT);
 
-	if((dev=dev_get(atreq.ifr_name))==NULL)
-		return -ENODEV;
+	if((dev = dev_get(atreq.ifr_name)) == NULL)
+		return (-ENODEV);
 
 	sa=(struct sockaddr_at*)&atreq.ifr_addr;
 	atif=atalk_find_dev(dev);
@@ -694,149 +711,154 @@
 	{
 		case SIOCSIFADDR:
 			if(!suser())
-				return -EPERM;
-			if(sa->sat_family!=AF_APPLETALK)
-				return -EINVAL;
-			if(dev->type!=ARPHRD_ETHER&&dev->type!=ARPHRD_LOOPBACK
-				&&dev->type!=ARPHRD_LOCALTLK && dev->type!=ARPHRD_PPP)
-				return -EPROTONOSUPPORT;
+				return (-EPERM);
+			if(sa->sat_family != AF_APPLETALK)
+				return (-EINVAL);
+			if(dev->type != ARPHRD_ETHER
+				&& dev->type != ARPHRD_LOOPBACK
+				&& dev->type != ARPHRD_LOCALTLK
+				&& dev->type != ARPHRD_PPP)
+				return (-EPROTONOSUPPORT);
+
 			nr=(struct netrange *)&sa->sat_zero[0];
+
 			/*
-			 *	Phase 1 is fine on localtalk but we don't
-			 *	do Ethertalk phase 1. Anyone wanting to add
-			 *	it go ahead.
+			 * Phase 1 is fine on Localtalk but we don't do
+			 * Ethertalk phase 1. Anyone wanting to add it go ahead.
 			 */
-			if(dev->type==ARPHRD_ETHER && nr->nr_phase!=2)
-				return -EPROTONOSUPPORT;
-			if(sa->sat_addr.s_node==ATADDR_BCAST || sa->sat_addr.s_node == 254)
-				return -EINVAL;
+			if(dev->type == ARPHRD_ETHER && nr->nr_phase != 2)
+				return (-EPROTONOSUPPORT);
+			if(sa->sat_addr.s_node == ATADDR_BCAST 
+				|| sa->sat_addr.s_node == 254)
+				return (-EINVAL);
 			if(atif)
 			{
 				/*
-				 *	Already setting address.
+				 * Already setting address.
 				 */
 				if(atif->status&ATIF_PROBE)
-					return -EBUSY;
+					return (-EBUSY);
 
-				atif->address.s_net=sa->sat_addr.s_net;
-				atif->address.s_node=sa->sat_addr.s_node;
+				atif->address.s_net  = sa->sat_addr.s_net;
+				atif->address.s_node = sa->sat_addr.s_node;
 				atrtr_device_down(dev);	/* Flush old routes */
 			}
 			else
 			{
 				atif=atif_add_device(dev, &sa->sat_addr);
 				if (atif == NULL)
-					return -ENOMEM;
+					return (-ENOMEM);
 			}
 			atif->nets= *nr;
 
 			/*
-			 *	Check if the chosen address is used. If so we
-			 *	error and atalkd will try another.
+			 * Check if the chosen address is used. If so we
+			 * error and atalkd will try another.
 			 */
 
-			if(!(dev->flags&IFF_LOOPBACK) && atif_probe_device(atif)<0)
+			if(!(dev->flags & IFF_LOOPBACK) && atif_probe_device(atif) < 0)
 			{
 				atif_drop_device(dev);
-				return -EADDRINUSE;
+				return (-EADDRINUSE);
 			}
 
 			/*
-			 *	Hey it worked - add the direct
-			 *	routes.
+			 * Hey it worked - add the direct routes.
 			 */
 
-			sa=(struct sockaddr_at *)&rtdef.rt_gateway;
-			sa->sat_family=AF_APPLETALK;
-			sa->sat_addr.s_net=atif->address.s_net;
-			sa->sat_addr.s_node=atif->address.s_node;
-			sa=(struct sockaddr_at *)&rtdef.rt_dst;
-			rtdef.rt_flags=RTF_UP;
-			sa->sat_family=AF_APPLETALK;
-			sa->sat_addr.s_node=ATADDR_ANYNODE;
-			if(dev->flags&IFF_LOOPBACK)
-				rtdef.rt_flags|=RTF_HOST;
+			sa = (struct sockaddr_at *)&rtdef.rt_gateway;
+			sa->sat_family = AF_APPLETALK;
+			sa->sat_addr.s_net  = atif->address.s_net;
+			sa->sat_addr.s_node = atif->address.s_node;
+			sa = (struct sockaddr_at *)&rtdef.rt_dst;
+			rtdef.rt_flags = RTF_UP;
+			sa->sat_family = AF_APPLETALK;
+			sa->sat_addr.s_node = ATADDR_ANYNODE;
+			if(dev->flags & IFF_LOOPBACK)
+				rtdef.rt_flags |= RTF_HOST;
+
 			/*
-			 *	Routerless initial state.
+			 * Routerless initial state.
 			 */
-			if(nr->nr_firstnet==htons(0) && nr->nr_lastnet==htons(0xFFFE))
+			if(nr->nr_firstnet == htons(0)
+				&& nr->nr_lastnet == htons(0xFFFE))
 			{
-				sa->sat_addr.s_net=atif->address.s_net;
+				sa->sat_addr.s_net = atif->address.s_net;
 				atrtr_create(&rtdef, dev);
 				atrtr_set_default(dev);
 			}
 			else
 			{
-				limit=ntohs(nr->nr_lastnet);
-				if(limit-ntohs(nr->nr_firstnet) > 256)
+				limit = ntohs(nr->nr_lastnet);
+				if(limit - ntohs(nr->nr_firstnet) > 256)
 				{
 					printk(KERN_WARNING "Too many routes/iface.\n");
-					return -EINVAL;
+					return (-EINVAL);
 				}
 				for(ct=ntohs(nr->nr_firstnet);ct<=limit;ct++)
 				{
-					sa->sat_addr.s_net=htons(ct);
+					sa->sat_addr.s_net = htons(ct);
 					atrtr_create(&rtdef, dev);
 				}
 			}
 			dev_mc_add(dev, aarp_mcast, 6, 1);
-			return 0;
+			return (0);
+
 		case SIOCGIFADDR:
-			if(atif==NULL)
-				return -EADDRNOTAVAIL;
+			if(atif == NULL)
+				return (-EADDRNOTAVAIL);
 			((struct sockaddr_at *)(&atreq.ifr_addr))->sat_family=AF_APPLETALK;
 			((struct sockaddr_at *)(&atreq.ifr_addr))->sat_addr=atif->address;
 			break;
+
 		case SIOCGIFBRDADDR:
-			if(atif==NULL)
-				return -EADDRNOTAVAIL;
+			if(atif == NULL)
+				return (-EADDRNOTAVAIL);
 			((struct sockaddr_at *)(&atreq.ifr_addr))->sat_family=AF_APPLETALK;
 			((struct sockaddr_at *)(&atreq.ifr_addr))->sat_addr.s_net=atif->address.s_net;
 			((struct sockaddr_at *)(&atreq.ifr_addr))->sat_addr.s_node=ATADDR_BCAST;
 			break;
+
 	        case SIOCATALKDIFADDR:
 			if(!suser())
-				return -EPERM;
-			if(sa->sat_family!=AF_APPLETALK)
-				return -EINVAL;
-			if(atif==NULL)
-				return -EADDRNOTAVAIL;
+				return (-EPERM);
+			if(sa->sat_family != AF_APPLETALK)
+				return (-EINVAL);
+			if(atif == NULL)
+				return (-EADDRNOTAVAIL);
 			atrtr_device_down(atif->dev);
 			atif_drop_device(atif->dev);
 			break;			
 	}
-	err = copy_to_user(arg,&atreq,sizeof(atreq));
 
-	if (err)
-	{
-		err = -EFAULT;
-	}
-	return err;
+	if(copy_to_user(arg, &atreq, sizeof(atreq)))
+		return (-EFAULT);
+
+	return (0);
 }
 
 /*
- *	Routing ioctl() calls
+ * Routing ioctl() calls
  */
-
 static int atrtr_ioctl(unsigned int cmd, void *arg)
 {
-	int err;
 	struct rtentry rt;
 
-	err = copy_from_user(&rt,arg,sizeof(rt));
-	if (err)
-		return -EFAULT;
+	if(copy_from_user(&rt, arg, sizeof(rt)))
+		return (-EFAULT);
 
 	switch(cmd)
 	{
 		case SIOCDELRT:
-			if(rt.rt_dst.sa_family!=AF_APPLETALK)
-				return -EINVAL;
-			return atrtr_delete(&((struct sockaddr_at *)&rt.rt_dst)->sat_addr);
+			if(rt.rt_dst.sa_family != AF_APPLETALK)
+				return (-EINVAL);
+			return (atrtr_delete(&((struct sockaddr_at *)&rt.rt_dst)->sat_addr));
+
 		case SIOCADDRT:
-			return atrtr_create(&rt, NULL);
+			return (atrtr_create(&rt, NULL));
+
 		default:
-			return -EINVAL;
+			return (-EINVAL);
 	}
 }
 
@@ -849,28 +871,28 @@
 	off_t pos=0;
 	off_t begin=0;
 
-	len += sprintf (buffer,"Interface	  Address   Networks   Status\n");
-	for (iface = atalk_iface_list; iface != NULL; iface = iface->next)
+	len += sprintf(buffer,"Interface	  Address   Networks   Status\n");
+	for(iface = atalk_iface_list; iface != NULL; iface = iface->next)
 	{
-		len += sprintf (buffer+len,"%-16s %04X:%02X  %04X-%04X  %d\n",
-			iface->dev->name,
-			ntohs(iface->address.s_net),iface->address.s_node,
-			ntohs(iface->nets.nr_firstnet),ntohs(iface->nets.nr_lastnet),
-			iface->status);
-		pos=begin+len;
-		if(pos<offset)
+		len += sprintf(buffer+len,"%-16s %04X:%02X  %04X-%04X  %d\n",
+			iface->dev->name, ntohs(iface->address.s_net),
+			iface->address.s_node, ntohs(iface->nets.nr_firstnet),
+			ntohs(iface->nets.nr_lastnet), iface->status);
+		pos = begin + len;
+		if(pos < offset)
 		{
-			len=0;
-			begin=pos;
+			len   = 0;
+			begin = pos;
 		}
-		if(pos>offset+length)
+		if(pos > offset + length)
 			break;
 	}
-	*start=buffer+(offset-begin);
-	len-=(offset-begin);
-	if(len>length)
-		len=length;
-	return len;
+	*start = buffer + (offset - begin);
+	len -= (offset - begin);
+	if(len > length)
+		len = length;
+
+	return (len);
 }
 
 /* Called from proc fs - just make it print the routes neatly */
@@ -882,138 +904,151 @@
 	off_t pos=0;
 	off_t begin=0;
 
-	len += sprintf (buffer,"Target        Router  Flags Dev\n");
+	len += sprintf(buffer,"Target        Router  Flags Dev\n");
 	if(atrtr_default.dev)
 	{
-		rt=&atrtr_default;
-		len += sprintf (buffer+len,"Default     %04X:%02X  %-4d  %s\n",
+		rt = &atrtr_default;
+		len += sprintf(buffer+len,"Default     %04X:%02X  %-4d  %s\n",
 			ntohs(rt->gateway.s_net), rt->gateway.s_node, rt->flags,
 			rt->dev->name);
 	}
-	for (rt = atalk_router_list; rt != NULL; rt = rt->next)
+
+	for(rt = atalk_router_list; rt != NULL; rt = rt->next)
 	{
-		len += sprintf (buffer+len,"%04X:%02X     %04X:%02X  %-4d  %s\n",
+		len += sprintf(buffer+len,"%04X:%02X     %04X:%02X  %-4d  %s\n",
 			ntohs(rt->target.s_net),rt->target.s_node,
 			ntohs(rt->gateway.s_net), rt->gateway.s_node, rt->flags,
 			rt->dev->name);
-		pos=begin+len;
-		if(pos<offset)
+		pos = begin + len;
+		if(pos < offset)
 		{
-			len=0;
-			begin=pos;
+			len = 0;
+			begin = pos;
 		}
-		if(pos>offset+length)
+		if(pos > offset + length)
 			break;
 	}
-	*start=buffer+(offset-begin);
-	len-=(offset-begin);
-	if(len>length)
-		len=length;
-	return len;
-}
-
-/*******************************************************************************************************************\
-*													            *
-*	      Handling for system calls applied via the various interfaces to an Appletalk socket object	    *
-*														    *
-\*******************************************************************************************************************/
+
+	*start = buffer + (offset - begin);
+	len -= (offset - begin);
+	if(len > length)
+		len = length;
+
+	return (len);
+}
+
+/**************************************************************************\
+*                                                                          *
+* Handling for system calls applied via the various interfaces to an       *
+* Appletalk socket object.                                                 *
+*                                                                          *
+\**************************************************************************/
 
 /*
- *	Checksum: This is 'optional'. It's quite likely also a good
- *	candidate for assembler hackery 8)
+ * Checksum: This is 'optional'. It's quite likely also a good
+ * candidate for assembler hackery 8)
  */
-
 unsigned short atalk_checksum(struct ddpehdr *ddp, int len)
 {
 	unsigned long sum=0;	/* Assume unsigned long is >16 bits */
 	unsigned char *data=(unsigned char *)ddp;
 
-	len-=4;		/* skip header 4 bytes */
-	data+=4;
+	len  -= 4;		/* skip header 4 bytes */
+	data += 4;
 
 	/* This ought to be unwrapped neatly. I'll trust gcc for now */
 	while(len--)
 	{
-		sum+=*data;
-		sum<<=1;
-		if(sum&0x10000)
+		sum += *data;
+		sum <<= 1;
+		if(sum & 0x10000)
 		{
 			sum++;
-			sum&=0xFFFF;
+			sum &= 0xFFFF;
 		}
 		data++;
 	}
+
 	if(sum)
 		return htons((unsigned short)sum);
+
 	return 0xFFFF;		/* Use 0xFFFF for 0. 0 itself means none */
 }
 
 /*
- *	Create a socket. Initialise the socket, blank the addresses
- *	set the state.
+ * Create a socket. Initialise the socket, blank the addresses
+ * set the state.
  */
-
 static int atalk_create(struct socket *sock, int protocol)
 {
 	struct sock *sk;
-	sk=sk_alloc(AF_APPLETALK, GFP_KERNEL);
-	if(sk==NULL)
-		return(-ENOMEM);
+
+	sk = sk_alloc(AF_APPLETALK, GFP_KERNEL);
+	if(sk == NULL)
+		return (-ENOMEM);
+
 	switch(sock->type)
 	{
-		/* This RAW is an extension. It is trivial to do and gives you
-		   the full ELAP frame. Should be handy for CAP 8) */
+		/*
+		 * We permit SOCK_DGRAM and RAW is an extension. It is
+		 * trivial to do and gives you the full ELAP frame.
+		 * Should be handy for CAP 8) 
+		 */
 		case SOCK_RAW:
-		/* We permit DDP datagram sockets */
 		case SOCK_DGRAM:
 			sock->ops = &atalk_dgram_ops;
 			break;
+
 		default:
 			sk_free((void *)sk);
-			return(-ESOCKTNOSUPPORT);
+			return (-ESOCKTNOSUPPORT);
 	}
 
 	MOD_INC_USE_COUNT;
 
 	sock_init_data(sock,sk);
 
-	sk->destruct=NULL;
+	sk->destruct = NULL;
 	/* Checksums on by default */
-	sk->mtu=DDP_MAXSZ;
-	sk->zapped=1;
-	return(0);
+	sk->mtu = DDP_MAXSZ;
+	sk->zapped = 1;
+
+	return (0);
 }
 
 /*
- *	Free a socket. No work needed
+ * Free a socket. No work needed
  */
-
 static int atalk_release(struct socket *sock, struct socket *peer)
 {
 	struct sock *sk=sock->sk;
-	if(sk==NULL)
-		return(0);
+
+	if(sk == NULL)
+		return (0);
+
 	if(!sk->dead)
 		sk->state_change(sk);
-	sk->dead=1;
-	sock->sk=NULL;
+
+	sk->dead = 1;
+	sock->sk = NULL;
 	atalk_destroy_socket(sk);
-	return(0);
+
+	return (0);
 }
 
 /*
- *	Pick a source address if one is not given. Just return
- *	an error if not supportable.
+ * Pick a source address if one is not given. Just return
+ * an error if not supportable.
  */
-
 static int atalk_pick_port(struct sockaddr_at *sat)
 {
-	for ( sat->sat_port = ATPORT_RESERVED; sat->sat_port < ATPORT_LAST; sat->sat_port++ )
+	for(sat->sat_port = ATPORT_RESERVED; sat->sat_port < ATPORT_LAST; sat->sat_port++)
 	{
-		if ( atalk_find_socket( sat ) == NULL )
+		if(atalk_find_socket(sat) == NULL)
 			return sat->sat_port;
 	}
-	return -EBUSY;
+
+	return (-EBUSY);
 }
 
 static int atalk_autobind(struct sock *sk)
@@ -1022,381 +1057,189 @@
 	struct sockaddr_at sat;
 	int n;
 
-	if ( ap == NULL || ap->s_net == htons( ATADDR_ANYNET ))
-		return -EADDRNOTAVAIL;
-	sk->protinfo.af_at.src_net = sat.sat_addr.s_net = ap->s_net;
+	if(ap == NULL || ap->s_net == htons(ATADDR_ANYNET))
+		return (-EADDRNOTAVAIL);
+
+	sk->protinfo.af_at.src_net  = sat.sat_addr.s_net  = ap->s_net;
 	sk->protinfo.af_at.src_node = sat.sat_addr.s_node = ap->s_node;
 
-	if (( n = atalk_pick_port( &sat )) < 0 )
-		return( n );
-	sk->protinfo.af_at.src_port=n;
+	if((n = atalk_pick_port(&sat)) < 0)
+		return (n);
+
+	sk->protinfo.af_at.src_port = n;
 	atalk_insert_socket(sk);
-	sk->zapped=0;
-	return 0;
+	sk->zapped = 0;
+
+	return (0);
 }
 
 /*
- *	Set the address 'our end' of the connection.
+ * Set the address 'our end' of the connection.
  */
-
 static int atalk_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 {
 	struct sock *sk;
 	struct sockaddr_at *addr=(struct sockaddr_at *)uaddr;
 
-	sk=sock->sk;
+	sk = sock->sk;
 
-	if(sk->zapped==0)
-		return(-EINVAL);
+	if(sk->zapped == 0)
+		return (-EINVAL);
 
-	if(addr_len!=sizeof(struct sockaddr_at))
-		return -EINVAL;
+	if(addr_len != sizeof(struct sockaddr_at))
+		return (-EINVAL);
 
-	if(addr->sat_family!=AF_APPLETALK)
-		return -EAFNOSUPPORT;
+	if(addr->sat_family != AF_APPLETALK)
+		return (-EAFNOSUPPORT);
 
-	if(addr->sat_addr.s_net==htons(ATADDR_ANYNET))
+	if(addr->sat_addr.s_net == htons(ATADDR_ANYNET))
 	{
 		struct at_addr *ap=atalk_find_primary();
-		if(ap==NULL)
-			return -EADDRNOTAVAIL;
-		sk->protinfo.af_at.src_net=addr->sat_addr.s_net=ap->s_net;
-		sk->protinfo.af_at.src_node=addr->sat_addr.s_node=ap->s_node;
+
+		if(ap == NULL)
+			return (-EADDRNOTAVAIL);
+
+		sk->protinfo.af_at.src_net  = addr->sat_addr.s_net = ap->s_net;
+		sk->protinfo.af_at.src_node = addr->sat_addr.s_node= ap->s_node;
 	}
 	else
 	{
-		if ( atalk_find_interface( addr->sat_addr.s_net, addr->sat_addr.s_node ) == NULL )
-			return -EADDRNOTAVAIL;
-		sk->protinfo.af_at.src_net=addr->sat_addr.s_net;
-		sk->protinfo.af_at.src_node=addr->sat_addr.s_node;
+		if(atalk_find_interface(addr->sat_addr.s_net, addr->sat_addr.s_node) == NULL)
+			return (-EADDRNOTAVAIL);
+
+		sk->protinfo.af_at.src_net  = addr->sat_addr.s_net;
+		sk->protinfo.af_at.src_node = addr->sat_addr.s_node;
 	}
 
 	if(addr->sat_port == ATADDR_ANYPORT)
 	{
 		int n = atalk_pick_port(addr);
 		if(n < 0)
-			return n;
-		sk->protinfo.af_at.src_port=addr->sat_port=n;
+			return (n);
+
+		sk->protinfo.af_at.src_port = addr->sat_port = n;
 	}
 	else
-		sk->protinfo.af_at.src_port=addr->sat_port;
+		sk->protinfo.af_at.src_port = addr->sat_port;
 
-	if(atalk_find_socket(addr)!=NULL)
-		return -EADDRINUSE;
+	if(atalk_find_socket(addr) != NULL)
+		return (-EADDRINUSE);
 
 	atalk_insert_socket(sk);
-	sk->zapped=0;
-	return(0);
+	sk->zapped = 0;
+
+	return (0);
 }
 
 /*
- *	Set the address we talk to.
+ * Set the address we talk to.
  */
-
 static int atalk_connect(struct socket *sock, struct sockaddr *uaddr,
 	int addr_len, int flags)
 {
 	struct sock *sk=sock->sk;
 	struct sockaddr_at *addr;
 
-	sk->state = TCP_CLOSE;
+	sk->state   = TCP_CLOSE;
 	sock->state = SS_UNCONNECTED;
 
-	if(addr_len!=sizeof(*addr))
-		return(-EINVAL);
-	addr=(struct sockaddr_at *)uaddr;
-
-	if(addr->sat_family!=AF_APPLETALK)
-		return -EAFNOSUPPORT;
-	if(addr->sat_addr.s_node==ATADDR_BCAST && !sk->broadcast)
+	if(addr_len != sizeof(*addr))
+		return (-EINVAL);
+	addr = (struct sockaddr_at *)uaddr;
+
+	if(addr->sat_family != AF_APPLETALK)
+		return (-EAFNOSUPPORT);
+
+	if(addr->sat_addr.s_node == ATADDR_BCAST && !sk->broadcast)
 	{
 #if 1	
 		printk(KERN_WARNING "%s is broken and did not set SO_BROADCAST. It will break when 2.2 is released.\n",
 			current->comm);
 #else
-		return -EACCES;
+		return (-EACCES);
 #endif			
 	}
+
 	if(sk->zapped)
 	{
-		if(atalk_autobind(sk)<0)
-			return -EBUSY;
+		if(atalk_autobind(sk) < 0)
+			return (-EBUSY);
 	}
 
-	if(atrtr_get_dev(&addr->sat_addr)==NULL)
-		return -ENETUNREACH;
+	if(atrtr_get_dev(&addr->sat_addr) == NULL)
+		return (-ENETUNREACH);
+
+	sk->protinfo.af_at.dest_port = addr->sat_port;
+	sk->protinfo.af_at.dest_net  = addr->sat_addr.s_net;
+	sk->protinfo.af_at.dest_node = addr->sat_addr.s_node;
 
-	sk->protinfo.af_at.dest_port=addr->sat_port;
-	sk->protinfo.af_at.dest_net=addr->sat_addr.s_net;
-	sk->protinfo.af_at.dest_node=addr->sat_addr.s_node;
 	sock->state = SS_CONNECTED;
-	sk->state=TCP_ESTABLISHED;
-	return(0);
+	sk->state   = TCP_ESTABLISHED;
+
+	return (0);
 }
 
 /*
- *	Not relevant
+ * Not relevant
  */
-
 static int atalk_accept(struct socket *sock, struct socket *newsock, int flags)
 {
-	if(newsock->sk) {
+	if(newsock->sk)
+	{
 		sk_free(newsock->sk);
 		MOD_DEC_USE_COUNT;
 	}
-	return -EOPNOTSUPP;
+
+	return (-EOPNOTSUPP);
 }
 
 /*
- *	Find the name of an appletalk socket. Just copy the right
- *	fields into the sockaddr.
+ * Find the name of an appletalk socket. Just copy the right
+ * fields into the sockaddr.
  */
-
 static int atalk_getname(struct socket *sock, struct sockaddr *uaddr,
 	int *uaddr_len, int peer)
 {
 	struct sockaddr_at sat;
 	struct sock *sk;
 
-	sk=sock->sk;
+	sk = sock->sk;
 	if(sk->zapped)
 	{
-		if(atalk_autobind(sk)<0)
-			return -ENOBUFS;
+		if(atalk_autobind(sk) < 0)
+			return (-ENOBUFS);
 	}
 
 	*uaddr_len = sizeof(struct sockaddr_at);
 
 	if(peer)
 	{
-		if(sk->state!=TCP_ESTABLISHED)
-			return -ENOTCONN;
-		sat.sat_addr.s_net=sk->protinfo.af_at.dest_net;
-		sat.sat_addr.s_node=sk->protinfo.af_at.dest_node;
-		sat.sat_port=sk->protinfo.af_at.dest_port;
+		if(sk->state != TCP_ESTABLISHED)
+			return (-ENOTCONN);
+		sat.sat_addr.s_net  = sk->protinfo.af_at.dest_net;
+		sat.sat_addr.s_node = sk->protinfo.af_at.dest_node;
+		sat.sat_port = sk->protinfo.af_at.dest_port;
 	}
 	else
 	{
-		sat.sat_addr.s_net=sk->protinfo.af_at.src_net;
-		sat.sat_addr.s_node=sk->protinfo.af_at.src_node;
-		sat.sat_port=sk->protinfo.af_at.src_port;
+		sat.sat_addr.s_net  = sk->protinfo.af_at.src_net;
+		sat.sat_addr.s_node = sk->protinfo.af_at.src_node;
+		sat.sat_port = sk->protinfo.af_at.src_port;
 	}
-	sat.sat_family = AF_APPLETALK;
-	memcpy(uaddr,&sat,sizeof(sat));
-	return(0);
-}
-
-/*	
- *	IP-over-DDP support.  Under construction.
- */
-
-#ifdef CONFIG_IPDDP
-
-#define SIOCADDIPDDPRT SIOCDEVPRIVATE
-#define SIOCDELIPDDPRT SIOCDEVPRIVATE+1
-#define SIOCFINDIPDDPRT SIOCDEVPRIVATE+2
-
-struct ipddp_route 
-{
-	struct device *dev;		/* Carrier device */
-	__u32 ip;			/* IP address */
-	struct at_addr at;		/* Gateway appletalk address */
-	int flags;
-	struct ipddp_route *next;
-};
-
-static struct ipddp_route *ipddp_route_head;
-
-static struct ipddp_route ipddp_route_test;
-
-int ipddp_open(struct device *dev)
-{
-	MOD_INC_USE_COUNT;
-	return 0;
-}
 
-int ipddp_close(struct device *dev)
-{
-	MOD_DEC_USE_COUNT;
-	return 0;
-}
-
-int ipddp_xmit(struct sk_buff *skb, struct device *dev)
-{
-	/* Retrieve the saved address hint */
-	struct at_addr *a=(struct at_addr *)skb->data;
-	skb_pull(skb,4);
-	
-	((struct net_device_stats *) dev->priv)->tx_packets++;
-	((struct net_device_stats *) dev->priv)->tx_bytes+=skb->len;
-
-	/* printk("ipddp_xmit called with headroom %d\n",skb_headroom(skb)); */
-
-	if( aarp_send_ddp(skb->dev,skb,a,NULL) < 0 )
-		dev_kfree_skb(skb,FREE_WRITE);
-
-	return 0;
-}
-
-struct net_device_stats *ipddp_get_stats(struct device *dev)
-{
-	return (struct net_device_stats *) dev->priv;
-}
-
-int ipddp_ioctl(struct device *dev, struct ifreq *ifr, int cmd)
-{
-	struct ipddp_route *urt = (struct ipddp_route *)ifr->ifr_data;
-
-	if(!suser())
-		return -EPERM;
-	
-	/* for now we only have one route at a time */
-
-	switch(cmd) 
-	{
-		case SIOCADDIPDDPRT:
-			if(copy_from_user(&ipddp_route_test,urt,sizeof(struct ipddp_route)))
-				return -EFAULT;
-			ipddp_route_test.dev = atrtr_get_dev(&ipddp_route_test.at);
-			if (dev==NULL)
-				return -ENETUNREACH;
-			ipddp_route_test.next = NULL;
-			printk("added ipddp route through %s\n",ipddp_route_test.dev->name);
-			ipddp_route_head = &ipddp_route_test;
-			return 0;
-		case SIOCFINDIPDDPRT:
-			if(copy_to_user(urt,&ipddp_route_test,sizeof(struct ipddp_route)))
-				return -EFAULT;
-			return 0;
-		case SIOCDELIPDDPRT:
-			ipddp_route_test.dev = NULL;
-			ipddp_route_head = NULL;
-			return 0;
-		default: 
-			return -EINVAL;
-	}
-}
-
-int ipddp_header (struct sk_buff *skb, struct device *dev, unsigned short type,
-		void *daddr, void *saddr, unsigned len)
-{
-	/* printk("ipddp_header\n"); */
-	/* Push down the header space and the type byte */
-	skb_push(skb, sizeof(struct ddpehdr)+1+4);
-	return 0;
-}
-
-/*
- *	Now the packet really wants to go out. 
- */
- 
-int ipddp_rebuild_header (struct sk_buff *skb)
-{
-	struct ddpehdr *ddp;
-	struct at_addr at;
-	struct ipddp_route *rt;
-	struct at_addr *our_addr;
-	u32 paddr = ((struct rtable *)skb->dst)->rt_gateway;
-
-	/*
-	 *	On entry skb->data points to the ddpehdr we reserved earlier.
-	 *	skb->h.raw will be the higher level header.
-	 */
-
-	/*
-	 *	We created this earlier
-	 */
-
-	ddp = (struct ddpehdr *) (skb->data+4);
-	
-	/* find appropriate route */
-
-	for(rt=ipddp_route_head;rt;rt=rt->next) 
-	{
-		if(rt->ip == paddr) 
-			break;
-	}
-
-	if(!rt) {
-		printk("ipddp unreachable dst %08lx\n",ntohl(paddr));
-		return -ENETUNREACH;
-	}
-
-	our_addr = atalk_find_dev_addr(rt->dev);
- 	
-	/* fill in ddpehdr */
-	ddp->deh_len = skb->len;
-	ddp->deh_hops = 1;
-	ddp->deh_pad = 0;
-	ddp->deh_sum = 0;
-	ddp->deh_dnet = rt->at.s_net;	/* FIXME more hops?? */ 
-	ddp->deh_snet = our_addr->s_net;
-	ddp->deh_dnode = rt->at.s_node;
-	ddp->deh_snode = our_addr->s_node;
-	ddp->deh_dport = 72;
-	ddp->deh_sport = 72;
-	
-	*((__u8 *)(ddp+1)) = 22;	/* ddp type = IP */
-
-	/* fix up length field */
-	*((__u16 *)ddp)=ntohs(*((__u16 *)ddp));
-
-	/* set skb->dev to appropriate device */
-	skb->dev = rt->dev;
-
-	/* skb->raddr = (unsigned long) at */ 
-	at = rt->at;
-	/* Hide it at the start of the buffer */
-	memcpy(skb->data,(void *)&at,sizeof(at));
-	skb->arp = 1;	/* so the actual device doesn't try to arp it... */
-	skb->protocol = htons(ETH_P_ATALK);	/* Protocol has changed */
-	
-	return 0;
-}
+	sat.sat_family = AF_APPLETALK;
+	memcpy(uaddr, &sat, sizeof(sat));
 
-int ipddp_init (struct device *dev)
-{
-	ether_setup(dev);
-	dev->hard_start_xmit = ipddp_xmit;
-	dev->priv = kmalloc(sizeof(struct enet_statistics), GFP_KERNEL);
-	if(!dev->priv) 
-		return -ENOMEM;
-	memset(dev->priv,0,sizeof(struct enet_statistics));
-	dev->get_stats = ipddp_get_stats;
-	dev->do_ioctl = ipddp_ioctl;
-	dev->type = ARPHRD_IPDDP;	/* IP over DDP tunnel */
-	dev->family = AF_INET;
-	dev->mtu = 585;
-	dev->flags |= IFF_NOARP;
-	dev->hard_header = ipddp_header; /* see ip_output.c */
-	dev->rebuild_header = ipddp_rebuild_header;
-	/*
-	 *	The worst case header we will need is currently a
-	 *	ethernet header (14 bytes) and a ddp header (sizeof ddpehdr+1)
-	 *	We send over SNAP so that takes another 8 bytes.
-	 */
-	dev->hard_header_len = 14+8+sizeof(struct ddpehdr)+1;
-	dev->open = ipddp_open;
-	dev->stop = ipddp_close;
-
-	return 0;
+	return (0);
 }
 
-static struct device dev_ipddp = {
-	"ipddp0\0   ",
-		0, 0, 0, 0,
-		0x0, 0,
-		0, 0, 0, NULL, ipddp_init };
-
-#endif /* CONFIG_IPDDP */
-
 /*
- *	Receive a packet (in skb) from device dev. This has come from the SNAP decoder, and on entry
- *	skb->h.raw is the DDP header, skb->len is the DDP length. The physical headers have been
- *	extracted. PPP should probably pass frames marked as for this layer
- *	[ie ARPHRD_ETHERTALK]
+ * Receive a packet (in skb) from device dev. This has come from the SNAP
+ * decoder, and on entry skb->h.raw is the DDP header, skb->len is the DDP
+ * header, skb->len is the DDP length. The physical headers have been
+ * extracted. PPP should probably pass frames marked as for this layer.
+ * [ie ARPHRD_ETHERTALK]
  */
-
 static int atalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
 {
 	struct sock *sock;
@@ -1406,13 +1249,12 @@
         int origlen;
 
 	/* Size check */
-	if(skb->len<sizeof(*ddp))
+	if(skb->len < sizeof(*ddp))
 	{
 		kfree_skb(skb,FREE_READ);
-		return(0);
+		return (0);
 	}
 
-
 	/*
 	 *	Fix up the length field	[Ok this is horrible but otherwise
 	 *	I end up with unions of bit fields and messy bit field order
@@ -1423,254 +1265,264 @@
 	 *	run until we put it back)
 	 */
 
-	*((__u16 *)ddp)=ntohs(*((__u16 *)ddp));
+	*((__u16 *)ddp) = ntohs(*((__u16 *)ddp));
 
 	/*
-	 *	Trim buffer in case of stray trailing data
+	 * Trim buffer in case of stray trailing data
 	 */
 
 	origlen = skb->len;
 
-	skb_trim(skb,min(skb->len,ddp->deh_len));
+	skb_trim(skb, min(skb->len, ddp->deh_len));
 
 	/*
-	 *	Size check to see if ddp->deh_len was crap
-	 *	(Otherwise we'll detonate most spectacularly
-	 *	 in the middle of recvmsg()).
+	 * Size check to see if ddp->deh_len was crap
+	 * (Otherwise we'll detonate most spectacularly
+	 * in the middle of recvmsg()).
 	 */
-
-	if(skb->len<sizeof(*ddp))
+	if(skb->len < sizeof(*ddp))
 	{
 		kfree_skb(skb,FREE_READ);
-		return(0);
+		return (0);
 	}
 
 	/*
-	 *	Any checksums. Note we don't do htons() on this == is assumed to be
-	 *	valid for net byte orders all over the networking code...
+	 * Any checksums. Note we don't do htons() on this == is assumed to be
+	 * valid for net byte orders all over the networking code...
 	 */
-
-	if(ddp->deh_sum && atalk_checksum(ddp, ddp->deh_len)!= ddp->deh_sum)
+	if(ddp->deh_sum && atalk_checksum(ddp, ddp->deh_len) != ddp->deh_sum)
 	{
 		/* Not a valid appletalk frame - dustbin time */
-		kfree_skb(skb,FREE_READ);
-		return(0);
+		kfree_skb(skb, FREE_READ);
+		return (0);
 	}
 
 	if(call_in_firewall(AF_APPLETALK, skb->dev, ddp, NULL,&skb)!=FW_ACCEPT)
 	{
 		kfree_skb(skb, FREE_READ);
-		return 0;
+		return (0);
 	}
 
 	/* Check the packet is aimed at us */
 
 	if(ddp->deh_dnet == 0)	/* Net 0 is 'this network' */
-		atif=atalk_find_anynet(ddp->deh_dnode, dev);
+		atif = atalk_find_anynet(ddp->deh_dnode, dev);
 	else
-		atif=atalk_find_interface(ddp->deh_dnet,ddp->deh_dnode);
+		atif = atalk_find_interface(ddp->deh_dnet, ddp->deh_dnode);
 
-	/* Not ours */
-	if(atif==NULL)
+	/* 
+	 * Not ours, so we route the packet via the correct Appletalk interface.
+	 */
+	if(atif == NULL)
 	{
 		struct atalk_route *rt;
 		struct at_addr ta;
 
-		/* Don't route multicast, etc., packets, or packets
-		   sent to "this network" */
+		/*
+		 * Don't route multicast, etc., packets, or packets
+		 * sent to "this network" 
+		 */
 		if (skb->pkt_type != PACKET_HOST || ddp->deh_dnet == 0)
 		{
 			kfree_skb(skb, FREE_READ);
-			return(0);
+			return (0);
 		}
 
 		/*
-		 *	Check firewall allows this routing
+		 * Check firewall allows this routing
 		 */
-
-		if(call_fw_firewall(AF_APPLETALK, skb->dev, ddp, NULL, &skb)!=FW_ACCEPT)
+		if(call_fw_firewall(AF_APPLETALK, skb->dev, ddp, NULL, &skb) != FW_ACCEPT)
 		{
 			kfree_skb(skb, FREE_READ);
-			return(0);
+			return (0);
 		}
 
-		ta.s_net=ddp->deh_dnet;
-		ta.s_node=ddp->deh_dnode;
+		ta.s_net  = ddp->deh_dnet;
+		ta.s_node = ddp->deh_dnode;
 
 		/* Route the packet */
-		rt=atrtr_find(&ta);
-		if(rt==NULL || ddp->deh_hops==15)
+		rt = atrtr_find(&ta);
+		if(rt == NULL || ddp->deh_hops == DDP_MAXHOPS)
 		{
 			kfree_skb(skb, FREE_READ);
-			return(0);
+			return (0);
 		}
 		ddp->deh_hops++;
 
 		/*
-		 *      Route goes through another gateway, so
-		 *      set the target to the gateway instead.
+		 * Route goes through another gateway, so
+		 * set the target to the gateway instead.
 		 */
-
-		if(rt->flags&RTF_GATEWAY)
+		if(rt->flags & RTF_GATEWAY)
 		{
-			ta.s_net = rt->gateway.s_net;
+			ta.s_net  = rt->gateway.s_net;
 			ta.s_node = rt->gateway.s_node;
 		}
 
                 /* Fix up skb->len field */
-                skb_trim(skb,min(origlen, rt->dev->hard_header_len +
+                skb_trim(skb, min(origlen, rt->dev->hard_header_len +
 			ddp_dl->header_length + ddp->deh_len));
 
-		*((__u16 *)ddp)=ntohs(*((__u16 *)ddp));		/* Mend the byte order */
+		/* Mend the byte order */
+		*((__u16 *)ddp) = ntohs(*((__u16 *)ddp));
 
 		/*
-		 *	Send the buffer onwards
-		 */
-
-		/*
-		 *	Now we must always be careful. If it's come from 
-		 *	localtalk to ethertalk it might not fit
+		 * Send the buffer onwards
 		 *
-		 *	Order matters here: If a packet has to be copied
-		 *	to make a new headroom (rare hopefully) then it
-		 *	won't need unsharing.
+		 * Now we must always be careful. If it's come from 
+		 * localtalk to ethertalk it might not fit
 		 *
-		 *	Note. ddp-> becomes invalid at the realloc.
+		 * Order matters here: If a packet has to be copied
+		 * to make a new headroom (rare hopefully) then it
+		 * won't need unsharing.
+		 *
+		 * Note. ddp-> becomes invalid at the realloc.
 		 */
-		
-		if(skb_headroom(skb)<22)
+		if(skb_headroom(skb) < 22)
 			/* 22 bytes - 12 ether, 2 len, 3 802.2 5 snap */
-			skb=skb_realloc_headroom(skb, 32);
+			skb = skb_realloc_headroom(skb, 32);
 		else
-			skb=skb_unshare(skb, GFP_ATOMIC, FREE_READ);
+			skb = skb_unshare(skb, GFP_ATOMIC, FREE_READ);
 		
 		/*
-		 *	If the buffer didnt vanish into the lack of
-		 *	space bitbucket we can send it.
+		 * If the buffer didn't vanish into the lack of
+		 * space bitbucket we can send it.
 		 */
-		 
 		if(skb)
 		{
 			skb->arp = 1;	/* Resolved */
-			if(aarp_send_ddp(rt->dev, skb, &ta, NULL)==-1)
+			if(aarp_send_ddp(rt->dev, skb, &ta, NULL) == -1)
 				kfree_skb(skb, FREE_READ);
 		}
-		return 0;
+
+		return (0);
 	}
 
-	/* Which socket - atalk_search_socket() looks for a *full match*
-	   of the <net,node,port> tuple */
-	tosat.sat_addr.s_net = ddp->deh_dnet;
+	/*
+	 * Which socket - atalk_search_socket() looks for a *full match*
+	 * of the <net,node,port> tuple.
+	 */
+	tosat.sat_addr.s_net  = ddp->deh_dnet;
 	tosat.sat_addr.s_node = ddp->deh_dnode;
 	tosat.sat_port = ddp->deh_dport;
 
-	sock=atalk_search_socket( &tosat, atif );
+	sock = atalk_search_socket(&tosat, atif);
 	
-	if(sock==NULL)	/* But not one of our sockets */
+	if(sock == NULL)	/* But not one of our sockets */
 	{
-		kfree_skb(skb,FREE_READ);
-		return(0);
+		kfree_skb(skb, FREE_READ);
+		return (0);
 	}
 
 #ifdef CONFIG_IPDDP
 	/*
 	 *	Check if IP-over-DDP
 	 */
-
-	if(skb->data[12]==22) 
+	if(skb->data[12] == 22) 
 	{
-		struct net_device_stats *estats = 
-			(struct net_device_stats *) dev_ipddp.priv;
-		skb->protocol=htons(ETH_P_IP);
-		skb_pull(skb,13);
-		skb->dev=&dev_ipddp;
+		struct device *dev;
+                struct net_device_stats *estats;
+
+		if((dev = dev_get("ipddp0")) == NULL)
+                	return (-ENODEV);
+
+		estats = (struct net_device_stats *) dev->priv;
+		skb->protocol = htons(ETH_P_IP);
+		skb_pull(skb, 13);
+		skb->dev = dev;
 		skb->h.raw = skb->data;
+
 	/*	printk("passing up ipddp, 0x%02x better be 45\n",skb->data[0]);
 	 *	printk("tot_len %d, skb->len %d\n",
 	 *		ntohs(skb->h.iph->tot_len),skb->len);
 	 */
+
 		estats->rx_packets++;
-		estats->rx_bytes+=skb->len+13;
-		netif_rx(skb);
-		return 0;
+		estats->rx_bytes += skb->len + 13;
+		netif_rx(skb);	/* Send the SKB up to a higher place. */
+
+		return (0);
 	}
-#endif /* CONFIG_IPDDP */	
+#endif /* CONFIG_IPDDP */
+	
 	/*
 	 *	Queue packet (standard)
 	 */
 	 
 	skb->sk = sock;
 
-	if(sock_queue_rcv_skb(sock,skb)<0)
+	if(sock_queue_rcv_skb(sock, skb) < 0)
 	{
-		skb->sk=NULL;
+		skb->sk = NULL;
 		kfree_skb(skb, FREE_WRITE);
 	}
-	return(0);
+
+	return (0);
 }
 
 /*
- *	Receive a localtalk frame. We make some demands on the caller here.
- *	Caller must provide enough headroom on the packet to pull the short
- *	header and append a long one.
+ * Receive a localtalk frame. We make some demands on the caller here.
+ * Caller must provide enough headroom on the packet to pull the short
+ * header and append a long one.
  */
-
-
 static int ltalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
 {
 	struct ddpehdr *ddp;
 	struct at_addr *ap;
+
 	/*
-	 *	Expand any short form frames.
+	 * Expand any short form frames.
 	 */
-
-	if(skb->mac.raw[2]==1)
+	if(skb->mac.raw[2] == 1)
 	{
 		/*
-		 *	Find our address.
+		 * Find our address.
 		 */
 
-		ap=atalk_find_dev_addr(dev);
-		if(ap==NULL || skb->len<sizeof(struct ddpshdr))
+		ap = atalk_find_dev_addr(dev);
+		if(ap == NULL || skb->len < sizeof(struct ddpshdr))
 		{
 			kfree_skb(skb, FREE_READ);
-			return 0;
+			return (0);
 		}
 
 		/*
-		 *	The push leaves us with a ddephdr not an shdr, and
-		 *	handily the port bytes in the right place preset.
+		 * The push leaves us with a ddephdr not an shdr, and
+		 * handily the port bytes in the right place preset.
 		 */
 
-		skb_push(skb, sizeof(*ddp)-4);
-		ddp=(struct ddpehdr *)skb->data;
+		skb_push(skb, sizeof(*ddp) - 4);
+		ddp = (struct ddpehdr *)skb->data;
 
 		/*
-		 *	Now fill in the long header.
+		 * Now fill in the long header.
 		 */
 
 	 	/*
-	 	 *	These two first. The mac overlays the new source/dest
-	 	 *	network information so we MUST copy these before
-	 	 *	we write the network numbers !
+	 	 * These two first. The mac overlays the new source/dest
+	 	 * network information so we MUST copy these before
+	 	 * we write the network numbers !
 	 	 */
 
-		ddp->deh_dnode=skb->mac.raw[0];	/* From physical header */
-		ddp->deh_snode=skb->mac.raw[1];	/* From physical header */
+		ddp->deh_dnode = skb->mac.raw[0];     /* From physical header */
+		ddp->deh_snode = skb->mac.raw[1];     /* From physical header */
 
-		ddp->deh_dnet=ap->s_net;	/* Network number */
-		ddp->deh_snet=ap->s_net;
-		ddp->deh_sum=0;			/* No checksum */
+		ddp->deh_dnet  = ap->s_net;	/* Network number */
+		ddp->deh_snet  = ap->s_net;
+		ddp->deh_sum   = 0;		/* No checksum */
 		/*
-		 *	Not sure about this bit...
+		 * Not sure about this bit...
 		 */
-		ddp->deh_len=skb->len;
-		ddp->deh_hops=15;		/* Non routable, so force a drop
+		ddp->deh_len   = skb->len;
+		ddp->deh_hops  = DDP_MAXHOPS;	/* Non routable, so force a drop
 						   if we slip up later */
-		*((__u16 *)ddp)=htons(*((__u16 *)ddp));		/* Mend the byte order */
+
+		/* Mend the byte order */
+		*((__u16 *)ddp) = htons(*((__u16 *)ddp));
 	}
 	skb->h.raw = skb->data;
-	return atalk_rcv(skb,dev,pt);
+
+	return (atalk_rcv(skb, dev, pt));
 }
 
 static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
@@ -1688,66 +1540,68 @@
 	int err;
 	int flags = msg->msg_flags;
 
-	if(flags&~MSG_DONTWAIT)
-		return -EINVAL;
+	if(flags & ~MSG_DONTWAIT)
+		return (-EINVAL);
 
-	if(len>587)
-		return -EMSGSIZE;
+	if(len > DDP_MAXSZ)
+		return (-EMSGSIZE);
 
 	if(usat)
 	{
 		if(sk->zapped)
 		{
-			if(atalk_autobind(sk)<0)
-				return -EBUSY;
+			if(atalk_autobind(sk) < 0)
+				return (-EBUSY);
 		}
 
-		if(msg->msg_namelen <sizeof(*usat))
-			return(-EINVAL);
+		if(msg->msg_namelen < sizeof(*usat))
+			return (-EINVAL);
 		if(usat->sat_family != AF_APPLETALK)
-			return -EINVAL;
+			return (-EINVAL);
+
 		/* netatalk doesn't implement this check */
-		if(usat->sat_addr.s_node==ATADDR_BCAST && !sk->broadcast)
+		if(usat->sat_addr.s_node == ATADDR_BCAST && !sk->broadcast)
 		{
 			printk(KERN_INFO "SO_BROADCAST: Fix your netatalk as it will break before 2.2\n");
 #if 0
-			return -EPERM;
+			return (-EPERM);
 #endif
 		}
 	}
 	else
 	{
-		if(sk->state!=TCP_ESTABLISHED)
-			return -ENOTCONN;
-		usat=&local_satalk;
-		usat->sat_family=AF_APPLETALK;
-		usat->sat_port=sk->protinfo.af_at.dest_port;
-		usat->sat_addr.s_node=sk->protinfo.af_at.dest_node;
-		usat->sat_addr.s_net=sk->protinfo.af_at.dest_net;
+		if(sk->state != TCP_ESTABLISHED)
+			return (-ENOTCONN);
+		usat =& local_satalk;
+		usat->sat_family = AF_APPLETALK;
+		usat->sat_port   = sk->protinfo.af_at.dest_port;
+		usat->sat_addr.s_node = sk->protinfo.af_at.dest_node;
+		usat->sat_addr.s_net  = sk->protinfo.af_at.dest_net;
 	}
 
 	/* Build a packet */
 
 	SOCK_DEBUG(sk, "SK %p: Got address.\n",sk);
 
-	size=sizeof(struct ddpehdr)+len+ddp_dl->header_length;	/* For headers */
+	/* For headers */
+	size = sizeof(struct ddpehdr) + len + ddp_dl->header_length;
 
-	if(usat->sat_addr.s_net!=0 || usat->sat_addr.s_node == ATADDR_ANYNODE)
+	if(usat->sat_addr.s_net != 0 || usat->sat_addr.s_node == ATADDR_ANYNODE)
 	{
-		rt=atrtr_find(&usat->sat_addr);
-		if(rt==NULL)
-			return -ENETUNREACH;
-		dev=rt->dev;
+		rt = atrtr_find(&usat->sat_addr);
+		if(rt == NULL)
+			return (-ENETUNREACH);
+		dev = rt->dev;
 	}
 	else
 	{
 		struct at_addr at_hint;
-		at_hint.s_node=0;
-		at_hint.s_net=sk->protinfo.af_at.src_net;
-		rt=atrtr_find(&at_hint);
-		if(rt==NULL)
-			return -ENETUNREACH;
-		dev=rt->dev;
+		at_hint.s_node = 0;
+		at_hint.s_net  = sk->protinfo.af_at.src_net;
+		rt = atrtr_find(&at_hint);
+		if(rt == NULL)
+			return (-ENETUNREACH);
+		dev = rt->dev;
 	}
 
 	SOCK_DEBUG(sk, "SK %p: Size needed %d, device %s\n", sk, size, dev->name);
@@ -1755,105 +1609,105 @@
 	size += dev->hard_header_len;
 
 	skb = sock_alloc_send_skb(sk, size, 0, flags&MSG_DONTWAIT, &err);
-	if(skb==NULL)
-		return err;
+	if(skb == NULL)
+		return (err);
 
-	skb->sk=sk;
-	skb->arp=1;
-	skb_reserve(skb,ddp_dl->header_length);
-	skb_reserve(skb,dev->hard_header_len);
+	skb->sk  = sk;
+	skb->arp = 1;
+	skb_reserve(skb, ddp_dl->header_length);
+	skb_reserve(skb, dev->hard_header_len);
 
-	skb->dev=dev;
+	skb->dev = dev;
 
 	SOCK_DEBUG(sk, "SK %p: Begin build.\n", sk);
 
-	ddp=(struct ddpehdr *)skb_put(skb,sizeof(struct ddpehdr));
-	ddp->deh_pad=0;
-	ddp->deh_hops=0;
-	ddp->deh_len=len+sizeof(*ddp);
+	ddp = (struct ddpehdr *)skb_put(skb,sizeof(struct ddpehdr));
+	ddp->deh_pad  = 0;
+	ddp->deh_hops = 0;
+	ddp->deh_len  = len + sizeof(*ddp);
 	/*
-	 *	Fix up the length field	[Ok this is horrible but otherwise
-	 *	I end up with unions of bit fields and messy bit field order
-	 *	compiler/endian dependencies..
-	 */
-	*((__u16 *)ddp)=ntohs(*((__u16 *)ddp));
-
-	ddp->deh_dnet=usat->sat_addr.s_net;
-	ddp->deh_snet=sk->protinfo.af_at.src_net;
-	ddp->deh_dnode=usat->sat_addr.s_node;
-	ddp->deh_snode=sk->protinfo.af_at.src_node;
-	ddp->deh_dport=usat->sat_port;
-	ddp->deh_sport=sk->protinfo.af_at.src_port;
+	 * Fix up the length field [Ok this is horrible but otherwise
+	 * I end up with unions of bit fields and messy bit field order
+	 * compiler/endian dependencies..
+	 */
+	*((__u16 *)ddp) = ntohs(*((__u16 *)ddp));
+
+	ddp->deh_dnet  = usat->sat_addr.s_net;
+	ddp->deh_snet  = sk->protinfo.af_at.src_net;
+	ddp->deh_dnode = usat->sat_addr.s_node;
+	ddp->deh_snode = sk->protinfo.af_at.src_node;
+	ddp->deh_dport = usat->sat_port;
+	ddp->deh_sport = sk->protinfo.af_at.src_port;
 
 	SOCK_DEBUG(sk, "SK %p: Copy user data (%d bytes).\n", sk, len);
 
-	err = memcpy_fromiovec(skb_put(skb,len),msg->msg_iov,len);
-	if (err)
+	err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len);
+	if(err)
 	{
 		kfree_skb(skb, FREE_WRITE);
-		return -EFAULT;
+		return (-EFAULT);
 	}
 
-	if(sk->no_check==1)
-		ddp->deh_sum=0;
+	if(sk->no_check == 1)
+		ddp->deh_sum = 0;
 	else
-		ddp->deh_sum=atalk_checksum(ddp, len+sizeof(*ddp));
+		ddp->deh_sum = atalk_checksum(ddp, len + sizeof(*ddp));
 
-	if(call_out_firewall(AF_APPLETALK, skb->dev, ddp, NULL, &skb)!=FW_ACCEPT)
+	if(call_out_firewall(AF_APPLETALK, skb->dev, ddp, NULL, &skb) != FW_ACCEPT)
 	{
 		kfree_skb(skb, FREE_WRITE);
-		return -EPERM;
+		return (-EPERM);
 	}
 
 	/*
-	 *	Loopback broadcast packets to non gateway targets (ie routes
-	 *	to group we are in)
+	 * Loopback broadcast packets to non gateway targets (ie routes
+	 * to group we are in)
 	 */
-
-	if(ddp->deh_dnode==ATADDR_BCAST)
+	if(ddp->deh_dnode == ATADDR_BCAST)
 	{
-		if((!(rt->flags&RTF_GATEWAY))&&(!(dev->flags&IFF_LOOPBACK)))
+		if((!(rt->flags&RTF_GATEWAY)) && (!(dev->flags&IFF_LOOPBACK)))
 		{
-			struct sk_buff *skb2=skb_copy(skb, GFP_KERNEL);
+			struct sk_buff *skb2 = skb_copy(skb, GFP_KERNEL);
 			if(skb2)
 			{
-				loopback=1;
+				loopback = 1;
 				SOCK_DEBUG(sk, "SK %p: send out(copy).\n", sk);
-				if(aarp_send_ddp(dev,skb2,&usat->sat_addr, NULL)==-1)
+				if(aarp_send_ddp(dev, skb2, &usat->sat_addr, NULL) == -1)
 					kfree_skb(skb2, FREE_WRITE);
 				/* else queued/sent above in the aarp queue */
 			}
 		}
 	}
 
-	if((dev->flags&IFF_LOOPBACK) || loopback)
+	if((dev->flags & IFF_LOOPBACK) || loopback)
 	{
 		SOCK_DEBUG(sk, "SK %p: Loop back.\n", sk);
 		/* loop back */
 		skb_orphan(skb);
 		ddp_dl->datalink_header(ddp_dl, skb, dev->dev_addr);
-		skb->mac.raw=skb->data;
-		skb->h.raw = skb->data + ddp_dl->header_length + dev->hard_header_len;
+		skb->mac.raw = skb->data;
+		skb->h.raw   = skb->data + ddp_dl->header_length + dev->hard_header_len;
 		skb_pull(skb,dev->hard_header_len);
 		skb_pull(skb,ddp_dl->header_length);
-		atalk_rcv(skb,dev,NULL);
+		atalk_rcv(skb, dev, NULL);
 	}
 	else
 	{
 		SOCK_DEBUG(sk, "SK %p: send out.\n", sk);
-		if ( rt->flags & RTF_GATEWAY ) {
+		if (rt->flags & RTF_GATEWAY)
+		{
 		    gsat.sat_addr = rt->gateway;
 		    usat = &gsat;
 		}
 
-		if(aarp_send_ddp(dev,skb,&usat->sat_addr, NULL)==-1)
+		if(aarp_send_ddp(dev, skb, &usat->sat_addr, NULL) == -1)
 			kfree_skb(skb, FREE_WRITE);
 		/* else queued/sent above in the aarp queue */
 	}
 	SOCK_DEBUG(sk, "SK %p: Done write (%d).\n", sk, len);
-	return len;
-}
 
+	return (len);
+}
 
 static int atalk_recvmsg(struct socket *sock, struct msghdr *msg, int size,
 		int flags, struct scm_cookie *scm)
@@ -1863,60 +1717,60 @@
 	struct ddpehdr	*ddp = NULL;
 	int copied = 0;
 	struct sk_buff *skb;
-	int er = 0;
+	int err = 0;
 
-	skb=skb_recv_datagram(sk,flags&~MSG_DONTWAIT,flags&MSG_DONTWAIT,&er);
-	if(skb==NULL)
-		return er;
+	skb = skb_recv_datagram(sk,flags&~MSG_DONTWAIT,flags&MSG_DONTWAIT,&err);
+	if(skb == NULL)
+		return (err);
 
 	ddp = (struct ddpehdr *)(skb->h.raw);
-	if(sk->type==SOCK_RAW)
+	if(sk->type == SOCK_RAW)
 	{
-		copied=ddp->deh_len;
+		copied = ddp->deh_len;
 		if(copied > size)
 		{
-			copied=size;
-			msg->msg_flags|=MSG_TRUNC;
+			copied = size;
+			msg->msg_flags |= MSG_TRUNC;
 		}
-		er = skb_copy_datagram_iovec(skb,0,msg->msg_iov,copied);
-		if (er)
-			goto out;
+
+		err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
 	}
 	else
 	{
-		copied=ddp->deh_len - sizeof(*ddp);
-		if (copied > size)
+		copied = ddp->deh_len - sizeof(*ddp);
+		if(copied > size)
 		{
 			copied = size;
-			msg->msg_flags|=MSG_TRUNC;
+			msg->msg_flags |= MSG_TRUNC;
 		}
-		er = skb_copy_datagram_iovec(skb,sizeof(*ddp),msg->msg_iov,copied);
-		if (er)
-			goto out;
-	}
-	if(sat)
-	{
-		sat->sat_family=AF_APPLETALK;
-		sat->sat_port=ddp->deh_sport;
-		sat->sat_addr.s_node=ddp->deh_snode;
-		sat->sat_addr.s_net=ddp->deh_snet;
-	}
-	msg->msg_namelen=sizeof(*sat);
-out:
-	skb_free_datagram(sk, skb);
-	return er ? er : (copied);
-}
+		err = skb_copy_datagram_iovec(skb,sizeof(*ddp),msg->msg_iov,copied);
+	}
 
+	if(!err)
+	{
+		if(sat)
+		{
+			sat->sat_family      = AF_APPLETALK;
+			sat->sat_port        = ddp->deh_sport;
+			sat->sat_addr.s_node = ddp->deh_snode;
+			sat->sat_addr.s_net  = ddp->deh_snet;
+		}
+		msg->msg_namelen = sizeof(*sat);
+	}
+
+	skb_free_datagram(sk, skb);	/* Free the datagram. */
+
+	return (err ? err : (copied));
+}
 
 static int atalk_shutdown(struct socket *sk,int how)
 {
-	return -EOPNOTSUPP;
+	return (-EOPNOTSUPP);
 }
 
 /*
- *	Appletalk ioctl calls.
+ * Appletalk ioctl calls.
  */
-
 static int atalk_ioctl(struct socket *sock,unsigned int cmd, unsigned long arg)
 {
 	long amount=0;
@@ -1929,43 +1783,48 @@
 		 */
 		case TIOCOUTQ:
 			amount = sk->sndbuf - atomic_read(&sk->wmem_alloc);
-			if(amount<0)
-				amount=0;
+			if(amount < 0)
+				amount = 0;
 			break;
+
 		case TIOCINQ:
 		{
 			struct sk_buff *skb;
 			/* These two are safe on a single CPU system as only user tasks fiddle here */
-			if((skb=skb_peek(&sk->receive_queue))!=NULL)
-				amount=skb->len-sizeof(struct ddpehdr);
+			if((skb = skb_peek(&sk->receive_queue)) != NULL)
+				amount = skb->len-sizeof(struct ddpehdr);
 			break;
 		}
+
 		case SIOCGSTAMP:
-			if (sk)
+			if(sk)
 			{
-				if(sk->stamp.tv_sec==0)
+				if(sk->stamp.tv_sec == 0)
 					return -ENOENT;
-				return copy_to_user((void *)arg,&sk->stamp,sizeof(struct timeval)) ? -EFAULT : 0;
+				return (copy_to_user((void *)arg,&sk->stamp,sizeof(struct timeval)) ? -EFAULT : 0);
 			}
-			return -EINVAL;
+			return (-EINVAL);
+
 		/*
-		 *	Routing
+		 * Routing
 		 */
 		case SIOCADDRT:
 		case SIOCDELRT:
 			if(!suser())
 				return -EPERM;
-			return(atrtr_ioctl(cmd,(void *)arg));
+			return (atrtr_ioctl(cmd,(void *)arg));
+
 		/*
-		 *	Interface
+		 * Interface
 		 */
 		case SIOCGIFADDR:
 		case SIOCSIFADDR:
 		case SIOCGIFBRDADDR:
 		case SIOCATALKDIFADDR:
-			return atif_ioctl(cmd,(void *)arg);
+			return (atif_ioctl(cmd,(void *)arg));
+
 		/*
-		 *	Physical layer ioctl calls
+		 * Physical layer ioctl calls
 		 */
 		case SIOCSIFLINK:
 		case SIOCGIFHWADDR:
@@ -1979,7 +1838,7 @@
 		case SIOCGIFCOUNT:
 		case SIOGIFINDEX:
 		case SIOGIFNAME:
-			return(dev_ioctl(cmd,(void *) arg));
+			return ((dev_ioctl(cmd,(void *) arg)));
 
 		case SIOCSIFMETRIC:
 		case SIOCSIFBRDADDR:
@@ -1989,20 +1848,23 @@
 		case SIOCSIFMEM:
 		case SIOCGIFDSTADDR:
 		case SIOCSIFDSTADDR:
-			return -EINVAL;
+			return (-EINVAL);
 
 		default:
-			return -EINVAL;
+			return (-EINVAL);
 	}
-	return put_user(amount, (int *)arg);
+
+	return (put_user(amount, (int *)arg));
 }
 
-static struct net_proto_family atalk_family_ops = {
+static struct net_proto_family atalk_family_ops=
+{
 	AF_APPLETALK,
 	atalk_create
 };
 
-static struct proto_ops atalk_dgram_ops = {
+static struct proto_ops atalk_dgram_ops=
+{
 	AF_APPLETALK,
 
 	sock_no_dup,
@@ -2023,7 +1885,8 @@
 	atalk_recvmsg
 };
 
-static struct notifier_block ddp_notifier={
+static struct notifier_block ddp_notifier=
+{
 	ddp_device_event,
 	NULL,
 	0
@@ -2047,41 +1910,53 @@
 	NULL
 };
 
-static char ddp_snap_id[]={0x08,0x00,0x07,0x80,0x9B};
+static char ddp_snap_id[] = {0x08, 0x00, 0x07, 0x80, 0x9B};
+
+/*
+ * Export symbols for use by drivers when Appletalk is a module.
+ */
+EXPORT_SYMBOL(aarp_send_ddp);
+EXPORT_SYMBOL(atrtr_get_dev);
+EXPORT_SYMBOL(atalk_find_dev_addr);
 
 #ifdef CONFIG_PROC_FS
-static struct proc_dir_entry proc_appletalk = {
+static struct proc_dir_entry proc_appletalk=
+{
 	PROC_NET_ATALK, 9, "appletalk",
 	S_IFREG | S_IRUGO, 1, 0, 0,
 	0, &proc_net_inode_operations,
 	atalk_get_info
 };
-static struct proc_dir_entry proc_atalk_route = {
+
+static struct proc_dir_entry proc_atalk_route=
+{
 	PROC_NET_AT_ROUTE, 11,"atalk_route",
 	S_IFREG | S_IRUGO, 1, 0, 0,
 	0, &proc_net_inode_operations,
 	atalk_rt_get_info
 };
-static struct proc_dir_entry proc_atalk_iface = {
+
+static struct proc_dir_entry proc_atalk_iface=
+{
 	PROC_NET_ATIF, 11,"atalk_iface",
 	S_IFREG | S_IRUGO, 1, 0, 0,
 	0, &proc_net_inode_operations,
 	atalk_if_get_info
 };
-#endif
+#endif /* CONFIG_PROC_FS */
 
 /* Called by proto.c on kernel start up */
 
 __initfunc(void atalk_proto_init(struct net_proto *pro))
 {
 	(void) sock_register(&atalk_family_ops);
-	if ((ddp_dl = register_snap_client(ddp_snap_id, atalk_rcv)) == NULL)
+	if((ddp_dl = register_snap_client(ddp_snap_id, atalk_rcv)) == NULL)
 		printk(KERN_CRIT "Unable to register DDP with SNAP.\n");
 
-	ltalk_packet_type.type=htons(ETH_P_LOCALTALK);
+	ltalk_packet_type.type = htons(ETH_P_LOCALTALK);
 	dev_add_pack(&ltalk_packet_type);
 
-	ppptalk_packet_type.type=htons(ETH_P_PPPTALK);
+	ppptalk_packet_type.type = htons(ETH_P_PPPTALK);
 	dev_add_pack(&ppptalk_packet_type);
 
 	register_netdevice_notifier(&ddp_notifier);
@@ -2091,88 +1966,80 @@
 	proc_net_register(&proc_appletalk);
 	proc_net_register(&proc_atalk_route);
 	proc_net_register(&proc_atalk_iface);
-#endif	
+#endif /* CONFIG_PROC_FS */
 
 #ifdef CONFIG_SYSCTL
 	atalk_register_sysctl();
-#endif
-
-#ifdef CONFIG_IPDDP
-	register_netdev(&dev_ipddp);
-#endif /* CONFIG_IPDDP */
+#endif /* CONFIG_SYSCTL */
 
 	printk(KERN_INFO "Appletalk 0.18 for Linux NET3.037\n");
 }
 
 #ifdef MODULE
-EXPORT_NO_SYMBOLS;
 
 int init_module(void)
 {
 	atalk_proto_init(NULL);
-	return 0;
+	return (0);
 }
 
 /*
- *	FIX THIS: If there are any routes/devices configured
- *	for appletalk we must not be unloaded.
+ * Actually down the interface.
  */
-
-/* Remove all route entries. Interrupts must be off. */
-extern inline void free_route_list(void)
+static void atalk_iface_down(struct atalk_iface *iface)
 {
-	struct atalk_route *list = atalk_router_list, *tmp;
+	atrtr_device_down(iface->dev);	/* Remove all routes for the device */
+	aarp_device_down(iface->dev);	/* Remove AARP entries for the device */
+	atif_drop_device(iface->dev);	/* Remove the device */
 
-	while (list != NULL)
-	{
-		tmp = list->next;
-		kfree_s(list, sizeof(struct atalk_route));
-		list = tmp;
-	}
+	return;
 }
 
-/* Remove all interface entries. Interrupts must be off. */
-extern inline void free_interface_list(void)
-{
-	struct atalk_iface *list = atalk_iface_list, *tmp;
-
-	while (list != NULL)
-	{
-		tmp = list->next;
-		list->dev->atalk_ptr = NULL;
-		kfree_s(list, sizeof(struct atalk_iface));
-		list = tmp;
-	}
-}
+/*
+ * Note on MOD_{INC,DEC}_USE_COUNT:
+ *
+ * Use counts are incremented/decremented when
+ * sockets are created/deleted.
+ *
+ * Appletalk interfaces are not incremented untill atalkd is run
+ * and are only decremented when they are downed.
+ *
+ * Ergo, before the appletalk module can be removed, all Appletalk
+ * sockets be closed from user space.
+ */
 
 void cleanup_module(void)
 {
-	unsigned long flags;
+	struct atalk_iface *ifaces = atalk_iface_list, *tmp;
 
-	save_flags(flags);
-	cli();
-
-	aarp_cleanup_module();
+        while(ifaces != NULL)
+        {
+                tmp = ifaces->next;
+                ifaces->dev->atalk_ptr = NULL;
+                atalk_iface_down(ifaces);
+                ifaces = tmp;
+        }
 
 #ifdef CONFIG_SYSCTL
 	atalk_unregister_sysctl();
-#endif
+#endif /* CONFIG_SYSCTL */
 
 #ifdef CONFIG_PROC_FS
 	proc_net_unregister(PROC_NET_ATALK);
 	proc_net_unregister(PROC_NET_AT_ROUTE);
 	proc_net_unregister(PROC_NET_ATIF);
-#endif
+#endif /* CONFIG_PROC_FS */
+
+	aarp_cleanup_module();	/* General aarp clean-up. */
+
 	unregister_netdevice_notifier(&ddp_notifier);
 	dev_remove_pack(&ltalk_packet_type);
 	dev_remove_pack(&ppptalk_packet_type);
 	unregister_snap_client(ddp_snap_id);
 	sock_unregister(atalk_family_ops.family);
 
-	free_route_list();
-	free_interface_list();
-
-	restore_flags(flags);
+	return;
 }
 
 #endif  /* MODULE */
+#endif  /* CONFIG_ATALK || CONFIG_ATALK_MODULE */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov