1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright (C) 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/skbuff.h> 14 15 /** 16 * enum batadv_forw_mode - the way a packet should be forwarded as 17 */ 18 enum batadv_forw_mode { 19 /** 20 * @BATADV_FORW_ALL: forward the packet to all nodes (currently via 21 * classic flooding) 22 */ 23 BATADV_FORW_ALL, 24 25 /** 26 * @BATADV_FORW_SOME: forward the packet to some nodes (currently via 27 * a multicast-to-unicast conversion and the BATMAN unicast routing 28 * protocol) 29 */ 30 BATADV_FORW_SOME, 31 32 /** 33 * @BATADV_FORW_SINGLE: forward the packet to a single node (currently 34 * via the BATMAN unicast routing protocol) 35 */ 36 BATADV_FORW_SINGLE, 37 38 /** @BATADV_FORW_NONE: don't forward, drop it */ 39 BATADV_FORW_NONE, 40 }; 41 42 #ifdef CONFIG_BATMAN_ADV_MCAST 43 44 enum batadv_forw_mode 45 batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb, 46 struct batadv_orig_node **mcast_single_orig, 47 int *is_routable); 48 49 int batadv_mcast_forw_send_orig(struct batadv_priv *bat_priv, 50 struct sk_buff *skb, 51 unsigned short vid, 52 struct batadv_orig_node *orig_node); 53 54 int batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb, 55 unsigned short vid, int is_routable); 56 57 void batadv_mcast_init(struct batadv_priv *bat_priv); 58 59 int batadv_mcast_mesh_info_put(struct sk_buff *msg, 60 struct batadv_priv *bat_priv); 61 62 int batadv_mcast_flags_dump(struct sk_buff *msg, struct netlink_callback *cb); 63 64 void batadv_mcast_free(struct batadv_priv *bat_priv); 65 66 void batadv_mcast_purge_orig(struct batadv_orig_node *orig_node); 67 68 #else 69 70 static inline enum batadv_forw_mode 71 batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb, 72 struct batadv_orig_node **mcast_single_orig, 73 int *is_routable) 74 { 75 return BATADV_FORW_ALL; 76 } 77 78 static inline int 79 batadv_mcast_forw_send_orig(struct batadv_priv *bat_priv, 80 struct sk_buff *skb, 81 unsigned short vid, 82 struct batadv_orig_node *orig_node) 83 { 84 kfree_skb(skb); 85 return NET_XMIT_DROP; 86 } 87 88 static inline int 89 batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb, 90 unsigned short vid, int is_routable) 91 { 92 kfree_skb(skb); 93 return NET_XMIT_DROP; 94 } 95 96 static inline int batadv_mcast_init(struct batadv_priv *bat_priv) 97 { 98 return 0; 99 } 100 101 static inline int 102 batadv_mcast_mesh_info_put(struct sk_buff *msg, struct batadv_priv *bat_priv) 103 { 104 return 0; 105 } 106 107 static inline int batadv_mcast_flags_dump(struct sk_buff *msg, 108 struct netlink_callback *cb) 109 { 110 return -EOPNOTSUPP; 111 } 112 113 static inline void batadv_mcast_free(struct batadv_priv *bat_priv) 114 { 115 } 116 117 static inline void batadv_mcast_purge_orig(struct batadv_orig_node *orig_node) 118 { 119 } 120 121 #endif /* CONFIG_BATMAN_ADV_MCAST */ 122 123 #endif /* _NET_BATMAN_ADV_MULTICAST_H_ */ 124