Commit c9c99311 authored by David S. Miller's avatar David S. Miller

Merge tag 'batman-adv-for-davem' of git://git.open-mesh.org/linux-merge

Antonio Quartulli says:

====================
Included changes:
- increase internal module version
- increase BLA wait periods to 6
- purge BLA backbone table when it is disabled
- make sure post function is invoked only if sysfs value is changed
- simplify code by removing useless NULL checks
- various corrections to existing kerneldoc
- minor cleanups
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 12f1501e ed21d170
...@@ -115,14 +115,17 @@ The "bat0" interface can be used like any other regular inter- ...@@ -115,14 +115,17 @@ The "bat0" interface can be used like any other regular inter-
face. It needs an IP address which can be either statically con- face. It needs an IP address which can be either statically con-
figured or dynamically (by using DHCP or similar services): figured or dynamically (by using DHCP or similar services):
# NodeA: ifconfig bat0 192.168.0.1 # NodeA: ip link set up dev bat0
# NodeB: ifconfig bat0 192.168.0.2 # NodeA: ip addr add 192.168.0.1/24 dev bat0
# NodeB: ip link set up dev bat0
# NodeB: ip addr add 192.168.0.2/24 dev bat0
# NodeB: ping 192.168.0.1 # NodeB: ping 192.168.0.1
Note: In order to avoid problems remove all IP addresses previ- Note: In order to avoid problems remove all IP addresses previ-
ously assigned to interfaces now used by batman advanced, e.g. ously assigned to interfaces now used by batman advanced, e.g.
# ifconfig eth0 0.0.0.0 # ip addr flush dev eth0
LOGGING/DEBUGGING LOGGING/DEBUGGING
......
...@@ -361,7 +361,6 @@ batadv_iv_ogm_primary_iface_set(struct batadv_hard_iface *hard_iface) ...@@ -361,7 +361,6 @@ batadv_iv_ogm_primary_iface_set(struct batadv_hard_iface *hard_iface)
unsigned char *ogm_buff = hard_iface->bat_iv.ogm_buff; unsigned char *ogm_buff = hard_iface->bat_iv.ogm_buff;
batadv_ogm_packet = (struct batadv_ogm_packet *)ogm_buff; batadv_ogm_packet = (struct batadv_ogm_packet *)ogm_buff;
batadv_ogm_packet->flags = BATADV_PRIMARIES_FIRST_HOP;
batadv_ogm_packet->ttl = BATADV_TTL; batadv_ogm_packet->ttl = BATADV_TTL;
} }
...@@ -842,8 +841,6 @@ static void batadv_iv_ogm_forward(struct batadv_orig_node *orig_node, ...@@ -842,8 +841,6 @@ static void batadv_iv_ogm_forward(struct batadv_orig_node *orig_node,
"Forwarding packet: tq: %i, ttl: %i\n", "Forwarding packet: tq: %i, ttl: %i\n",
batadv_ogm_packet->tq, batadv_ogm_packet->ttl); batadv_ogm_packet->tq, batadv_ogm_packet->ttl);
/* switch of primaries first hop flag when forwarding */
batadv_ogm_packet->flags &= ~BATADV_PRIMARIES_FIRST_HOP;
if (is_single_hop_neigh) if (is_single_hop_neigh)
batadv_ogm_packet->flags |= BATADV_DIRECTLINK; batadv_ogm_packet->flags |= BATADV_DIRECTLINK;
else else
......
...@@ -1168,6 +1168,26 @@ void batadv_bla_update_orig_address(struct batadv_priv *bat_priv, ...@@ -1168,6 +1168,26 @@ void batadv_bla_update_orig_address(struct batadv_priv *bat_priv,
} }
} }
/**
* batadv_bla_status_update - purge bla interfaces if necessary
* @net_dev: the soft interface net device
*/
void batadv_bla_status_update(struct net_device *net_dev)
{
struct batadv_priv *bat_priv = netdev_priv(net_dev);
struct batadv_hard_iface *primary_if;
primary_if = batadv_primary_if_get_selected(bat_priv);
if (!primary_if)
return;
/* this function already purges everything when bla is disabled,
* so just call that one.
*/
batadv_bla_update_orig_address(bat_priv, primary_if, primary_if);
batadv_hardif_free_ref(primary_if);
}
/* periodic work to do: /* periodic work to do:
* * purge structures when they are too old * * purge structures when they are too old
* * send announcements * * send announcements
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/types.h> #include <linux/types.h>
struct net_device;
struct seq_file; struct seq_file;
struct sk_buff; struct sk_buff;
...@@ -42,6 +43,7 @@ int batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv, ...@@ -42,6 +43,7 @@ int batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv,
void batadv_bla_update_orig_address(struct batadv_priv *bat_priv, void batadv_bla_update_orig_address(struct batadv_priv *bat_priv,
struct batadv_hard_iface *primary_if, struct batadv_hard_iface *primary_if,
struct batadv_hard_iface *oldif); struct batadv_hard_iface *oldif);
void batadv_bla_status_update(struct net_device *net_dev);
int batadv_bla_init(struct batadv_priv *bat_priv); int batadv_bla_init(struct batadv_priv *bat_priv);
void batadv_bla_free(struct batadv_priv *bat_priv); void batadv_bla_free(struct batadv_priv *bat_priv);
......
...@@ -31,27 +31,23 @@ ...@@ -31,27 +31,23 @@
#include "packet.h" #include "packet.h"
/** /**
* batadv_parse_gw_bandwidth - parse supplied string buffer to extract download * batadv_parse_throughput - parse supplied string buffer to extract throughput
* and upload bandwidth information * information
* @net_dev: the soft interface net device * @net_dev: the soft interface net device
* @buff: string buffer to parse * @buff: string buffer to parse
* @down: pointer holding the returned download bandwidth information * @description: text shown when throughput string cannot be parsed
* @up: pointer holding the returned upload bandwidth information * @throughput: pointer holding the returned throughput information
* *
* Returns false on parse error and true otherwise. * Returns false on parse error and true otherwise.
*/ */
static bool batadv_parse_gw_bandwidth(struct net_device *net_dev, char *buff, static bool batadv_parse_throughput(struct net_device *net_dev, char *buff,
u32 *down, u32 *up) const char *description, u32 *throughput)
{ {
enum batadv_bandwidth_units bw_unit_type = BATADV_BW_UNIT_KBIT; enum batadv_bandwidth_units bw_unit_type = BATADV_BW_UNIT_KBIT;
char *slash_ptr, *tmp_ptr; u64 lthroughput;
u64 ldown, lup; char *tmp_ptr;
int ret; int ret;
slash_ptr = strchr(buff, '/');
if (slash_ptr)
*slash_ptr = 0;
if (strlen(buff) > 4) { if (strlen(buff) > 4) {
tmp_ptr = buff + strlen(buff) - 4; tmp_ptr = buff + strlen(buff) - 4;
...@@ -63,90 +59,75 @@ static bool batadv_parse_gw_bandwidth(struct net_device *net_dev, char *buff, ...@@ -63,90 +59,75 @@ static bool batadv_parse_gw_bandwidth(struct net_device *net_dev, char *buff,
*tmp_ptr = '\0'; *tmp_ptr = '\0';
} }
ret = kstrtou64(buff, 10, &ldown); ret = kstrtou64(buff, 10, &lthroughput);
if (ret) { if (ret) {
batadv_err(net_dev, batadv_err(net_dev,
"Download speed of gateway mode invalid: %s\n", "Invalid throughput speed for %s: %s\n",
buff); description, buff);
return false; return false;
} }
switch (bw_unit_type) { switch (bw_unit_type) {
case BATADV_BW_UNIT_MBIT: case BATADV_BW_UNIT_MBIT:
/* prevent overflow */ /* prevent overflow */
if (U64_MAX / 10 < ldown) { if (U64_MAX / 10 < lthroughput) {
batadv_err(net_dev, batadv_err(net_dev,
"Download speed of gateway mode too large: %s\n", "Throughput speed for %s too large: %s\n",
buff); description, buff);
return false; return false;
} }
ldown *= 10; lthroughput *= 10;
break; break;
case BATADV_BW_UNIT_KBIT: case BATADV_BW_UNIT_KBIT:
default: default:
ldown = div_u64(ldown, 100); lthroughput = div_u64(lthroughput, 100);
break; break;
} }
if (U32_MAX < ldown) { if (lthroughput > U32_MAX) {
batadv_err(net_dev, batadv_err(net_dev,
"Download speed of gateway mode too large: %s\n", "Throughput speed for %s too large: %s\n",
buff); description, buff);
return false; return false;
} }
*down = ldown; *throughput = lthroughput;
/* we also got some upload info */
if (slash_ptr) {
bw_unit_type = BATADV_BW_UNIT_KBIT;
if (strlen(slash_ptr + 1) > 4) {
tmp_ptr = slash_ptr + 1 - 4 + strlen(slash_ptr + 1);
if (strncasecmp(tmp_ptr, "mbit", 4) == 0) return true;
bw_unit_type = BATADV_BW_UNIT_MBIT; }
if ((strncasecmp(tmp_ptr, "kbit", 4) == 0) || /**
(bw_unit_type == BATADV_BW_UNIT_MBIT)) * batadv_parse_gw_bandwidth - parse supplied string buffer to extract download
*tmp_ptr = '\0'; * and upload bandwidth information
} * @net_dev: the soft interface net device
* @buff: string buffer to parse
* @down: pointer holding the returned download bandwidth information
* @up: pointer holding the returned upload bandwidth information
*
* Return: false on parse error and true otherwise.
*/
static bool batadv_parse_gw_bandwidth(struct net_device *net_dev, char *buff,
u32 *down, u32 *up)
{
char *slash_ptr;
bool ret;
ret = kstrtou64(slash_ptr + 1, 10, &lup); slash_ptr = strchr(buff, '/');
if (ret) { if (slash_ptr)
batadv_err(net_dev, *slash_ptr = 0;
"Upload speed of gateway mode invalid: %s\n",
slash_ptr + 1);
return false;
}
switch (bw_unit_type) { ret = batadv_parse_throughput(net_dev, buff, "download gateway speed",
case BATADV_BW_UNIT_MBIT: down);
/* prevent overflow */ if (!ret)
if (U64_MAX / 10 < lup) { return false;
batadv_err(net_dev,
"Upload speed of gateway mode too large: %s\n",
slash_ptr + 1);
return false;
}
lup *= 10;
break;
case BATADV_BW_UNIT_KBIT:
default:
lup = div_u64(lup, 100);
break;
}
if (U32_MAX < lup) { /* we also got some upload info */
batadv_err(net_dev, if (slash_ptr) {
"Upload speed of gateway mode too large: %s\n", ret = batadv_parse_throughput(net_dev, slash_ptr + 1,
slash_ptr + 1); "upload gateway speed", up);
if (!ret)
return false; return false;
}
*up = lup;
} }
return true; return true;
......
...@@ -747,7 +747,7 @@ static u16 batadv_tvlv_container_list_size(struct batadv_priv *bat_priv) ...@@ -747,7 +747,7 @@ static u16 batadv_tvlv_container_list_size(struct batadv_priv *bat_priv)
static void batadv_tvlv_container_remove(struct batadv_priv *bat_priv, static void batadv_tvlv_container_remove(struct batadv_priv *bat_priv,
struct batadv_tvlv_container *tvlv) struct batadv_tvlv_container *tvlv)
{ {
lockdep_assert_held(&bat_priv->tvlv.handler_list_lock); lockdep_assert_held(&bat_priv->tvlv.container_list_lock);
if (!tvlv) if (!tvlv)
return; return;
...@@ -1143,15 +1143,14 @@ void batadv_tvlv_unicast_send(struct batadv_priv *bat_priv, u8 *src, ...@@ -1143,15 +1143,14 @@ void batadv_tvlv_unicast_send(struct batadv_priv *bat_priv, u8 *src,
struct batadv_unicast_tvlv_packet *unicast_tvlv_packet; struct batadv_unicast_tvlv_packet *unicast_tvlv_packet;
struct batadv_tvlv_hdr *tvlv_hdr; struct batadv_tvlv_hdr *tvlv_hdr;
struct batadv_orig_node *orig_node; struct batadv_orig_node *orig_node;
struct sk_buff *skb = NULL; struct sk_buff *skb;
unsigned char *tvlv_buff; unsigned char *tvlv_buff;
unsigned int tvlv_len; unsigned int tvlv_len;
ssize_t hdr_len = sizeof(*unicast_tvlv_packet); ssize_t hdr_len = sizeof(*unicast_tvlv_packet);
bool ret = false;
orig_node = batadv_orig_hash_find(bat_priv, dst); orig_node = batadv_orig_hash_find(bat_priv, dst);
if (!orig_node) if (!orig_node)
goto out; return;
tvlv_len = sizeof(*tvlv_hdr) + tvlv_value_len; tvlv_len = sizeof(*tvlv_hdr) + tvlv_value_len;
...@@ -1180,14 +1179,10 @@ void batadv_tvlv_unicast_send(struct batadv_priv *bat_priv, u8 *src, ...@@ -1180,14 +1179,10 @@ void batadv_tvlv_unicast_send(struct batadv_priv *bat_priv, u8 *src,
tvlv_buff += sizeof(*tvlv_hdr); tvlv_buff += sizeof(*tvlv_hdr);
memcpy(tvlv_buff, tvlv_value, tvlv_value_len); memcpy(tvlv_buff, tvlv_value, tvlv_value_len);
if (batadv_send_skb_to_orig(skb, orig_node, NULL) != NET_XMIT_DROP) if (batadv_send_skb_to_orig(skb, orig_node, NULL) == NET_XMIT_DROP)
ret = true;
out:
if (skb && !ret)
kfree_skb(skb); kfree_skb(skb);
if (orig_node) out:
batadv_orig_node_free_ref(orig_node); batadv_orig_node_free_ref(orig_node);
} }
/** /**
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#define BATADV_DRIVER_DEVICE "batman-adv" #define BATADV_DRIVER_DEVICE "batman-adv"
#ifndef BATADV_SOURCE_VERSION #ifndef BATADV_SOURCE_VERSION
#define BATADV_SOURCE_VERSION "2015.2" #define BATADV_SOURCE_VERSION "2016.0"
#endif #endif
/* B.A.T.M.A.N. parameters */ /* B.A.T.M.A.N. parameters */
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
#define BATADV_MAX_AGGREGATION_MS 100 #define BATADV_MAX_AGGREGATION_MS 100
#define BATADV_BLA_PERIOD_LENGTH 10000 /* 10 seconds */ #define BATADV_BLA_PERIOD_LENGTH 10000 /* 10 seconds */
#define BATADV_BLA_BACKBONE_TIMEOUT (BATADV_BLA_PERIOD_LENGTH * 3) #define BATADV_BLA_BACKBONE_TIMEOUT (BATADV_BLA_PERIOD_LENGTH * 6)
#define BATADV_BLA_CLAIM_TIMEOUT (BATADV_BLA_PERIOD_LENGTH * 10) #define BATADV_BLA_CLAIM_TIMEOUT (BATADV_BLA_PERIOD_LENGTH * 10)
#define BATADV_BLA_WAIT_PERIODS 3 #define BATADV_BLA_WAIT_PERIODS 3
......
...@@ -244,9 +244,7 @@ static void batadv_nc_path_free_ref(struct batadv_nc_path *nc_path) ...@@ -244,9 +244,7 @@ static void batadv_nc_path_free_ref(struct batadv_nc_path *nc_path)
*/ */
static void batadv_nc_packet_free(struct batadv_nc_packet *nc_packet) static void batadv_nc_packet_free(struct batadv_nc_packet *nc_packet)
{ {
if (nc_packet->skb) kfree_skb(nc_packet->skb);
kfree_skb(nc_packet->skb);
batadv_nc_path_free_ref(nc_packet->nc_path); batadv_nc_path_free_ref(nc_packet->nc_path);
kfree(nc_packet); kfree(nc_packet);
} }
......
...@@ -72,8 +72,7 @@ enum batadv_subtype { ...@@ -72,8 +72,7 @@ enum batadv_subtype {
* enum batadv_iv_flags - flags used in B.A.T.M.A.N. IV OGM packets * enum batadv_iv_flags - flags used in B.A.T.M.A.N. IV OGM packets
* @BATADV_NOT_BEST_NEXT_HOP: flag is set when ogm packet is forwarded and was * @BATADV_NOT_BEST_NEXT_HOP: flag is set when ogm packet is forwarded and was
* previously received from someone else than the best neighbor. * previously received from someone else than the best neighbor.
* @BATADV_PRIMARIES_FIRST_HOP: flag is set when the primary interface address * @BATADV_PRIMARIES_FIRST_HOP: flag unused.
* is used, and the packet travels its first hop.
* @BATADV_DIRECTLINK: flag is for the first hop or if rebroadcasted from a * @BATADV_DIRECTLINK: flag is for the first hop or if rebroadcasted from a
* one hop neighbor on the interface where it was originally received. * one hop neighbor on the interface where it was originally received.
*/ */
......
...@@ -407,8 +407,7 @@ void batadv_schedule_bat_ogm(struct batadv_hard_iface *hard_iface) ...@@ -407,8 +407,7 @@ void batadv_schedule_bat_ogm(struct batadv_hard_iface *hard_iface)
static void batadv_forw_packet_free(struct batadv_forw_packet *forw_packet) static void batadv_forw_packet_free(struct batadv_forw_packet *forw_packet)
{ {
if (forw_packet->skb) kfree_skb(forw_packet->skb);
kfree_skb(forw_packet->skb);
if (forw_packet->if_incoming) if (forw_packet->if_incoming)
batadv_hardif_free_ref(forw_packet->if_incoming); batadv_hardif_free_ref(forw_packet->if_incoming);
if (forw_packet->if_outgoing) if (forw_packet->if_outgoing)
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include "distributed-arp-table.h" #include "distributed-arp-table.h"
#include "gateway_client.h" #include "gateway_client.h"
#include "gateway_common.h" #include "gateway_common.h"
#include "bridge_loop_avoidance.h"
#include "hard-interface.h" #include "hard-interface.h"
#include "network-coding.h" #include "network-coding.h"
#include "packet.h" #include "packet.h"
...@@ -241,10 +242,13 @@ ssize_t batadv_show_vlan_##_name(struct kobject *kobj, \ ...@@ -241,10 +242,13 @@ ssize_t batadv_show_vlan_##_name(struct kobject *kobj, \
static int batadv_store_bool_attr(char *buff, size_t count, static int batadv_store_bool_attr(char *buff, size_t count,
struct net_device *net_dev, struct net_device *net_dev,
const char *attr_name, atomic_t *attr) const char *attr_name, atomic_t *attr,
bool *changed)
{ {
int enabled = -1; int enabled = -1;
*changed = false;
if (buff[count - 1] == '\n') if (buff[count - 1] == '\n')
buff[count - 1] = '\0'; buff[count - 1] = '\0';
...@@ -271,6 +275,8 @@ static int batadv_store_bool_attr(char *buff, size_t count, ...@@ -271,6 +275,8 @@ static int batadv_store_bool_attr(char *buff, size_t count,
atomic_read(attr) == 1 ? "enabled" : "disabled", atomic_read(attr) == 1 ? "enabled" : "disabled",
enabled == 1 ? "enabled" : "disabled"); enabled == 1 ? "enabled" : "disabled");
*changed = true;
atomic_set(attr, (unsigned int)enabled); atomic_set(attr, (unsigned int)enabled);
return count; return count;
} }
...@@ -281,11 +287,12 @@ __batadv_store_bool_attr(char *buff, size_t count, ...@@ -281,11 +287,12 @@ __batadv_store_bool_attr(char *buff, size_t count,
struct attribute *attr, struct attribute *attr,
atomic_t *attr_store, struct net_device *net_dev) atomic_t *attr_store, struct net_device *net_dev)
{ {
bool changed;
int ret; int ret;
ret = batadv_store_bool_attr(buff, count, net_dev, attr->name, ret = batadv_store_bool_attr(buff, count, net_dev, attr->name,
attr_store); attr_store, &changed);
if (post_func && ret) if (post_func && changed)
post_func(net_dev); post_func(net_dev);
return ret; return ret;
...@@ -549,7 +556,8 @@ static ssize_t batadv_store_isolation_mark(struct kobject *kobj, ...@@ -549,7 +556,8 @@ static ssize_t batadv_store_isolation_mark(struct kobject *kobj,
BATADV_ATTR_SIF_BOOL(aggregated_ogms, S_IRUGO | S_IWUSR, NULL); BATADV_ATTR_SIF_BOOL(aggregated_ogms, S_IRUGO | S_IWUSR, NULL);
BATADV_ATTR_SIF_BOOL(bonding, S_IRUGO | S_IWUSR, NULL); BATADV_ATTR_SIF_BOOL(bonding, S_IRUGO | S_IWUSR, NULL);
#ifdef CONFIG_BATMAN_ADV_BLA #ifdef CONFIG_BATMAN_ADV_BLA
BATADV_ATTR_SIF_BOOL(bridge_loop_avoidance, S_IRUGO | S_IWUSR, NULL); BATADV_ATTR_SIF_BOOL(bridge_loop_avoidance, S_IRUGO | S_IWUSR,
batadv_bla_status_update);
#endif #endif
#ifdef CONFIG_BATMAN_ADV_DAT #ifdef CONFIG_BATMAN_ADV_DAT
BATADV_ATTR_SIF_BOOL(distributed_arp_table, S_IRUGO | S_IWUSR, BATADV_ATTR_SIF_BOOL(distributed_arp_table, S_IRUGO | S_IWUSR,
......
...@@ -3339,7 +3339,10 @@ bool batadv_is_ap_isolated(struct batadv_priv *bat_priv, u8 *src, u8 *dst, ...@@ -3339,7 +3339,10 @@ bool batadv_is_ap_isolated(struct batadv_priv *bat_priv, u8 *src, u8 *dst,
bool ret = false; bool ret = false;
vlan = batadv_softif_vlan_get(bat_priv, vid); vlan = batadv_softif_vlan_get(bat_priv, vid);
if (!vlan || !atomic_read(&vlan->ap_isolation)) if (!vlan)
return false;
if (!atomic_read(&vlan->ap_isolation))
goto out; goto out;
tt_local_entry = batadv_tt_local_hash_find(bat_priv, dst, vid); tt_local_entry = batadv_tt_local_hash_find(bat_priv, dst, vid);
...@@ -3356,8 +3359,7 @@ bool batadv_is_ap_isolated(struct batadv_priv *bat_priv, u8 *src, u8 *dst, ...@@ -3356,8 +3359,7 @@ bool batadv_is_ap_isolated(struct batadv_priv *bat_priv, u8 *src, u8 *dst,
ret = true; ret = true;
out: out:
if (vlan) batadv_softif_vlan_free_ref(vlan);
batadv_softif_vlan_free_ref(vlan);
if (tt_global_entry) if (tt_global_entry)
batadv_tt_global_entry_free_ref(tt_global_entry); batadv_tt_global_entry_free_ref(tt_global_entry);
if (tt_local_entry) if (tt_local_entry)
......
...@@ -223,12 +223,12 @@ struct batadv_orig_bat_iv { ...@@ -223,12 +223,12 @@ struct batadv_orig_bat_iv {
* @orig: originator ethernet address * @orig: originator ethernet address
* @ifinfo_list: list for routers per outgoing interface * @ifinfo_list: list for routers per outgoing interface
* @last_bonding_candidate: pointer to last ifinfo of last used router * @last_bonding_candidate: pointer to last ifinfo of last used router
* @batadv_dat_addr_t: address of the orig node in the distributed hash * @dat_addr: address of the orig node in the distributed hash
* @last_seen: time when last packet from this node was received * @last_seen: time when last packet from this node was received
* @bcast_seqno_reset: time when the broadcast seqno window was reset * @bcast_seqno_reset: time when the broadcast seqno window was reset
* @mcast_handler_lock: synchronizes mcast-capability and -flag changes * @mcast_handler_lock: synchronizes mcast-capability and -flag changes
* @mcast_flags: multicast flags announced by the orig node * @mcast_flags: multicast flags announced by the orig node
* @mcast_want_all_unsnoop_node: a list node for the * @mcast_want_all_unsnoopables_node: a list node for the
* mcast.want_all_unsnoopables list * mcast.want_all_unsnoopables list
* @mcast_want_all_ipv4_node: a list node for the mcast.want_all_ipv4 list * @mcast_want_all_ipv4_node: a list node for the mcast.want_all_ipv4 list
* @mcast_want_all_ipv6_node: a list node for the mcast.want_all_ipv6 list * @mcast_want_all_ipv6_node: a list node for the mcast.want_all_ipv6 list
...@@ -371,9 +371,8 @@ struct batadv_hardif_neigh_node { ...@@ -371,9 +371,8 @@ struct batadv_hardif_neigh_node {
* @ifinfo_lock: lock protecting private ifinfo members and list * @ifinfo_lock: lock protecting private ifinfo members and list
* @if_incoming: pointer to incoming hard interface * @if_incoming: pointer to incoming hard interface
* @last_seen: when last packet via this neighbor was received * @last_seen: when last packet via this neighbor was received
* @last_ttl: last received ttl from this neigh node * @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner * @rcu: struct used for freeing in an RCU-safe manner
* @bat_iv: B.A.T.M.A.N. IV private structure
*/ */
struct batadv_neigh_node { struct batadv_neigh_node {
struct hlist_node list; struct hlist_node list;
...@@ -423,13 +422,14 @@ struct batadv_neigh_ifinfo { ...@@ -423,13 +422,14 @@ struct batadv_neigh_ifinfo {
struct rcu_head rcu; struct rcu_head rcu;
}; };
#ifdef CONFIG_BATMAN_ADV_BLA
/** /**
* struct batadv_bcast_duplist_entry - structure for LAN broadcast suppression * struct batadv_bcast_duplist_entry - structure for LAN broadcast suppression
* @orig[ETH_ALEN]: mac address of orig node orginating the broadcast * @orig: mac address of orig node orginating the broadcast
* @crc: crc32 checksum of broadcast payload * @crc: crc32 checksum of broadcast payload
* @entrytime: time when the broadcast packet was received * @entrytime: time when the broadcast packet was received
*/ */
#ifdef CONFIG_BATMAN_ADV_BLA
struct batadv_bcast_duplist_entry { struct batadv_bcast_duplist_entry {
u8 orig[ETH_ALEN]; u8 orig[ETH_ALEN];
__be32 crc; __be32 crc;
...@@ -571,9 +571,11 @@ struct batadv_priv_tt { ...@@ -571,9 +571,11 @@ struct batadv_priv_tt {
struct delayed_work work; struct delayed_work work;
}; };
#ifdef CONFIG_BATMAN_ADV_BLA
/** /**
* struct batadv_priv_bla - per mesh interface bridge loope avoidance data * struct batadv_priv_bla - per mesh interface bridge loope avoidance data
* @num_requests; number of bla requests in flight * @num_requests: number of bla requests in flight
* @claim_hash: hash table containing mesh nodes this host has claimed * @claim_hash: hash table containing mesh nodes this host has claimed
* @backbone_hash: hash table containing all detected backbone gateways * @backbone_hash: hash table containing all detected backbone gateways
* @bcast_duplist: recently received broadcast packets array (for broadcast * @bcast_duplist: recently received broadcast packets array (for broadcast
...@@ -583,7 +585,6 @@ struct batadv_priv_tt { ...@@ -583,7 +585,6 @@ struct batadv_priv_tt {
* @claim_dest: local claim data (e.g. claim group) * @claim_dest: local claim data (e.g. claim group)
* @work: work queue callback item for cleanups & bla announcements * @work: work queue callback item for cleanups & bla announcements
*/ */
#ifdef CONFIG_BATMAN_ADV_BLA
struct batadv_priv_bla { struct batadv_priv_bla {
atomic_t num_requests; atomic_t num_requests;
struct batadv_hashtable *claim_hash; struct batadv_hashtable *claim_hash;
...@@ -597,6 +598,8 @@ struct batadv_priv_bla { ...@@ -597,6 +598,8 @@ struct batadv_priv_bla {
}; };
#endif #endif
#ifdef CONFIG_BATMAN_ADV_DEBUG
/** /**
* struct batadv_priv_debug_log - debug logging data * struct batadv_priv_debug_log - debug logging data
* @log_buff: buffer holding the logs (ring bufer) * @log_buff: buffer holding the logs (ring bufer)
...@@ -605,7 +608,6 @@ struct batadv_priv_bla { ...@@ -605,7 +608,6 @@ struct batadv_priv_bla {
* @lock: lock protecting log_buff, log_start & log_end * @lock: lock protecting log_buff, log_start & log_end
* @queue_wait: log reader's wait queue * @queue_wait: log reader's wait queue
*/ */
#ifdef CONFIG_BATMAN_ADV_DEBUG
struct batadv_priv_debug_log { struct batadv_priv_debug_log {
char log_buff[BATADV_LOG_BUF_LEN]; char log_buff[BATADV_LOG_BUF_LEN];
unsigned long log_start; unsigned long log_start;
...@@ -647,13 +649,14 @@ struct batadv_priv_tvlv { ...@@ -647,13 +649,14 @@ struct batadv_priv_tvlv {
spinlock_t handler_list_lock; /* protects handler_list */ spinlock_t handler_list_lock; /* protects handler_list */
}; };
#ifdef CONFIG_BATMAN_ADV_DAT
/** /**
* struct batadv_priv_dat - per mesh interface DAT private data * struct batadv_priv_dat - per mesh interface DAT private data
* @addr: node DAT address * @addr: node DAT address
* @hash: hashtable representing the local ARP cache * @hash: hashtable representing the local ARP cache
* @work: work queue callback item for cache purging * @work: work queue callback item for cache purging
*/ */
#ifdef CONFIG_BATMAN_ADV_DAT
struct batadv_priv_dat { struct batadv_priv_dat {
batadv_dat_addr_t addr; batadv_dat_addr_t addr;
struct batadv_hashtable *hash; struct batadv_hashtable *hash;
...@@ -795,7 +798,7 @@ struct batadv_softif_vlan { ...@@ -795,7 +798,7 @@ struct batadv_softif_vlan {
* @dat: distributed arp table data * @dat: distributed arp table data
* @mcast: multicast data * @mcast: multicast data
* @network_coding: bool indicating whether network coding is enabled * @network_coding: bool indicating whether network coding is enabled
* @batadv_priv_nc: network coding data * @nc: network coding data
*/ */
struct batadv_priv { struct batadv_priv {
atomic_t mesh_state; atomic_t mesh_state;
...@@ -893,6 +896,8 @@ struct batadv_socket_packet { ...@@ -893,6 +896,8 @@ struct batadv_socket_packet {
u8 icmp_packet[BATADV_ICMP_MAX_PACKET_SIZE]; u8 icmp_packet[BATADV_ICMP_MAX_PACKET_SIZE];
}; };
#ifdef CONFIG_BATMAN_ADV_BLA
/** /**
* struct batadv_bla_backbone_gw - batman-adv gateway bridged into the LAN * struct batadv_bla_backbone_gw - batman-adv gateway bridged into the LAN
* @orig: originator address of backbone node (mac address of primary iface) * @orig: originator address of backbone node (mac address of primary iface)
...@@ -910,7 +915,6 @@ struct batadv_socket_packet { ...@@ -910,7 +915,6 @@ struct batadv_socket_packet {
* @refcount: number of contexts the object is used * @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner * @rcu: struct used for freeing in an RCU-safe manner
*/ */
#ifdef CONFIG_BATMAN_ADV_BLA
struct batadv_bla_backbone_gw { struct batadv_bla_backbone_gw {
u8 orig[ETH_ALEN]; u8 orig[ETH_ALEN];
unsigned short vid; unsigned short vid;
...@@ -929,7 +933,7 @@ struct batadv_bla_backbone_gw { ...@@ -929,7 +933,7 @@ struct batadv_bla_backbone_gw {
* struct batadv_bla_claim - claimed non-mesh client structure * struct batadv_bla_claim - claimed non-mesh client structure
* @addr: mac address of claimed non-mesh client * @addr: mac address of claimed non-mesh client
* @vid: vlan id this client was detected on * @vid: vlan id this client was detected on
* @batadv_bla_backbone_gw: pointer to backbone gw claiming this client * @backbone_gw: pointer to backbone gw claiming this client
* @lasttime: last time we heard of claim (locals only) * @lasttime: last time we heard of claim (locals only)
* @hash_entry: hlist node for batadv_priv_bla::claim_hash * @hash_entry: hlist node for batadv_priv_bla::claim_hash
* @refcount: number of contexts the object is used * @refcount: number of contexts the object is used
...@@ -1252,8 +1256,6 @@ struct batadv_dat_candidate { ...@@ -1252,8 +1256,6 @@ struct batadv_dat_candidate {
* struct batadv_tvlv_container - container for tvlv appended to OGMs * struct batadv_tvlv_container - container for tvlv appended to OGMs
* @list: hlist node for batadv_priv_tvlv::container_list * @list: hlist node for batadv_priv_tvlv::container_list
* @tvlv_hdr: tvlv header information needed to construct the tvlv * @tvlv_hdr: tvlv header information needed to construct the tvlv
* @value_len: length of the buffer following this struct which contains
* the actual tvlv payload
* @refcount: number of contexts the object is used * @refcount: number of contexts the object is used
*/ */
struct batadv_tvlv_container { struct batadv_tvlv_container {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment