xref: /linux/net/batman-adv/mesh-interface.h (revision 1a9239bb4253f9076b5b4b2a1a4e8d7defd77a95)
1*94433355SSven Eckelmann /* SPDX-License-Identifier: GPL-2.0 */
2*94433355SSven Eckelmann /* Copyright (C) B.A.T.M.A.N. contributors:
3*94433355SSven Eckelmann  *
4*94433355SSven Eckelmann  * Marek Lindner
5*94433355SSven Eckelmann  */
6*94433355SSven Eckelmann 
7*94433355SSven Eckelmann #ifndef _NET_BATMAN_ADV_MESH_INTERFACE_H_
8*94433355SSven Eckelmann #define _NET_BATMAN_ADV_MESH_INTERFACE_H_
9*94433355SSven Eckelmann 
10*94433355SSven Eckelmann #include "main.h"
11*94433355SSven Eckelmann 
12*94433355SSven Eckelmann #include <linux/kref.h>
13*94433355SSven Eckelmann #include <linux/netdevice.h>
14*94433355SSven Eckelmann #include <linux/skbuff.h>
15*94433355SSven Eckelmann #include <linux/types.h>
16*94433355SSven Eckelmann #include <net/rtnetlink.h>
17*94433355SSven Eckelmann 
18*94433355SSven Eckelmann int batadv_skb_head_push(struct sk_buff *skb, unsigned int len);
19*94433355SSven Eckelmann void batadv_interface_rx(struct net_device *mesh_iface,
20*94433355SSven Eckelmann 			 struct sk_buff *skb, int hdr_size,
21*94433355SSven Eckelmann 			 struct batadv_orig_node *orig_node);
22*94433355SSven Eckelmann bool batadv_meshif_is_valid(const struct net_device *net_dev);
23*94433355SSven Eckelmann extern struct rtnl_link_ops batadv_link_ops;
24*94433355SSven Eckelmann int batadv_meshif_create_vlan(struct batadv_priv *bat_priv, unsigned short vid);
25*94433355SSven Eckelmann void batadv_meshif_vlan_release(struct kref *ref);
26*94433355SSven Eckelmann struct batadv_meshif_vlan *batadv_meshif_vlan_get(struct batadv_priv *bat_priv,
27*94433355SSven Eckelmann 						  unsigned short vid);
28*94433355SSven Eckelmann 
29*94433355SSven Eckelmann /**
30*94433355SSven Eckelmann  * batadv_meshif_vlan_put() - decrease the vlan object refcounter and
31*94433355SSven Eckelmann  *  possibly release it
32*94433355SSven Eckelmann  * @vlan: the vlan object to release
33*94433355SSven Eckelmann  */
batadv_meshif_vlan_put(struct batadv_meshif_vlan * vlan)34*94433355SSven Eckelmann static inline void batadv_meshif_vlan_put(struct batadv_meshif_vlan *vlan)
35*94433355SSven Eckelmann {
36*94433355SSven Eckelmann 	if (!vlan)
37*94433355SSven Eckelmann 		return;
38*94433355SSven Eckelmann 
39*94433355SSven Eckelmann 	kref_put(&vlan->refcount, batadv_meshif_vlan_release);
40*94433355SSven Eckelmann }
41*94433355SSven Eckelmann 
42*94433355SSven Eckelmann #endif /* _NET_BATMAN_ADV_MESH_INTERFACE_H_ */
43