12 #include <netlink-private/netlink.h>
13 #include <netlink/netlink.h>
14 #include <netlink/attr.h>
15 #include <netlink/route/rtnl.h>
16 #include <netlink-private/route/link/api.h>
18 #define BRIDGE_ATTR_PORT_STATE 0x0001
26 static void *bridge_alloc(
struct rtnl_link *link)
31 static void *bridge_clone(
struct rtnl_link *link,
void *data)
35 if ((bd = bridge_alloc(link)))
36 memcpy(bd, data,
sizeof(*bd));
41 static void bridge_free(
struct rtnl_link *link,
void *data)
46 static int bridge_parse_protinfo(
struct rtnl_link *link,
struct nlattr *attr,
52 bd->ce_mask |= BRIDGE_ATTR_PORT_STATE;
57 static void bridge_dump_details(
struct rtnl_link *link,
62 if (bd->ce_mask & BRIDGE_ATTR_PORT_STATE)
63 nl_dump(p,
"port-state %u ", bd->b_port_state);
67 int family, uint32_t attrs,
int flags)
73 #define BRIDGE_DIFF(ATTR, EXPR) ATTR_DIFF(attrs, BRIDGE_ATTR_##ATTR, a, b, EXPR)
74 diff |= BRIDGE_DIFF(PORT_STATE, a->b_port_state != b->b_port_state);
80 static const struct nla_policy protinfo_policy = {
84 static struct rtnl_link_af_ops bridge_ops = {
85 .ao_family = AF_BRIDGE,
86 .ao_alloc = &bridge_alloc,
87 .ao_clone = &bridge_clone,
88 .ao_free = &bridge_free,
89 .ao_parse_protinfo = &bridge_parse_protinfo,
91 .ao_protinfo_policy = &protinfo_policy,
92 .ao_compare = &bridge_compare,
95 static void __init bridge_init(
void)
100 static void __exit bridge_exit(
void)