1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright (C) 2014-2019 B.A.T.M.A.N. contributors: 3 * 4 * Linus Lüssing 5 */ 6 7 #ifndef _NET_BATMAN_ADV_MULTICAST_H_ 8 #define _NET_BATMAN_ADV_MULTICAST_H_ 9 10 #include "main.h" 11 12 #include <linux/netlink.h> 13 #include <linux/seq_file.h> 14 #include <linux/skbuff.h> 15 16 /** 17 * enum batadv_forw_mode - the way a packet should be forwarded as 18 */ 19 enum batadv_forw_mode { 20 /** 21 * @BATADV_FORW_ALL: forward the packet to all nodes (currently via 22 * classic flooding) 23 */ 24 BATADV_FORW_ALL, 25 26 /** 27 * @BATADV_FORW_SOME: forward the packet to some nodes (currently via 28 * a multicast-to-unicast conversion and the BATMAN unicast routing 29 * protocol) 30 */ 31 BATADV_FORW_SOME, 32 33 /** 34 * @BATADV_FORW_SINGLE: forward the packet to a single node (currently 35 * via the BATMAN unicast routing protocol) 36 */ 37 BATADV_FORW_SINGLE, 38 39 /** @BATADV_FORW_NONE: don't forward, drop it */ 40 BATADV_FORW_NONE, 41 }; 42 43 #ifdef CONFIG_BATMAN_ADV_MCAST 44 45 enum batadv_forw_mode 46 batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb, 47 struct batadv_orig_node **mcast_single_orig); 48 49 int batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb, 50 unsigned short vid); 51 52 void batadv_mcast_init(struct batadv_priv *bat_priv); 53 54 int batadv_mcast_flags_seq_print_text(struct seq_file *seq, void *offset); 55 56 int batadv_mcast_mesh_info_put(struct sk_buff *msg, 57 struct batadv_priv *bat_priv); 58 59 int batadv_mcast_flags_dump(struct sk_buff *msg, struct netlink_callback *cb); 60 61 void batadv_mcast_free(struct batadv_priv *bat_priv); 62 63 void batadv_mcast_purge_orig(struct batadv_orig_node *orig_node); 64 65 #else 66 67 static inline enum batadv_forw_mode 68 batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb, 69 struct batadv_orig_node **mcast_single_orig) 70 { 71 return BATADV_FORW_ALL; 72 } 73 74 static inline int 75 batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb, 76 unsigned short vid) 77 { 78 kfree_skb(skb); 79 return NET_XMIT_DROP; 80 } 81 82 static inline int batadv_mcast_init(struct batadv_priv *bat_priv) 83 { 84 return 0; 85 } 86 87 static inline int 88 batadv_mcast_mesh_info_put(struct sk_buff *msg, struct batadv_priv *bat_priv) 89 { 90 return 0; 91 } 92 93 static inline int batadv_mcast_flags_dump(struct sk_buff *msg, 94 struct netlink_callback *cb) 95 { 96 return -EOPNOTSUPP; 97 } 98 99 static inline void batadv_mcast_free(struct batadv_priv *bat_priv) 100 { 101 } 102 103 static inline void batadv_mcast_purge_orig(struct batadv_orig_node *orig_node) 104 { 105 } 106 107 #endif /* CONFIG_BATMAN_ADV_MCAST */ 108 109 #endif /* _NET_BATMAN_ADV_MULTICAST_H_ */ 110