diff options
| author | David S. Miller <davem@nuts.ninka.net> | 2002-09-26 06:09:01 -0700 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2002-09-26 06:09:01 -0700 |
| commit | aa3f2b33c083029ff08fcaf083151065820aad5b (patch) | |
| tree | 9dca855a1e3e7d9af0df7621e48158d6be4aa94f | |
| parent | 229e08408636210690cf91022e195d364ad80a17 (diff) | |
| parent | 6c546640f2a4f096df1349f6fe336cf186a08994 (diff) | |
Merge master.kernel.org:/home/acme/BK/x25-2.5
into nuts.ninka.net:/home/davem/src/BK/net-2.5
| -rw-r--r-- | net/x25/sysctl_net_x25.c | 100 | ||||
| -rw-r--r-- | net/x25/x25_in.c | 13 | ||||
| -rw-r--r-- | net/x25/x25_route.c | 159 |
3 files changed, 160 insertions, 112 deletions
diff --git a/net/x25/sysctl_net_x25.c b/net/x25/sysctl_net_x25.c index 92b3b8f8f7c5..c288dd8f5f48 100644 --- a/net/x25/sysctl_net_x25.c +++ b/net/x25/sysctl_net_x25.c @@ -13,38 +13,88 @@ #include <linux/init.h> #include <net/x25.h> -static int min_timer[] = {1 * HZ}; -static int max_timer[] = {300 * HZ}; +static int min_timer[] = { 1 * HZ }; +static int max_timer[] = { 300 * HZ }; static struct ctl_table_header *x25_table_header; -static ctl_table x25_table[] = { - {NET_X25_RESTART_REQUEST_TIMEOUT, "restart_request_timeout", - &sysctl_x25_restart_request_timeout, sizeof(int), 0644, NULL, - &proc_dointvec_minmax, &sysctl_intvec, NULL, &min_timer, &max_timer}, - {NET_X25_CALL_REQUEST_TIMEOUT, "call_request_timeout", - &sysctl_x25_call_request_timeout, sizeof(int), 0644, NULL, - &proc_dointvec_minmax, &sysctl_intvec, NULL, &min_timer, &max_timer}, - {NET_X25_RESET_REQUEST_TIMEOUT, "reset_request_timeout", - &sysctl_x25_reset_request_timeout, sizeof(int), 0644, NULL, - &proc_dointvec_minmax, &sysctl_intvec, NULL, &min_timer, &max_timer}, - {NET_X25_CLEAR_REQUEST_TIMEOUT, "clear_request_timeout", - &sysctl_x25_clear_request_timeout, sizeof(int), 0644, NULL, - &proc_dointvec_minmax, &sysctl_intvec, NULL, &min_timer, &max_timer}, - {NET_X25_ACK_HOLD_BACK_TIMEOUT, "acknowledgement_hold_back_timeout", - &sysctl_x25_ack_holdback_timeout, sizeof(int), 0644, NULL, - &proc_dointvec_minmax, &sysctl_intvec, NULL, &min_timer, &max_timer}, - {0} +static struct ctl_table x25_table[] = { + { + .ctl_name = NET_X25_RESTART_REQUEST_TIMEOUT, + .procname = "restart_request_timeout", + .data = &sysctl_x25_restart_request_timeout, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec_minmax, + .strategy = &sysctl_intvec, + .extra1 = &min_timer, + .extra2 = &max_timer, + }, + { + .ctl_name = NET_X25_CALL_REQUEST_TIMEOUT, + .procname = "call_request_timeout", + .data = &sysctl_x25_call_request_timeout, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec_minmax, + .strategy = &sysctl_intvec, + .extra1 = &min_timer, + .extra2 = &max_timer, + }, + { + .ctl_name = NET_X25_RESET_REQUEST_TIMEOUT, + .procname = "reset_request_timeout", + .data = &sysctl_x25_reset_request_timeout, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec_minmax, + .strategy = &sysctl_intvec, + .extra1 = &min_timer, + .extra2 = &max_timer, + }, + { + .ctl_name = NET_X25_CLEAR_REQUEST_TIMEOUT, + .procname = "clear_request_timeout", + .data = &sysctl_x25_clear_request_timeout, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec_minmax, + .strategy = &sysctl_intvec, + .extra1 = &min_timer, + .extra2 = &max_timer, + }, + { + .ctl_name = NET_X25_ACK_HOLD_BACK_TIMEOUT, + .procname = "acknowledgement_hold_back_timeout", + .data = &sysctl_x25_ack_holdback_timeout, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec_minmax, + .strategy = &sysctl_intvec, + .extra1 = &min_timer, + .extra2 = &max_timer, + }, + { 0, }, }; -static ctl_table x25_dir_table[] = { - {NET_X25, "x25", NULL, 0, 0555, x25_table}, - {0} +static struct ctl_table x25_dir_table[] = { + { + .ctl_name = NET_X25, + .procname = "x25", + .mode = 0555, + .child = x25_table, + }, + { 0, }, }; -static ctl_table x25_root_table[] = { - {CTL_NET, "net", NULL, 0, 0555, x25_dir_table}, - {0} +static struct ctl_table x25_root_table[] = { + { + .ctl_name = CTL_NET, + .procname = "net", + .mode = 0555, + .child = x25_dir_table, + }, + { 0, }, }; void __init x25_register_sysctl(void) diff --git a/net/x25/x25_in.c b/net/x25/x25_in.c index c880eb3cad95..73d17e5aa99c 100644 --- a/net/x25/x25_in.c +++ b/net/x25/x25_in.c @@ -1,8 +1,9 @@ /* * X.25 Packet Layer release 002 * - * This is ALPHA test software. This code may break your machine, randomly fail to work with new - * releases, misbehave and/or generally screw up. It might even work. + * This is ALPHA test software. This code may break your machine, + * randomly fail to work with new releases, misbehave and/or generally + * screw up. It might even work. * * This code REQUIRES 2.1.15 or higher * @@ -86,7 +87,7 @@ static int x25_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more) skb_set_owner_r(skbn, sk); skb_queue_tail(&sk->receive_queue, skbn); if (!sk->dead) - sk->data_ready(sk,skbn->len); + sk->data_ready(sk, skbn->len); return 0; } @@ -364,10 +365,10 @@ int x25_process_rx_frame(struct sock *sk, struct sk_buff *skb) int x25_backlog_rcv(struct sock *sk, struct sk_buff *skb) { - int queued; + int queued = x25_process_rx_frame(sk, skb); - queued = x25_process_rx_frame(sk,skb); - if(!queued) kfree_skb(skb); + if (!queued) + kfree_skb(skb); return 0; } diff --git a/net/x25/x25_route.c b/net/x25/x25_route.c index 83c597977059..d8a5d1e3299f 100644 --- a/net/x25/x25_route.c +++ b/net/x25/x25_route.c @@ -1,8 +1,9 @@ /* * X.25 Packet Layer release 002 * - * This is ALPHA test software. This code may break your machine, randomly fail to work with new - * releases, misbehave and/or generally screw up. It might even work. + * This is ALPHA test software. This code may break your machine, + * randomly fail to work with new releases, misbehave and/or generally + * screw up. It might even work. * * This code REQUIRES 2.1.15 or higher * @@ -43,7 +44,7 @@ #include <linux/init.h> #include <net/x25.h> -static struct x25_route *x25_route_list /* = NULL initially */; +static struct x25_route *x25_route_list; /* = NULL initially */ /* * Add a new route. @@ -53,13 +54,17 @@ static int x25_add_route(struct x25_address *address, unsigned int sigdigits, { struct x25_route *x25_route; unsigned long flags; + int rc = -EINVAL; - for (x25_route = x25_route_list; x25_route != NULL; x25_route = x25_route->next) - if (memcmp(&x25_route->address, address, sigdigits) == 0 && x25_route->sigdigits == sigdigits) - return -EINVAL; + for (x25_route = x25_route_list; x25_route; x25_route = x25_route->next) + if (!memcmp(&x25_route->address, address, sigdigits) && + x25_route->sigdigits == sigdigits) + goto out; - if ((x25_route = kmalloc(sizeof(*x25_route), GFP_ATOMIC)) == NULL) - return -ENOMEM; + x25_route = kmalloc(sizeof(*x25_route), GFP_ATOMIC); + rc = -ENOMEM; + if (!x25_route) + goto out; strcpy(x25_route->address.x25_addr, "000000000000000"); memcpy(x25_route->address.x25_addr, address->x25_addr, sigdigits); @@ -71,8 +76,9 @@ static int x25_add_route(struct x25_address *address, unsigned int sigdigits, x25_route->next = x25_route_list; x25_route_list = x25_route; restore_flags(flags); - - return 0; + rc = 0; +out: + return rc; } static void x25_remove_route(struct x25_route *x25_route) @@ -86,37 +92,41 @@ static void x25_remove_route(struct x25_route *x25_route) if ((s = x25_route_list) == x25_route) { x25_route_list = x25_route->next; restore_flags(flags); - kfree(x25_route); return; } - while (s != NULL && s->next != NULL) { + while (s && s->next) { if (s->next == x25_route) { s->next = x25_route->next; - restore_flags(flags); - kfree(x25_route); - return; + goto out_kfree_route; } s = s->next; } - +out: restore_flags(flags); + return; +out_kfree_route: + kfree(x25_route); + goto out; } static int x25_del_route(struct x25_address *address, unsigned int sigdigits, struct net_device *dev) { - struct x25_route *x25_route; + struct x25_route *x25_route = x25_route_list; + int rc = -EINVAL; - for (x25_route = x25_route_list; x25_route != NULL; x25_route = x25_route->next) { - if (memcmp(&x25_route->address, address, sigdigits) == 0 && x25_route->sigdigits == sigdigits && x25_route->dev == dev) { + for (; x25_route; x25_route = x25_route->next) + if (!memcmp(&x25_route->address, address, sigdigits) && + x25_route->sigdigits == sigdigits && + x25_route->dev == dev) { x25_remove_route(x25_route); - return 0; + rc = 0; + break; } - } - return -EINVAL; + return rc; } /* @@ -126,7 +136,7 @@ void x25_route_device_down(struct net_device *dev) { struct x25_route *route, *x25_route = x25_route_list; - while (x25_route != NULL) { + while (x25_route) { route = x25_route; x25_route = x25_route->next; @@ -140,21 +150,17 @@ void x25_route_device_down(struct net_device *dev) */ struct net_device *x25_dev_get(char *devname) { - struct net_device *dev; - - if ((dev = dev_get_by_name(devname)) == NULL) - return NULL; + struct net_device *dev = dev_get_by_name(devname); - if ((dev->flags & IFF_UP) && (dev->type == ARPHRD_X25 + if (dev && + (!(dev->flags & IFF_UP) || (dev->type != ARPHRD_X25 #if defined(CONFIG_LLC) || defined(CONFIG_LLC_MODULE) - || dev->type == ARPHRD_ETHER + && dev->type != ARPHRD_ETHER #endif - )) - return dev; - - dev_put(dev); + ))) + dev_put(dev); - return NULL; + return dev; } /* @@ -164,18 +170,15 @@ struct net_device *x25_get_route(struct x25_address *addr) { struct x25_route *route, *use = NULL; - for (route = x25_route_list; route != NULL; route = route->next) { - if (memcmp(&route->address, addr, route->sigdigits) == 0) { - if (use == NULL) { + for (route = x25_route_list; route; route = route->next) + if (!memcmp(&route->address, addr, route->sigdigits)) { + if (!use) + use = route; + else if (route->sigdigits > use->sigdigits) use = route; - } else { - if (route->sigdigits > use->sigdigits) - use = route; - } } - } - return (use != NULL) ? use->dev : NULL; + return use ? use->dev : NULL; } /* @@ -185,55 +188,48 @@ int x25_route_ioctl(unsigned int cmd, void *arg) { struct x25_route_struct x25_route; struct net_device *dev; - int err; - - switch (cmd) { - - case SIOCADDRT: - if (copy_from_user(&x25_route, arg, sizeof(struct x25_route_struct))) - return -EFAULT; - if (x25_route.sigdigits < 0 || x25_route.sigdigits > 15) - return -EINVAL; - if ((dev = x25_dev_get(x25_route.device)) == NULL) - return -EINVAL; - err = x25_add_route(&x25_route.address, x25_route.sigdigits, dev); - dev_put(dev); - return err; - - case SIOCDELRT: - if (copy_from_user(&x25_route, arg, sizeof(struct x25_route_struct))) - return -EFAULT; - if (x25_route.sigdigits < 0 || x25_route.sigdigits > 15) - return -EINVAL; - if ((dev = x25_dev_get(x25_route.device)) == NULL) - return -EINVAL; - err = x25_del_route(&x25_route.address, x25_route.sigdigits, dev); - dev_put(dev); - return err; - - default: - return -EINVAL; - } + int rc = -EINVAL; + + if (cmd != SIOCADDRT && cmd != SIOCDELRT) + goto out; - return 0; + rc = -EFAULT; + if (copy_from_user(&x25_route, arg, sizeof(x25_route))) + goto out; + + rc = -EINVAL; + if (x25_route.sigdigits < 0 || x25_route.sigdigits > 15) + goto out; + + dev = x25_dev_get(x25_route.device); + if (!dev) + goto out; + + if (cmd == SIOCADDRT) + rc = x25_add_route(&x25_route.address, x25_route.sigdigits, dev); + else + rc = x25_del_route(&x25_route.address, x25_route.sigdigits, dev); + dev_put(dev); +out: + return rc; } int x25_routes_get_info(char *buffer, char **start, off_t offset, int length) { struct x25_route *x25_route; - int len = 0; + int len; off_t pos = 0; off_t begin = 0; cli(); - len += sprintf(buffer, "address digits device\n"); + len = sprintf(buffer, "address digits device\n"); - for (x25_route = x25_route_list; x25_route != NULL; x25_route = x25_route->next) { + for (x25_route = x25_route_list; x25_route; x25_route = x25_route->next) { len += sprintf(buffer + len, "%-15s %-6d %-5s\n", - x25_route->address.x25_addr, - x25_route->sigdigits, - (x25_route->dev != NULL) ? x25_route->dev->name : "???"); + x25_route->address.x25_addr, + x25_route->sigdigits, + x25_route->dev ? x25_route->dev->name : "???"); pos = begin + len; @@ -251,7 +247,8 @@ int x25_routes_get_info(char *buffer, char **start, off_t offset, int length) *start = buffer + (offset - begin); len -= (offset - begin); - if (len > length) len = length; + if (len > length) + len = length; return len; } @@ -263,7 +260,7 @@ void __exit x25_route_free(void) { struct x25_route *route, *x25_route = x25_route_list; - while (x25_route != NULL) { + while (x25_route) { route = x25_route; x25_route = x25_route->next; |
