1/* SPDX-License-Identifier: GPL-2.0 */
2/* Copyright (c) 2018, Intel Corporation. */
3
4#ifndef _FAILOVER_H
5#define _FAILOVER_H
6
7#include <linux/netdevice.h>
8
9struct failover_ops {
10	int (*slave_pre_register)(struct net_device *slave_dev,
11				  struct net_device *failover_dev);
12	int (*slave_register)(struct net_device *slave_dev,
13			      struct net_device *failover_dev);
14	int (*slave_pre_unregister)(struct net_device *slave_dev,
15				    struct net_device *failover_dev);
16	int (*slave_unregister)(struct net_device *slave_dev,
17				struct net_device *failover_dev);
18	int (*slave_link_change)(struct net_device *slave_dev,
19				 struct net_device *failover_dev);
20	int (*slave_name_change)(struct net_device *slave_dev,
21				 struct net_device *failover_dev);
22	rx_handler_result_t (*slave_handle_frame)(struct sk_buff **pskb);
23};
24
25struct failover {
26	struct list_head list;
27	struct net_device __rcu *failover_dev;
28	netdevice_tracker	dev_tracker;
29	struct failover_ops __rcu *ops;
30};
31
32struct failover *failover_register(struct net_device *dev,
33				   struct failover_ops *ops);
34void failover_unregister(struct failover *failover);
35int failover_slave_unregister(struct net_device *slave_dev);
36
37#endif /* _FAILOVER_H */
38