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