|
@@ -18,6 +18,7 @@
|
|
#include <net/net_namespace.h>
|
|
#include <net/net_namespace.h>
|
|
#include <net/llc.h>
|
|
#include <net/llc.h>
|
|
#include <net/llc_pdu.h>
|
|
#include <net/llc_pdu.h>
|
|
|
|
+#include <net/stp.h>
|
|
#include <asm/unaligned.h>
|
|
#include <asm/unaligned.h>
|
|
|
|
|
|
#include "br_private.h"
|
|
#include "br_private.h"
|
|
@@ -131,10 +132,9 @@ void br_send_tcn_bpdu(struct net_bridge_port *p)
|
|
*
|
|
*
|
|
* NO locks, but rcu_read_lock (preempt_disabled)
|
|
* NO locks, but rcu_read_lock (preempt_disabled)
|
|
*/
|
|
*/
|
|
-int br_stp_rcv(struct sk_buff *skb, struct net_device *dev,
|
|
|
|
- struct packet_type *pt, struct net_device *orig_dev)
|
|
|
|
|
|
+void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb,
|
|
|
|
+ struct net_device *dev)
|
|
{
|
|
{
|
|
- const struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb);
|
|
|
|
const unsigned char *dest = eth_hdr(skb)->h_dest;
|
|
const unsigned char *dest = eth_hdr(skb)->h_dest;
|
|
struct net_bridge_port *p = rcu_dereference(dev->br_port);
|
|
struct net_bridge_port *p = rcu_dereference(dev->br_port);
|
|
struct net_bridge *br;
|
|
struct net_bridge *br;
|
|
@@ -146,11 +146,6 @@ int br_stp_rcv(struct sk_buff *skb, struct net_device *dev,
|
|
if (!p)
|
|
if (!p)
|
|
goto err;
|
|
goto err;
|
|
|
|
|
|
- if (pdu->ssap != LLC_SAP_BSPAN
|
|
|
|
- || pdu->dsap != LLC_SAP_BSPAN
|
|
|
|
- || pdu->ctrl_1 != LLC_PDU_TYPE_U)
|
|
|
|
- goto err;
|
|
|
|
-
|
|
|
|
if (!pskb_may_pull(skb, 4))
|
|
if (!pskb_may_pull(skb, 4))
|
|
goto err;
|
|
goto err;
|
|
|
|
|
|
@@ -224,5 +219,4 @@ int br_stp_rcv(struct sk_buff *skb, struct net_device *dev,
|
|
spin_unlock(&br->lock);
|
|
spin_unlock(&br->lock);
|
|
err:
|
|
err:
|
|
kfree_skb(skb);
|
|
kfree_skb(skb);
|
|
- return 0;
|
|
|
|
}
|
|
}
|