From a4cae070b155d9738ca207330b579bfec840720a Mon Sep 17 00:00:00 2001 From: Daisy Chang Date: Tue, 1 Oct 2002 09:05:12 -0500 Subject: sctp: Added the 'Unrecognized Parameter' handling. --- include/linux/sctp.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'include/linux') diff --git a/include/linux/sctp.h b/include/linux/sctp.h index 77502f62b660..ba784913fb09 100644 --- a/include/linux/sctp.h +++ b/include/linux/sctp.h @@ -155,7 +155,7 @@ typedef struct sctp_paramhdr { typedef enum { /* RFC 2960 Section 3.3.5 */ - SCTP_PARAM_HEATBEAT_INFO = __constant_htons(1), + SCTP_PARAM_HEARTBEAT_INFO = __constant_htons(1), /* RFC 2960 Section 3.3.2.1 */ SCTP_PARAM_IPV4_ADDRESS = __constant_htons(5), SCTP_PARAM_IPV6_ADDRESS = __constant_htons(6), @@ -190,6 +190,7 @@ typedef enum { SCTP_PARAM_ACTION_SKIP_ERR = __constant_htons(0xc000), } sctp_param_action_t; +enum { SCTP_PARAM_ACTION_MASK = __constant_htons(0xc000), }; /* RFC 2960 Section 3.3.1 Payload Data (DATA) (0) */ -- cgit v1.2.3 From d5804f1bcba6d5d90b4a1e19bc617fed8d9e0324 Mon Sep 17 00:00:00 2001 From: Daisy Chang Date: Wed, 2 Oct 2002 05:13:14 -0500 Subject: Remove more excessive spaces. --- include/linux/sctp.h | 16 ++++++++-------- include/net/sctp/structs.h | 16 ++++++++-------- net/sctp/sm_make_chunk.c | 6 +++--- net/sctp/sm_statefuns.c | 2 +- 4 files changed, 20 insertions(+), 20 deletions(-) (limited to 'include/linux') diff --git a/include/linux/sctp.h b/include/linux/sctp.h index ba784913fb09..1d54c9488601 100644 --- a/include/linux/sctp.h +++ b/include/linux/sctp.h @@ -155,15 +155,15 @@ typedef struct sctp_paramhdr { typedef enum { /* RFC 2960 Section 3.3.5 */ - SCTP_PARAM_HEARTBEAT_INFO = __constant_htons(1), + SCTP_PARAM_HEARTBEAT_INFO = __constant_htons(1), /* RFC 2960 Section 3.3.2.1 */ - SCTP_PARAM_IPV4_ADDRESS = __constant_htons(5), - SCTP_PARAM_IPV6_ADDRESS = __constant_htons(6), - SCTP_PARAM_STATE_COOKIE = __constant_htons(7), - SCTP_PARAM_UNRECOGNIZED_PARAMETERS = __constant_htons(8), - SCTP_PARAM_COOKIE_PRESERVATIVE = __constant_htons(9), - SCTP_PARAM_HOST_NAME_ADDRESS = __constant_htons(11), - SCTP_PARAM_SUPPORTED_ADDRESS_TYPES = __constant_htons(12), + SCTP_PARAM_IPV4_ADDRESS = __constant_htons(5), + SCTP_PARAM_IPV6_ADDRESS = __constant_htons(6), + SCTP_PARAM_STATE_COOKIE = __constant_htons(7), + SCTP_PARAM_UNRECOGNIZED_PARAMETERS = __constant_htons(8), + SCTP_PARAM_COOKIE_PRESERVATIVE = __constant_htons(9), + SCTP_PARAM_HOST_NAME_ADDRESS = __constant_htons(11), + SCTP_PARAM_SUPPORTED_ADDRESS_TYPES = __constant_htons(12), SCTP_PARAM_ECN_CAPABLE = __constant_htons(0x8000), /* Add-IP Extension. Section 3.2 */ diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 89898ddb0db7..c3f11bdf3aeb 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h @@ -1044,15 +1044,15 @@ sctp_association_t *sctp_endpoint_lookup_assoc(const sctp_endpoint_t *ep, sctp_endpoint_t *sctp_endpoint_is_match(sctp_endpoint_t *, const sockaddr_storage_t *); -int sctp_verify_init(const sctp_association_t *asoc, - sctp_cid_t cid, - sctp_init_chunk_t *peer_init, - sctp_chunk_t *chunk, +int sctp_verify_init(const sctp_association_t *asoc, + sctp_cid_t cid, + sctp_init_chunk_t *peer_init, + sctp_chunk_t *chunk, sctp_chunk_t **err_chunk); -int sctp_verify_param(const sctp_association_t *asoc, - sctpParam_t param, - sctp_cid_t cid, - sctp_chunk_t *chunk, +int sctp_verify_param(const sctp_association_t *asoc, + sctpParam_t param, + sctp_cid_t cid, + sctp_chunk_t *chunk, sctp_chunk_t **err_chunk); int sctp_process_unk_param(const sctp_association_t *asoc, sctpParam_t param, diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c index b3333a8fa182..74c795b964f5 100644 --- a/net/sctp/sm_make_chunk.c +++ b/net/sctp/sm_make_chunk.c @@ -886,7 +886,7 @@ nodata: return retval; } -/* Create an Operation Error chunk with the specified space reserved. +/* Create an Operation Error chunk with the specified space reserved. * This routine can be used for containing multiple causes in the chunk. */ sctp_chunk_t *sctp_make_op_error_space(const sctp_association_t *asoc, @@ -1511,7 +1511,7 @@ int sctp_verify_param(const sctp_association_t *asoc, * 00 - Stop processing this SCTP chunk and discard it, * do not process any further chunks within it. * - * 01 - Stop processing this SCTP chunk and discard it, + * 01 - Stop processing this SCTP chunk and discard it, * do not process any further chunks within it, and report * the unrecognized parameter in an 'Unrecognized * Parameter Type' (in either an ERROR or in the INIT ACK). @@ -1549,7 +1549,7 @@ int sctp_process_unk_param(const sctp_association_t *asoc, if (*err_chk_p) sctp_init_cause(*err_chk_p, SCTP_ERROR_UNKNOWN_PARAM, - (const void *)param.p, + (const void *)param.p, WORD_ROUND(ntohs(param.p->length))); break; diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c index ed1bc0c0d535..9b6138f8f8dc 100644 --- a/net/sctp/sm_statefuns.c +++ b/net/sctp/sm_statefuns.c @@ -2741,7 +2741,7 @@ sctp_disposition_t sctp_sf_shut_8_4_5(const sctp_endpoint_t *ep, shut->skb->sk = ep->base.sk; sctp_packet_append_chunk(packet, shut); - + sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT, SCTP_PACKET(packet)); -- cgit v1.2.3 From 25587b0087ba4c0c29279a068c6433d9a4368006 Mon Sep 17 00:00:00 2001 From: Lennert Buytenhek Date: Fri, 4 Oct 2002 05:17:53 -0700 Subject: [NET]: Remove net_call_rx_atomic. --- include/linux/netdevice.h | 1 - net/bridge/br.c | 12 ++++++------ net/core/dev.c | 14 -------------- net/netsyms.c | 1 - 4 files changed, 6 insertions(+), 22 deletions(-) (limited to 'include/linux') diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 93b4d5f1e64d..f2c8daf526aa 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -587,7 +587,6 @@ static inline void dev_kfree_skb_any(struct sk_buff *skb) dev_kfree_skb(skb); } -extern void net_call_rx_atomic(void (*fn)(void)); #define HAVE_NETIF_RX 1 extern int netif_rx(struct sk_buff *skb); #define HAVE_NETIF_RECEIVE_SKB 1 diff --git a/net/bridge/br.c b/net/bridge/br.c index c4a03bd392b0..2af745df791f 100644 --- a/net/bridge/br.c +++ b/net/bridge/br.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include "br_private.h" @@ -55,11 +56,6 @@ static int __init br_init(void) return 0; } -static void __br_clear_frame_hook(void) -{ - br_handle_frame_hook = NULL; -} - static void __br_clear_ioctl_hook(void) { br_ioctl_hook = NULL; @@ -69,7 +65,11 @@ static void __exit br_deinit(void) { unregister_netdevice_notifier(&br_device_notifier); br_call_ioctl_atomic(__br_clear_ioctl_hook); - net_call_rx_atomic(__br_clear_frame_hook); + + br_write_lock_bh(BR_NETPROTO_LOCK); + br_handle_frame_hook = NULL; + br_write_unlock_bh(BR_NETPROTO_LOCK); + #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) br_fdb_get_hook = NULL; br_fdb_put_hook = NULL; diff --git a/net/core/dev.c b/net/core/dev.c index 8ed6cb8b6457..a1f8b13b0898 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1374,20 +1374,6 @@ static void net_tx_action(struct softirq_action *h) } } -/** - * net_call_rx_atomic - * @fn: function to call - * - * Make a function call that is atomic with respect to the protocol - * layers. - */ -void net_call_rx_atomic(void (*fn)(void)) -{ - br_write_lock_bh(BR_NETPROTO_LOCK); - fn(); - br_write_unlock_bh(BR_NETPROTO_LOCK); -} - #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) int (*br_handle_frame_hook)(struct sk_buff *skb) = NULL; #endif diff --git a/net/netsyms.c b/net/netsyms.c index 463f6749b027..1a77dc66baa6 100644 --- a/net/netsyms.c +++ b/net/netsyms.c @@ -587,7 +587,6 @@ EXPORT_SYMBOL(ip_route_me_harder); EXPORT_SYMBOL(register_gifconf); -EXPORT_SYMBOL(net_call_rx_atomic); EXPORT_SYMBOL(softnet_data); #if defined(CONFIG_NET_RADIO) || defined(CONFIG_NET_PCMCIA_RADIO) -- cgit v1.2.3 From 102f07337e683bfbe50532e8864c609c98419f24 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo Date: Sun, 6 Oct 2002 21:27:57 -0300 Subject: 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(-) create mode 100644 net/appletalk/atalk_proc.c (limited to 'include/linux') diff --git a/include/linux/atalk.h b/include/linux/atalk.h index e26dc1db8a41..477169eb5b28 100644 --- a/include/linux/atalk.h +++ b/include/linux/atalk.h @@ -198,5 +198,19 @@ extern void aarp_cleanup_module(void); #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 --git a/net/appletalk/Makefile b/net/appletalk/Makefile index 14c4e7c55e0a..0f8309f9d5a6 100644 --- a/net/appletalk/Makefile +++ b/net/appletalk/Makefile @@ -6,7 +6,7 @@ export-objs = ddp.o 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 --git a/net/appletalk/aarp.c b/net/appletalk/aarp.c index c86f71734d9c..ee2303344c7a 100644 --- a/net/appletalk/aarp.c +++ b/net/appletalk/aarp.c @@ -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 @@ void aarp_unregister_proc_fs(void) proc_net_remove("aarp"); } #endif -MODULE_LICENSE("GPL"); diff --git a/net/appletalk/atalk_proc.c b/net/appletalk/atalk_proc.c new file mode 100644 index 000000000000..7a990eff3066 --- /dev/null +++ b/net/appletalk/atalk_proc.c @@ -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 --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c index 3a3eae32fa43..5b1dc1368548 100644 --- a/net/appletalk/ddp.c +++ b/net/appletalk/ddp.c @@ -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 proto_ops atalk_dgram_ops; * * \**************************************************************************/ -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 @@ extern inline void atalk_destroy_socket(struct sock *sk) } } -/* 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 @@ static int atalk_get_info(char *buffer, char **start, off_t offset, int length) \**************************************************************************/ /* 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 struct atalk_route atrtr_default; */ 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 @@ static void atif_drop_device(struct net_device *dev) } 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 @@ static struct atalk_iface *atif_add_device(struct net_device *dev, 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 @@ static struct atalk_addr *atalk_find_primary(void) * 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 @@ static struct atalk_addr *atalk_find_primary(void) 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 @@ static struct atalk_iface *atalk_find_interface(int net, int node) { 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 @@ static struct atalk_iface *atalk_find_interface(int net, int node) 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 @@ static struct atalk_route *atrtr_find(struct atalk_addr *target) 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 @@ static struct atalk_route *atrtr_find(struct atalk_addr *target) 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 @@ static int atrtr_create(struct rtentry *r, struct net_device *devhint) 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 @@ static int atrtr_create(struct rtentry *r, struct net_device *devhint) 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 @@ static int atrtr_create(struct rtentry *r, struct net_device *devhint) 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 @@ static int atrtr_create(struct rtentry *r, struct net_device *devhint) 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 @@ static int atrtr_create(struct rtentry *r, struct net_device *devhint) retval = 0; out_unlock: - write_unlock_bh(&atalk_router_lock); + write_unlock_bh(&atalk_routes_lock); out: return retval; } @@ -695,11 +623,11 @@ out: /* 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 @@ static int atrtr_delete(struct atalk_addr * addr) } retval = -ENOENT; out: - write_unlock_bh(&atalk_router_lock); + write_unlock_bh(&atalk_routes_lock); return retval; } @@ -722,10 +650,10 @@ out: */ 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 @@ void atrtr_device_down(struct net_device *dev) } 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 @@ static int atrtr_ioctl(unsigned int cmd, void *arg) 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 @@ static int __init atalk_init(void) 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 @@ static void __exit atalk_exit(void) #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 @@ static void __exit atalk_exit(void) } module_exit(atalk_exit); #endif /* MODULE */ + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Alan Cox "); +MODULE_DESCRIPTION("AppleTalk 0.20 for Linux NET4.0\n"); diff --git a/net/appletalk/sysctl_net_atalk.c b/net/appletalk/sysctl_net_atalk.c index 663df18c826a..ea6a990c77d8 100644 --- a/net/appletalk/sysctl_net_atalk.c +++ b/net/appletalk/sysctl_net_atalk.c @@ -7,7 +7,6 @@ */ #include -#include #include extern int sysctl_aarp_expiry_time; @@ -16,7 +15,7 @@ extern int sysctl_aarp_retransmit_limit; 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 @@ static ctl_table atalk_table[] = { { 0 }, }; -static ctl_table atalk_dir_table[] = { +static struct ctl_table atalk_dir_table[] = { { .ctl_name = NET_ATALK, .procname = "appletalk", @@ -62,7 +61,7 @@ static ctl_table atalk_dir_table[] = { { 0 }, }; -static ctl_table atalk_root_table[] = { +static struct ctl_table atalk_root_table[] = { { .ctl_name = CTL_NET, .procname = "net", -- cgit v1.2.3