162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright (c) 2018, Intel Corporation. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef _FAILOVER_H
562306a36Sopenharmony_ci#define _FAILOVER_H
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <linux/netdevice.h>
862306a36Sopenharmony_ci
962306a36Sopenharmony_cistruct failover_ops {
1062306a36Sopenharmony_ci	int (*slave_pre_register)(struct net_device *slave_dev,
1162306a36Sopenharmony_ci				  struct net_device *failover_dev);
1262306a36Sopenharmony_ci	int (*slave_register)(struct net_device *slave_dev,
1362306a36Sopenharmony_ci			      struct net_device *failover_dev);
1462306a36Sopenharmony_ci	int (*slave_pre_unregister)(struct net_device *slave_dev,
1562306a36Sopenharmony_ci				    struct net_device *failover_dev);
1662306a36Sopenharmony_ci	int (*slave_unregister)(struct net_device *slave_dev,
1762306a36Sopenharmony_ci				struct net_device *failover_dev);
1862306a36Sopenharmony_ci	int (*slave_link_change)(struct net_device *slave_dev,
1962306a36Sopenharmony_ci				 struct net_device *failover_dev);
2062306a36Sopenharmony_ci	int (*slave_name_change)(struct net_device *slave_dev,
2162306a36Sopenharmony_ci				 struct net_device *failover_dev);
2262306a36Sopenharmony_ci	rx_handler_result_t (*slave_handle_frame)(struct sk_buff **pskb);
2362306a36Sopenharmony_ci};
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistruct failover {
2662306a36Sopenharmony_ci	struct list_head list;
2762306a36Sopenharmony_ci	struct net_device __rcu *failover_dev;
2862306a36Sopenharmony_ci	netdevice_tracker	dev_tracker;
2962306a36Sopenharmony_ci	struct failover_ops __rcu *ops;
3062306a36Sopenharmony_ci};
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistruct failover *failover_register(struct net_device *dev,
3362306a36Sopenharmony_ci				   struct failover_ops *ops);
3462306a36Sopenharmony_civoid failover_unregister(struct failover *failover);
3562306a36Sopenharmony_ciint failover_slave_unregister(struct net_device *slave_dev);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci#endif /* _FAILOVER_H */
38