Loading net/batman-adv/distributed-arp-table.c +18 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 */ Loading net/batman-adv/soft-interface.c +3 −0 Original line number Diff line number Diff line Loading @@ -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); Loading net/batman-adv/sysfs.c +7 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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, Loading @@ -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, Loading net/batman-adv/types.h +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
net/batman-adv/distributed-arp-table.c +18 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 */ Loading
net/batman-adv/soft-interface.c +3 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
net/batman-adv/sysfs.c +7 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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, Loading @@ -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, Loading
net/batman-adv/types.h +3 −0 Original line number Diff line number Diff line Loading @@ -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