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