aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_stp_bpdu.c
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2008-07-06 00:25:56 -0400
committerDavid S. Miller <davem@davemloft.net>2008-07-06 00:25:56 -0400
commit7c85fbf0657f216557b0c9c4a2e4e07f37d8bb8c (patch)
tree08660067a7f60fdf4e8343ec9481ce6da22ac6d8 /net/bridge/br_stp_bpdu.c
parenta19800d704177caaa5874baf5819307c5b7d5e4f (diff)
bridge: Use STP demux
Use the STP demux layer for receiving STP PDUs instead of directly registering with LLC. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_stp_bpdu.c')
-rw-r--r--net/bridge/br_stp_bpdu.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/net/bridge/br_stp_bpdu.c b/net/bridge/br_stp_bpdu.c
index 9dc2de656965..996476174517 100644
--- a/net/bridge/br_stp_bpdu.c
+++ b/net/bridge/br_stp_bpdu.c
@@ -18,6 +18,7 @@
18#include <net/net_namespace.h> 18#include <net/net_namespace.h>
19#include <net/llc.h> 19#include <net/llc.h>
20#include <net/llc_pdu.h> 20#include <net/llc_pdu.h>
21#include <net/stp.h>
21#include <asm/unaligned.h> 22#include <asm/unaligned.h>
22 23
23#include "br_private.h" 24#include "br_private.h"
@@ -131,10 +132,9 @@ void br_send_tcn_bpdu(struct net_bridge_port *p)
131 * 132 *
132 * NO locks, but rcu_read_lock (preempt_disabled) 133 * NO locks, but rcu_read_lock (preempt_disabled)
133 */ 134 */
134int br_stp_rcv(struct sk_buff *skb, struct net_device *dev, 135void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb,
135 struct packet_type *pt, struct net_device *orig_dev) 136 struct net_device *dev)
136{ 137{
137 const struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb);
138 const unsigned char *dest = eth_hdr(skb)->h_dest; 138 const unsigned char *dest = eth_hdr(skb)->h_dest;
139 struct net_bridge_port *p = rcu_dereference(dev->br_port); 139 struct net_bridge_port *p = rcu_dereference(dev->br_port);
140 struct net_bridge *br; 140 struct net_bridge *br;
@@ -146,11 +146,6 @@ int br_stp_rcv(struct sk_buff *skb, struct net_device *dev,
146 if (!p) 146 if (!p)
147 goto err; 147 goto err;
148 148
149 if (pdu->ssap != LLC_SAP_BSPAN
150 || pdu->dsap != LLC_SAP_BSPAN
151 || pdu->ctrl_1 != LLC_PDU_TYPE_U)
152 goto err;
153
154 if (!pskb_may_pull(skb, 4)) 149 if (!pskb_may_pull(skb, 4))
155 goto err; 150 goto err;
156 151
@@ -224,5 +219,4 @@ int br_stp_rcv(struct sk_buff *skb, struct net_device *dev,
224 spin_unlock(&br->lock); 219 spin_unlock(&br->lock);
225 err: 220 err:
226 kfree_skb(skb); 221 kfree_skb(skb);
227 return 0;
228} 222}