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