Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Mon, 7 Oct 2002 02:39:20 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Mon, 7 Oct 2002 02:39:20 -0400 Received: from orion.netbank.com.br ([200.203.199.90]:776 "EHLO orion.netbank.com.br") by vger.kernel.org with ESMTP id ; Mon, 7 Oct 2002 02:39:08 -0400 Date: Mon, 7 Oct 2002 03:44:41 -0300 From: Arnaldo Carvalho de Melo To: "David S. Miller" Cc: Linux Kernel Mailing List Subject: [BKPATCH] Appletalk: use seq_file for proc stuff Message-ID: <20021007064441.GI1201@conectiva.com.br> Mail-Followup-To: Arnaldo Carvalho de Melo , "David S. Miller" , Linux Kernel Mailing List Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i X-Url: http://advogato.org/person/acme Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 30160 Lines: 1033 David, Please consider pulling from: master.kernel.org:/home/acme/BK/llc-2.5 This is the only outstanding changeset there. Tomorrow I'll do the missing bit: the aarp proc stuff will be moved to atalk_proc.c too. And will also fix the .permission bogosity in IPX and LLC. - Arnaldo You can import this changeset into BK by piping this whole message to: '| bk receive [path to repository]' or apply the patch as usual. =================================================================== ChangeSet@1.632, 2002-10-07 03:27:57-03:00, acme@conectiva.com.br o Appletalk: use seq_file for proc stuff And also move MODULE_LICENSE from aarp.c to ddp.c, as its there that the module_init/exit is. Also added MODULE_AUTHOR and MODULE_DESCRIPTION. include/linux/atalk.h | 14 + net/appletalk/Makefile | 2 net/appletalk/aarp.c | 22 -- net/appletalk/atalk_proc.c | 319 +++++++++++++++++++++++++++++++++++++++ net/appletalk/ddp.c | 244 +++++------------------------ net/appletalk/sysctl_net_atalk.c | 7 6 files changed, 385 insertions(+), 223 deletions(-) diff -Nru a/include/linux/atalk.h b/include/linux/atalk.h --- a/include/linux/atalk.h Mon Oct 7 03:28:22 2002 +++ b/include/linux/atalk.h Mon Oct 7 03:28:22 2002 @@ -198,5 +198,19 @@ #define at_sk(__sk) ((struct atalk_sock *)(__sk)->protinfo) +extern struct sock *atalk_sockets; +extern spinlock_t atalk_sockets_lock; + +extern struct atalk_route *atalk_routes; +extern rwlock_t atalk_routes_lock; + +extern struct atalk_iface *atalk_interfaces; +extern spinlock_t atalk_interfaces_lock; + +extern struct atalk_route atrtr_default; + +extern int atalk_proc_init(void); +extern void atalk_proc_exit(void); + #endif /* __KERNEL__ */ #endif /* __LINUX_ATALK_H__ */ diff -Nru a/net/appletalk/Makefile b/net/appletalk/Makefile --- a/net/appletalk/Makefile Mon Oct 7 03:28:22 2002 +++ b/net/appletalk/Makefile Mon Oct 7 03:28:22 2002 @@ -6,7 +6,7 @@ obj-$(CONFIG_ATALK) += appletalk.o -appletalk-y := aarp.o ddp.o +appletalk-y := aarp.o ddp.o atalk_proc.o appletalk-$(CONFIG_SYSCTL) += sysctl_net_atalk.o appletalk-objs := $(appletalk-y) diff -Nru a/net/appletalk/aarp.c b/net/appletalk/aarp.c --- a/net/appletalk/aarp.c Mon Oct 7 03:28:22 2002 +++ b/net/appletalk/aarp.c Mon Oct 7 03:28:22 2002 @@ -30,34 +30,13 @@ */ #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include #include #include #include #include #include #include -#include int sysctl_aarp_expiry_time = AARP_EXPIRY_TIME; int sysctl_aarp_tick_time = AARP_TICK_TIME; @@ -995,4 +974,3 @@ proc_net_remove("aarp"); } #endif -MODULE_LICENSE("GPL"); diff -Nru a/net/appletalk/atalk_proc.c b/net/appletalk/atalk_proc.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/net/appletalk/atalk_proc.c Mon Oct 7 03:28:22 2002 @@ -0,0 +1,319 @@ +/* + * atalk_proc.c - proc support for Appletalk + * + * Copyright(c) Arnaldo Carvalho de Melo + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, version 2. + */ + +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_PROC_FS +static __inline__ struct atalk_iface *atalk_get_interface_idx(loff_t pos) +{ + struct atalk_iface *i; + + for (i = atalk_interfaces; pos && i; i = i->next) + --pos; + + return i; +} + +static void *atalk_seq_interface_start(struct seq_file *seq, loff_t *pos) +{ + loff_t l = *pos; + + spin_lock_bh(&atalk_interfaces_lock); + return l ? atalk_get_interface_idx(--l) : (void *)1; +} + +static void *atalk_seq_interface_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct atalk_iface *i; + + ++*pos; + if (v == (void *)1) { + i = NULL; + if (atalk_interfaces) + i = atalk_interfaces; + goto out; + } + i = v; + i = i->next; +out: + return i; +} + +static void atalk_seq_interface_stop(struct seq_file *seq, void *v) +{ + spin_unlock_bh(&atalk_interfaces_lock); +} + +static int atalk_seq_interface_show(struct seq_file *seq, void *v) +{ + struct atalk_iface *iface; + + if (v == (void *)1) { + seq_puts(seq, "Interface Address Networks " + "Status\n"); + goto out; + } + + iface = v; + seq_printf(seq, "%-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); +out: + return 0; +} + +static __inline__ struct atalk_route *atalk_get_route_idx(loff_t pos) +{ + struct atalk_route *r; + + for (r = atalk_routes; pos && r; r = r->next) + --pos; + + return r; +} + +static void *atalk_seq_route_start(struct seq_file *seq, loff_t *pos) +{ + loff_t l = *pos; + + read_lock_bh(&atalk_routes_lock); + return l ? atalk_get_route_idx(--l) : (void *)1; +} + +static void *atalk_seq_route_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct atalk_route *r; + + ++*pos; + if (v == (void *)1) { + r = NULL; + if (atalk_routes) + r = atalk_routes; + goto out; + } + r = v; + r = r->next; +out: + return r; +} + +static void atalk_seq_route_stop(struct seq_file *seq, void *v) +{ + read_unlock_bh(&atalk_routes_lock); +} + +static int atalk_seq_route_show(struct seq_file *seq, void *v) +{ + struct atalk_route *rt; + + if (v == (void *)1) { + seq_puts(seq, "Target Router Flags Dev\n"); + goto out; + } + + if (atrtr_default.dev) { + rt = &atrtr_default; + seq_printf(seq, "Default %04X:%02X %-4d %s\n", + ntohs(rt->gateway.s_net), rt->gateway.s_node, + rt->flags, rt->dev->name); + } + + rt = v; + seq_printf(seq, "%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); +out: + return 0; +} + +static __inline__ struct sock *atalk_get_socket_idx(loff_t pos) +{ + struct sock *s; + + for (s = atalk_sockets; pos && s; s = s->next) + --pos; + + return s; +} + +static void *atalk_seq_socket_start(struct seq_file *seq, loff_t *pos) +{ + loff_t l = *pos; + + spin_lock_bh(&atalk_sockets_lock); + return l ? atalk_get_socket_idx(--l) : (void *)1; +} + +static void *atalk_seq_socket_next(struct seq_file *seq, void *v, loff_t *pos) +{ + struct sock *i; + + ++*pos; + if (v == (void *)1) { + i = NULL; + if (atalk_sockets) + i = atalk_sockets; + goto out; + } + i = v; + i = i->next; +out: + return i; +} + +static void atalk_seq_socket_stop(struct seq_file *seq, void *v) +{ + spin_unlock_bh(&atalk_sockets_lock); +} + +static int atalk_seq_socket_show(struct seq_file *seq, void *v) +{ + struct sock *s; + struct atalk_sock *at; + + if (v == (void *)1) { + seq_printf(seq, "Type Local_addr Remote_addr Tx_queue " + "Rx_queue St UID\n"); + goto out; + } + + s = v; + at = at_sk(s); + + seq_printf(seq, "%02X %04X:%02X:%02X %04X:%02X:%02X %08X:%08X " + "%02X %d\n", + s->type, ntohs(at->src_net), at->src_node, at->src_port, + ntohs(at->dest_net), at->dest_node, at->dest_port, + atomic_read(&s->wmem_alloc), atomic_read(&s->rmem_alloc), + s->state, SOCK_INODE(s->socket)->i_uid); +out: + return 0; +} + +struct seq_operations atalk_seq_interface_ops = { + .start = atalk_seq_interface_start, + .next = atalk_seq_interface_next, + .stop = atalk_seq_interface_stop, + .show = atalk_seq_interface_show, +}; + +struct seq_operations atalk_seq_route_ops = { + .start = atalk_seq_route_start, + .next = atalk_seq_route_next, + .stop = atalk_seq_route_stop, + .show = atalk_seq_route_show, +}; + +struct seq_operations atalk_seq_socket_ops = { + .start = atalk_seq_socket_start, + .next = atalk_seq_socket_next, + .stop = atalk_seq_socket_stop, + .show = atalk_seq_socket_show, +}; + +static int atalk_seq_interface_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &atalk_seq_interface_ops); +} + +static int atalk_seq_route_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &atalk_seq_route_ops); +} + +static int atalk_seq_socket_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &atalk_seq_socket_ops); +} + +static struct file_operations atalk_seq_interface_fops = { + .open = atalk_seq_interface_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +static struct file_operations atalk_seq_route_fops = { + .open = atalk_seq_route_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +static struct file_operations atalk_seq_socket_fops = { + .open = atalk_seq_socket_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +static struct proc_dir_entry *atalk_proc_dir; + +int __init atalk_proc_init(void) +{ + struct proc_dir_entry *p; + int rc = -ENOMEM; + + atalk_proc_dir = proc_mkdir("atalk", proc_net); + if (!atalk_proc_dir) + goto out; + + p = create_proc_entry("interface", S_IRUGO, atalk_proc_dir); + if (!p) + goto out_interface; + p->proc_fops = &atalk_seq_interface_fops; + + p = create_proc_entry("route", S_IRUGO, atalk_proc_dir); + if (!p) + goto out_route; + p->proc_fops = &atalk_seq_route_fops; + + p = create_proc_entry("socket", S_IRUGO, atalk_proc_dir); + if (!p) + goto out_socket; + p->proc_fops = &atalk_seq_socket_fops; + + rc = 0; +out: + return rc; +out_socket: + remove_proc_entry("route", atalk_proc_dir); +out_route: + remove_proc_entry("interface", atalk_proc_dir); +out_interface: + remove_proc_entry("atalk", proc_net); + goto out; +} + +void __exit atalk_proc_exit(void) +{ + remove_proc_entry("interface", atalk_proc_dir); + remove_proc_entry("route", atalk_proc_dir); + remove_proc_entry("socket", atalk_proc_dir); + remove_proc_entry("atalk", proc_net); +} + +#else /* CONFIG_PROC_FS */ +int __init atalk_proc_init(void) +{ + return 0; +} + +void __exit atalk_proc_exit(void) +{ +} +#endif /* CONFIG_PROC_FS */ diff -Nru a/net/appletalk/ddp.c b/net/appletalk/ddp.c --- a/net/appletalk/ddp.c Mon Oct 7 03:28:22 2002 +++ b/net/appletalk/ddp.c Mon Oct 7 03:28:22 2002 @@ -40,6 +40,8 @@ * result. * Arnaldo C. de Melo : Cleanup, in preparation for * shared skb support 8) + * Arnaldo C. de Melo : Move proc stuff to atalk_proc.c, + * use seq_file * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -50,41 +52,14 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include #include /* For TIOCOUTQ/INQ */ #include -#include #include #include -#include #include #include -#include -#include -#include #ifdef CONFIG_PROC_FS extern void aarp_register_proc_fs(void); @@ -112,8 +87,8 @@ * * \**************************************************************************/ -static struct sock *atalk_sockets; -static spinlock_t atalk_sockets_lock = SPIN_LOCK_UNLOCKED; +struct sock *atalk_sockets; +spinlock_t atalk_sockets_lock = SPIN_LOCK_UNLOCKED; extern inline void atalk_insert_socket(struct sock *sk) { @@ -244,53 +219,6 @@ } } -/* Called from proc fs */ -static int atalk_get_info(char *buffer, char **start, off_t offset, int length) -{ - off_t pos = 0; - off_t begin = 0; - int len = sprintf(buffer, "Type local_addr remote_addr tx_queue " - "rx_queue st uid\n"); - struct sock *s; - /* Output the AppleTalk data for the /proc filesystem */ - - spin_lock_bh(&atalk_sockets_lock); - for (s = atalk_sockets; s; s = s->next) { - struct atalk_sock *at = at_sk(s); - - len += sprintf(buffer + len, "%02X ", s->type); - len += sprintf(buffer + len, "%04X:%02X:%02X ", - ntohs(at->src_net), at->src_node, at->src_port); - len += sprintf(buffer + len, "%04X:%02X:%02X ", - ntohs(at->dest_net), at->dest_node, - 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); - - /* Are we still dumping unwanted data then discard the record */ - pos = begin + len; - - if (pos < offset) { - len = 0; /* Keep dumping into the buffer start */ - begin = pos; - } - if (pos > offset + length) /* We have dumped enough */ - break; - } - spin_unlock_bh(&atalk_sockets_lock); - - /* 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 */ - - return len; -} - /**************************************************************************\ * * * Routing tables for the AppleTalk socket layer. * @@ -298,14 +226,14 @@ \**************************************************************************/ /* Anti-deadlock ordering is router_lock --> iface_lock -DaveM */ -static struct atalk_route *atalk_router_list; -static rwlock_t atalk_router_lock = RW_LOCK_UNLOCKED; +struct atalk_route *atalk_routes; +rwlock_t atalk_routes_lock = RW_LOCK_UNLOCKED; -static struct atalk_iface *atalk_iface_list; -static spinlock_t atalk_iface_lock = SPIN_LOCK_UNLOCKED; +struct atalk_iface *atalk_interfaces; +spinlock_t atalk_interfaces_lock = SPIN_LOCK_UNLOCKED; /* For probing devices or in a routerless network */ -static struct atalk_route atrtr_default; +struct atalk_route atrtr_default; /* AppleTalk interface control */ /* @@ -314,10 +242,10 @@ */ static void atif_drop_device(struct net_device *dev) { - struct atalk_iface **iface = &atalk_iface_list; + struct atalk_iface **iface = &atalk_interfaces; struct atalk_iface *tmp; - spin_lock_bh(&atalk_iface_lock); + spin_lock_bh(&atalk_interfaces_lock); while ((tmp = *iface) != NULL) { if (tmp->dev == dev) { *iface = tmp->next; @@ -327,7 +255,7 @@ } else iface = &tmp->next; } - spin_unlock_bh(&atalk_iface_lock); + spin_unlock_bh(&atalk_interfaces_lock); } static struct atalk_iface *atif_add_device(struct net_device *dev, @@ -346,10 +274,10 @@ iface->address = *sa; iface->status = 0; - spin_lock_bh(&atalk_iface_lock); - iface->next = atalk_iface_list; - atalk_iface_list = iface; - spin_unlock_bh(&atalk_iface_lock); + spin_lock_bh(&atalk_interfaces_lock); + iface->next = atalk_interfaces; + atalk_interfaces = iface; + spin_unlock_bh(&atalk_interfaces_lock); out: return iface; out_mem: @@ -466,8 +394,8 @@ * Return a point-to-point interface only if * there is no non-ptp interface available. */ - spin_lock_bh(&atalk_iface_lock); - for (iface = atalk_iface_list; iface; iface = iface->next) { + spin_lock_bh(&atalk_interfaces_lock); + for (iface = atalk_interfaces; iface; iface = iface->next) { if (!fiface && !(iface->dev->flags & IFF_LOOPBACK)) fiface = iface; if (!(iface->dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))) { @@ -478,12 +406,12 @@ if (fiface) retval = &fiface->address; - else if (atalk_iface_list) - retval = &atalk_iface_list->address; + else if (atalk_interfaces) + retval = &atalk_interfaces->address; else retval = NULL; out: - spin_unlock_bh(&atalk_iface_lock); + spin_unlock_bh(&atalk_interfaces_lock); return retval; } @@ -514,8 +442,8 @@ { struct atalk_iface *iface; - spin_lock_bh(&atalk_iface_lock); - for (iface = atalk_iface_list; iface; iface = iface->next) { + spin_lock_bh(&atalk_interfaces_lock); + for (iface = atalk_interfaces; iface; iface = iface->next) { if ((node == ATADDR_BCAST || node == ATADDR_ANYNODE || iface->address.s_node == node) && @@ -529,7 +457,7 @@ ntohs(net) <= ntohs(iface->nets.nr_lastnet)) break; } - spin_unlock_bh(&atalk_iface_lock); + spin_unlock_bh(&atalk_interfaces_lock); return iface; } @@ -549,8 +477,8 @@ struct atalk_route *net_route = NULL; struct atalk_route *r; - read_lock_bh(&atalk_router_lock); - for (r = atalk_router_list; r; r = r->next) { + read_lock_bh(&atalk_routes_lock); + for (r = atalk_routes; r; r = r->next) { if (!(r->flags & RTF_UP)) continue; @@ -582,7 +510,7 @@ else /* No route can be found */ r = NULL; out: - read_unlock_bh(&atalk_router_lock); + read_unlock_bh(&atalk_routes_lock); return r; } @@ -630,8 +558,8 @@ goto out; /* Now walk the routing table and make our decisions */ - write_lock_bh(&atalk_router_lock); - for (rt = atalk_router_list; rt; rt = rt->next) { + write_lock_bh(&atalk_routes_lock); + for (rt = atalk_routes; rt; rt = rt->next) { if (r->rt_flags != rt->flags) continue; @@ -646,8 +574,8 @@ if (!devhint) { riface = NULL; - spin_lock_bh(&atalk_iface_lock); - for (iface = atalk_iface_list; iface; iface = iface->next) { + spin_lock_bh(&atalk_interfaces_lock); + for (iface = atalk_interfaces; iface; iface = iface->next) { if (!riface && ntohs(ga->sat_addr.s_net) >= ntohs(iface->nets.nr_firstnet) && @@ -659,7 +587,7 @@ ga->sat_addr.s_node == iface->address.s_node) riface = iface; } - spin_unlock_bh(&atalk_iface_lock); + spin_unlock_bh(&atalk_interfaces_lock); retval = -ENETUNREACH; if (!riface) @@ -675,8 +603,8 @@ if (!rt) goto out; - rt->next = atalk_router_list; - atalk_router_list = rt; + rt->next = atalk_routes; + atalk_routes = rt; } /* Fill in the routing entry */ @@ -687,7 +615,7 @@ retval = 0; out_unlock: - write_unlock_bh(&atalk_router_lock); + write_unlock_bh(&atalk_routes_lock); out: return retval; } @@ -695,11 +623,11 @@ /* Delete a route. Find it and discard it */ static int atrtr_delete(struct atalk_addr * addr) { - struct atalk_route **r = &atalk_router_list; + struct atalk_route **r = &atalk_routes; int retval = 0; struct atalk_route *tmp; - write_lock_bh(&atalk_router_lock); + write_lock_bh(&atalk_routes_lock); while ((tmp = *r) != NULL) { if (tmp->target.s_net == addr->s_net && (!(tmp->flags&RTF_GATEWAY) || @@ -712,7 +640,7 @@ } retval = -ENOENT; out: - write_unlock_bh(&atalk_router_lock); + write_unlock_bh(&atalk_routes_lock); return retval; } @@ -722,10 +650,10 @@ */ void atrtr_device_down(struct net_device *dev) { - struct atalk_route **r = &atalk_router_list; + struct atalk_route **r = &atalk_routes; struct atalk_route *tmp; - write_lock_bh(&atalk_router_lock); + write_lock_bh(&atalk_routes_lock); while ((tmp = *r) != NULL) { if (tmp->dev == dev) { *r = tmp->next; @@ -733,7 +661,7 @@ } else r = &tmp->next; } - write_unlock_bh(&atalk_router_lock); + write_unlock_bh(&atalk_routes_lock); if (atrtr_default.dev == dev) atrtr_set_default(NULL); @@ -1013,81 +941,6 @@ return -EINVAL; } -/* Called from proc fs - just make it print the ifaces neatly */ -static int atalk_if_get_info(char *buffer, char **start, off_t offset, - int length) -{ - off_t pos = 0; - off_t begin = 0; - struct atalk_iface *iface; - int len = sprintf(buffer, "Interface Address " - "Networks Status\n"); - - spin_lock_bh(&atalk_iface_lock); - for (iface = atalk_iface_list; iface; 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 = 0; - begin = pos; - } - if (pos > offset + length) - break; - } - spin_unlock_bh(&atalk_iface_lock); - - *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 */ -static int atalk_rt_get_info(char *buffer, char **start, off_t offset, - int length) -{ - off_t pos = 0; - off_t begin = 0; - int len = sprintf(buffer, "Target Router Flags Dev\n"); - struct atalk_route *rt; - - if (atrtr_default.dev) { - 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); - } - - read_lock_bh(&atalk_router_lock); - for (rt = atalk_router_list; rt; rt = rt->next) { - 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) { - len = 0; - begin = pos; - } - if (pos > offset + length) - break; - } - read_unlock_bh(&atalk_router_lock); - - *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 * @@ -1991,17 +1844,14 @@ register_netdevice_notifier(&ddp_notifier); aarp_proto_init(); - - proc_net_create("appletalk", 0, atalk_get_info); - proc_net_create("atalk_route", 0, atalk_rt_get_info); - proc_net_create("atalk_iface", 0, atalk_if_get_info); + atalk_proc_init(); #ifdef CONFIG_PROC_FS aarp_register_proc_fs(); #endif /* CONFIG_PROC_FS */ #ifdef CONFIG_SYSCTL atalk_register_sysctl(); #endif /* CONFIG_SYSCTL */ - printk(KERN_INFO "NET4: AppleTalk 0.18a for Linux NET4.0\n"); + printk(KERN_INFO "NET4: AppleTalk 0.20 for Linux NET4.0\n"); return 0; } module_init(atalk_init); @@ -2024,9 +1874,7 @@ #ifdef CONFIG_SYSCTL atalk_unregister_sysctl(); #endif /* CONFIG_SYSCTL */ - proc_net_remove("appletalk"); - proc_net_remove("atalk_route"); - proc_net_remove("atalk_iface"); + atalk_proc_exit(); #ifdef CONFIG_PROC_FS aarp_unregister_proc_fs(); #endif /* CONFIG_PROC_FS */ @@ -2039,3 +1887,7 @@ } module_exit(atalk_exit); #endif /* MODULE */ + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Alan Cox "); +MODULE_DESCRIPTION("AppleTalk 0.20 for Linux NET4.0\n"); diff -Nru a/net/appletalk/sysctl_net_atalk.c b/net/appletalk/sysctl_net_atalk.c --- a/net/appletalk/sysctl_net_atalk.c Mon Oct 7 03:28:22 2002 +++ b/net/appletalk/sysctl_net_atalk.c Mon Oct 7 03:28:22 2002 @@ -7,7 +7,6 @@ */ #include -#include #include extern int sysctl_aarp_expiry_time; @@ -16,7 +15,7 @@ extern int sysctl_aarp_resolve_time; #ifdef CONFIG_SYSCTL -static ctl_table atalk_table[] = { +static struct ctl_table atalk_table[] = { { .ctl_name = NET_ATALK_AARP_EXPIRY_TIME, .procname = "aarp-expiry-time", @@ -52,7 +51,7 @@ { 0 }, }; -static ctl_table atalk_dir_table[] = { +static struct ctl_table atalk_dir_table[] = { { .ctl_name = NET_ATALK, .procname = "appletalk", @@ -62,7 +61,7 @@ { 0 }, }; -static ctl_table atalk_root_table[] = { +static struct ctl_table atalk_root_table[] = { { .ctl_name = CTL_NET, .procname = "net", =================================================================== This BitKeeper patch contains the following changesets: 1.632 ## Wrapped with gzip_uu ## begin 664 bkpatch18241 M'XL(`(8IH3T``^U;;7.;2!+^+'[%G%.;DKV6Q#N2O/$EL9RL*HZ=\LM=JBY7 M%(*111D)+2"_U"G__;IG`($$"-G)W9=XLQY@IGN>Z>YYIF'&K\A-2(-^P[*G M5'A%_O3#J-^P_1FU(_?>:MO^M#T*H.+2]Z&B,_&GM(-M.^\_=3S/;LEM38#J M+U9D3\@]#<)^0VHKZ9/H:4[[CMXF39=RJ(HPW^:9"BBIB\E752-I2TYDF2I$G5$ M6>WJJH"XWJYC7],BB:(N*J*JB4O5Z"H]84"DMJ[(1)0[DM@1#2(J?=GH:T8+ M+D21%"HEO^ND)0KOR8\=P(E@$Y^\F\\]T.#=]`Q-X=^[F4,L+_3)U+^GY//%X.;LU#P;GIR>7YV2<>!/B64%\[8-0(GC MP,4AL4+B1B&))C2@H"&:6!'>@`9GX5'3G;E1ASZZ$7'#=MP)=F`Y#G62'M[= M7/]Y<4FL6?ID<'IU-+M7TD?1"M?I2TWL] MA%<=`'E]X5-H1YX)#TVF.M8:QT5/,Y:*I"K2G+`%.[74G9$1@/ MZW5D.UL\\JAN3W+H5'$IJP80 MD^UH8Z,WHHIH29;8*P%7KC`7;HHN,\HOGU6X!IS3!X)CZU>T$_Y!5*&$WU]* M!6P%$'/\+XE]1:OF?_%G\+]-WKO1)TKG-&`F(87K;:?"3I\(CA&(MZ+-)=DP MP5W9I#D<`8 MA,Z!0`Y((S=36O':OYC/_2!BR4":*$!K)G#BSY\"]W82->U]\BZ8@0E\[X"1Z@JL7,@4#&W"*BP30D_IC=?#R_(1_I MC`:61[XL1IYKDS/7IC/(=2`WF>.3<`*YQN@)FZ.B#XCA*L9`/OB@V(IK=U/*./T;[0:+1:4,6D`QHM@ADT$;[#;0SYWG>= M!!D:9H4,&@11,P:3IJ\'<'5(8L0'">3XWH.N#Y+NPKD[,SVPJ#F:-%^O(V8U M^TQJX\$J"V M7^7$8A_Z\VH3\%&CJQ:SK<[*=`F5Q3U._( M,.FU0<@[QPEH&!)"SFGTX`=W>+F')B?L9^\*<"_";[.]_0U[LQX1`K^44D**>WH&&24VC79AHFLK@&@@\<\EJ@@(^>!9MR$9T/MRUD$O M!%%@0DYA+;RH#=P1.RL"$[_.51XE_6:Y:<#K6+]9AFJI#OP.8W**23!FC"!J M'=]:$7VPGA(R(FO/D(0R&E?02@_D9 M&5R,M9H5,\;8B19CN1?P(K?RBS*V>(1KZ5KBHQ^=JZ6N>D&BMN:34E),^MJ) M%=.XS=-D$O_;63)+!M=/B9C?7C^9?"[J@/&UK[%TF M]U<1N1D.RD@TC!U@1'A:^`/AS=`AXO\WHAZQFT.;;)2!KXX0A9:VP\I"I\N>EC;"2 M-8*X+F\$E8?"]Z,:8^&Y0^4X,DEGR1A6&5X)_E4N5()]E<+4Q!U/[TK@V96A M!'F&A$N@9SBK!'N&:5+PE:^-,*!9PDDN3@$@<3X3XH>*/[S_-(AJ$/(/[WP5"?G>,^JV3>/Q*HRPCT:C>%IA'<8`\@ZV M84.':WSF>2&E=\E3=L.;>M0*:=J8W>6C9"M.;MU*C"N__A_PQ0ZH!)AQ_D]# MR+Z".FY@TED4/"6I5O(4VV-`FFR[F&0J\9ZMY=E,8%W9'+,>$`]L&&/K]/SB M\^EGMN[F>X%*=CF]@YOF'JO<.^3/<.V+$[2_Y:7VWGR\."1KJI(>YEFEJR"&ZGGKF'\PY@XKY!&LJT+"`FYG%$RJ M$L$JUJMZY]&T<_=]7LV!79#N9H*AQZM):K0M&B4-[18$V M2.=@;<<"MUGJ3/U\%EC'3M^ARYD#H5;8)VXD%^X[;S]']/S][Y+=S0J%75$5 M%5%4]:6N26J7[6.J&X>+E.I]3$G]=;JHZG01/UJPMA%;Z)3G[,&"-8FD"I#% M4LR5-K_:I&_T21-XMV8OUME7W.2U&IDOKZK@`WGRU31N&#SDU&6^7)9IR^T3 M9C>(RB"N;=%4HUS[F)@V7>6D:P20]IOY9K$VX5'-YN&0Y*#+]DG]DC,WPIWE MOHWF4CM83(+68N:V1KX]64S;#JW4J\FJ#+&G:GBK*\^N M)J.P*QJB(LE:;ZFKLL3/M?9VC4V1M&3Y5W"6!B<_#EA]`H@!>TYH*@J1(&'0 M9"(+`QW6((C67A>*S?AC8]XU_'8XRUDK^C+Z,L$G=WLZ/[VU,S.J7:!&D/X5 M?V7QQT_*5L8?@_.?2.@R!)@\PXQTO.QX&;]M`F$4.3$\(X1BZ M.CJ%%_6'#O2*.#2I^S\;NJ8@/PQYL0-2MG@.-:`=N=;1G)(C1FMGBQ@BX"I$ MQ(I:1TP&NH(PAKJ"S-!X"-R(UH(3;>*)\']$%&4@Z2H+25UC(5G7,2_TC*XS MS_"B4=\UNM%E8(T>`YL,I.#@4/:>#1FE>XQ.>!&;CT5^1A*MG:LO^QC8\C!5.PA+AMLW_RN^>GT\MPX5'RWQS^\J<_=-]SSG M/5)BKXX2^]+!?N=W]K"'R!IY-*8;=OVO?[/=1EA`V2*G;97"W;RV2 @@>]'.='TCX7M";7OPL7TC3$:XV=T3?@O_'+2#)X\```` ` end - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/