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