e7d6127b89
The multicast code to send a multicast packet via multiple batman-adv unicast packets is not only capable of sending to multiple but also to a single node. Therefore we can safely remove the old, specialized, now redundant multicast-to-single-unicast code. The only functional change of this simplification is that the edge case of allowing a multicast packet with an unsnoopable destination address (224.0.0.0/24 or ff02::1) where only a single node has signaled interest in it via the batman-adv want-all-unsnoopables multicast flag is now transmitted via a batman-adv broadcast instead of a batman-adv unicast packet. Maintaining this edge case feature does not seem worth the extra lines of code and people should just not expect to be able to snoop and optimize such unsnoopable multicast addresses when bridges are involved. While at it also renaming a few items in the batadv_forw_mode enum to prepare for the new batman-adv multicast packet type. Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue> Signed-off-by: Sven Eckelmann <sven@narfation.org> Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
100 lines
2.2 KiB
C
100 lines
2.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright (C) B.A.T.M.A.N. contributors:
|
|
*
|
|
* Linus Lüssing
|
|
*/
|
|
|
|
#ifndef _NET_BATMAN_ADV_MULTICAST_H_
|
|
#define _NET_BATMAN_ADV_MULTICAST_H_
|
|
|
|
#include "main.h"
|
|
|
|
#include <linux/netlink.h>
|
|
#include <linux/skbuff.h>
|
|
|
|
/**
|
|
* enum batadv_forw_mode - the way a packet should be forwarded as
|
|
*/
|
|
enum batadv_forw_mode {
|
|
/**
|
|
* @BATADV_FORW_BCAST: forward the packet to all nodes via a batman-adv
|
|
* broadcast packet
|
|
*/
|
|
BATADV_FORW_BCAST,
|
|
|
|
/**
|
|
* @BATADV_FORW_UCASTS: forward the packet to some nodes via one
|
|
* or more batman-adv unicast packets
|
|
*/
|
|
BATADV_FORW_UCASTS,
|
|
|
|
/** @BATADV_FORW_NONE: don't forward, drop it */
|
|
BATADV_FORW_NONE,
|
|
};
|
|
|
|
#ifdef CONFIG_BATMAN_ADV_MCAST
|
|
|
|
enum batadv_forw_mode
|
|
batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb,
|
|
int *is_routable);
|
|
|
|
int batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb,
|
|
unsigned short vid, int is_routable);
|
|
|
|
void batadv_mcast_init(struct batadv_priv *bat_priv);
|
|
|
|
int batadv_mcast_mesh_info_put(struct sk_buff *msg,
|
|
struct batadv_priv *bat_priv);
|
|
|
|
int batadv_mcast_flags_dump(struct sk_buff *msg, struct netlink_callback *cb);
|
|
|
|
void batadv_mcast_free(struct batadv_priv *bat_priv);
|
|
|
|
void batadv_mcast_purge_orig(struct batadv_orig_node *orig_node);
|
|
|
|
#else
|
|
|
|
static inline enum batadv_forw_mode
|
|
batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb,
|
|
int *is_routable)
|
|
{
|
|
return BATADV_FORW_BCAST;
|
|
}
|
|
|
|
static inline int
|
|
batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb,
|
|
unsigned short vid, int is_routable)
|
|
{
|
|
kfree_skb(skb);
|
|
return NET_XMIT_DROP;
|
|
}
|
|
|
|
static inline int batadv_mcast_init(struct batadv_priv *bat_priv)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int
|
|
batadv_mcast_mesh_info_put(struct sk_buff *msg, struct batadv_priv *bat_priv)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int batadv_mcast_flags_dump(struct sk_buff *msg,
|
|
struct netlink_callback *cb)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline void batadv_mcast_free(struct batadv_priv *bat_priv)
|
|
{
|
|
}
|
|
|
|
static inline void batadv_mcast_purge_orig(struct batadv_orig_node *orig_node)
|
|
{
|
|
}
|
|
|
|
#endif /* CONFIG_BATMAN_ADV_MCAST */
|
|
|
|
#endif /* _NET_BATMAN_ADV_MULTICAST_H_ */
|