static int dp_device_event(struct notifier_block *unused, unsigned long event, void *ptr) { struct net_device *dev = ptr; struct vport *vport; if (ovs_is_internal_dev(dev)) vport = ovs_internal_dev_get_vport(dev); else vport = ovs_netdev_get_vport(dev); if (!vport) return NOTIFY_DONE; switch (event) { case NETDEV_UNREGISTER: if (!ovs_is_internal_dev(dev)) { struct sk_buff *notify; struct datapath *dp = vport->dp; notify = ovs_vport_cmd_build_info(vport, 0, 0, OVS_VPORT_CMD_DEL); ovs_dp_detach_port(vport); if (IS_ERR(notify)) { netlink_set_err(ovs_dp_get_net(dp)->genl_sock, 0, ovs_dp_vport_multicast_group.id, PTR_ERR(notify)); break; } genlmsg_multicast_netns(ovs_dp_get_net(dp), notify, 0, ovs_dp_vport_multicast_group.id, GFP_KERNEL); } break; } return NOTIFY_DONE; }
int nfnetlink_set_err(struct net *net, u32 portid, u32 group, int error) { return netlink_set_err(net->nfnl, portid, group, error); }
void nfnetlink_set_err(u32 pid, u32 group, int error) { netlink_set_err(nfnl, pid, group, error); }
void nfnetlink_set_err(struct net *net, u32 pid, u32 group, int error) { netlink_set_err(net->nfnl, pid, group, error); }
void rtnl_set_sk_err(u32 group, int error) { netlink_set_err(rtnl, 0, group, error); }
int nfnetlink_set_err(u32 pid, u32 group, int error) { return netlink_set_err(nfnl, pid, group, error); }