projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[BRIDGE]: if no STP then forward all BPDUs
[powerpc.git]
/
net
/
bridge
/
br_netlink.c
diff --git
a/net/bridge/br_netlink.c
b/net/bridge/br_netlink.c
index
7d68b24
..
35facc0
100644
(file)
--- a/
net/bridge/br_netlink.c
+++ b/
net/bridge/br_netlink.c
@@
-11,8
+11,7
@@
*/
#include <linux/kernel.h>
*/
#include <linux/kernel.h>
-#include <linux/rtnetlink.h>
-#include <net/netlink.h>
+#include <net/rtnetlink.h>
#include "br_private.h"
static inline size_t br_nlmsg_size(void)
#include "br_private.h"
static inline size_t br_nlmsg_size(void)
@@
-110,7
+109,6
@@
static int br_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
struct net_device *dev;
int idx;
struct net_device *dev;
int idx;
- read_lock(&dev_base_lock);
for (dev = dev_base, idx = 0; dev; dev = dev->next) {
/* not a bridge port */
if (dev->br_port == NULL || idx < cb->args[0])
for (dev = dev_base, idx = 0; dev; dev = dev->next) {
/* not a bridge port */
if (dev->br_port == NULL || idx < cb->args[0])
@@
-123,7
+121,6
@@
static int br_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
skip:
++idx;
}
skip:
++idx;
}
- read_unlock(&dev_base_lock);
cb->args[0] = idx;
cb->args[0] = idx;
@@
-166,7
+163,7
@@
static int br_rtm_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
return -EINVAL;
/* if kernel STP is running, don't allow changes */
return -EINVAL;
/* if kernel STP is running, don't allow changes */
- if (p->br->stp_enabled)
+ if (p->br->stp_enabled
== BR_KERNEL_STP
)
return -EBUSY;
if (!netif_running(dev) ||
return -EBUSY;
if (!netif_running(dev) ||
@@
-179,18
+176,19
@@
static int br_rtm_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
}
}
-static struct rtnetlink_link bridge_rtnetlink_table[RTM_NR_MSGTYPES] = {
- [RTM_GETLINK - RTM_BASE] = { .dumpit = br_dump_ifinfo, },
- [RTM_SETLINK - RTM_BASE] = { .doit = br_rtm_setlink, },
-};
-
-void __init br_netlink_init(void)
+int __init br_netlink_init(void)
{
{
- rtnetlink_links[PF_BRIDGE] = bridge_rtnetlink_table;
+ if (__rtnl_register(PF_BRIDGE, RTM_GETLINK, NULL, br_dump_ifinfo))
+ return -ENOBUFS;
+
+ /* Only the first call to __rtnl_register can fail */
+ __rtnl_register(PF_BRIDGE, RTM_SETLINK, br_rtm_setlink, NULL);
+
+ return 0;
}
void __exit br_netlink_fini(void)
{
}
void __exit br_netlink_fini(void)
{
- rtn
etlink_links[PF_BRIDGE] = NULL
;
+ rtn
l_unregister_all(PF_BRIDGE)
;
}
}