int __init br_netlink_init(void) { int err; err = rtnl_link_register(&br_link_ops); if (err < 0) goto err1; err = __rtnl_register(PF_BRIDGE, RTM_GETLINK, NULL, br_dump_ifinfo); if (err) goto err2; err = __rtnl_register(PF_BRIDGE, RTM_SETLINK, br_rtm_setlink, NULL); if (err) goto err3; err = __rtnl_register(PF_BRIDGE, RTM_NEWNEIGH, br_fdb_add, NULL); if (err) goto err3; err = __rtnl_register(PF_BRIDGE, RTM_DELNEIGH, br_fdb_delete, NULL); if (err) goto err3; err = __rtnl_register(PF_BRIDGE, RTM_GETNEIGH, NULL, br_fdb_dump); if (err) goto err3; return 0; err3: rtnl_unregister_all(PF_BRIDGE); err2: rtnl_link_unregister(&br_link_ops); err1: return err; }
void __exit br_netlink_fini(void) { rtnl_link_unregister(&br_link_ops); rtnl_unregister_all(PF_BRIDGE); }