162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright 2011-2014 Autronica Fire and Security AS
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci *	2011-2014 Arvid Brodin, arvid.brodin@alten.se
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * include file for HSR and PRP.
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#ifndef __HSR_SLAVE_H
1062306a36Sopenharmony_ci#define __HSR_SLAVE_H
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <linux/skbuff.h>
1362306a36Sopenharmony_ci#include <linux/netdevice.h>
1462306a36Sopenharmony_ci#include <linux/rtnetlink.h>
1562306a36Sopenharmony_ci#include "hsr_main.h"
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciint hsr_add_port(struct hsr_priv *hsr, struct net_device *dev,
1862306a36Sopenharmony_ci		 enum hsr_port_type pt, struct netlink_ext_ack *extack);
1962306a36Sopenharmony_civoid hsr_del_port(struct hsr_port *port);
2062306a36Sopenharmony_cibool hsr_port_exists(const struct net_device *dev);
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistatic inline struct hsr_port *hsr_port_get_rtnl(const struct net_device *dev)
2362306a36Sopenharmony_ci{
2462306a36Sopenharmony_ci	ASSERT_RTNL();
2562306a36Sopenharmony_ci	return hsr_port_exists(dev) ?
2662306a36Sopenharmony_ci				rtnl_dereference(dev->rx_handler_data) : NULL;
2762306a36Sopenharmony_ci}
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistatic inline struct hsr_port *hsr_port_get_rcu(const struct net_device *dev)
3062306a36Sopenharmony_ci{
3162306a36Sopenharmony_ci	return hsr_port_exists(dev) ?
3262306a36Sopenharmony_ci				rcu_dereference(dev->rx_handler_data) : NULL;
3362306a36Sopenharmony_ci}
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cibool hsr_invalid_dan_ingress_frame(__be16 protocol);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci#endif /* __HSR_SLAVE_H */
38