summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <greg@kroah.com>2003-04-29 22:56:05 -0700
committerGreg Kroah-Hartman <greg@kroah.com>2003-04-29 22:56:05 -0700
commit7d5ab07dc7972ef5eb257864c422430c8b3df0bc (patch)
treea0d36078e981cef69e789aac045b94fffd13174f /net
parent25da53aa4497ccf38d2f17c9c28ca02583ddbe37 (diff)
parent4ede0350ba7bc8682ceae0d256d8d8d5d244aecf (diff)
Merge kroah.com:/home/linux/linux/BK/bleed-2.5
into kroah.com:/home/linux/linux/BK/gregkh-2.5
Diffstat (limited to 'net')
-rw-r--r--net/802/psnap.c32
-rw-r--r--net/bridge/br_fdb.c113
-rw-r--r--net/bridge/br_private.h5
-rw-r--r--net/core/netfilter.c9
-rw-r--r--net/core/skbuff.c75
-rw-r--r--net/core/sysctl_net_core.c9
-rw-r--r--net/ipv4/ip_output.c4
-rw-r--r--net/ipv4/ipip.c4
-rw-r--r--net/llc/af_llc.c141
-rw-r--r--net/llc/llc_actn.c2
-rw-r--r--net/llc/llc_c_ac.c55
-rw-r--r--net/llc/llc_c_ev.c56
-rw-r--r--net/llc/llc_c_st.c2
-rw-r--r--net/llc/llc_conn.c27
-rw-r--r--net/llc/llc_evnt.c2
-rw-r--r--net/llc/llc_if.c2
-rw-r--r--net/llc/llc_mac.c67
-rw-r--r--net/llc/llc_main.c4
-rw-r--r--net/llc/llc_pdu.c72
-rw-r--r--net/llc/llc_proc.c2
-rw-r--r--net/llc/llc_s_ac.c2
-rw-r--r--net/llc/llc_s_ev.c2
-rw-r--r--net/llc/llc_s_st.c2
-rw-r--r--net/llc/llc_sap.c2
-rw-r--r--net/llc/llc_stat.c2
-rw-r--r--net/sched/cls_api.c34
-rw-r--r--net/sched/cls_fw.c3
-rw-r--r--net/sched/cls_u32.c10
-rw-r--r--net/sched/sch_api.c16
-rw-r--r--net/sched/sch_ingress.c18
30 files changed, 346 insertions, 428 deletions
diff --git a/net/802/psnap.c b/net/802/psnap.c
index aa4588c1fab2..c689454484b1 100644
--- a/net/802/psnap.c
+++ b/net/802/psnap.c
@@ -21,9 +21,9 @@
#include <linux/mm.h>
#include <linux/in.h>
#include <linux/init.h>
-#include <linux/brlock.h>
-LIST_HEAD(snap_list);
+static LIST_HEAD(snap_list);
+static spinlock_t snap_lock = SPIN_LOCK_UNLOCKED;
static struct llc_sap *snap_sap;
/*
@@ -34,17 +34,13 @@ static struct datalink_proto *find_snap_client(unsigned char *desc)
struct list_head *entry;
struct datalink_proto *proto = NULL, *p;
- if (list_empty(&snap_list))
- goto out;
-
- list_for_each(entry, &snap_list) {
+ list_for_each_rcu(entry, &snap_list) {
p = list_entry(entry, struct datalink_proto, node);
if (!memcmp(p->type, desc, 5)) {
proto = p;
break;
}
}
-out:
return proto;
}
@@ -55,11 +51,13 @@ static int snap_rcv(struct sk_buff *skb, struct net_device *dev,
struct packet_type *pt)
{
int rc = 1;
- struct datalink_proto *proto = find_snap_client(skb->h.raw);
+ struct datalink_proto *proto;
static struct packet_type snap_packet_type = {
.type = __constant_htons(ETH_P_SNAP),
};
+ rcu_read_lock();
+ proto = find_snap_client(skb->h.raw);
if (proto) {
/* Pass the frame on. */
skb->h.raw += 5;
@@ -71,6 +69,7 @@ static int snap_rcv(struct sk_buff *skb, struct net_device *dev,
rc = 1;
}
+ rcu_read_unlock();
return rc;
}
@@ -124,7 +123,7 @@ struct datalink_proto *register_snap_client(unsigned char *desc,
{
struct datalink_proto *proto = NULL;
- br_write_lock_bh(BR_NETPROTO_LOCK);
+ spin_lock_bh(&snap_lock);
if (find_snap_client(desc))
goto out;
@@ -135,10 +134,12 @@ struct datalink_proto *register_snap_client(unsigned char *desc,
proto->rcvfunc = rcvfunc;
proto->header_length = 5 + 3; /* snap + 802.2 */
proto->request = snap_request;
- list_add(&proto->node, &snap_list);
+ list_add_rcu(&proto->node, &snap_list);
}
out:
- br_write_unlock_bh(BR_NETPROTO_LOCK);
+ spin_unlock_bh(&snap_lock);
+
+ synchronize_net();
return proto;
}
@@ -147,12 +148,13 @@ out:
*/
void unregister_snap_client(struct datalink_proto *proto)
{
- br_write_lock_bh(BR_NETPROTO_LOCK);
+ spin_lock_bh(&snap_lock);
+ list_del_rcu(&proto->node);
+ spin_unlock_bh(&snap_lock);
- list_del(&proto->node);
- kfree(proto);
+ synchronize_net();
- br_write_unlock_bh(BR_NETPROTO_LOCK);
+ kfree(proto);
}
MODULE_LICENSE("GPL");
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index 78d587584620..fc26712d2149 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -68,28 +68,6 @@ static __inline__ int br_mac_hash(unsigned char *mac)
return x & (BR_HASH_SIZE - 1);
}
-static __inline__ void __hash_link(struct net_bridge *br,
- struct net_bridge_fdb_entry *ent,
- int hash)
-{
- ent->next_hash = br->hash[hash];
- if (ent->next_hash != NULL)
- ent->next_hash->pprev_hash = &ent->next_hash;
- br->hash[hash] = ent;
- ent->pprev_hash = &br->hash[hash];
-}
-
-static __inline__ void __hash_unlink(struct net_bridge_fdb_entry *ent)
-{
- *(ent->pprev_hash) = ent->next_hash;
- if (ent->next_hash != NULL)
- ent->next_hash->pprev_hash = ent->pprev_hash;
- ent->next_hash = NULL;
- ent->pprev_hash = NULL;
-}
-
-
-
void br_fdb_changeaddr(struct net_bridge_port *p, unsigned char *newaddr)
{
struct net_bridge *br;
@@ -99,22 +77,24 @@ void br_fdb_changeaddr(struct net_bridge_port *p, unsigned char *newaddr)
br = p->br;
write_lock_bh(&br->hash_lock);
for (i=0;i<BR_HASH_SIZE;i++) {
- struct net_bridge_fdb_entry *f;
+ struct hlist_node *h;
+
+ hlist_for_each(h, &br->hash[i]) {
+ struct net_bridge_fdb_entry *f
+ = hlist_entry(h, struct net_bridge_fdb_entry, hlist);
- f = br->hash[i];
- while (f != NULL) {
if (f->dst == p && f->is_local) {
memcpy(f->addr.addr, newaddr, ETH_ALEN);
if (newhash != i) {
- __hash_unlink(f);
- __hash_link(br, f, newhash);
+ hlist_del(&f->hlist);
+ hlist_add_head(&f->hlist,
+ &br->hash[newhash]);
}
- write_unlock_bh(&br->hash_lock);
- return;
+ goto out;
}
- f = f->next_hash;
}
}
+ out:
write_unlock_bh(&br->hash_lock);
}
@@ -127,19 +107,16 @@ void br_fdb_cleanup(struct net_bridge *br)
write_lock_bh(&br->hash_lock);
for (i=0;i<BR_HASH_SIZE;i++) {
- struct net_bridge_fdb_entry *f;
-
- f = br->hash[i];
- while (f != NULL) {
- struct net_bridge_fdb_entry *g;
-
- g = f->next_hash;
+ struct hlist_node *h, *g;
+
+ hlist_for_each_safe(h, g, &br->hash[i]) {
+ struct net_bridge_fdb_entry *f
+ = hlist_entry(h, struct net_bridge_fdb_entry, hlist);
if (!f->is_static &&
time_before_eq(f->ageing_timer, timeout)) {
- __hash_unlink(f);
+ hlist_del(&f->hlist);
br_fdb_put(f);
}
- f = g;
}
}
write_unlock_bh(&br->hash_lock);
@@ -151,18 +128,15 @@ void br_fdb_delete_by_port(struct net_bridge *br, struct net_bridge_port *p)
write_lock_bh(&br->hash_lock);
for (i=0;i<BR_HASH_SIZE;i++) {
- struct net_bridge_fdb_entry *f;
-
- f = br->hash[i];
- while (f != NULL) {
- struct net_bridge_fdb_entry *g;
-
- g = f->next_hash;
+ struct hlist_node *h, *g;
+
+ hlist_for_each_safe(h, g, &br->hash[i]) {
+ struct net_bridge_fdb_entry *f
+ = hlist_entry(h, struct net_bridge_fdb_entry, hlist);
if (f->dst == p) {
- __hash_unlink(f);
+ hlist_del(&f->hlist);
br_fdb_put(f);
}
- f = g;
}
}
write_unlock_bh(&br->hash_lock);
@@ -170,25 +144,24 @@ void br_fdb_delete_by_port(struct net_bridge *br, struct net_bridge_port *p)
struct net_bridge_fdb_entry *br_fdb_get(struct net_bridge *br, unsigned char *addr)
{
- struct net_bridge_fdb_entry *fdb;
+ struct hlist_node *h;
read_lock_bh(&br->hash_lock);
- fdb = br->hash[br_mac_hash(addr)];
- while (fdb != NULL) {
+
+ hlist_for_each(h, &br->hash[br_mac_hash(addr)]) {
+ struct net_bridge_fdb_entry *fdb
+ = hlist_entry(h, struct net_bridge_fdb_entry, hlist);
+
if (!memcmp(fdb->addr.addr, addr, ETH_ALEN)) {
- if (!has_expired(br, fdb)) {
- atomic_inc(&fdb->use_count);
- read_unlock_bh(&br->hash_lock);
- return fdb;
- }
+ if (has_expired(br, fdb))
+ goto ret_null;
+ atomic_inc(&fdb->use_count);
read_unlock_bh(&br->hash_lock);
- return NULL;
+ return fdb;
}
-
- fdb = fdb->next_hash;
}
-
+ ret_null:
read_unlock_bh(&br->hash_lock);
return NULL;
}
@@ -213,12 +186,16 @@ int br_fdb_get_entries(struct net_bridge *br,
read_lock_bh(&br->hash_lock);
for (i=0;i<BR_HASH_SIZE;i++) {
- struct net_bridge_fdb_entry *f;
-
- for (f = br->hash[i]; f != NULL && num < maxnum;
- f = f->next_hash) {
+ struct hlist_node *h;
+
+ hlist_for_each(h, &br->hash[i]) {
+ struct net_bridge_fdb_entry *f
+ = hlist_entry(h, struct net_bridge_fdb_entry, hlist);
struct __fdb_entry ent;
+ if (num >= maxnum)
+ goto out;
+
if (has_expired(br, f))
continue;
@@ -277,14 +254,15 @@ void br_fdb_insert(struct net_bridge *br,
unsigned char *addr,
int is_local)
{
+ struct hlist_node *h;
struct net_bridge_fdb_entry *fdb;
int hash;
hash = br_mac_hash(addr);
write_lock_bh(&br->hash_lock);
- fdb = br->hash[hash];
- while (fdb != NULL) {
+ hlist_for_each(h, &br->hash[hash]) {
+ fdb = hlist_entry(h, struct net_bridge_fdb_entry, hlist);
if (!fdb->is_local &&
!memcmp(fdb->addr.addr, addr, ETH_ALEN)) {
__fdb_possibly_replace(fdb, source, is_local);
@@ -292,7 +270,6 @@ void br_fdb_insert(struct net_bridge *br,
return;
}
- fdb = fdb->next_hash;
}
fdb = kmalloc(sizeof(*fdb), GFP_ATOMIC);
@@ -308,7 +285,7 @@ void br_fdb_insert(struct net_bridge *br,
fdb->is_static = is_local;
fdb->ageing_timer = jiffies;
- __hash_link(br, fdb, hash);
+ hlist_add_head(&fdb->hlist, &br->hash[hash]);
write_unlock_bh(&br->hash_lock);
}
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index aff11add0268..5ddd034fa0fe 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -43,8 +43,7 @@ struct mac_addr
struct net_bridge_fdb_entry
{
- struct net_bridge_fdb_entry *next_hash;
- struct net_bridge_fdb_entry **pprev_hash;
+ struct hlist_node hlist;
atomic_t use_count;
mac_addr addr;
struct net_bridge_port *dst;
@@ -86,7 +85,7 @@ struct net_bridge
struct net_device dev;
struct net_device_stats statistics;
rwlock_t hash_lock;
- struct net_bridge_fdb_entry *hash[BR_HASH_SIZE];
+ struct hlist_head hash[BR_HASH_SIZE];
struct timer_list tick;
/* STP */
diff --git a/net/core/netfilter.c b/net/core/netfilter.c
index 1ef2cf1b71e3..432157079ff4 100644
--- a/net/core/netfilter.c
+++ b/net/core/netfilter.c
@@ -550,6 +550,7 @@ void nf_reinject(struct sk_buff *skb, struct nf_info *info,
unsigned int verdict)
{
struct list_head *elem = &info->elem->list;
+ struct list_head *i;
rcu_read_lock();
@@ -592,10 +593,6 @@ void nf_reinject(struct sk_buff *skb, struct nf_info *info,
info->indev, info->outdev, info->okfn))
goto next_hook;
break;
-
- case NF_DROP:
- kfree_skb(skb);
- break;
}
rcu_read_unlock();
@@ -611,6 +608,10 @@ void nf_reinject(struct sk_buff *skb, struct nf_info *info,
}
#endif
+
+ if (verdict == NF_DROP)
+ kfree_skb(skb);
+
kfree(info);
return;
}
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index bb68b12b0047..c6d5e32b6a5b 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -20,6 +20,7 @@
* Ray VanTassle : Fixed --skb->lock in free
* Alan Cox : skb_copy copy arp field
* Andi Kleen : slabified it.
+ * Robert Olsson : Removed skb_head_pool
*
* NOTE:
* The __skb_ routines should be called with interrupts
@@ -63,15 +64,8 @@
#include <asm/uaccess.h>
#include <asm/system.h>
-int sysctl_hot_list_len = 128;
-
static kmem_cache_t *skbuff_head_cache;
-static union {
- struct sk_buff_head list;
- char pad[SMP_CACHE_BYTES];
-} skb_head_pool[NR_CPUS];
-
/*
* Keep out-of-line to prevent kernel bloat.
* __builtin_return_address is not used because it is not always
@@ -109,44 +103,6 @@ void skb_under_panic(struct sk_buff *skb, int sz, void *here)
BUG();
}
-static __inline__ struct sk_buff *skb_head_from_pool(void)
-{
- struct sk_buff_head *list;
- struct sk_buff *skb = NULL;
- unsigned long flags;
-
- local_irq_save(flags);
-
- list = &skb_head_pool[smp_processor_id()].list;
-
- if (skb_queue_len(list))
- skb = __skb_dequeue(list);
-
- local_irq_restore(flags);
- return skb;
-}
-
-static __inline__ void skb_head_to_pool(struct sk_buff *skb)
-{
- struct sk_buff_head *list;
- unsigned long flags;
-
- local_irq_save(flags);
-
- list = &skb_head_pool[smp_processor_id()].list;
-
- if (skb_queue_len(list) < sysctl_hot_list_len) {
- __skb_queue_head(list, skb);
- local_irq_restore(flags);
-
- return;
- }
-
- local_irq_restore(flags);
- kmem_cache_free(skbuff_head_cache, skb);
-}
-
-
/* Allocate a new skbuff. We do this ourselves so we can fill in a few
* 'private' fields and also do memory statistics to find all the
* [BEEP] leaks.
@@ -174,13 +130,10 @@ struct sk_buff *alloc_skb(unsigned int size, int gfp_mask)
might_sleep();
/* Get the HEAD */
- skb = skb_head_from_pool();
- if (!skb) {
- skb = kmem_cache_alloc(skbuff_head_cache,
- gfp_mask & ~__GFP_DMA);
- if (!skb)
- goto out;
- }
+ skb = kmem_cache_alloc(skbuff_head_cache,
+ gfp_mask & ~__GFP_DMA);
+ if (!skb)
+ goto out;
/* Get the DATA. Size must match skb_add_mtu(). */
size = SKB_DATA_ALIGN(size);
@@ -204,7 +157,7 @@ struct sk_buff *alloc_skb(unsigned int size, int gfp_mask)
out:
return skb;
nodata:
- skb_head_to_pool(skb);
+ kmem_cache_free(skbuff_head_cache, skb);
skb = NULL;
goto out;
}
@@ -254,7 +207,7 @@ static void skb_release_data(struct sk_buff *skb)
void kfree_skbmem(struct sk_buff *skb)
{
skb_release_data(skb);
- skb_head_to_pool(skb);
+ kmem_cache_free(skbuff_head_cache, skb);
}
/**
@@ -309,13 +262,10 @@ void __kfree_skb(struct sk_buff *skb)
struct sk_buff *skb_clone(struct sk_buff *skb, int gfp_mask)
{
- struct sk_buff *n = skb_head_from_pool();
+ struct sk_buff *n = kmem_cache_alloc(skbuff_head_cache, gfp_mask);
- if (!n) {
- n = kmem_cache_alloc(skbuff_head_cache, gfp_mask);
- if (!n)
- return NULL;
- }
+ if (!n)
+ return NULL;
#define C(x) n->x = skb->x
@@ -1204,8 +1154,6 @@ void skb_add_mtu(int mtu)
void __init skb_init(void)
{
- int i;
-
skbuff_head_cache = kmem_cache_create("skbuff_head_cache",
sizeof(struct sk_buff),
0,
@@ -1213,7 +1161,4 @@ void __init skb_init(void)
NULL, NULL);
if (!skbuff_head_cache)
panic("cannot create skbuff cache");
-
- for (i = 0; i < NR_CPUS; i++)
- skb_queue_head_init(&skb_head_pool[i].list);
}
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
index bbf8e7d82b62..3e38ed82429b 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
@@ -28,7 +28,6 @@ extern __u32 sysctl_rmem_default;
extern int sysctl_core_destroy_delay;
extern int sysctl_optmem_max;
-extern int sysctl_hot_list_len;
#ifdef CONFIG_NET_DIVERT
extern char sysctl_divert_version[];
@@ -150,14 +149,6 @@ ctl_table core_table[] = {
.mode = 0644,
.proc_handler = &proc_dointvec
},
- {
- .ctl_name = NET_CORE_HOT_LIST_LENGTH,
- .procname = "hot_list_length",
- .data = &sysctl_hot_list_len,
- .maxlen = sizeof(int),
- .mode = 0644,
- .proc_handler = &proc_dointvec
- },
#ifdef CONFIG_NET_DIVERT
{
.ctl_name = NET_CORE_DIVERT_VERSION,
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 98e7caad4b49..302eac537f30 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -263,7 +263,7 @@ int ip_mc_output(struct sk_buff *skb)
newskb->dev, ip_dev_loopback_xmit);
}
- if (skb->len > dev->mtu || skb_shinfo(skb)->frag_list)
+ if (skb->len > dst_pmtu(&rt->u.dst) || skb_shinfo(skb)->frag_list)
return ip_fragment(skb, ip_finish_output);
else
return ip_finish_output(skb);
@@ -273,7 +273,7 @@ int ip_output(struct sk_buff *skb)
{
IP_INC_STATS(IpOutRequests);
- if ((skb->len > skb->dst->dev->mtu || skb_shinfo(skb)->frag_list) &&
+ if ((skb->len > dst_pmtu(skb->dst) || skb_shinfo(skb)->frag_list) &&
!skb_shinfo(skb)->tso_size)
return ip_fragment(skb, ip_finish_output);
else
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
index be61533ccf93..0571696c7cc6 100644
--- a/net/ipv4/ipip.c
+++ b/net/ipv4/ipip.c
@@ -433,7 +433,7 @@ out:
fl.fl4_src = eiph->saddr;
fl.fl4_tos = eiph->tos;
if (ip_route_output_key(&rt, &fl) ||
- rt->u.dst.dev->type != ARPHRD_IPGRE) {
+ rt->u.dst.dev->type != ARPHRD_TUNNEL) {
ip_rt_put(rt);
kfree_skb(skb2);
return;
@@ -441,7 +441,7 @@ out:
} else {
ip_rt_put(rt);
if (ip_route_input(skb2, eiph->daddr, eiph->saddr, eiph->tos, skb2->dev) ||
- skb2->dst->dev->type != ARPHRD_IPGRE) {
+ skb2->dst->dev->type != ARPHRD_TUNNEL) {
kfree_skb(skb2);
return;
}
diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
index 241b7bca8fca..776b4378c75f 100644
--- a/net/llc/af_llc.c
+++ b/net/llc/af_llc.c
@@ -11,7 +11,7 @@
* connections.
*
* Copyright (c) 2001 by Jay Schulist <jschlst@samba.org>
- * 2002 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2002-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
@@ -623,7 +623,8 @@ static int llc_ui_accept(struct socket *sock, struct socket *newsock, int flags)
struct sk_buff *skb;
int rc = -EOPNOTSUPP;
- dprintk("%s: accepting on %02X\n", __FUNCTION__, llc_sk(sk)->addr.sllc_ssap);
+ dprintk("%s: accepting on %02X\n", __FUNCTION__,
+ llc_sk(sk)->addr.sllc_ssap);
lock_sock(sk);
if (sk->type != SOCK_STREAM)
goto out;
@@ -634,7 +635,8 @@ static int llc_ui_accept(struct socket *sock, struct socket *newsock, int flags)
rc = llc_ui_wait_for_data(sk, sk->rcvtimeo);
if (rc)
goto out;
- dprintk("%s: got a new connection on %02X\n", __FUNCTION__, llc_sk(sk)->addr.sllc_ssap);
+ dprintk("%s: got a new connection on %02X\n", __FUNCTION__,
+ llc_sk(sk)->addr.sllc_ssap);
skb = skb_dequeue(&sk->receive_queue);
rc = -EINVAL;
if (!skb->sk)
@@ -692,8 +694,9 @@ static int llc_ui_recvmsg(struct kiocb *iocb, struct socket *sock,
timeout = sock_rcvtimeo(sk, noblock);
rc = llc_ui_wait_for_data(sk, timeout);
if (rc) {
- dprintk("%s: llc_ui_wait_for_data failed recv in %02X from %02X\n",
- __FUNCTION__, llc_sk(sk)->laddr.lsap, llc_sk(sk)->daddr.lsap);
+ dprintk("%s: llc_ui_wait_for_data failed recv "
+ "in %02X from %02X\n", __FUNCTION__,
+ llc_sk(sk)->laddr.lsap, llc_sk(sk)->daddr.lsap);
goto out;
}
skb = skb_dequeue(&sk->receive_queue);
@@ -742,7 +745,8 @@ static int llc_ui_sendmsg(struct kiocb *iocb, struct socket *sock,
struct sk_buff *skb;
int rc = -EINVAL, size = 0, copied = 0, hdrlen;
- dprintk("%s: sending from %02X to %02X\n", __FUNCTION__, llc->laddr.lsap, llc->daddr.lsap);
+ dprintk("%s: sending from %02X to %02X\n", __FUNCTION__,
+ llc->laddr.lsap, llc->daddr.lsap);
lock_sock(sk);
if (addr) {
if (msg->msg_namelen < sizeof(*addr))
@@ -906,49 +910,49 @@ static int llc_ui_setsockopt(struct socket *sock, int level, int optname,
goto out;
rc = -EINVAL;
switch (optname) {
- case LLC_OPT_RETRY:
- if (opt > LLC_OPT_MAX_RETRY)
- goto out;
- llc->n2 = opt;
- break;
- case LLC_OPT_SIZE:
- if (opt > LLC_OPT_MAX_SIZE)
- goto out;
- llc->n1 = opt;
- break;
- case LLC_OPT_ACK_TMR_EXP:
- if (opt > LLC_OPT_MAX_ACK_TMR_EXP)
- goto out;
- llc->ack_timer.expire = opt;
- break;
- case LLC_OPT_P_TMR_EXP:
- if (opt > LLC_OPT_MAX_P_TMR_EXP)
- goto out;
- llc->pf_cycle_timer.expire = opt;
- break;
- case LLC_OPT_REJ_TMR_EXP:
- if (opt > LLC_OPT_MAX_REJ_TMR_EXP)
- goto out;
- llc->rej_sent_timer.expire = opt;
- break;
- case LLC_OPT_BUSY_TMR_EXP:
- if (opt > LLC_OPT_MAX_BUSY_TMR_EXP)
- goto out;
- llc->busy_state_timer.expire = opt;
- break;
- case LLC_OPT_TX_WIN:
- if (opt > LLC_OPT_MAX_WIN)
- goto out;
- llc->k = opt;
- break;
- case LLC_OPT_RX_WIN:
- if (opt > LLC_OPT_MAX_WIN)
- goto out;
- llc->rw = opt;
- break;
- default:
- rc = -ENOPROTOOPT;
+ case LLC_OPT_RETRY:
+ if (opt > LLC_OPT_MAX_RETRY)
+ goto out;
+ llc->n2 = opt;
+ break;
+ case LLC_OPT_SIZE:
+ if (opt > LLC_OPT_MAX_SIZE)
+ goto out;
+ llc->n1 = opt;
+ break;
+ case LLC_OPT_ACK_TMR_EXP:
+ if (opt > LLC_OPT_MAX_ACK_TMR_EXP)
+ goto out;
+ llc->ack_timer.expire = opt;
+ break;
+ case LLC_OPT_P_TMR_EXP:
+ if (opt > LLC_OPT_MAX_P_TMR_EXP)
+ goto out;
+ llc->pf_cycle_timer.expire = opt;
+ break;
+ case LLC_OPT_REJ_TMR_EXP:
+ if (opt > LLC_OPT_MAX_REJ_TMR_EXP)
goto out;
+ llc->rej_sent_timer.expire = opt;
+ break;
+ case LLC_OPT_BUSY_TMR_EXP:
+ if (opt > LLC_OPT_MAX_BUSY_TMR_EXP)
+ goto out;
+ llc->busy_state_timer.expire = opt;
+ break;
+ case LLC_OPT_TX_WIN:
+ if (opt > LLC_OPT_MAX_WIN)
+ goto out;
+ llc->k = opt;
+ break;
+ case LLC_OPT_RX_WIN:
+ if (opt > LLC_OPT_MAX_WIN)
+ goto out;
+ llc->rw = opt;
+ break;
+ default:
+ rc = -ENOPROTOOPT;
+ goto out;
}
rc = 0;
out:
@@ -983,25 +987,25 @@ static int llc_ui_getsockopt(struct socket *sock, int level, int optname,
if (len != sizeof(int))
goto out;
switch (optname) {
- case LLC_OPT_RETRY:
- val = llc->n2; break;
- case LLC_OPT_SIZE:
- val = llc->n1; break;
- case LLC_OPT_ACK_TMR_EXP:
- val = llc->ack_timer.expire; break;
- case LLC_OPT_P_TMR_EXP:
- val = llc->pf_cycle_timer.expire; break;
- case LLC_OPT_REJ_TMR_EXP:
- val = llc->rej_sent_timer.expire; break;
- case LLC_OPT_BUSY_TMR_EXP:
- val = llc->busy_state_timer.expire; break;
- case LLC_OPT_TX_WIN:
- val = llc->k; break;
- case LLC_OPT_RX_WIN:
- val = llc->rw; break;
- default:
- rc = -ENOPROTOOPT;
- goto out;
+ case LLC_OPT_RETRY:
+ val = llc->n2; break;
+ case LLC_OPT_SIZE:
+ val = llc->n1; break;
+ case LLC_OPT_ACK_TMR_EXP:
+ val = llc->ack_timer.expire; break;
+ case LLC_OPT_P_TMR_EXP:
+ val = llc->pf_cycle_timer.expire; break;
+ case LLC_OPT_REJ_TMR_EXP:
+ val = llc->rej_sent_timer.expire; break;
+ case LLC_OPT_BUSY_TMR_EXP:
+ val = llc->busy_state_timer.expire; break;
+ case LLC_OPT_TX_WIN:
+ val = llc->k; break;
+ case LLC_OPT_RX_WIN:
+ val = llc->rw; break;
+ default:
+ rc = -ENOPROTOOPT;
+ goto out;
}
rc = 0;
if (put_user(len, optlen) || copy_to_user(optval, &val, len))
@@ -1038,7 +1042,8 @@ static struct proto_ops llc_ui_ops = {
};
static char llc_ui_banner[] __initdata =
- KERN_INFO "NET4.0 IEEE 802.2 BSD sockets, Jay Schulist, 2001, Arnaldo C. Melo, 2002\n";
+ KERN_INFO "NET4.0 IEEE 802.2 BSD sockets, Jay Schulist, 2001, "
+ "Arnaldo C. Melo, 2002-2003\n";
int __init llc_ui_init(void)
{
diff --git a/net/llc/llc_actn.c b/net/llc/llc_actn.c
index 07f144745113..b17943a5c222 100644
--- a/net/llc/llc_actn.c
+++ b/net/llc/llc_actn.c
@@ -8,7 +8,7 @@
* them return 0 On success and 1 otherwise.
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
diff --git a/net/llc/llc_c_ac.c b/net/llc/llc_c_ac.c
index 634bf598da72..fb559316cf4a 100644
--- a/net/llc/llc_c_ac.c
+++ b/net/llc/llc_c_ac.c
@@ -8,7 +8,7 @@
* them return 0 On success and 1 otherwise.
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
@@ -145,33 +145,32 @@ int llc_conn_ac_rst_ind(struct sock *sk, struct sk_buff *skb)
struct llc_opt *llc = llc_sk(sk);
switch (ev->type) {
- case LLC_CONN_EV_TYPE_PDU:
- if (!LLC_PDU_IS_RSP(pdu) &&
- !LLC_PDU_TYPE_IS_U(pdu) &&
- LLC_U_PDU_RSP(pdu) == LLC_2_PDU_RSP_FRMR) {
- reason = LLC_RESET_REASON_LOCAL;
- rc = 0;
- } else if (!LLC_PDU_IS_CMD(pdu) &&
- !LLC_PDU_TYPE_IS_U(pdu) &&
- LLC_U_PDU_CMD(pdu) ==
- LLC_2_PDU_CMD_SABME) {
- reason = LLC_RESET_REASON_REMOTE;
- rc = 0;
- } else {
- reason = 0;
- rc = 1;
- }
- break;
- case LLC_CONN_EV_TYPE_ACK_TMR:
- case LLC_CONN_EV_TYPE_P_TMR:
- case LLC_CONN_EV_TYPE_REJ_TMR:
- case LLC_CONN_EV_TYPE_BUSY_TMR:
- if (llc->retry_count > llc->n2) {
- reason = LLC_RESET_REASON_LOCAL;
- rc = 0;
- } else
- rc = 1;
- break;
+ case LLC_CONN_EV_TYPE_PDU:
+ if (!LLC_PDU_IS_RSP(pdu) &&
+ !LLC_PDU_TYPE_IS_U(pdu) &&
+ LLC_U_PDU_RSP(pdu) == LLC_2_PDU_RSP_FRMR) {
+ reason = LLC_RESET_REASON_LOCAL;
+ rc = 0;
+ } else if (!LLC_PDU_IS_CMD(pdu) &&
+ !LLC_PDU_TYPE_IS_U(pdu) &&
+ LLC_U_PDU_CMD(pdu) == LLC_2_PDU_CMD_SABME) {
+ reason = LLC_RESET_REASON_REMOTE;
+ rc = 0;
+ } else {
+ reason = 0;
+ rc = 1;
+ }
+ break;
+ case LLC_CONN_EV_TYPE_ACK_TMR:
+ case LLC_CONN_EV_TYPE_P_TMR:
+ case LLC_CONN_EV_TYPE_REJ_TMR:
+ case LLC_CONN_EV_TYPE_BUSY_TMR:
+ if (llc->retry_count > llc->n2) {
+ reason = LLC_RESET_REASON_LOCAL;
+ rc = 0;
+ } else
+ rc = 1;
+ break;
}
if (!rc) {
ev->reason = reason;
diff --git a/net/llc/llc_c_ev.c b/net/llc/llc_c_ev.c
index 85c1489b0a66..883e550afe24 100644
--- a/net/llc/llc_c_ev.c
+++ b/net/llc/llc_c_ev.c
@@ -24,7 +24,7 @@
* in their comments, at below.
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
@@ -485,11 +485,11 @@ int llc_conn_ev_rx_xxx_cmd_pbit_set_0(struct sock *sk, struct sk_buff *skb)
rc = 0;
} else if (!LLC_PDU_TYPE_IS_U(pdu))
switch (LLC_U_PDU_CMD(pdu)) {
- case LLC_2_PDU_CMD_SABME:
- case LLC_2_PDU_CMD_DISC:
- if (!LLC_U_PF_IS_0(pdu))
- rc = 0;
- break;
+ case LLC_2_PDU_CMD_SABME:
+ case LLC_2_PDU_CMD_DISC:
+ if (!LLC_U_PF_IS_0(pdu))
+ rc = 0;
+ break;
}
}
return rc;
@@ -505,10 +505,10 @@ int llc_conn_ev_rx_xxx_cmd_pbit_set_x(struct sock *sk, struct sk_buff *skb)
rc = 0;
else if (!LLC_PDU_TYPE_IS_U(pdu))
switch (LLC_U_PDU_CMD(pdu)) {
- case LLC_2_PDU_CMD_SABME:
- case LLC_2_PDU_CMD_DISC:
- rc = 0;
- break;
+ case LLC_2_PDU_CMD_SABME:
+ case LLC_2_PDU_CMD_DISC:
+ rc = 0;
+ break;
}
}
return rc;
@@ -525,12 +525,12 @@ int llc_conn_ev_rx_xxx_rsp_fbit_set_1(struct sock *sk, struct sk_buff *skb)
rc = 0;
} else if (!LLC_PDU_TYPE_IS_U(pdu))
switch (LLC_U_PDU_RSP(pdu)) {
- case LLC_2_PDU_RSP_UA:
- case LLC_2_PDU_RSP_DM:
- case LLC_2_PDU_RSP_FRMR:
- if (!LLC_U_PF_IS_1(pdu))
- rc = 0;
- break;
+ case LLC_2_PDU_RSP_UA:
+ case LLC_2_PDU_RSP_DM:
+ case LLC_2_PDU_RSP_FRMR:
+ if (!LLC_U_PF_IS_1(pdu))
+ rc = 0;
+ break;
}
}
return rc;
@@ -546,11 +546,11 @@ int llc_conn_ev_rx_xxx_rsp_fbit_set_x(struct sock *sk, struct sk_buff *skb)
rc = 0;
else if (!LLC_PDU_TYPE_IS_U(pdu))
switch (LLC_U_PDU_RSP(pdu)) {
- case LLC_2_PDU_RSP_UA:
- case LLC_2_PDU_RSP_DM:
- case LLC_2_PDU_RSP_FRMR:
- rc = 0;
- break;
+ case LLC_2_PDU_RSP_UA:
+ case LLC_2_PDU_RSP_DM:
+ case LLC_2_PDU_RSP_FRMR:
+ rc = 0;
+ break;
}
}
@@ -566,13 +566,13 @@ int llc_conn_ev_rx_xxx_yyy(struct sock *sk, struct sk_buff *skb)
rc = 0;
else if (!LLC_PDU_TYPE_IS_U(pdu))
switch (LLC_U_PDU_CMD(pdu)) {
- case LLC_2_PDU_CMD_SABME:
- case LLC_2_PDU_CMD_DISC:
- case LLC_2_PDU_RSP_UA:
- case LLC_2_PDU_RSP_DM:
- case LLC_2_PDU_RSP_FRMR:
- rc = 0;
- break;
+ case LLC_2_PDU_CMD_SABME:
+ case LLC_2_PDU_CMD_DISC:
+ case LLC_2_PDU_RSP_UA:
+ case LLC_2_PDU_RSP_DM:
+ case LLC_2_PDU_RSP_FRMR:
+ rc = 0;
+ break;
}
return rc;
}
diff --git a/net/llc/llc_c_st.c b/net/llc/llc_c_st.c
index f058df37981c..818a9428823b 100644
--- a/net/llc/llc_c_st.c
+++ b/net/llc/llc_c_st.c
@@ -5,7 +5,7 @@
* or in "llc_c_ac.c" and "llc_c_ev.c" modules.
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001, 2002 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
diff --git a/net/llc/llc_conn.c b/net/llc/llc_conn.c
index 9859d2a2a46b..e2fa705c8f58 100644
--- a/net/llc/llc_conn.c
+++ b/net/llc/llc_conn.c
@@ -2,7 +2,7 @@
* llc_conn.c - Driver routines for connection component.
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
@@ -84,7 +84,8 @@ int llc_conn_state_process(struct sock *sk, struct sk_buff *skb)
goto out_kfree_skb;
}
- if (!ev->ind_prim && !ev->cfm_prim) { /* indicate or confirm not required */
+ if (!ev->ind_prim && !ev->cfm_prim) {
+ /* indicate or confirm not required */
if (!skb->list)
goto out_kfree_skb;
goto out_skb_put;
@@ -625,17 +626,17 @@ static int llc_find_offset(int state, int ev_type)
* init_pf_cycle and I don't know what is it.
*/
switch (ev_type) {
- case LLC_CONN_EV_TYPE_PRIM:
- rc = llc_offset_table[state][0]; break;
- case LLC_CONN_EV_TYPE_PDU:
- rc = llc_offset_table[state][4]; break;
- case LLC_CONN_EV_TYPE_SIMPLE:
- rc = llc_offset_table[state][1]; break;
- case LLC_CONN_EV_TYPE_P_TMR:
- case LLC_CONN_EV_TYPE_ACK_TMR:
- case LLC_CONN_EV_TYPE_REJ_TMR:
- case LLC_CONN_EV_TYPE_BUSY_TMR:
- rc = llc_offset_table[state][3]; break;
+ case LLC_CONN_EV_TYPE_PRIM:
+ rc = llc_offset_table[state][0]; break;
+ case LLC_CONN_EV_TYPE_PDU:
+ rc = llc_offset_table[state][4]; break;
+ case LLC_CONN_EV_TYPE_SIMPLE:
+ rc = llc_offset_table[state][1]; break;
+ case LLC_CONN_EV_TYPE_P_TMR:
+ case LLC_CONN_EV_TYPE_ACK_TMR:
+ case LLC_CONN_EV_TYPE_REJ_TMR:
+ case LLC_CONN_EV_TYPE_BUSY_TMR:
+ rc = llc_offset_table[state][3]; break;
}
return rc;
}
diff --git a/net/llc/llc_evnt.c b/net/llc/llc_evnt.c
index 6cc65d502c44..654650f5a4f5 100644
--- a/net/llc/llc_evnt.c
+++ b/net/llc/llc_evnt.c
@@ -7,7 +7,7 @@
* them return 0 On success and 1 otherwise.
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
diff --git a/net/llc/llc_if.c b/net/llc/llc_if.c
index 7806f24a2bf8..7736ea2920e1 100644
--- a/net/llc/llc_if.c
+++ b/net/llc/llc_if.c
@@ -2,7 +2,7 @@
* llc_if.c - Defines LLC interface to upper layer
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
diff --git a/net/llc/llc_mac.c b/net/llc/llc_mac.c
index 74cadcee49d0..b78696665109 100644
--- a/net/llc/llc_mac.c
+++ b/net/llc/llc_mac.c
@@ -2,7 +2,7 @@
* llc_mac.c - Manages interface between LLC and MAC
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
@@ -78,7 +78,8 @@ int llc_rcv(struct sk_buff *skb, struct net_device *dev,
}
sap = llc_sap_find(pdu->dsap);
if (!sap) {/* unknown SAP */
- dprintk("%s: llc_sap_find(%02X) failed!\n", __FUNCTION__, pdu->dsap);
+ dprintk("%s: llc_sap_find(%02X) failed!\n", __FUNCTION__,
+ pdu->dsap);
goto drop;
}
llc_decode_pdu_type(skb, &dest);
@@ -255,41 +256,41 @@ u16 lan_hdrs_init(struct sk_buff *skb, u8 *sa, u8 *da)
switch (skb->dev->type) {
#ifdef CONFIG_TR
- case ARPHRD_IEEE802_TR: {
- struct trh_hdr *trh;
- struct net_device *dev = skb->dev;
+ case ARPHRD_IEEE802_TR: {
+ struct trh_hdr *trh;
+ struct net_device *dev = skb->dev;
- trh = (struct trh_hdr *)skb_push(skb, sizeof(*trh));
- trh->ac = AC;
- trh->fc = LLC_FRAME;
- if (sa)
- memcpy(trh->saddr, sa, dev->addr_len);
- else
- memset(trh->saddr, 0, dev->addr_len);
- if (da) {
- memcpy(trh->daddr, da, dev->addr_len);
- tr_source_route(skb, trh, dev);
- }
- skb->mac.raw = skb->data;
- break;
+ trh = (struct trh_hdr *)skb_push(skb, sizeof(*trh));
+ trh->ac = AC;
+ trh->fc = LLC_FRAME;
+ if (sa)
+ memcpy(trh->saddr, sa, dev->addr_len);
+ else
+ memset(trh->saddr, 0, dev->addr_len);
+ if (da) {
+ memcpy(trh->daddr, da, dev->addr_len);
+ tr_source_route(skb, trh, dev);
}
+ skb->mac.raw = skb->data;
+ break;
+ }
#endif
- case ARPHRD_ETHER:
- case ARPHRD_LOOPBACK: {
- unsigned short len = skb->len;
- struct ethhdr *eth;
+ case ARPHRD_ETHER:
+ case ARPHRD_LOOPBACK: {
+ unsigned short len = skb->len;
+ struct ethhdr *eth;
- skb->mac.raw = skb_push(skb, sizeof(*eth));
- eth = (struct ethhdr *)skb->mac.raw;
- eth->h_proto = htons(len);
- memcpy(eth->h_dest, da, ETH_ALEN);
- memcpy(eth->h_source, sa, ETH_ALEN);
- break;
- }
- default:
- printk(KERN_WARNING "Unknown DEVICE type : %d\n",
- skb->dev->type);
- rc = 1;
+ skb->mac.raw = skb_push(skb, sizeof(*eth));
+ eth = (struct ethhdr *)skb->mac.raw;
+ eth->h_proto = htons(len);
+ memcpy(eth->h_dest, da, ETH_ALEN);
+ memcpy(eth->h_source, sa, ETH_ALEN);
+ break;
+ }
+ default:
+ printk(KERN_WARNING "Unknown DEVICE type : %d\n",
+ skb->dev->type);
+ rc = 1;
}
return rc;
}
diff --git a/net/llc/llc_main.c b/net/llc/llc_main.c
index 4bd21823a05f..5d8d1602bb9e 100644
--- a/net/llc/llc_main.c
+++ b/net/llc/llc_main.c
@@ -3,7 +3,7 @@
* and connections of the LLC.
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001, 2002 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
@@ -600,5 +600,5 @@ module_init(llc_init);
module_exit(llc_exit);
MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Procom, 1997, Arnaldo C. Melo, Jay Schullist, 2001, 2002");
+MODULE_AUTHOR("Procom, 1997, Arnaldo C. Melo, Jay Schullist, 2001-2003");
MODULE_DESCRIPTION("LLC 2.0, NET4.0 IEEE 802.2 extended support");
diff --git a/net/llc/llc_pdu.c b/net/llc/llc_pdu.c
index 8da9ddea65be..c99273a5d21b 100644
--- a/net/llc/llc_pdu.c
+++ b/net/llc/llc_pdu.c
@@ -2,7 +2,7 @@
* llc_pdu.c - access to PDU internals
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
@@ -63,13 +63,13 @@ void llc_pdu_set_pf_bit(struct sk_buff *skb, u8 bit_value)
pdu = llc_pdu_sn_hdr(skb);
switch (pdu_type) {
- case LLC_PDU_TYPE_I:
- case LLC_PDU_TYPE_S:
- pdu->ctrl_2 = (pdu->ctrl_2 & 0xFE) | bit_value;
- break;
- case LLC_PDU_TYPE_U:
- pdu->ctrl_1 |= (pdu->ctrl_1 & 0xEF) | (bit_value << 4);
- break;
+ case LLC_PDU_TYPE_I:
+ case LLC_PDU_TYPE_S:
+ pdu->ctrl_2 = (pdu->ctrl_2 & 0xFE) | bit_value;
+ break;
+ case LLC_PDU_TYPE_U:
+ pdu->ctrl_1 |= (pdu->ctrl_1 & 0xEF) | (bit_value << 4);
+ break;
}
}
@@ -91,13 +91,13 @@ void llc_pdu_decode_pf_bit(struct sk_buff *skb, u8 *pf_bit)
pdu = llc_pdu_sn_hdr(skb);
switch (pdu_type) {
- case LLC_PDU_TYPE_I:
- case LLC_PDU_TYPE_S:
- *pf_bit = pdu->ctrl_2 & LLC_S_PF_BIT_MASK;
- break;
- case LLC_PDU_TYPE_U:
- *pf_bit = (pdu->ctrl_1 & LLC_U_PF_BIT_MASK) >> 4;
- break;
+ case LLC_PDU_TYPE_I:
+ case LLC_PDU_TYPE_S:
+ *pf_bit = pdu->ctrl_2 & LLC_S_PF_BIT_MASK;
+ break;
+ case LLC_PDU_TYPE_U:
+ *pf_bit = (pdu->ctrl_1 & LLC_U_PF_BIT_MASK) >> 4;
+ break;
}
}
@@ -547,20 +547,20 @@ void llc_decode_pdu_type(struct sk_buff *skb, u8 *dest)
if ((pdu->ctrl_1 & LLC_PDU_TYPE_MASK) != LLC_PDU_TYPE_U)
goto out;
switch (LLC_U_PDU_CMD(pdu)) {
- case LLC_1_PDU_CMD_XID:
- case LLC_1_PDU_CMD_UI:
- case LLC_1_PDU_CMD_TEST:
- type = LLC_DEST_SAP;
- break;
- case LLC_2_PDU_CMD_SABME:
- case LLC_2_PDU_CMD_DISC:
- case LLC_2_PDU_RSP_UA:
- case LLC_2_PDU_RSP_DM:
- case LLC_2_PDU_RSP_FRMR:
- break;
- default:
- type = LLC_DEST_INVALID;
- break;
+ case LLC_1_PDU_CMD_XID:
+ case LLC_1_PDU_CMD_UI:
+ case LLC_1_PDU_CMD_TEST:
+ type = LLC_DEST_SAP;
+ break;
+ case LLC_2_PDU_CMD_SABME:
+ case LLC_2_PDU_CMD_DISC:
+ case LLC_2_PDU_RSP_UA:
+ case LLC_2_PDU_RSP_DM:
+ case LLC_2_PDU_RSP_FRMR:
+ break;
+ default:
+ type = LLC_DEST_INVALID;
+ break;
}
out:
*dest = type;
@@ -604,13 +604,13 @@ static u8 llc_pdu_get_pf_bit(struct llc_pdu_sn *pdu)
} else
pdu_type = LLC_PDU_TYPE_I;
switch (pdu_type) {
- case LLC_PDU_TYPE_I:
- case LLC_PDU_TYPE_S:
- pf_bit = pdu->ctrl_2 & LLC_S_PF_BIT_MASK;
- break;
- case LLC_PDU_TYPE_U:
- pf_bit = (pdu->ctrl_1 & LLC_U_PF_BIT_MASK) >> 4;
- break;
+ case LLC_PDU_TYPE_I:
+ case LLC_PDU_TYPE_S:
+ pf_bit = pdu->ctrl_2 & LLC_S_PF_BIT_MASK;
+ break;
+ case LLC_PDU_TYPE_U:
+ pf_bit = (pdu->ctrl_1 & LLC_U_PF_BIT_MASK) >> 4;
+ break;
}
return pf_bit;
}
diff --git a/net/llc/llc_proc.c b/net/llc/llc_proc.c
index 517834b99e5c..50aaf724bde9 100644
--- a/net/llc/llc_proc.c
+++ b/net/llc/llc_proc.c
@@ -2,7 +2,7 @@
* proc_llc.c - proc interface for LLC
*
* Copyright (c) 2001 by Jay Schulist <jschlst@samba.org>
- * 2002 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2002-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
diff --git a/net/llc/llc_s_ac.c b/net/llc/llc_s_ac.c
index 27421a8f284b..1a67f2ef1a56 100644
--- a/net/llc/llc_s_ac.c
+++ b/net/llc/llc_s_ac.c
@@ -8,7 +8,7 @@
* them return 0 On success and 1 otherwise.
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
diff --git a/net/llc/llc_s_ev.c b/net/llc/llc_s_ev.c
index 3b1e02f88dcd..949ade268067 100644
--- a/net/llc/llc_s_ev.c
+++ b/net/llc/llc_s_ev.c
@@ -5,7 +5,7 @@
* in 802.2 LLC protocol standard document.
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
diff --git a/net/llc/llc_s_st.c b/net/llc/llc_s_st.c
index 8fb09a1743e2..6a43201aa32e 100644
--- a/net/llc/llc_s_st.c
+++ b/net/llc/llc_s_st.c
@@ -5,7 +5,7 @@
* which are described in 802.2 LLC protocol standard document.
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
diff --git a/net/llc/llc_sap.c b/net/llc/llc_sap.c
index 7cd6bb115a8b..bcbab8bfaf8b 100644
--- a/net/llc/llc_sap.c
+++ b/net/llc/llc_sap.c
@@ -2,7 +2,7 @@
* llc_sap.c - driver routines for SAP component.
*
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
diff --git a/net/llc/llc_stat.c b/net/llc/llc_stat.c
index 52fee9e005b9..06f071dc95a7 100644
--- a/net/llc/llc_stat.c
+++ b/net/llc/llc_stat.c
@@ -2,7 +2,7 @@
* llc_stat.c - Implementation of LLC station component state machine
* transitions
* Copyright (c) 1997 by Procom Technology, Inc.
- * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*
* This program can be redistributed or modified under the terms of the
* GNU General Public License as published by the Free Software Foundation.
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index a578156cab91..0958503dcca7 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -65,37 +65,38 @@ struct tcf_proto_ops * tcf_proto_lookup_ops(struct rtattr *kind)
int register_tcf_proto_ops(struct tcf_proto_ops *ops)
{
struct tcf_proto_ops *t, **tp;
+ int rc = -EEXIST;
write_lock(&cls_mod_lock);
- for (tp = &tcf_proto_base; (t=*tp) != NULL; tp = &t->next) {
- if (strcmp(ops->kind, t->kind) == 0) {
- write_unlock(&cls_mod_lock);
- return -EEXIST;
- }
- }
+ for (tp = &tcf_proto_base; (t = *tp) != NULL; tp = &t->next)
+ if (!strcmp(ops->kind, t->kind))
+ goto out;
ops->next = NULL;
*tp = ops;
+ rc = 0;
+out:
write_unlock(&cls_mod_lock);
- return 0;
+ return rc;
}
int unregister_tcf_proto_ops(struct tcf_proto_ops *ops)
{
struct tcf_proto_ops *t, **tp;
+ int rc = -ENOENT;
write_lock(&cls_mod_lock);
for (tp = &tcf_proto_base; (t=*tp) != NULL; tp = &t->next)
if (t == ops)
break;
- if (!t) {
- write_unlock(&cls_mod_lock);
- return -ENOENT;
- }
+ if (!t)
+ goto out;
*tp = t->next;
+ rc = 0;
+out:
write_unlock(&cls_mod_lock);
- return 0;
+ return rc;
}
static int tfilter_notify(struct sk_buff *oskb, struct nlmsghdr *n,
@@ -371,11 +372,8 @@ static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)
q = dev->qdisc_sleeping;
else
q = qdisc_lookup(dev, TC_H_MAJ(tcm->tcm_parent));
- if (q == NULL) {
- read_unlock(&qdisc_tree_lock);
- dev_put(dev);
- return skb->len;
- }
+ if (!q)
+ goto out;
if ((cops = q->ops->cl_ops) == NULL)
goto errout;
if (TC_H_MIN(tcm->tcm_parent)) {
@@ -425,7 +423,7 @@ static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)
errout:
if (cl)
cops->put(q, cl);
-
+out:
read_unlock(&qdisc_tree_lock);
dev_put(dev);
return skb->len;
diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c
index a3053c225806..caca242d22a6 100644
--- a/net/sched/cls_fw.c
+++ b/net/sched/cls_fw.c
@@ -152,7 +152,7 @@ static int fw_delete(struct tcf_proto *tp, unsigned long arg)
struct fw_filter **fp;
if (head == NULL || f == NULL)
- return -EINVAL;
+ goto out;
for (fp=&head->ht[fw_hash(f->id)]; *fp; fp = &(*fp)->next) {
if (*fp == f) {
@@ -171,6 +171,7 @@ static int fw_delete(struct tcf_proto *tp, unsigned long arg)
return 0;
}
}
+out:
return -EINVAL;
}
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c
index cf9f3fefa526..96488808098a 100644
--- a/net/sched/cls_u32.c
+++ b/net/sched/cls_u32.c
@@ -203,17 +203,17 @@ static __inline__ struct tc_u_knode *
u32_lookup_key(struct tc_u_hnode *ht, u32 handle)
{
unsigned sel;
- struct tc_u_knode *n;
+ struct tc_u_knode *n = NULL;
sel = TC_U32_HASH(handle);
if (sel > ht->divisor)
- return 0;
+ goto out;
for (n = ht->ht[sel]; n; n = n->next)
if (n->handle == handle)
- return n;
-
- return NULL;
+ break;
+out:
+ return n;
}
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index 857a2d824222..30c3586ce0b0 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -139,21 +139,19 @@ static rwlock_t qdisc_mod_lock = RW_LOCK_UNLOCKED;
/* The list of all installed queueing disciplines. */
-static struct Qdisc_ops *qdisc_base = NULL;
+static struct Qdisc_ops *qdisc_base;
/* Register/uregister queueing discipline */
int register_qdisc(struct Qdisc_ops *qops)
{
struct Qdisc_ops *q, **qp;
+ int rc = -EEXIST;
write_lock(&qdisc_mod_lock);
- for (qp = &qdisc_base; (q=*qp)!=NULL; qp = &q->next) {
- if (strcmp(qops->id, q->id) == 0) {
- write_unlock(&qdisc_mod_lock);
- return -EEXIST;
- }
- }
+ for (qp = &qdisc_base; (q = *qp) != NULL; qp = &q->next)
+ if (!strcmp(qops->id, q->id))
+ goto out;
if (qops->enqueue == NULL)
qops->enqueue = noop_qdisc_ops.enqueue;
@@ -164,8 +162,10 @@ int register_qdisc(struct Qdisc_ops *qops)
qops->next = NULL;
*qp = qops;
+ rc = 0;
+out:
write_unlock(&qdisc_mod_lock);
- return 0;
+ return rc;
}
int unregister_qdisc(struct Qdisc_ops *qops)
diff --git a/net/sched/sch_ingress.c b/net/sched/sch_ingress.c
index 48a63bae0124..134b7c870583 100644
--- a/net/sched/sch_ingress.c
+++ b/net/sched/sch_ingress.c
@@ -45,7 +45,7 @@
/* Thanks to Doron Oz for this hack
*/
-static int nf_registered = 0;
+static int nf_registered;
struct ingress_qdisc_data {
struct Qdisc *q;
@@ -237,14 +237,12 @@ used on the egress (might slow things for an iota)
}
/* after ipt_filter */
-static struct nf_hook_ops ing_ops =
-{
- { NULL, NULL},
- ing_hook,
- THIS_MODULE,
- PF_INET,
- NF_IP_PRE_ROUTING,
- NF_IP_PRI_FILTER + 1
+static struct nf_hook_ops ing_ops = {
+ .hook = ing_hook,
+ .owner = THIS_MODULE,
+ .pf = PF_INET,
+ .hooknum = NF_IP_PRE_ROUTING,
+ .priority = NF_IP_PRI_FILTER + 1,
};
int ingress_init(struct Qdisc *sch,struct rtattr *opt)
@@ -255,7 +253,7 @@ int ingress_init(struct Qdisc *sch,struct rtattr *opt)
if (nf_register_hook(&ing_ops) < 0) {
printk("ingress qdisc registration error \n");
goto error;
- }
+ }
nf_registered++;
}