forked from luck/tmp_suning_uos_patched
batman-adv: Distributed ARP Table - add runtime switch
This patch adds a runtime switch that enables the user to turn the DAT feature on or off at runtime Signed-off-by: Antonio Quartulli <ordex@autistici.org>
This commit is contained in:
parent
1722447482
commit
33af49ad8a
|
@ -621,6 +621,9 @@ static bool batadv_dat_send_data(struct batadv_priv *bat_priv,
|
|||
*/
|
||||
static void batadv_dat_hash_free(struct batadv_priv *bat_priv)
|
||||
{
|
||||
if (!bat_priv->dat.hash)
|
||||
return;
|
||||
|
||||
__batadv_dat_purge(bat_priv, NULL);
|
||||
|
||||
batadv_hash_destroy(bat_priv->dat.hash);
|
||||
|
@ -790,6 +793,9 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
|
|||
struct sk_buff *skb_new;
|
||||
struct batadv_hard_iface *primary_if = NULL;
|
||||
|
||||
if (!atomic_read(&bat_priv->distributed_arp_table))
|
||||
goto out;
|
||||
|
||||
type = batadv_arp_get_type(bat_priv, skb, 0);
|
||||
/* If the node gets an ARP_REQUEST it has to send a DHT_GET unicast
|
||||
* message to the selected DHT candidates
|
||||
|
@ -861,6 +867,9 @@ bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv,
|
|||
bool ret = false;
|
||||
int err;
|
||||
|
||||
if (!atomic_read(&bat_priv->distributed_arp_table))
|
||||
goto out;
|
||||
|
||||
type = batadv_arp_get_type(bat_priv, skb, hdr_size);
|
||||
if (type != ARPOP_REQUEST)
|
||||
goto out;
|
||||
|
@ -924,6 +933,9 @@ void batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv,
|
|||
__be32 ip_src, ip_dst;
|
||||
uint8_t *hw_src, *hw_dst;
|
||||
|
||||
if (!atomic_read(&bat_priv->distributed_arp_table))
|
||||
return;
|
||||
|
||||
type = batadv_arp_get_type(bat_priv, skb, 0);
|
||||
if (type != ARPOP_REPLY)
|
||||
return;
|
||||
|
@ -959,6 +971,9 @@ bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv,
|
|||
uint8_t *hw_src, *hw_dst;
|
||||
bool ret = false;
|
||||
|
||||
if (!atomic_read(&bat_priv->distributed_arp_table))
|
||||
goto out;
|
||||
|
||||
type = batadv_arp_get_type(bat_priv, skb, hdr_size);
|
||||
if (type != ARPOP_REPLY)
|
||||
goto out;
|
||||
|
@ -1003,6 +1018,9 @@ bool batadv_dat_drop_broadcast_packet(struct batadv_priv *bat_priv,
|
|||
bool ret = false;
|
||||
const size_t bcast_len = sizeof(struct batadv_bcast_packet);
|
||||
|
||||
if (!atomic_read(&bat_priv->distributed_arp_table))
|
||||
goto out;
|
||||
|
||||
/* If this packet is an ARP_REQUEST and the node already has the
|
||||
* information that it is going to ask, then the packet can be dropped
|
||||
*/
|
||||
|
|
|
@ -480,6 +480,9 @@ struct net_device *batadv_softif_create(const char *name)
|
|||
atomic_set(&bat_priv->aggregated_ogms, 1);
|
||||
atomic_set(&bat_priv->bonding, 0);
|
||||
atomic_set(&bat_priv->bridge_loop_avoidance, 0);
|
||||
#ifdef CONFIG_BATMAN_ADV_DAT
|
||||
atomic_set(&bat_priv->distributed_arp_table, 1);
|
||||
#endif
|
||||
atomic_set(&bat_priv->ap_isolation, 0);
|
||||
atomic_set(&bat_priv->vis_mode, BATADV_VIS_TYPE_CLIENT_UPDATE);
|
||||
atomic_set(&bat_priv->gw_mode, BATADV_GW_MODE_OFF);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "main.h"
|
||||
#include "sysfs.h"
|
||||
#include "translation-table.h"
|
||||
#include "distributed-arp-table.h"
|
||||
#include "originator.h"
|
||||
#include "hard-interface.h"
|
||||
#include "gateway_common.h"
|
||||
|
@ -420,6 +421,9 @@ BATADV_ATTR_SIF_BOOL(bonding, S_IRUGO | S_IWUSR, NULL);
|
|||
#ifdef CONFIG_BATMAN_ADV_BLA
|
||||
BATADV_ATTR_SIF_BOOL(bridge_loop_avoidance, S_IRUGO | S_IWUSR, NULL);
|
||||
#endif
|
||||
#ifdef CONFIG_BATMAN_ADV_DAT
|
||||
BATADV_ATTR_SIF_BOOL(distributed_arp_table, S_IRUGO | S_IWUSR, NULL);
|
||||
#endif
|
||||
BATADV_ATTR_SIF_BOOL(fragmentation, S_IRUGO | S_IWUSR, batadv_update_min_mtu);
|
||||
BATADV_ATTR_SIF_BOOL(ap_isolation, S_IRUGO | S_IWUSR, NULL);
|
||||
static BATADV_ATTR(vis_mode, S_IRUGO | S_IWUSR, batadv_show_vis_mode,
|
||||
|
@ -444,6 +448,9 @@ static struct batadv_attribute *batadv_mesh_attrs[] = {
|
|||
&batadv_attr_bonding,
|
||||
#ifdef CONFIG_BATMAN_ADV_BLA
|
||||
&batadv_attr_bridge_loop_avoidance,
|
||||
#endif
|
||||
#ifdef CONFIG_BATMAN_ADV_DAT
|
||||
&batadv_attr_distributed_arp_table,
|
||||
#endif
|
||||
&batadv_attr_fragmentation,
|
||||
&batadv_attr_ap_isolation,
|
||||
|
|
|
@ -275,6 +275,9 @@ struct batadv_priv {
|
|||
atomic_t fragmentation; /* boolean */
|
||||
atomic_t ap_isolation; /* boolean */
|
||||
atomic_t bridge_loop_avoidance; /* boolean */
|
||||
#ifdef CONFIG_BATMAN_ADV_DAT
|
||||
atomic_t distributed_arp_table; /* boolean */
|
||||
#endif
|
||||
atomic_t vis_mode; /* VIS_TYPE_* */
|
||||
atomic_t gw_mode; /* GW_MODE_* */
|
||||
atomic_t gw_sel_class; /* uint */
|
||||
|
|
Loading…
Reference in New Issue
Block a user