multicast.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /* Copyright (C) B.A.T.M.A.N. contributors:
  3. *
  4. * Linus Lüssing
  5. */
  6. #ifndef _NET_BATMAN_ADV_MULTICAST_H_
  7. #define _NET_BATMAN_ADV_MULTICAST_H_
  8. #include "main.h"
  9. #include <linux/netlink.h>
  10. #include <linux/skbuff.h>
  11. #include <linux/types.h>
  12. /**
  13. * enum batadv_forw_mode - the way a packet should be forwarded as
  14. */
  15. enum batadv_forw_mode {
  16. /**
  17. * @BATADV_FORW_BCAST: forward the packet to all nodes via a batman-adv
  18. * broadcast packet
  19. */
  20. BATADV_FORW_BCAST,
  21. /**
  22. * @BATADV_FORW_UCASTS: forward the packet to some nodes via one
  23. * or more batman-adv unicast packets
  24. */
  25. BATADV_FORW_UCASTS,
  26. /**
  27. * @BATADV_FORW_MCAST: forward the packet to some nodes via a
  28. * batman-adv multicast packet
  29. */
  30. BATADV_FORW_MCAST,
  31. /** @BATADV_FORW_NONE: don't forward, drop it */
  32. BATADV_FORW_NONE,
  33. };
  34. #ifdef CONFIG_BATMAN_ADV_MCAST
  35. enum batadv_forw_mode
  36. batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb,
  37. unsigned short vid, int *is_routable);
  38. int batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb,
  39. unsigned short vid, int is_routable);
  40. void batadv_mcast_init(struct batadv_priv *bat_priv);
  41. int batadv_mcast_mesh_info_put(struct sk_buff *msg,
  42. struct batadv_priv *bat_priv);
  43. int batadv_mcast_flags_dump(struct sk_buff *msg, struct netlink_callback *cb);
  44. void batadv_mcast_free(struct batadv_priv *bat_priv);
  45. void batadv_mcast_purge_orig(struct batadv_orig_node *orig_node);
  46. /* multicast_forw.c */
  47. int batadv_mcast_forw_tracker_tvlv_handler(struct batadv_priv *bat_priv,
  48. struct sk_buff *skb);
  49. unsigned int batadv_mcast_forw_packet_hdrlen(unsigned int num_dests);
  50. bool batadv_mcast_forw_push(struct batadv_priv *bat_priv, struct sk_buff *skb,
  51. unsigned short vid, int is_routable, int count);
  52. int batadv_mcast_forw_mcsend(struct batadv_priv *bat_priv, struct sk_buff *skb);
  53. #else
  54. static inline enum batadv_forw_mode
  55. batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb,
  56. unsigned short vid, int *is_routable)
  57. {
  58. return BATADV_FORW_BCAST;
  59. }
  60. static inline int
  61. batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb,
  62. unsigned short vid, int is_routable)
  63. {
  64. kfree_skb(skb);
  65. return NET_XMIT_DROP;
  66. }
  67. static inline int batadv_mcast_init(struct batadv_priv *bat_priv)
  68. {
  69. return 0;
  70. }
  71. static inline int
  72. batadv_mcast_mesh_info_put(struct sk_buff *msg, struct batadv_priv *bat_priv)
  73. {
  74. return 0;
  75. }
  76. static inline int batadv_mcast_flags_dump(struct sk_buff *msg,
  77. struct netlink_callback *cb)
  78. {
  79. return -EOPNOTSUPP;
  80. }
  81. static inline void batadv_mcast_free(struct batadv_priv *bat_priv)
  82. {
  83. }
  84. static inline void batadv_mcast_purge_orig(struct batadv_orig_node *orig_node)
  85. {
  86. }
  87. static inline int batadv_mcast_forw_mcsend(struct batadv_priv *bat_priv,
  88. struct sk_buff *skb)
  89. {
  90. kfree_skb(skb);
  91. return NET_XMIT_DROP;
  92. }
  93. #endif /* CONFIG_BATMAN_ADV_MCAST */
  94. #endif /* _NET_BATMAN_ADV_MULTICAST_H_ */