13
13
#include <linux/kernel.h>
14
14
#include <linux/slab.h>
15
#include <linux/etherdevice.h>
15
16
#include <net/rtnetlink.h>
16
17
#include <net/net_namespace.h>
17
18
#include <net/sock.h>
18
20
#include "br_private.h"
20
22
static inline size_t br_nlmsg_size(void)
121
for_each_netdev(net, dev) {
122
struct net_bridge_port *port = br_port_get_rtnl(dev);
124
for_each_netdev_rcu(net, dev) {
125
struct net_bridge_port *port = br_port_get_rcu(dev);
124
127
/* not a bridge port */
125
128
if (!port || idx < cb->args[0])
194
static int br_validate(struct nlattr *tb[], struct nlattr *data[])
196
if (tb[IFLA_ADDRESS]) {
197
if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
199
if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS])))
200
return -EADDRNOTAVAIL;
206
static struct rtnl_link_ops br_link_ops __read_mostly = {
208
.priv_size = sizeof(struct net_bridge),
209
.setup = br_dev_setup,
210
.validate = br_validate,
192
213
int __init br_netlink_init(void)
194
if (__rtnl_register(PF_BRIDGE, RTM_GETLINK, NULL, br_dump_ifinfo))
197
/* Only the first call to __rtnl_register can fail */
198
__rtnl_register(PF_BRIDGE, RTM_SETLINK, br_rtm_setlink, NULL);
217
err = rtnl_link_register(&br_link_ops);
221
err = __rtnl_register(PF_BRIDGE, RTM_GETLINK, NULL, br_dump_ifinfo);
224
err = __rtnl_register(PF_BRIDGE, RTM_SETLINK, br_rtm_setlink, NULL);
227
err = __rtnl_register(PF_BRIDGE, RTM_NEWNEIGH, br_fdb_add, NULL);
230
err = __rtnl_register(PF_BRIDGE, RTM_DELNEIGH, br_fdb_delete, NULL);
233
err = __rtnl_register(PF_BRIDGE, RTM_GETNEIGH, NULL, br_fdb_dump);
240
rtnl_unregister_all(PF_BRIDGE);
242
rtnl_link_unregister(&br_link_ops);
203
247
void __exit br_netlink_fini(void)
249
rtnl_link_unregister(&br_link_ops);
205
250
rtnl_unregister_all(PF_BRIDGE);