10e7623bdSMurali Karicheri /* SPDX-License-Identifier: GPL-2.0 */ 281ba6afdSArvid Brodin /* Copyright 2011-2014 Autronica Fire and Security AS 381ba6afdSArvid Brodin * 481ba6afdSArvid Brodin * 2011-2014 Arvid Brodin, arvid.brodin@alten.se 58f4c0e01SMurali Karicheri * 68f4c0e01SMurali Karicheri * include file for HSR and PRP. 781ba6afdSArvid Brodin */ 881ba6afdSArvid Brodin 981ba6afdSArvid Brodin #ifndef __HSR_SLAVE_H 1081ba6afdSArvid Brodin #define __HSR_SLAVE_H 1181ba6afdSArvid Brodin 1281ba6afdSArvid Brodin #include <linux/skbuff.h> 1381ba6afdSArvid Brodin #include <linux/netdevice.h> 14c5a75911SArvid Brodin #include <linux/rtnetlink.h> 1551f3c605SArvid Brodin #include "hsr_main.h" 1681ba6afdSArvid Brodin 17c5a75911SArvid Brodin int hsr_add_port(struct hsr_priv *hsr, struct net_device *dev, 1813eeb5feSTaehee Yoo enum hsr_port_type pt, struct netlink_ext_ack *extack); 19c5a75911SArvid Brodin void hsr_del_port(struct hsr_port *port); 20f266a683SArvid Brodin bool hsr_port_exists(const struct net_device *dev); 21c5a75911SArvid Brodin hsr_port_get_rtnl(const struct net_device * dev)22c5a75911SArvid Brodinstatic inline struct hsr_port *hsr_port_get_rtnl(const struct net_device *dev) 23c5a75911SArvid Brodin { 24c5a75911SArvid Brodin ASSERT_RTNL(); 25c5a75911SArvid Brodin return hsr_port_exists(dev) ? 26c5a75911SArvid Brodin rtnl_dereference(dev->rx_handler_data) : NULL; 27c5a75911SArvid Brodin } 28c5a75911SArvid Brodin hsr_port_get_rcu(const struct net_device * dev)29c5a75911SArvid Brodinstatic inline struct hsr_port *hsr_port_get_rcu(const struct net_device *dev) 30c5a75911SArvid Brodin { 31c5a75911SArvid Brodin return hsr_port_exists(dev) ? 32c5a75911SArvid Brodin rcu_dereference(dev->rx_handler_data) : NULL; 33c5a75911SArvid Brodin } 34c5a75911SArvid Brodin 35*451d8123SMurali Karicheri bool hsr_invalid_dan_ingress_frame(__be16 protocol); 36*451d8123SMurali Karicheri 3781ba6afdSArvid Brodin #endif /* __HSR_SLAVE_H */ 38