diff options
author | Patrick McHardy <kaber@trash.net> | 2008-07-06 00:25:56 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-07-06 00:25:56 -0400 |
commit | 7c85fbf0657f216557b0c9c4a2e4e07f37d8bb8c (patch) | |
tree | 08660067a7f60fdf4e8343ec9481ce6da22ac6d8 /net/bridge/br_stp_bpdu.c | |
parent | a19800d704177caaa5874baf5819307c5b7d5e4f (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.c | 12 |
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 | */ |
134 | int br_stp_rcv(struct sk_buff *skb, struct net_device *dev, | 135 | void 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 | } |