xref: /openbmc/linux/net/batman-adv/soft-interface.h (revision 762f99f4f3cb41a775b5157dd761217beba65873)
17db7d9f3SSven Eckelmann /* SPDX-License-Identifier: GPL-2.0 */
2cfa55c6dSSven Eckelmann /* Copyright (C) B.A.T.M.A.N. contributors:
3c6c8fea2SSven Eckelmann  *
4c6c8fea2SSven Eckelmann  * Marek Lindner
5c6c8fea2SSven Eckelmann  */
6c6c8fea2SSven Eckelmann 
7c6c8fea2SSven Eckelmann #ifndef _NET_BATMAN_ADV_SOFT_INTERFACE_H_
8c6c8fea2SSven Eckelmann #define _NET_BATMAN_ADV_SOFT_INTERFACE_H_
9c6c8fea2SSven Eckelmann 
101e2c2a4fSSven Eckelmann #include "main.h"
111e2c2a4fSSven Eckelmann 
12*6340dcbdSSven Eckelmann #include <linux/kref.h>
1368a600deSSven Eckelmann #include <linux/netdevice.h>
1468a600deSSven Eckelmann #include <linux/skbuff.h>
154b426b10SSven Eckelmann #include <linux/types.h>
161e2c2a4fSSven Eckelmann #include <net/rtnetlink.h>
171e2c2a4fSSven Eckelmann 
1804b482a2SSven Eckelmann int batadv_skb_head_push(struct sk_buff *skb, unsigned int len);
1937135173SAntonio Quartulli void batadv_interface_rx(struct net_device *soft_iface,
206535db56SSven Eckelmann 			 struct sk_buff *skb, int hdr_size,
216535db56SSven Eckelmann 			 struct batadv_orig_node *orig_node);
224b426b10SSven Eckelmann bool batadv_softif_is_valid(const struct net_device *net_dev);
23a4ac28c0SSven Eckelmann extern struct rtnl_link_ops batadv_link_ops;
245d2c05b2SAntonio Quartulli int batadv_softif_create_vlan(struct batadv_priv *bat_priv, unsigned short vid);
25*6340dcbdSSven Eckelmann void batadv_softif_vlan_release(struct kref *ref);
2690f4435dSAntonio Quartulli struct batadv_softif_vlan *batadv_softif_vlan_get(struct batadv_priv *bat_priv,
2790f4435dSAntonio Quartulli 						  unsigned short vid);
28c6c8fea2SSven Eckelmann 
29*6340dcbdSSven Eckelmann /**
30*6340dcbdSSven Eckelmann  * batadv_softif_vlan_put() - decrease the vlan object refcounter and
31*6340dcbdSSven Eckelmann  *  possibly release it
32*6340dcbdSSven Eckelmann  * @vlan: the vlan object to release
33*6340dcbdSSven Eckelmann  */
batadv_softif_vlan_put(struct batadv_softif_vlan * vlan)34*6340dcbdSSven Eckelmann static inline void batadv_softif_vlan_put(struct batadv_softif_vlan *vlan)
35*6340dcbdSSven Eckelmann {
36*6340dcbdSSven Eckelmann 	if (!vlan)
37*6340dcbdSSven Eckelmann 		return;
38*6340dcbdSSven Eckelmann 
39*6340dcbdSSven Eckelmann 	kref_put(&vlan->refcount, batadv_softif_vlan_release);
40*6340dcbdSSven Eckelmann }
41*6340dcbdSSven Eckelmann 
42c6c8fea2SSven Eckelmann #endif /* _NET_BATMAN_ADV_SOFT_INTERFACE_H_ */
43