162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright (c) 2018, Intel Corporation. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef _NET_FAILOVER_H
562306a36Sopenharmony_ci#define _NET_FAILOVER_H
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <net/failover.h>
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci/* failover state */
1062306a36Sopenharmony_cistruct net_failover_info {
1162306a36Sopenharmony_ci	/* primary netdev with same MAC */
1262306a36Sopenharmony_ci	struct net_device __rcu *primary_dev;
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci	/* standby netdev */
1562306a36Sopenharmony_ci	struct net_device __rcu *standby_dev;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci	/* primary netdev stats */
1862306a36Sopenharmony_ci	struct rtnl_link_stats64 primary_stats;
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci	/* standby netdev stats */
2162306a36Sopenharmony_ci	struct rtnl_link_stats64 standby_stats;
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci	/* aggregated stats */
2462306a36Sopenharmony_ci	struct rtnl_link_stats64 failover_stats;
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	/* spinlock while updating stats */
2762306a36Sopenharmony_ci	spinlock_t stats_lock;
2862306a36Sopenharmony_ci};
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cistruct failover *net_failover_create(struct net_device *standby_dev);
3162306a36Sopenharmony_civoid net_failover_destroy(struct failover *failover);
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci#define FAILOVER_VLAN_FEATURES	(NETIF_F_HW_CSUM | NETIF_F_SG | \
3462306a36Sopenharmony_ci				 NETIF_F_FRAGLIST | NETIF_F_ALL_TSO | \
3562306a36Sopenharmony_ci				 NETIF_F_HIGHDMA | NETIF_F_LRO)
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci#define FAILOVER_ENC_FEATURES	(NETIF_F_HW_CSUM | NETIF_F_SG | \
3862306a36Sopenharmony_ci				 NETIF_F_RXCSUM | NETIF_F_ALL_TSO)
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci#endif /* _NET_FAILOVER_H */
41