18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/* Copyright 2011-2014 Autronica Fire and Security AS
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci *	2011-2014 Arvid Brodin, arvid.brodin@alten.se
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * include file for HSR and PRP.
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#ifndef __HSR_SLAVE_H
108c2ecf20Sopenharmony_ci#define __HSR_SLAVE_H
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include <linux/skbuff.h>
138c2ecf20Sopenharmony_ci#include <linux/netdevice.h>
148c2ecf20Sopenharmony_ci#include <linux/rtnetlink.h>
158c2ecf20Sopenharmony_ci#include "hsr_main.h"
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ciint hsr_add_port(struct hsr_priv *hsr, struct net_device *dev,
188c2ecf20Sopenharmony_ci		 enum hsr_port_type pt, struct netlink_ext_ack *extack);
198c2ecf20Sopenharmony_civoid hsr_del_port(struct hsr_port *port);
208c2ecf20Sopenharmony_cibool hsr_port_exists(const struct net_device *dev);
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cistatic inline struct hsr_port *hsr_port_get_rtnl(const struct net_device *dev)
238c2ecf20Sopenharmony_ci{
248c2ecf20Sopenharmony_ci	ASSERT_RTNL();
258c2ecf20Sopenharmony_ci	return hsr_port_exists(dev) ?
268c2ecf20Sopenharmony_ci				rtnl_dereference(dev->rx_handler_data) : NULL;
278c2ecf20Sopenharmony_ci}
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_cistatic inline struct hsr_port *hsr_port_get_rcu(const struct net_device *dev)
308c2ecf20Sopenharmony_ci{
318c2ecf20Sopenharmony_ci	return hsr_port_exists(dev) ?
328c2ecf20Sopenharmony_ci				rcu_dereference(dev->rx_handler_data) : NULL;
338c2ecf20Sopenharmony_ci}
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_cibool hsr_invalid_dan_ingress_frame(__be16 protocol);
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci#endif /* __HSR_SLAVE_H */
38