]> err.no Git - linux-2.6/blobdiff - net/bridge/br_stp_bpdu.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[linux-2.6] / net / bridge / br_stp_bpdu.c
index 60112bce66984343e8ab13121c1304a1cde29739..9dc2de6569655320423370602628ca5d02d3bbc9 100644 (file)
@@ -5,8 +5,6 @@
  *     Authors:
  *     Lennert Buytenhek               <buytenh@gnu.org>
  *
- *     $Id: br_stp_bpdu.c,v 1.3 2001/11/10 02:35:25 davem Exp $
- *
  *     This program is free software; you can redistribute it and/or
  *     modify it under the terms of the GNU General Public License
  *     as published by the Free Software Foundation; either version
@@ -17,6 +15,7 @@
 #include <linux/netfilter_bridge.h>
 #include <linux/etherdevice.h>
 #include <linux/llc.h>
+#include <net/net_namespace.h>
 #include <net/llc.h>
 #include <net/llc_pdu.h>
 #include <asm/unaligned.h>
@@ -57,14 +56,14 @@ static inline void br_set_ticks(unsigned char *dest, int j)
 {
        unsigned long ticks = (STP_HZ * j)/ HZ;
 
-       put_unaligned(htons(ticks), (__be16 *)dest);
+       put_unaligned_be16(ticks, dest);
 }
 
 static inline int br_get_ticks(const unsigned char *src)
 {
-       unsigned long ticks = ntohs(get_unaligned((__be16 *)src));
+       unsigned long ticks = get_unaligned_be16(src);
 
-       return (ticks * HZ + STP_HZ - 1) / STP_HZ;
+       return DIV_ROUND_UP(ticks * HZ, STP_HZ);
 }
 
 /* called under bridge lock */
@@ -141,6 +140,9 @@ int br_stp_rcv(struct sk_buff *skb, struct net_device *dev,
        struct net_bridge *br;
        const unsigned char *buf;
 
+       if (dev_net(dev) != &init_net)
+               goto err;
+
        if (!p)
                goto err;