xref: /openbmc/linux/net/batman-adv/multicast.h (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
17db7d9f3SSven Eckelmann /* SPDX-License-Identifier: GPL-2.0 */
2cfa55c6dSSven Eckelmann /* Copyright (C) B.A.T.M.A.N. contributors:
3c5caf4efSLinus Lüssing  *
4c5caf4efSLinus Lüssing  * Linus Lüssing
5c5caf4efSLinus Lüssing  */
6c5caf4efSLinus Lüssing 
7c5caf4efSLinus Lüssing #ifndef _NET_BATMAN_ADV_MULTICAST_H_
8c5caf4efSLinus Lüssing #define _NET_BATMAN_ADV_MULTICAST_H_
9c5caf4efSLinus Lüssing 
101e2c2a4fSSven Eckelmann #include "main.h"
111e2c2a4fSSven Eckelmann 
1268a600deSSven Eckelmann #include <linux/netlink.h>
1368a600deSSven Eckelmann #include <linux/skbuff.h>
141e2c2a4fSSven Eckelmann 
151d8ab8d3SLinus Lüssing /**
166f68b002SSven Eckelmann  * enum batadv_forw_mode - the way a packet should be forwarded as
171d8ab8d3SLinus Lüssing  */
181d8ab8d3SLinus Lüssing enum batadv_forw_mode {
198b84cc4fSSven Eckelmann 	/**
20*e7d6127bSLinus Lüssing 	 * @BATADV_FORW_BCAST: forward the packet to all nodes via a batman-adv
21*e7d6127bSLinus Lüssing 	 *  broadcast packet
228b84cc4fSSven Eckelmann 	 */
23*e7d6127bSLinus Lüssing 	BATADV_FORW_BCAST,
248b84cc4fSSven Eckelmann 
258b84cc4fSSven Eckelmann 	/**
26*e7d6127bSLinus Lüssing 	 * @BATADV_FORW_UCASTS: forward the packet to some nodes via one
27*e7d6127bSLinus Lüssing 	 *  or more batman-adv unicast packets
2832e72744SLinus Lüssing 	 */
29*e7d6127bSLinus Lüssing 	BATADV_FORW_UCASTS,
308b84cc4fSSven Eckelmann 
318b84cc4fSSven Eckelmann 	/** @BATADV_FORW_NONE: don't forward, drop it */
321d8ab8d3SLinus Lüssing 	BATADV_FORW_NONE,
331d8ab8d3SLinus Lüssing };
341d8ab8d3SLinus Lüssing 
35c5caf4efSLinus Lüssing #ifdef CONFIG_BATMAN_ADV_MCAST
36c5caf4efSLinus Lüssing 
371d8ab8d3SLinus Lüssing enum batadv_forw_mode
381d8ab8d3SLinus Lüssing batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb,
39938f2e0bSLinus Lüssing 		       int *is_routable);
401d8ab8d3SLinus Lüssing 
4132e72744SLinus Lüssing int batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb,
42938f2e0bSLinus Lüssing 			   unsigned short vid, int is_routable);
4332e72744SLinus Lüssing 
4460432d75SLinus Lüssing void batadv_mcast_init(struct batadv_priv *bat_priv);
4560432d75SLinus Lüssing 
4653dd9a68SLinus Lüssing int batadv_mcast_mesh_info_put(struct sk_buff *msg,
4753dd9a68SLinus Lüssing 			       struct batadv_priv *bat_priv);
4853dd9a68SLinus Lüssing 
4953dd9a68SLinus Lüssing int batadv_mcast_flags_dump(struct sk_buff *msg, struct netlink_callback *cb);
5053dd9a68SLinus Lüssing 
51c5caf4efSLinus Lüssing void batadv_mcast_free(struct batadv_priv *bat_priv);
52c5caf4efSLinus Lüssing 
5360432d75SLinus Lüssing void batadv_mcast_purge_orig(struct batadv_orig_node *orig_node);
5460432d75SLinus Lüssing 
55c5caf4efSLinus Lüssing #else
56c5caf4efSLinus Lüssing 
571d8ab8d3SLinus Lüssing static inline enum batadv_forw_mode
batadv_mcast_forw_mode(struct batadv_priv * bat_priv,struct sk_buff * skb,int * is_routable)581d8ab8d3SLinus Lüssing batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb,
59938f2e0bSLinus Lüssing 		       int *is_routable)
601d8ab8d3SLinus Lüssing {
61*e7d6127bSLinus Lüssing 	return BATADV_FORW_BCAST;
623236d215SLinus Lüssing }
633236d215SLinus Lüssing 
643236d215SLinus Lüssing static inline int
batadv_mcast_forw_send(struct batadv_priv * bat_priv,struct sk_buff * skb,unsigned short vid,int is_routable)6532e72744SLinus Lüssing batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb,
66938f2e0bSLinus Lüssing 		       unsigned short vid, int is_routable)
6732e72744SLinus Lüssing {
6832e72744SLinus Lüssing 	kfree_skb(skb);
6932e72744SLinus Lüssing 	return NET_XMIT_DROP;
7032e72744SLinus Lüssing }
7132e72744SLinus Lüssing 
batadv_mcast_init(struct batadv_priv * bat_priv)7260432d75SLinus Lüssing static inline int batadv_mcast_init(struct batadv_priv *bat_priv)
7360432d75SLinus Lüssing {
7460432d75SLinus Lüssing 	return 0;
7560432d75SLinus Lüssing }
7660432d75SLinus Lüssing 
7753dd9a68SLinus Lüssing static inline int
batadv_mcast_mesh_info_put(struct sk_buff * msg,struct batadv_priv * bat_priv)7853dd9a68SLinus Lüssing batadv_mcast_mesh_info_put(struct sk_buff *msg, struct batadv_priv *bat_priv)
7953dd9a68SLinus Lüssing {
8053dd9a68SLinus Lüssing 	return 0;
8153dd9a68SLinus Lüssing }
8253dd9a68SLinus Lüssing 
batadv_mcast_flags_dump(struct sk_buff * msg,struct netlink_callback * cb)8353dd9a68SLinus Lüssing static inline int batadv_mcast_flags_dump(struct sk_buff *msg,
8453dd9a68SLinus Lüssing 					  struct netlink_callback *cb)
8553dd9a68SLinus Lüssing {
8653dd9a68SLinus Lüssing 	return -EOPNOTSUPP;
8753dd9a68SLinus Lüssing }
8853dd9a68SLinus Lüssing 
batadv_mcast_free(struct batadv_priv * bat_priv)89c5caf4efSLinus Lüssing static inline void batadv_mcast_free(struct batadv_priv *bat_priv)
90c5caf4efSLinus Lüssing {
91c5caf4efSLinus Lüssing }
92c5caf4efSLinus Lüssing 
batadv_mcast_purge_orig(struct batadv_orig_node * orig_node)9360432d75SLinus Lüssing static inline void batadv_mcast_purge_orig(struct batadv_orig_node *orig_node)
9460432d75SLinus Lüssing {
9560432d75SLinus Lüssing }
9660432d75SLinus Lüssing 
97c5caf4efSLinus Lüssing #endif /* CONFIG_BATMAN_ADV_MCAST */
98c5caf4efSLinus Lüssing 
99c5caf4efSLinus Lüssing #endif /* _NET_BATMAN_ADV_MULTICAST_H_ */
100