multicast.h (2909B)
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 */ 18enum 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 44enum batadv_forw_mode 45batadv_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 49int 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 54int batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb, 55 unsigned short vid, int is_routable); 56 57void batadv_mcast_init(struct batadv_priv *bat_priv); 58 59int batadv_mcast_mesh_info_put(struct sk_buff *msg, 60 struct batadv_priv *bat_priv); 61 62int batadv_mcast_flags_dump(struct sk_buff *msg, struct netlink_callback *cb); 63 64void batadv_mcast_free(struct batadv_priv *bat_priv); 65 66void batadv_mcast_purge_orig(struct batadv_orig_node *orig_node); 67 68#else 69 70static inline enum batadv_forw_mode 71batadv_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 78static inline int 79batadv_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 88static inline int 89batadv_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 96static inline int batadv_mcast_init(struct batadv_priv *bat_priv) 97{ 98 return 0; 99} 100 101static inline int 102batadv_mcast_mesh_info_put(struct sk_buff *msg, struct batadv_priv *bat_priv) 103{ 104 return 0; 105} 106 107static inline int batadv_mcast_flags_dump(struct sk_buff *msg, 108 struct netlink_callback *cb) 109{ 110 return -EOPNOTSUPP; 111} 112 113static inline void batadv_mcast_free(struct batadv_priv *bat_priv) 114{ 115} 116 117static 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_ */