181ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin/* Copyright 2011-2014 Autronica Fire and Security AS 281ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin * 381ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin * This program is free software; you can redistribute it and/or modify it 481ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin * under the terms of the GNU General Public License as published by the Free 581ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin * Software Foundation; either version 2 of the License, or (at your option) 681ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin * any later version. 781ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin * 881ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin * Author(s): 981ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin * 2011-2014 Arvid Brodin, arvid.brodin@alten.se 1081ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin */ 1181ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin 1281ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin#ifndef __HSR_SLAVE_H 1381ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin#define __HSR_SLAVE_H 1481ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin 1581ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin#include <linux/skbuff.h> 1681ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin#include <linux/netdevice.h> 17c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin#include <linux/rtnetlink.h> 1851f3c605318b056ac5deb9079bbef2a976558827Arvid Brodin#include "hsr_main.h" 1981ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin 20c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodinint hsr_add_port(struct hsr_priv *hsr, struct net_device *dev, 21c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin enum hsr_port_type pt); 22c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodinvoid hsr_del_port(struct hsr_port *port); 23f266a683a4804dc499efc6c2206ef68efed029d0Arvid Brodinbool hsr_port_exists(const struct net_device *dev); 24c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin 25c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodinstatic inline struct hsr_port *hsr_port_get_rtnl(const struct net_device *dev) 26c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin{ 27c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin ASSERT_RTNL(); 28c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin return hsr_port_exists(dev) ? 29c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin rtnl_dereference(dev->rx_handler_data) : NULL; 30c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin} 31c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin 32c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodinstatic inline struct hsr_port *hsr_port_get_rcu(const struct net_device *dev) 33c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin{ 34c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin return hsr_port_exists(dev) ? 35c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin rcu_dereference(dev->rx_handler_data) : NULL; 36c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin} 37c5a7591172100269e426cf630da0f2dc8138a206Arvid Brodin 3881ba6afd6e6443d2bf4bf40f16df1f1f91c603f8Arvid Brodin#endif /* __HSR_SLAVE_H */ 39