提交 a943e8bc 编写于 作者: D David S. Miller

Merge tag 'batadv-next-for-davem-20171220' of git://git.open-mesh.org/linux-merge

Simon Wunderlich says:

====================
This feature/cleanup patchset includes the following patches:

 - bump version strings, by Simon Wunderlich

 - de-inline hash functions to save memory footprint, by Denys Vlasenko

 - Add License information to various files, by Sven Eckelmann (3 patches)

 - Change batman_adv.h from ISC to MIT, by Sven Eckelmann

 - Improve various includes, by Sven Eckelmann (5 patches)

 - Lots of kernel-doc work by Sven Eckelmann (8 patches)
====================
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
.. SPDX-License-Identifier: GPL-2.0
========== ==========
batman-adv batman-adv
========== ==========
......
/* SPDX-License-Identifier: MIT */
/* Copyright (C) 2016-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2016-2017 B.A.T.M.A.N. contributors:
* *
* Matthias Schiffer * Matthias Schiffer
* *
* Permission to use, copy, modify, and/or distribute this software for any * Permission is hereby granted, free of charge, to any person obtaining a
* purpose with or without fee is hereby granted, provided that the above * copy of this software and associated documentation files (the "Software"),
* copyright notice and this permission notice appear in all copies. * to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
* *
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * The above copyright notice and this permission notice shall be included in
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * all copies or substantial portions of the Software.
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR *
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/ */
#ifndef _UAPI_LINUX_BATMAN_ADV_H_ #ifndef _UAPI_LINUX_BATMAN_ADV_H_
......
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
#
# Marek Lindner, Simon Wunderlich
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of version 2 of the GNU General Public
# License as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
# #
# B.A.T.M.A.N meshing protocol # B.A.T.M.A.N meshing protocol
# #
......
# # SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: # Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
# #
# Marek Lindner, Simon Wunderlich # Marek Lindner, Simon Wunderlich
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -37,7 +38,8 @@ char batadv_routing_algo[20] = "BATMAN_IV"; ...@@ -37,7 +38,8 @@ char batadv_routing_algo[20] = "BATMAN_IV";
static struct hlist_head batadv_algo_list; static struct hlist_head batadv_algo_list;
/** /**
* batadv_algo_init - Initialize batman-adv algorithm management data structures * batadv_algo_init() - Initialize batman-adv algorithm management data
* structures
*/ */
void batadv_algo_init(void) void batadv_algo_init(void)
{ {
...@@ -59,6 +61,12 @@ static struct batadv_algo_ops *batadv_algo_get(char *name) ...@@ -59,6 +61,12 @@ static struct batadv_algo_ops *batadv_algo_get(char *name)
return bat_algo_ops; return bat_algo_ops;
} }
/**
* batadv_algo_register() - Register callbacks for a mesh algorithm
* @bat_algo_ops: mesh algorithm callbacks to add
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_algo_register(struct batadv_algo_ops *bat_algo_ops) int batadv_algo_register(struct batadv_algo_ops *bat_algo_ops)
{ {
struct batadv_algo_ops *bat_algo_ops_tmp; struct batadv_algo_ops *bat_algo_ops_tmp;
...@@ -88,6 +96,19 @@ int batadv_algo_register(struct batadv_algo_ops *bat_algo_ops) ...@@ -88,6 +96,19 @@ int batadv_algo_register(struct batadv_algo_ops *bat_algo_ops)
return 0; return 0;
} }
/**
* batadv_algo_select() - Select algorithm of soft interface
* @bat_priv: the bat priv with all the soft interface information
* @name: name of the algorithm to select
*
* The algorithm callbacks for the soft interface will be set when the algorithm
* with the correct name was found. Any previous selected algorithm will not be
* deinitialized and the new selected algorithm will also not be initialized.
* It is therefore not allowed to call batadv_algo_select outside the creation
* function of the soft interface.
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_algo_select(struct batadv_priv *bat_priv, char *name) int batadv_algo_select(struct batadv_priv *bat_priv, char *name)
{ {
struct batadv_algo_ops *bat_algo_ops; struct batadv_algo_ops *bat_algo_ops;
...@@ -102,6 +123,14 @@ int batadv_algo_select(struct batadv_priv *bat_priv, char *name) ...@@ -102,6 +123,14 @@ int batadv_algo_select(struct batadv_priv *bat_priv, char *name)
} }
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/**
* batadv_algo_seq_print_text() - Print the supported algorithms in a seq file
* @seq: seq file to print on
* @offset: not used
*
* Return: always 0
*/
int batadv_algo_seq_print_text(struct seq_file *seq, void *offset) int batadv_algo_seq_print_text(struct seq_file *seq, void *offset)
{ {
struct batadv_algo_ops *bat_algo_ops; struct batadv_algo_ops *bat_algo_ops;
...@@ -148,7 +177,7 @@ module_param_cb(routing_algo, &batadv_param_ops_ra, &batadv_param_string_ra, ...@@ -148,7 +177,7 @@ module_param_cb(routing_algo, &batadv_param_ops_ra, &batadv_param_string_ra,
0644); 0644);
/** /**
* batadv_algo_dump_entry - fill in information about one supported routing * batadv_algo_dump_entry() - fill in information about one supported routing
* algorithm * algorithm
* @msg: netlink message to be sent back * @msg: netlink message to be sent back
* @portid: Port to reply to * @portid: Port to reply to
...@@ -179,7 +208,7 @@ static int batadv_algo_dump_entry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -179,7 +208,7 @@ static int batadv_algo_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_algo_dump - fill in information about supported routing * batadv_algo_dump() - fill in information about supported routing
* algorithms * algorithms
* @msg: netlink message to be sent back * @msg: netlink message to be sent back
* @cb: Parameters to the netlink request * @cb: Parameters to the netlink request
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Linus Lüssing * Marek Lindner, Linus Lüssing
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -26,7 +27,7 @@ ...@@ -26,7 +27,7 @@
#include <linux/cache.h> #include <linux/cache.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
...@@ -72,21 +73,28 @@ static void batadv_iv_send_outstanding_bat_ogm_packet(struct work_struct *work); ...@@ -72,21 +73,28 @@ static void batadv_iv_send_outstanding_bat_ogm_packet(struct work_struct *work);
/** /**
* enum batadv_dup_status - duplicate status * enum batadv_dup_status - duplicate status
* @BATADV_NO_DUP: the packet is no duplicate
* @BATADV_ORIG_DUP: OGM is a duplicate in the originator (but not for the
* neighbor)
* @BATADV_NEIGH_DUP: OGM is a duplicate for the neighbor
* @BATADV_PROTECTED: originator is currently protected (after reboot)
*/ */
enum batadv_dup_status { enum batadv_dup_status {
/** @BATADV_NO_DUP: the packet is no duplicate */
BATADV_NO_DUP = 0, BATADV_NO_DUP = 0,
/**
* @BATADV_ORIG_DUP: OGM is a duplicate in the originator (but not for
* the neighbor)
*/
BATADV_ORIG_DUP, BATADV_ORIG_DUP,
/** @BATADV_NEIGH_DUP: OGM is a duplicate for the neighbor */
BATADV_NEIGH_DUP, BATADV_NEIGH_DUP,
/**
* @BATADV_PROTECTED: originator is currently protected (after reboot)
*/
BATADV_PROTECTED, BATADV_PROTECTED,
}; };
/** /**
* batadv_ring_buffer_set - update the ring buffer with the given value * batadv_ring_buffer_set() - update the ring buffer with the given value
* @lq_recv: pointer to the ring buffer * @lq_recv: pointer to the ring buffer
* @lq_index: index to store the value at * @lq_index: index to store the value at
* @value: value to store in the ring buffer * @value: value to store in the ring buffer
...@@ -98,7 +106,7 @@ static void batadv_ring_buffer_set(u8 lq_recv[], u8 *lq_index, u8 value) ...@@ -98,7 +106,7 @@ static void batadv_ring_buffer_set(u8 lq_recv[], u8 *lq_index, u8 value)
} }
/** /**
* batadv_ring_buffer_avg - compute the average of all non-zero values stored * batadv_ring_buffer_avg() - compute the average of all non-zero values stored
* in the given ring buffer * in the given ring buffer
* @lq_recv: pointer to the ring buffer * @lq_recv: pointer to the ring buffer
* *
...@@ -130,7 +138,7 @@ static u8 batadv_ring_buffer_avg(const u8 lq_recv[]) ...@@ -130,7 +138,7 @@ static u8 batadv_ring_buffer_avg(const u8 lq_recv[])
} }
/** /**
* batadv_iv_ogm_orig_free - free the private resources allocated for this * batadv_iv_ogm_orig_free() - free the private resources allocated for this
* orig_node * orig_node
* @orig_node: the orig_node for which the resources have to be free'd * @orig_node: the orig_node for which the resources have to be free'd
*/ */
...@@ -141,8 +149,8 @@ static void batadv_iv_ogm_orig_free(struct batadv_orig_node *orig_node) ...@@ -141,8 +149,8 @@ static void batadv_iv_ogm_orig_free(struct batadv_orig_node *orig_node)
} }
/** /**
* batadv_iv_ogm_orig_add_if - change the private structures of the orig_node to * batadv_iv_ogm_orig_add_if() - change the private structures of the orig_node
* include the new hard-interface * to include the new hard-interface
* @orig_node: the orig_node that has to be changed * @orig_node: the orig_node that has to be changed
* @max_if_num: the current amount of interfaces * @max_if_num: the current amount of interfaces
* *
...@@ -186,7 +194,7 @@ static int batadv_iv_ogm_orig_add_if(struct batadv_orig_node *orig_node, ...@@ -186,7 +194,7 @@ static int batadv_iv_ogm_orig_add_if(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_iv_ogm_drop_bcast_own_entry - drop section of bcast_own * batadv_iv_ogm_drop_bcast_own_entry() - drop section of bcast_own
* @orig_node: the orig_node that has to be changed * @orig_node: the orig_node that has to be changed
* @max_if_num: the current amount of interfaces * @max_if_num: the current amount of interfaces
* @del_if_num: the index of the interface being removed * @del_if_num: the index of the interface being removed
...@@ -224,7 +232,7 @@ batadv_iv_ogm_drop_bcast_own_entry(struct batadv_orig_node *orig_node, ...@@ -224,7 +232,7 @@ batadv_iv_ogm_drop_bcast_own_entry(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_iv_ogm_drop_bcast_own_sum_entry - drop section of bcast_own_sum * batadv_iv_ogm_drop_bcast_own_sum_entry() - drop section of bcast_own_sum
* @orig_node: the orig_node that has to be changed * @orig_node: the orig_node that has to be changed
* @max_if_num: the current amount of interfaces * @max_if_num: the current amount of interfaces
* @del_if_num: the index of the interface being removed * @del_if_num: the index of the interface being removed
...@@ -259,8 +267,8 @@ batadv_iv_ogm_drop_bcast_own_sum_entry(struct batadv_orig_node *orig_node, ...@@ -259,8 +267,8 @@ batadv_iv_ogm_drop_bcast_own_sum_entry(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_iv_ogm_orig_del_if - change the private structures of the orig_node to * batadv_iv_ogm_orig_del_if() - change the private structures of the orig_node
* exclude the removed interface * to exclude the removed interface
* @orig_node: the orig_node that has to be changed * @orig_node: the orig_node that has to be changed
* @max_if_num: the current amount of interfaces * @max_if_num: the current amount of interfaces
* @del_if_num: the index of the interface being removed * @del_if_num: the index of the interface being removed
...@@ -290,7 +298,8 @@ static int batadv_iv_ogm_orig_del_if(struct batadv_orig_node *orig_node, ...@@ -290,7 +298,8 @@ static int batadv_iv_ogm_orig_del_if(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_iv_ogm_orig_get - retrieve or create (if does not exist) an originator * batadv_iv_ogm_orig_get() - retrieve or create (if does not exist) an
* originator
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: mac address of the originator * @addr: mac address of the originator
* *
...@@ -447,7 +456,7 @@ static u8 batadv_hop_penalty(u8 tq, const struct batadv_priv *bat_priv) ...@@ -447,7 +456,7 @@ static u8 batadv_hop_penalty(u8 tq, const struct batadv_priv *bat_priv)
} }
/** /**
* batadv_iv_ogm_aggr_packet - checks if there is another OGM attached * batadv_iv_ogm_aggr_packet() - checks if there is another OGM attached
* @buff_pos: current position in the skb * @buff_pos: current position in the skb
* @packet_len: total length of the skb * @packet_len: total length of the skb
* @tvlv_len: tvlv length of the previously considered OGM * @tvlv_len: tvlv length of the previously considered OGM
...@@ -557,7 +566,7 @@ static void batadv_iv_ogm_emit(struct batadv_forw_packet *forw_packet) ...@@ -557,7 +566,7 @@ static void batadv_iv_ogm_emit(struct batadv_forw_packet *forw_packet)
} }
/** /**
* batadv_iv_ogm_can_aggregate - find out if an OGM can be aggregated on an * batadv_iv_ogm_can_aggregate() - find out if an OGM can be aggregated on an
* existing forward packet * existing forward packet
* @new_bat_ogm_packet: OGM packet to be aggregated * @new_bat_ogm_packet: OGM packet to be aggregated
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
...@@ -660,7 +669,7 @@ batadv_iv_ogm_can_aggregate(const struct batadv_ogm_packet *new_bat_ogm_packet, ...@@ -660,7 +669,7 @@ batadv_iv_ogm_can_aggregate(const struct batadv_ogm_packet *new_bat_ogm_packet,
} }
/** /**
* batadv_iv_ogm_aggregate_new - create a new aggregated packet and add this * batadv_iv_ogm_aggregate_new() - create a new aggregated packet and add this
* packet to it. * packet to it.
* @packet_buff: pointer to the OGM * @packet_buff: pointer to the OGM
* @packet_len: (total) length of the OGM * @packet_len: (total) length of the OGM
...@@ -743,7 +752,7 @@ static void batadv_iv_ogm_aggregate(struct batadv_forw_packet *forw_packet_aggr, ...@@ -743,7 +752,7 @@ static void batadv_iv_ogm_aggregate(struct batadv_forw_packet *forw_packet_aggr,
} }
/** /**
* batadv_iv_ogm_queue_add - queue up an OGM for transmission * batadv_iv_ogm_queue_add() - queue up an OGM for transmission
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @packet_buff: pointer to the OGM * @packet_buff: pointer to the OGM
* @packet_len: (total) length of the OGM * @packet_len: (total) length of the OGM
...@@ -869,8 +878,8 @@ static void batadv_iv_ogm_forward(struct batadv_orig_node *orig_node, ...@@ -869,8 +878,8 @@ static void batadv_iv_ogm_forward(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_iv_ogm_slide_own_bcast_window - bitshift own OGM broadcast windows for * batadv_iv_ogm_slide_own_bcast_window() - bitshift own OGM broadcast windows
* the given interface * for the given interface
* @hard_iface: the interface for which the windows have to be shifted * @hard_iface: the interface for which the windows have to be shifted
*/ */
static void static void
...@@ -987,7 +996,7 @@ static void batadv_iv_ogm_schedule(struct batadv_hard_iface *hard_iface) ...@@ -987,7 +996,7 @@ static void batadv_iv_ogm_schedule(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_iv_ogm_orig_update - use OGM to update corresponding data in an * batadv_iv_ogm_orig_update() - use OGM to update corresponding data in an
* originator * originator
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: the orig node who originally emitted the ogm packet * @orig_node: the orig node who originally emitted the ogm packet
...@@ -1152,7 +1161,7 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv, ...@@ -1152,7 +1161,7 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_iv_ogm_calc_tq - calculate tq for current received ogm packet * batadv_iv_ogm_calc_tq() - calculate tq for current received ogm packet
* @orig_node: the orig node who originally emitted the ogm packet * @orig_node: the orig node who originally emitted the ogm packet
* @orig_neigh_node: the orig node struct of the neighbor who sent the packet * @orig_neigh_node: the orig node struct of the neighbor who sent the packet
* @batadv_ogm_packet: the ogm packet * @batadv_ogm_packet: the ogm packet
...@@ -1298,7 +1307,7 @@ static bool batadv_iv_ogm_calc_tq(struct batadv_orig_node *orig_node, ...@@ -1298,7 +1307,7 @@ static bool batadv_iv_ogm_calc_tq(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_iv_ogm_update_seqnos - process a batman packet for all interfaces, * batadv_iv_ogm_update_seqnos() - process a batman packet for all interfaces,
* adjust the sequence number and find out whether it is a duplicate * adjust the sequence number and find out whether it is a duplicate
* @ethhdr: ethernet header of the packet * @ethhdr: ethernet header of the packet
* @batadv_ogm_packet: OGM packet to be considered * @batadv_ogm_packet: OGM packet to be considered
...@@ -1401,7 +1410,8 @@ batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr, ...@@ -1401,7 +1410,8 @@ batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr,
} }
/** /**
* batadv_iv_ogm_process_per_outif - process a batman iv OGM for an outgoing if * batadv_iv_ogm_process_per_outif() - process a batman iv OGM for an outgoing
* interface
* @skb: the skb containing the OGM * @skb: the skb containing the OGM
* @ogm_offset: offset from skb->data to start of ogm header * @ogm_offset: offset from skb->data to start of ogm header
* @orig_node: the (cached) orig node for the originator of this OGM * @orig_node: the (cached) orig node for the originator of this OGM
...@@ -1608,7 +1618,7 @@ batadv_iv_ogm_process_per_outif(const struct sk_buff *skb, int ogm_offset, ...@@ -1608,7 +1618,7 @@ batadv_iv_ogm_process_per_outif(const struct sk_buff *skb, int ogm_offset,
} }
/** /**
* batadv_iv_ogm_process - process an incoming batman iv OGM * batadv_iv_ogm_process() - process an incoming batman iv OGM
* @skb: the skb containing the OGM * @skb: the skb containing the OGM
* @ogm_offset: offset to the OGM which should be processed (for aggregates) * @ogm_offset: offset to the OGM which should be processed (for aggregates)
* @if_incoming: the interface where this packet was receved * @if_incoming: the interface where this packet was receved
...@@ -1861,7 +1871,7 @@ static int batadv_iv_ogm_receive(struct sk_buff *skb, ...@@ -1861,7 +1871,7 @@ static int batadv_iv_ogm_receive(struct sk_buff *skb,
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_iv_ogm_orig_print_neigh - print neighbors for the originator table * batadv_iv_ogm_orig_print_neigh() - print neighbors for the originator table
* @orig_node: the orig_node for which the neighbors are printed * @orig_node: the orig_node for which the neighbors are printed
* @if_outgoing: outgoing interface for these entries * @if_outgoing: outgoing interface for these entries
* @seq: debugfs table seq_file struct * @seq: debugfs table seq_file struct
...@@ -1890,7 +1900,7 @@ batadv_iv_ogm_orig_print_neigh(struct batadv_orig_node *orig_node, ...@@ -1890,7 +1900,7 @@ batadv_iv_ogm_orig_print_neigh(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_iv_ogm_orig_print - print the originator table * batadv_iv_ogm_orig_print() - print the originator table
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @seq: debugfs table seq_file struct * @seq: debugfs table seq_file struct
* @if_outgoing: the outgoing interface for which this should be printed * @if_outgoing: the outgoing interface for which this should be printed
...@@ -1960,7 +1970,7 @@ static void batadv_iv_ogm_orig_print(struct batadv_priv *bat_priv, ...@@ -1960,7 +1970,7 @@ static void batadv_iv_ogm_orig_print(struct batadv_priv *bat_priv,
#endif #endif
/** /**
* batadv_iv_ogm_neigh_get_tq_avg - Get the TQ average for a neighbour on a * batadv_iv_ogm_neigh_get_tq_avg() - Get the TQ average for a neighbour on a
* given outgoing interface. * given outgoing interface.
* @neigh_node: Neighbour of interest * @neigh_node: Neighbour of interest
* @if_outgoing: Outgoing interface of interest * @if_outgoing: Outgoing interface of interest
...@@ -1986,7 +1996,7 @@ batadv_iv_ogm_neigh_get_tq_avg(struct batadv_neigh_node *neigh_node, ...@@ -1986,7 +1996,7 @@ batadv_iv_ogm_neigh_get_tq_avg(struct batadv_neigh_node *neigh_node,
} }
/** /**
* batadv_iv_ogm_orig_dump_subentry - Dump an originator subentry into a * batadv_iv_ogm_orig_dump_subentry() - Dump an originator subentry into a
* message * message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
...@@ -2048,7 +2058,7 @@ batadv_iv_ogm_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2048,7 +2058,7 @@ batadv_iv_ogm_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_iv_ogm_orig_dump_entry - Dump an originator entry into a message * batadv_iv_ogm_orig_dump_entry() - Dump an originator entry into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -2110,7 +2120,7 @@ batadv_iv_ogm_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2110,7 +2120,7 @@ batadv_iv_ogm_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_iv_ogm_orig_dump_bucket - Dump an originator bucket into a * batadv_iv_ogm_orig_dump_bucket() - Dump an originator bucket into a
* message * message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
...@@ -2153,7 +2163,7 @@ batadv_iv_ogm_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2153,7 +2163,7 @@ batadv_iv_ogm_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_iv_ogm_orig_dump - Dump the originators into a message * batadv_iv_ogm_orig_dump() - Dump the originators into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @cb: Control block containing additional options * @cb: Control block containing additional options
* @bat_priv: The bat priv with all the soft interface information * @bat_priv: The bat priv with all the soft interface information
...@@ -2190,7 +2200,7 @@ batadv_iv_ogm_orig_dump(struct sk_buff *msg, struct netlink_callback *cb, ...@@ -2190,7 +2200,7 @@ batadv_iv_ogm_orig_dump(struct sk_buff *msg, struct netlink_callback *cb,
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_iv_hardif_neigh_print - print a single hop neighbour node * batadv_iv_hardif_neigh_print() - print a single hop neighbour node
* @seq: neighbour table seq_file struct * @seq: neighbour table seq_file struct
* @hardif_neigh: hardif neighbour information * @hardif_neigh: hardif neighbour information
*/ */
...@@ -2209,7 +2219,7 @@ batadv_iv_hardif_neigh_print(struct seq_file *seq, ...@@ -2209,7 +2219,7 @@ batadv_iv_hardif_neigh_print(struct seq_file *seq,
} }
/** /**
* batadv_iv_ogm_neigh_print - print the single hop neighbour list * batadv_iv_ogm_neigh_print() - print the single hop neighbour list
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @seq: neighbour table seq_file struct * @seq: neighbour table seq_file struct
*/ */
...@@ -2242,7 +2252,7 @@ static void batadv_iv_neigh_print(struct batadv_priv *bat_priv, ...@@ -2242,7 +2252,7 @@ static void batadv_iv_neigh_print(struct batadv_priv *bat_priv,
#endif #endif
/** /**
* batadv_iv_ogm_neigh_diff - calculate tq difference of two neighbors * batadv_iv_ogm_neigh_diff() - calculate tq difference of two neighbors
* @neigh1: the first neighbor object of the comparison * @neigh1: the first neighbor object of the comparison
* @if_outgoing1: outgoing interface for the first neighbor * @if_outgoing1: outgoing interface for the first neighbor
* @neigh2: the second neighbor object of the comparison * @neigh2: the second neighbor object of the comparison
...@@ -2287,7 +2297,7 @@ static bool batadv_iv_ogm_neigh_diff(struct batadv_neigh_node *neigh1, ...@@ -2287,7 +2297,7 @@ static bool batadv_iv_ogm_neigh_diff(struct batadv_neigh_node *neigh1,
} }
/** /**
* batadv_iv_ogm_neigh_dump_neigh - Dump a neighbour into a netlink message * batadv_iv_ogm_neigh_dump_neigh() - Dump a neighbour into a netlink message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -2326,7 +2336,7 @@ batadv_iv_ogm_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2326,7 +2336,7 @@ batadv_iv_ogm_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_iv_ogm_neigh_dump_hardif - Dump the neighbours of a hard interface * batadv_iv_ogm_neigh_dump_hardif() - Dump the neighbours of a hard interface
* into a message * into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
...@@ -2365,7 +2375,7 @@ batadv_iv_ogm_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2365,7 +2375,7 @@ batadv_iv_ogm_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_iv_ogm_neigh_dump - Dump the neighbours into a message * batadv_iv_ogm_neigh_dump() - Dump the neighbours into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @cb: Control block containing additional options * @cb: Control block containing additional options
* @bat_priv: The bat priv with all the soft interface information * @bat_priv: The bat priv with all the soft interface information
...@@ -2417,7 +2427,7 @@ batadv_iv_ogm_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb, ...@@ -2417,7 +2427,7 @@ batadv_iv_ogm_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb,
} }
/** /**
* batadv_iv_ogm_neigh_cmp - compare the metrics of two neighbors * batadv_iv_ogm_neigh_cmp() - compare the metrics of two neighbors
* @neigh1: the first neighbor object of the comparison * @neigh1: the first neighbor object of the comparison
* @if_outgoing1: outgoing interface for the first neighbor * @if_outgoing1: outgoing interface for the first neighbor
* @neigh2: the second neighbor object of the comparison * @neigh2: the second neighbor object of the comparison
...@@ -2443,7 +2453,7 @@ static int batadv_iv_ogm_neigh_cmp(struct batadv_neigh_node *neigh1, ...@@ -2443,7 +2453,7 @@ static int batadv_iv_ogm_neigh_cmp(struct batadv_neigh_node *neigh1,
} }
/** /**
* batadv_iv_ogm_neigh_is_sob - check if neigh1 is similarly good or better * batadv_iv_ogm_neigh_is_sob() - check if neigh1 is similarly good or better
* than neigh2 from the metric prospective * than neigh2 from the metric prospective
* @neigh1: the first neighbor object of the comparison * @neigh1: the first neighbor object of the comparison
* @if_outgoing1: outgoing interface for the first neighbor * @if_outgoing1: outgoing interface for the first neighbor
...@@ -2478,7 +2488,7 @@ static void batadv_iv_iface_activate(struct batadv_hard_iface *hard_iface) ...@@ -2478,7 +2488,7 @@ static void batadv_iv_iface_activate(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_iv_init_sel_class - initialize GW selection class * batadv_iv_init_sel_class() - initialize GW selection class
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
static void batadv_iv_init_sel_class(struct batadv_priv *bat_priv) static void batadv_iv_init_sel_class(struct batadv_priv *bat_priv)
...@@ -2703,7 +2713,7 @@ static void batadv_iv_gw_print(struct batadv_priv *bat_priv, ...@@ -2703,7 +2713,7 @@ static void batadv_iv_gw_print(struct batadv_priv *bat_priv,
#endif #endif
/** /**
* batadv_iv_gw_dump_entry - Dump a gateway into a message * batadv_iv_gw_dump_entry() - Dump a gateway into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -2774,7 +2784,7 @@ static int batadv_iv_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2774,7 +2784,7 @@ static int batadv_iv_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_iv_gw_dump - Dump gateways into a message * batadv_iv_gw_dump() - Dump gateways into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @cb: Control block containing additional options * @cb: Control block containing additional options
* @bat_priv: The bat priv with all the soft interface information * @bat_priv: The bat priv with all the soft interface information
...@@ -2843,6 +2853,11 @@ static struct batadv_algo_ops batadv_batman_iv __read_mostly = { ...@@ -2843,6 +2853,11 @@ static struct batadv_algo_ops batadv_batman_iv __read_mostly = {
}, },
}; };
/**
* batadv_iv_init() - B.A.T.M.A.N. IV initialization function
*
* Return: 0 on success or negative error number in case of failure
*/
int __init batadv_iv_init(void) int __init batadv_iv_init(void)
{ {
int ret; int ret;
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors:
* *
* Linus Lüssing, Marek Lindner * Linus Lüssing, Marek Lindner
...@@ -99,7 +100,7 @@ static void batadv_v_primary_iface_set(struct batadv_hard_iface *hard_iface) ...@@ -99,7 +100,7 @@ static void batadv_v_primary_iface_set(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_v_iface_update_mac - react to hard-interface MAC address change * batadv_v_iface_update_mac() - react to hard-interface MAC address change
* @hard_iface: the modified interface * @hard_iface: the modified interface
* *
* If the modified interface is the primary one, update the originator * If the modified interface is the primary one, update the originator
...@@ -130,7 +131,7 @@ batadv_v_hardif_neigh_init(struct batadv_hardif_neigh_node *hardif_neigh) ...@@ -130,7 +131,7 @@ batadv_v_hardif_neigh_init(struct batadv_hardif_neigh_node *hardif_neigh)
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_v_orig_print_neigh - print neighbors for the originator table * batadv_v_orig_print_neigh() - print neighbors for the originator table
* @orig_node: the orig_node for which the neighbors are printed * @orig_node: the orig_node for which the neighbors are printed
* @if_outgoing: outgoing interface for these entries * @if_outgoing: outgoing interface for these entries
* @seq: debugfs table seq_file struct * @seq: debugfs table seq_file struct
...@@ -160,7 +161,7 @@ batadv_v_orig_print_neigh(struct batadv_orig_node *orig_node, ...@@ -160,7 +161,7 @@ batadv_v_orig_print_neigh(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_v_hardif_neigh_print - print a single ELP neighbour node * batadv_v_hardif_neigh_print() - print a single ELP neighbour node
* @seq: neighbour table seq_file struct * @seq: neighbour table seq_file struct
* @hardif_neigh: hardif neighbour information * @hardif_neigh: hardif neighbour information
*/ */
...@@ -181,7 +182,7 @@ batadv_v_hardif_neigh_print(struct seq_file *seq, ...@@ -181,7 +182,7 @@ batadv_v_hardif_neigh_print(struct seq_file *seq,
} }
/** /**
* batadv_v_neigh_print - print the single hop neighbour list * batadv_v_neigh_print() - print the single hop neighbour list
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @seq: neighbour table seq_file struct * @seq: neighbour table seq_file struct
*/ */
...@@ -215,7 +216,7 @@ static void batadv_v_neigh_print(struct batadv_priv *bat_priv, ...@@ -215,7 +216,7 @@ static void batadv_v_neigh_print(struct batadv_priv *bat_priv,
#endif #endif
/** /**
* batadv_v_neigh_dump_neigh - Dump a neighbour into a message * batadv_v_neigh_dump_neigh() - Dump a neighbour into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -258,7 +259,7 @@ batadv_v_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -258,7 +259,7 @@ batadv_v_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_v_neigh_dump_hardif - Dump the neighbours of a hard interface into * batadv_v_neigh_dump_hardif() - Dump the neighbours of a hard interface into
* a message * a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
...@@ -296,7 +297,7 @@ batadv_v_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -296,7 +297,7 @@ batadv_v_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_v_neigh_dump - Dump the neighbours of a hard interface into a * batadv_v_neigh_dump() - Dump the neighbours of a hard interface into a
* message * message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @cb: Control block containing additional options * @cb: Control block containing additional options
...@@ -348,7 +349,7 @@ batadv_v_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb, ...@@ -348,7 +349,7 @@ batadv_v_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb,
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_v_orig_print - print the originator table * batadv_v_orig_print() - print the originator table
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @seq: debugfs table seq_file struct * @seq: debugfs table seq_file struct
* @if_outgoing: the outgoing interface for which this should be printed * @if_outgoing: the outgoing interface for which this should be printed
...@@ -416,8 +417,7 @@ static void batadv_v_orig_print(struct batadv_priv *bat_priv, ...@@ -416,8 +417,7 @@ static void batadv_v_orig_print(struct batadv_priv *bat_priv,
#endif #endif
/** /**
* batadv_v_orig_dump_subentry - Dump an originator subentry into a * batadv_v_orig_dump_subentry() - Dump an originator subentry into a message
* message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -483,7 +483,7 @@ batadv_v_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -483,7 +483,7 @@ batadv_v_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_v_orig_dump_entry - Dump an originator entry into a message * batadv_v_orig_dump_entry() - Dump an originator entry into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -536,8 +536,7 @@ batadv_v_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -536,8 +536,7 @@ batadv_v_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_v_orig_dump_bucket - Dump an originator bucket into a * batadv_v_orig_dump_bucket() - Dump an originator bucket into a message
* message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -578,7 +577,7 @@ batadv_v_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -578,7 +577,7 @@ batadv_v_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_v_orig_dump - Dump the originators into a message * batadv_v_orig_dump() - Dump the originators into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @cb: Control block containing additional options * @cb: Control block containing additional options
* @bat_priv: The bat priv with all the soft interface information * @bat_priv: The bat priv with all the soft interface information
...@@ -668,7 +667,7 @@ static bool batadv_v_neigh_is_sob(struct batadv_neigh_node *neigh1, ...@@ -668,7 +667,7 @@ static bool batadv_v_neigh_is_sob(struct batadv_neigh_node *neigh1,
} }
/** /**
* batadv_v_init_sel_class - initialize GW selection class * batadv_v_init_sel_class() - initialize GW selection class
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
static void batadv_v_init_sel_class(struct batadv_priv *bat_priv) static void batadv_v_init_sel_class(struct batadv_priv *bat_priv)
...@@ -704,7 +703,7 @@ static ssize_t batadv_v_show_sel_class(struct batadv_priv *bat_priv, char *buff) ...@@ -704,7 +703,7 @@ static ssize_t batadv_v_show_sel_class(struct batadv_priv *bat_priv, char *buff)
} }
/** /**
* batadv_v_gw_throughput_get - retrieve the GW-bandwidth for a given GW * batadv_v_gw_throughput_get() - retrieve the GW-bandwidth for a given GW
* @gw_node: the GW to retrieve the metric for * @gw_node: the GW to retrieve the metric for
* @bw: the pointer where the metric will be stored. The metric is computed as * @bw: the pointer where the metric will be stored. The metric is computed as
* the minimum between the GW advertised throughput and the path throughput to * the minimum between the GW advertised throughput and the path throughput to
...@@ -747,7 +746,7 @@ static int batadv_v_gw_throughput_get(struct batadv_gw_node *gw_node, u32 *bw) ...@@ -747,7 +746,7 @@ static int batadv_v_gw_throughput_get(struct batadv_gw_node *gw_node, u32 *bw)
} }
/** /**
* batadv_v_gw_get_best_gw_node - retrieve the best GW node * batadv_v_gw_get_best_gw_node() - retrieve the best GW node
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Return: the GW node having the best GW-metric, NULL if no GW is known * Return: the GW node having the best GW-metric, NULL if no GW is known
...@@ -785,7 +784,7 @@ batadv_v_gw_get_best_gw_node(struct batadv_priv *bat_priv) ...@@ -785,7 +784,7 @@ batadv_v_gw_get_best_gw_node(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_v_gw_is_eligible - check if a originator would be selected as GW * batadv_v_gw_is_eligible() - check if a originator would be selected as GW
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @curr_gw_orig: originator representing the currently selected GW * @curr_gw_orig: originator representing the currently selected GW
* @orig_node: the originator representing the new candidate * @orig_node: the originator representing the new candidate
...@@ -884,7 +883,7 @@ static int batadv_v_gw_write_buffer_text(struct batadv_priv *bat_priv, ...@@ -884,7 +883,7 @@ static int batadv_v_gw_write_buffer_text(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_v_gw_print - print the gateway list * batadv_v_gw_print() - print the gateway list
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @seq: gateway table seq_file struct * @seq: gateway table seq_file struct
*/ */
...@@ -913,7 +912,7 @@ static void batadv_v_gw_print(struct batadv_priv *bat_priv, ...@@ -913,7 +912,7 @@ static void batadv_v_gw_print(struct batadv_priv *bat_priv,
#endif #endif
/** /**
* batadv_v_gw_dump_entry - Dump a gateway into a message * batadv_v_gw_dump_entry() - Dump a gateway into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -1004,7 +1003,7 @@ static int batadv_v_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -1004,7 +1003,7 @@ static int batadv_v_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_v_gw_dump - Dump gateways into a message * batadv_v_gw_dump() - Dump gateways into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @cb: Control block containing additional options * @cb: Control block containing additional options
* @bat_priv: The bat priv with all the soft interface information * @bat_priv: The bat priv with all the soft interface information
...@@ -1074,7 +1073,7 @@ static struct batadv_algo_ops batadv_batman_v __read_mostly = { ...@@ -1074,7 +1073,7 @@ static struct batadv_algo_ops batadv_batman_v __read_mostly = {
}; };
/** /**
* batadv_v_hardif_init - initialize the algorithm specific fields in the * batadv_v_hardif_init() - initialize the algorithm specific fields in the
* hard-interface object * hard-interface object
* @hard_iface: the hard-interface to initialize * @hard_iface: the hard-interface to initialize
*/ */
...@@ -1088,7 +1087,7 @@ void batadv_v_hardif_init(struct batadv_hard_iface *hard_iface) ...@@ -1088,7 +1087,7 @@ void batadv_v_hardif_init(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_v_mesh_init - initialize the B.A.T.M.A.N. V private resources for a * batadv_v_mesh_init() - initialize the B.A.T.M.A.N. V private resources for a
* mesh * mesh
* @bat_priv: the object representing the mesh interface to initialise * @bat_priv: the object representing the mesh interface to initialise
* *
...@@ -1106,7 +1105,7 @@ int batadv_v_mesh_init(struct batadv_priv *bat_priv) ...@@ -1106,7 +1105,7 @@ int batadv_v_mesh_init(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_v_mesh_free - free the B.A.T.M.A.N. V private resources for a mesh * batadv_v_mesh_free() - free the B.A.T.M.A.N. V private resources for a mesh
* @bat_priv: the object representing the mesh interface to free * @bat_priv: the object representing the mesh interface to free
*/ */
void batadv_v_mesh_free(struct batadv_priv *bat_priv) void batadv_v_mesh_free(struct batadv_priv *bat_priv)
...@@ -1115,7 +1114,7 @@ void batadv_v_mesh_free(struct batadv_priv *bat_priv) ...@@ -1115,7 +1114,7 @@ void batadv_v_mesh_free(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_v_init - B.A.T.M.A.N. V initialization function * batadv_v_init() - B.A.T.M.A.N. V initialization function
* *
* Description: Takes care of initializing all the subcomponents. * Description: Takes care of initializing all the subcomponents.
* It is invoked upon module load only. * It is invoked upon module load only.
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Linus Lüssing * Marek Lindner, Linus Lüssing
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors:
* *
* Linus Lüssing, Marek Lindner * Linus Lüssing, Marek Lindner
...@@ -24,7 +25,7 @@ ...@@ -24,7 +25,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/ethtool.h> #include <linux/ethtool.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -52,7 +53,7 @@ ...@@ -52,7 +53,7 @@
#include "send.h" #include "send.h"
/** /**
* batadv_v_elp_start_timer - restart timer for ELP periodic work * batadv_v_elp_start_timer() - restart timer for ELP periodic work
* @hard_iface: the interface for which the timer has to be reset * @hard_iface: the interface for which the timer has to be reset
*/ */
static void batadv_v_elp_start_timer(struct batadv_hard_iface *hard_iface) static void batadv_v_elp_start_timer(struct batadv_hard_iface *hard_iface)
...@@ -67,7 +68,7 @@ static void batadv_v_elp_start_timer(struct batadv_hard_iface *hard_iface) ...@@ -67,7 +68,7 @@ static void batadv_v_elp_start_timer(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_v_elp_get_throughput - get the throughput towards a neighbour * batadv_v_elp_get_throughput() - get the throughput towards a neighbour
* @neigh: the neighbour for which the throughput has to be obtained * @neigh: the neighbour for which the throughput has to be obtained
* *
* Return: The throughput towards the given neighbour in multiples of 100kpbs * Return: The throughput towards the given neighbour in multiples of 100kpbs
...@@ -153,8 +154,8 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh) ...@@ -153,8 +154,8 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh)
} }
/** /**
* batadv_v_elp_throughput_metric_update - worker updating the throughput metric * batadv_v_elp_throughput_metric_update() - worker updating the throughput
* of a single hop neighbour * metric of a single hop neighbour
* @work: the work queue item * @work: the work queue item
*/ */
void batadv_v_elp_throughput_metric_update(struct work_struct *work) void batadv_v_elp_throughput_metric_update(struct work_struct *work)
...@@ -177,7 +178,7 @@ void batadv_v_elp_throughput_metric_update(struct work_struct *work) ...@@ -177,7 +178,7 @@ void batadv_v_elp_throughput_metric_update(struct work_struct *work)
} }
/** /**
* batadv_v_elp_wifi_neigh_probe - send link probing packets to a neighbour * batadv_v_elp_wifi_neigh_probe() - send link probing packets to a neighbour
* @neigh: the neighbour to probe * @neigh: the neighbour to probe
* *
* Sends a predefined number of unicast wifi packets to a given neighbour in * Sends a predefined number of unicast wifi packets to a given neighbour in
...@@ -240,7 +241,7 @@ batadv_v_elp_wifi_neigh_probe(struct batadv_hardif_neigh_node *neigh) ...@@ -240,7 +241,7 @@ batadv_v_elp_wifi_neigh_probe(struct batadv_hardif_neigh_node *neigh)
} }
/** /**
* batadv_v_elp_periodic_work - ELP periodic task per interface * batadv_v_elp_periodic_work() - ELP periodic task per interface
* @work: work queue item * @work: work queue item
* *
* Emits broadcast ELP message in regular intervals. * Emits broadcast ELP message in regular intervals.
...@@ -327,7 +328,7 @@ static void batadv_v_elp_periodic_work(struct work_struct *work) ...@@ -327,7 +328,7 @@ static void batadv_v_elp_periodic_work(struct work_struct *work)
} }
/** /**
* batadv_v_elp_iface_enable - setup the ELP interface private resources * batadv_v_elp_iface_enable() - setup the ELP interface private resources
* @hard_iface: interface for which the data has to be prepared * @hard_iface: interface for which the data has to be prepared
* *
* Return: 0 on success or a -ENOMEM in case of failure. * Return: 0 on success or a -ENOMEM in case of failure.
...@@ -375,7 +376,7 @@ int batadv_v_elp_iface_enable(struct batadv_hard_iface *hard_iface) ...@@ -375,7 +376,7 @@ int batadv_v_elp_iface_enable(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_v_elp_iface_disable - release ELP interface private resources * batadv_v_elp_iface_disable() - release ELP interface private resources
* @hard_iface: interface for which the resources have to be released * @hard_iface: interface for which the resources have to be released
*/ */
void batadv_v_elp_iface_disable(struct batadv_hard_iface *hard_iface) void batadv_v_elp_iface_disable(struct batadv_hard_iface *hard_iface)
...@@ -387,7 +388,7 @@ void batadv_v_elp_iface_disable(struct batadv_hard_iface *hard_iface) ...@@ -387,7 +388,7 @@ void batadv_v_elp_iface_disable(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_v_elp_iface_activate - update the ELP buffer belonging to the given * batadv_v_elp_iface_activate() - update the ELP buffer belonging to the given
* hard-interface * hard-interface
* @primary_iface: the new primary interface * @primary_iface: the new primary interface
* @hard_iface: interface holding the to-be-updated buffer * @hard_iface: interface holding the to-be-updated buffer
...@@ -408,7 +409,7 @@ void batadv_v_elp_iface_activate(struct batadv_hard_iface *primary_iface, ...@@ -408,7 +409,7 @@ void batadv_v_elp_iface_activate(struct batadv_hard_iface *primary_iface,
} }
/** /**
* batadv_v_elp_primary_iface_set - change internal data to reflect the new * batadv_v_elp_primary_iface_set() - change internal data to reflect the new
* primary interface * primary interface
* @primary_iface: the new primary interface * @primary_iface: the new primary interface
*/ */
...@@ -428,7 +429,7 @@ void batadv_v_elp_primary_iface_set(struct batadv_hard_iface *primary_iface) ...@@ -428,7 +429,7 @@ void batadv_v_elp_primary_iface_set(struct batadv_hard_iface *primary_iface)
} }
/** /**
* batadv_v_elp_neigh_update - update an ELP neighbour node * batadv_v_elp_neigh_update() - update an ELP neighbour node
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @neigh_addr: the neighbour interface address * @neigh_addr: the neighbour interface address
* @if_incoming: the interface the packet was received through * @if_incoming: the interface the packet was received through
...@@ -488,7 +489,7 @@ static void batadv_v_elp_neigh_update(struct batadv_priv *bat_priv, ...@@ -488,7 +489,7 @@ static void batadv_v_elp_neigh_update(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_v_elp_packet_recv - main ELP packet handler * batadv_v_elp_packet_recv() - main ELP packet handler
* @skb: the received packet * @skb: the received packet
* @if_incoming: the interface this packet was received through * @if_incoming: the interface this packet was received through
* *
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors:
* *
* Linus Lüssing, Marek Lindner * Linus Lüssing, Marek Lindner
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors:
* *
* Antonio Quartulli * Antonio Quartulli
...@@ -22,7 +23,7 @@ ...@@ -22,7 +23,7 @@
#include <linux/byteorder/generic.h> #include <linux/byteorder/generic.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -51,7 +52,7 @@ ...@@ -51,7 +52,7 @@
#include "tvlv.h" #include "tvlv.h"
/** /**
* batadv_v_ogm_orig_get - retrieve and possibly create an originator node * batadv_v_ogm_orig_get() - retrieve and possibly create an originator node
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the address of the originator * @addr: the address of the originator
* *
...@@ -88,7 +89,7 @@ struct batadv_orig_node *batadv_v_ogm_orig_get(struct batadv_priv *bat_priv, ...@@ -88,7 +89,7 @@ struct batadv_orig_node *batadv_v_ogm_orig_get(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_v_ogm_start_timer - restart the OGM sending timer * batadv_v_ogm_start_timer() - restart the OGM sending timer
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
static void batadv_v_ogm_start_timer(struct batadv_priv *bat_priv) static void batadv_v_ogm_start_timer(struct batadv_priv *bat_priv)
...@@ -107,7 +108,7 @@ static void batadv_v_ogm_start_timer(struct batadv_priv *bat_priv) ...@@ -107,7 +108,7 @@ static void batadv_v_ogm_start_timer(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_v_ogm_send_to_if - send a batman ogm using a given interface * batadv_v_ogm_send_to_if() - send a batman ogm using a given interface
* @skb: the OGM to send * @skb: the OGM to send
* @hard_iface: the interface to use to send the OGM * @hard_iface: the interface to use to send the OGM
*/ */
...@@ -127,7 +128,7 @@ static void batadv_v_ogm_send_to_if(struct sk_buff *skb, ...@@ -127,7 +128,7 @@ static void batadv_v_ogm_send_to_if(struct sk_buff *skb,
} }
/** /**
* batadv_v_ogm_send - periodic worker broadcasting the own OGM * batadv_v_ogm_send() - periodic worker broadcasting the own OGM
* @work: work queue item * @work: work queue item
*/ */
static void batadv_v_ogm_send(struct work_struct *work) static void batadv_v_ogm_send(struct work_struct *work)
...@@ -235,7 +236,7 @@ static void batadv_v_ogm_send(struct work_struct *work) ...@@ -235,7 +236,7 @@ static void batadv_v_ogm_send(struct work_struct *work)
} }
/** /**
* batadv_v_ogm_iface_enable - prepare an interface for B.A.T.M.A.N. V * batadv_v_ogm_iface_enable() - prepare an interface for B.A.T.M.A.N. V
* @hard_iface: the interface to prepare * @hard_iface: the interface to prepare
* *
* Takes care of scheduling own OGM sending routine for this interface. * Takes care of scheduling own OGM sending routine for this interface.
...@@ -252,7 +253,7 @@ int batadv_v_ogm_iface_enable(struct batadv_hard_iface *hard_iface) ...@@ -252,7 +253,7 @@ int batadv_v_ogm_iface_enable(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_v_ogm_primary_iface_set - set a new primary interface * batadv_v_ogm_primary_iface_set() - set a new primary interface
* @primary_iface: the new primary interface * @primary_iface: the new primary interface
*/ */
void batadv_v_ogm_primary_iface_set(struct batadv_hard_iface *primary_iface) void batadv_v_ogm_primary_iface_set(struct batadv_hard_iface *primary_iface)
...@@ -268,8 +269,8 @@ void batadv_v_ogm_primary_iface_set(struct batadv_hard_iface *primary_iface) ...@@ -268,8 +269,8 @@ void batadv_v_ogm_primary_iface_set(struct batadv_hard_iface *primary_iface)
} }
/** /**
* batadv_v_forward_penalty - apply a penalty to the throughput metric forwarded * batadv_v_forward_penalty() - apply a penalty to the throughput metric
* with B.A.T.M.A.N. V OGMs * forwarded with B.A.T.M.A.N. V OGMs
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @if_incoming: the interface where the OGM has been received * @if_incoming: the interface where the OGM has been received
* @if_outgoing: the interface where the OGM has to be forwarded to * @if_outgoing: the interface where the OGM has to be forwarded to
...@@ -314,7 +315,7 @@ static u32 batadv_v_forward_penalty(struct batadv_priv *bat_priv, ...@@ -314,7 +315,7 @@ static u32 batadv_v_forward_penalty(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_v_ogm_forward - check conditions and forward an OGM to the given * batadv_v_ogm_forward() - check conditions and forward an OGM to the given
* outgoing interface * outgoing interface
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ogm_received: previously received OGM to be forwarded * @ogm_received: previously received OGM to be forwarded
...@@ -405,7 +406,7 @@ static void batadv_v_ogm_forward(struct batadv_priv *bat_priv, ...@@ -405,7 +406,7 @@ static void batadv_v_ogm_forward(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_v_ogm_metric_update - update route metric based on OGM * batadv_v_ogm_metric_update() - update route metric based on OGM
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ogm2: OGM2 structure * @ogm2: OGM2 structure
* @orig_node: Originator structure for which the OGM has been received * @orig_node: Originator structure for which the OGM has been received
...@@ -490,7 +491,7 @@ static int batadv_v_ogm_metric_update(struct batadv_priv *bat_priv, ...@@ -490,7 +491,7 @@ static int batadv_v_ogm_metric_update(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_v_ogm_route_update - update routes based on OGM * batadv_v_ogm_route_update() - update routes based on OGM
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ethhdr: the Ethernet header of the OGM2 * @ethhdr: the Ethernet header of the OGM2
* @ogm2: OGM2 structure * @ogm2: OGM2 structure
...@@ -590,7 +591,7 @@ static bool batadv_v_ogm_route_update(struct batadv_priv *bat_priv, ...@@ -590,7 +591,7 @@ static bool batadv_v_ogm_route_update(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_v_ogm_process_per_outif - process a batman v OGM for an outgoing if * batadv_v_ogm_process_per_outif() - process a batman v OGM for an outgoing if
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ethhdr: the Ethernet header of the OGM2 * @ethhdr: the Ethernet header of the OGM2
* @ogm2: OGM2 structure * @ogm2: OGM2 structure
...@@ -639,7 +640,7 @@ batadv_v_ogm_process_per_outif(struct batadv_priv *bat_priv, ...@@ -639,7 +640,7 @@ batadv_v_ogm_process_per_outif(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_v_ogm_aggr_packet - checks if there is another OGM aggregated * batadv_v_ogm_aggr_packet() - checks if there is another OGM aggregated
* @buff_pos: current position in the skb * @buff_pos: current position in the skb
* @packet_len: total length of the skb * @packet_len: total length of the skb
* @tvlv_len: tvlv length of the previously considered OGM * @tvlv_len: tvlv length of the previously considered OGM
...@@ -659,7 +660,7 @@ static bool batadv_v_ogm_aggr_packet(int buff_pos, int packet_len, ...@@ -659,7 +660,7 @@ static bool batadv_v_ogm_aggr_packet(int buff_pos, int packet_len,
} }
/** /**
* batadv_v_ogm_process - process an incoming batman v OGM * batadv_v_ogm_process() - process an incoming batman v OGM
* @skb: the skb containing the OGM * @skb: the skb containing the OGM
* @ogm_offset: offset to the OGM which should be processed (for aggregates) * @ogm_offset: offset to the OGM which should be processed (for aggregates)
* @if_incoming: the interface where this packet was receved * @if_incoming: the interface where this packet was receved
...@@ -787,7 +788,7 @@ static void batadv_v_ogm_process(const struct sk_buff *skb, int ogm_offset, ...@@ -787,7 +788,7 @@ static void batadv_v_ogm_process(const struct sk_buff *skb, int ogm_offset,
} }
/** /**
* batadv_v_ogm_packet_recv - OGM2 receiving handler * batadv_v_ogm_packet_recv() - OGM2 receiving handler
* @skb: the received OGM * @skb: the received OGM
* @if_incoming: the interface where this OGM has been received * @if_incoming: the interface where this OGM has been received
* *
...@@ -851,7 +852,7 @@ int batadv_v_ogm_packet_recv(struct sk_buff *skb, ...@@ -851,7 +852,7 @@ int batadv_v_ogm_packet_recv(struct sk_buff *skb,
} }
/** /**
* batadv_v_ogm_init - initialise the OGM2 engine * batadv_v_ogm_init() - initialise the OGM2 engine
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Return: 0 on success or a negative error code in case of failure * Return: 0 on success or a negative error code in case of failure
...@@ -884,7 +885,7 @@ int batadv_v_ogm_init(struct batadv_priv *bat_priv) ...@@ -884,7 +885,7 @@ int batadv_v_ogm_init(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_v_ogm_free - free OGM private resources * batadv_v_ogm_free() - free OGM private resources
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
void batadv_v_ogm_free(struct batadv_priv *bat_priv) void batadv_v_ogm_free(struct batadv_priv *bat_priv)
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors:
* *
* Antonio Quartulli * Antonio Quartulli
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2006-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2006-2017 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich, Marek Lindner * Simon Wunderlich, Marek Lindner
...@@ -32,7 +33,7 @@ static void batadv_bitmap_shift_left(unsigned long *seq_bits, s32 n) ...@@ -32,7 +33,7 @@ static void batadv_bitmap_shift_left(unsigned long *seq_bits, s32 n)
} }
/** /**
* batadv_bit_get_packet - receive and process one packet within the sequence * batadv_bit_get_packet() - receive and process one packet within the sequence
* number window * number window
* @priv: the bat priv with all the soft interface information * @priv: the bat priv with all the soft interface information
* @seq_bits: pointer to the sequence number receive packet * @seq_bits: pointer to the sequence number receive packet
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2006-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2006-2017 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich, Marek Lindner * Simon Wunderlich, Marek Lindner
...@@ -26,7 +27,7 @@ ...@@ -26,7 +27,7 @@
#include <linux/types.h> #include <linux/types.h>
/** /**
* batadv_test_bit - check if bit is set in the current window * batadv_test_bit() - check if bit is set in the current window
* *
* @seq_bits: pointer to the sequence number receive packet * @seq_bits: pointer to the sequence number receive packet
* @last_seqno: latest sequence number in seq_bits * @last_seqno: latest sequence number in seq_bits
...@@ -46,7 +47,12 @@ static inline bool batadv_test_bit(const unsigned long *seq_bits, ...@@ -46,7 +47,12 @@ static inline bool batadv_test_bit(const unsigned long *seq_bits,
return test_bit(diff, seq_bits) != 0; return test_bit(diff, seq_bits) != 0;
} }
/* turn corresponding bit on, so we can remember that we got the packet */ /**
* batadv_set_bit() - Turn corresponding bit on, so we can remember that we got
* the packet
* @seq_bits: bitmap of the packet receive window
* @n: relative sequence number of newly received packet
*/
static inline void batadv_set_bit(unsigned long *seq_bits, s32 n) static inline void batadv_set_bit(unsigned long *seq_bits, s32 n)
{ {
/* if too old, just drop it */ /* if too old, just drop it */
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich * Simon Wunderlich
...@@ -24,7 +25,7 @@ ...@@ -24,7 +25,7 @@
#include <linux/crc16.h> #include <linux/crc16.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_arp.h> #include <linux/if_arp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
...@@ -69,7 +70,7 @@ batadv_bla_send_announce(struct batadv_priv *bat_priv, ...@@ -69,7 +70,7 @@ batadv_bla_send_announce(struct batadv_priv *bat_priv,
struct batadv_bla_backbone_gw *backbone_gw); struct batadv_bla_backbone_gw *backbone_gw);
/** /**
* batadv_choose_claim - choose the right bucket for a claim. * batadv_choose_claim() - choose the right bucket for a claim.
* @data: data to hash * @data: data to hash
* @size: size of the hash table * @size: size of the hash table
* *
...@@ -87,7 +88,7 @@ static inline u32 batadv_choose_claim(const void *data, u32 size) ...@@ -87,7 +88,7 @@ static inline u32 batadv_choose_claim(const void *data, u32 size)
} }
/** /**
* batadv_choose_backbone_gw - choose the right bucket for a backbone gateway. * batadv_choose_backbone_gw() - choose the right bucket for a backbone gateway.
* @data: data to hash * @data: data to hash
* @size: size of the hash table * @size: size of the hash table
* *
...@@ -105,7 +106,7 @@ static inline u32 batadv_choose_backbone_gw(const void *data, u32 size) ...@@ -105,7 +106,7 @@ static inline u32 batadv_choose_backbone_gw(const void *data, u32 size)
} }
/** /**
* batadv_compare_backbone_gw - compare address and vid of two backbone gws * batadv_compare_backbone_gw() - compare address and vid of two backbone gws
* @node: list node of the first entry to compare * @node: list node of the first entry to compare
* @data2: pointer to the second backbone gateway * @data2: pointer to the second backbone gateway
* *
...@@ -129,7 +130,7 @@ static bool batadv_compare_backbone_gw(const struct hlist_node *node, ...@@ -129,7 +130,7 @@ static bool batadv_compare_backbone_gw(const struct hlist_node *node,
} }
/** /**
* batadv_compare_claim - compare address and vid of two claims * batadv_compare_claim() - compare address and vid of two claims
* @node: list node of the first entry to compare * @node: list node of the first entry to compare
* @data2: pointer to the second claims * @data2: pointer to the second claims
* *
...@@ -153,7 +154,7 @@ static bool batadv_compare_claim(const struct hlist_node *node, ...@@ -153,7 +154,7 @@ static bool batadv_compare_claim(const struct hlist_node *node,
} }
/** /**
* batadv_backbone_gw_release - release backbone gw from lists and queue for * batadv_backbone_gw_release() - release backbone gw from lists and queue for
* free after rcu grace period * free after rcu grace period
* @ref: kref pointer of the backbone gw * @ref: kref pointer of the backbone gw
*/ */
...@@ -168,7 +169,7 @@ static void batadv_backbone_gw_release(struct kref *ref) ...@@ -168,7 +169,7 @@ static void batadv_backbone_gw_release(struct kref *ref)
} }
/** /**
* batadv_backbone_gw_put - decrement the backbone gw refcounter and possibly * batadv_backbone_gw_put() - decrement the backbone gw refcounter and possibly
* release it * release it
* @backbone_gw: backbone gateway to be free'd * @backbone_gw: backbone gateway to be free'd
*/ */
...@@ -178,8 +179,8 @@ static void batadv_backbone_gw_put(struct batadv_bla_backbone_gw *backbone_gw) ...@@ -178,8 +179,8 @@ static void batadv_backbone_gw_put(struct batadv_bla_backbone_gw *backbone_gw)
} }
/** /**
* batadv_claim_release - release claim from lists and queue for free after rcu * batadv_claim_release() - release claim from lists and queue for free after
* grace period * rcu grace period
* @ref: kref pointer of the claim * @ref: kref pointer of the claim
*/ */
static void batadv_claim_release(struct kref *ref) static void batadv_claim_release(struct kref *ref)
...@@ -204,8 +205,7 @@ static void batadv_claim_release(struct kref *ref) ...@@ -204,8 +205,7 @@ static void batadv_claim_release(struct kref *ref)
} }
/** /**
* batadv_claim_put - decrement the claim refcounter and possibly * batadv_claim_put() - decrement the claim refcounter and possibly release it
* release it
* @claim: claim to be free'd * @claim: claim to be free'd
*/ */
static void batadv_claim_put(struct batadv_bla_claim *claim) static void batadv_claim_put(struct batadv_bla_claim *claim)
...@@ -214,7 +214,7 @@ static void batadv_claim_put(struct batadv_bla_claim *claim) ...@@ -214,7 +214,7 @@ static void batadv_claim_put(struct batadv_bla_claim *claim)
} }
/** /**
* batadv_claim_hash_find - looks for a claim in the claim hash * batadv_claim_hash_find() - looks for a claim in the claim hash
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @data: search data (may be local/static data) * @data: search data (may be local/static data)
* *
...@@ -253,7 +253,7 @@ batadv_claim_hash_find(struct batadv_priv *bat_priv, ...@@ -253,7 +253,7 @@ batadv_claim_hash_find(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_backbone_hash_find - looks for a backbone gateway in the hash * batadv_backbone_hash_find() - looks for a backbone gateway in the hash
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the address of the originator * @addr: the address of the originator
* @vid: the VLAN ID * @vid: the VLAN ID
...@@ -297,7 +297,7 @@ batadv_backbone_hash_find(struct batadv_priv *bat_priv, u8 *addr, ...@@ -297,7 +297,7 @@ batadv_backbone_hash_find(struct batadv_priv *bat_priv, u8 *addr,
} }
/** /**
* batadv_bla_del_backbone_claims - delete all claims for a backbone * batadv_bla_del_backbone_claims() - delete all claims for a backbone
* @backbone_gw: backbone gateway where the claims should be removed * @backbone_gw: backbone gateway where the claims should be removed
*/ */
static void static void
...@@ -337,7 +337,7 @@ batadv_bla_del_backbone_claims(struct batadv_bla_backbone_gw *backbone_gw) ...@@ -337,7 +337,7 @@ batadv_bla_del_backbone_claims(struct batadv_bla_backbone_gw *backbone_gw)
} }
/** /**
* batadv_bla_send_claim - sends a claim frame according to the provided info * batadv_bla_send_claim() - sends a claim frame according to the provided info
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @mac: the mac address to be announced within the claim * @mac: the mac address to be announced within the claim
* @vid: the VLAN ID * @vid: the VLAN ID
...@@ -457,7 +457,7 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, u8 *mac, ...@@ -457,7 +457,7 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, u8 *mac,
} }
/** /**
* batadv_bla_loopdetect_report - worker for reporting the loop * batadv_bla_loopdetect_report() - worker for reporting the loop
* @work: work queue item * @work: work queue item
* *
* Throws an uevent, as the loopdetect check function can't do that itself * Throws an uevent, as the loopdetect check function can't do that itself
...@@ -487,7 +487,7 @@ static void batadv_bla_loopdetect_report(struct work_struct *work) ...@@ -487,7 +487,7 @@ static void batadv_bla_loopdetect_report(struct work_struct *work)
} }
/** /**
* batadv_bla_get_backbone_gw - finds or creates a backbone gateway * batadv_bla_get_backbone_gw() - finds or creates a backbone gateway
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig: the mac address of the originator * @orig: the mac address of the originator
* @vid: the VLAN ID * @vid: the VLAN ID
...@@ -560,7 +560,7 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, u8 *orig, ...@@ -560,7 +560,7 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, u8 *orig,
} }
/** /**
* batadv_bla_update_own_backbone_gw - updates the own backbone gw for a VLAN * batadv_bla_update_own_backbone_gw() - updates the own backbone gw for a VLAN
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @primary_if: the selected primary interface * @primary_if: the selected primary interface
* @vid: VLAN identifier * @vid: VLAN identifier
...@@ -586,7 +586,7 @@ batadv_bla_update_own_backbone_gw(struct batadv_priv *bat_priv, ...@@ -586,7 +586,7 @@ batadv_bla_update_own_backbone_gw(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_bla_answer_request - answer a bla request by sending own claims * batadv_bla_answer_request() - answer a bla request by sending own claims
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @primary_if: interface where the request came on * @primary_if: interface where the request came on
* @vid: the vid where the request came on * @vid: the vid where the request came on
...@@ -636,7 +636,7 @@ static void batadv_bla_answer_request(struct batadv_priv *bat_priv, ...@@ -636,7 +636,7 @@ static void batadv_bla_answer_request(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_bla_send_request - send a request to repeat claims * batadv_bla_send_request() - send a request to repeat claims
* @backbone_gw: the backbone gateway from whom we are out of sync * @backbone_gw: the backbone gateway from whom we are out of sync
* *
* When the crc is wrong, ask the backbone gateway for a full table update. * When the crc is wrong, ask the backbone gateway for a full table update.
...@@ -663,7 +663,7 @@ static void batadv_bla_send_request(struct batadv_bla_backbone_gw *backbone_gw) ...@@ -663,7 +663,7 @@ static void batadv_bla_send_request(struct batadv_bla_backbone_gw *backbone_gw)
} }
/** /**
* batadv_bla_send_announce - Send an announcement frame * batadv_bla_send_announce() - Send an announcement frame
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @backbone_gw: our backbone gateway which should be announced * @backbone_gw: our backbone gateway which should be announced
*/ */
...@@ -684,7 +684,7 @@ static void batadv_bla_send_announce(struct batadv_priv *bat_priv, ...@@ -684,7 +684,7 @@ static void batadv_bla_send_announce(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_bla_add_claim - Adds a claim in the claim hash * batadv_bla_add_claim() - Adds a claim in the claim hash
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @mac: the mac address of the claim * @mac: the mac address of the claim
* @vid: the VLAN ID of the frame * @vid: the VLAN ID of the frame
...@@ -774,7 +774,7 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv, ...@@ -774,7 +774,7 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_bla_claim_get_backbone_gw - Get valid reference for backbone_gw of * batadv_bla_claim_get_backbone_gw() - Get valid reference for backbone_gw of
* claim * claim
* @claim: claim whose backbone_gw should be returned * @claim: claim whose backbone_gw should be returned
* *
...@@ -794,7 +794,7 @@ batadv_bla_claim_get_backbone_gw(struct batadv_bla_claim *claim) ...@@ -794,7 +794,7 @@ batadv_bla_claim_get_backbone_gw(struct batadv_bla_claim *claim)
} }
/** /**
* batadv_bla_del_claim - delete a claim from the claim hash * batadv_bla_del_claim() - delete a claim from the claim hash
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @mac: mac address of the claim to be removed * @mac: mac address of the claim to be removed
* @vid: VLAN id for the claim to be removed * @vid: VLAN id for the claim to be removed
...@@ -822,7 +822,7 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv, ...@@ -822,7 +822,7 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_handle_announce - check for ANNOUNCE frame * batadv_handle_announce() - check for ANNOUNCE frame
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @an_addr: announcement mac address (ARP Sender HW address) * @an_addr: announcement mac address (ARP Sender HW address)
* @backbone_addr: originator address of the sender (Ethernet source MAC) * @backbone_addr: originator address of the sender (Ethernet source MAC)
...@@ -880,7 +880,7 @@ static bool batadv_handle_announce(struct batadv_priv *bat_priv, u8 *an_addr, ...@@ -880,7 +880,7 @@ static bool batadv_handle_announce(struct batadv_priv *bat_priv, u8 *an_addr,
} }
/** /**
* batadv_handle_request - check for REQUEST frame * batadv_handle_request() - check for REQUEST frame
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @primary_if: the primary hard interface of this batman soft interface * @primary_if: the primary hard interface of this batman soft interface
* @backbone_addr: backbone address to be requested (ARP sender HW MAC) * @backbone_addr: backbone address to be requested (ARP sender HW MAC)
...@@ -913,7 +913,7 @@ static bool batadv_handle_request(struct batadv_priv *bat_priv, ...@@ -913,7 +913,7 @@ static bool batadv_handle_request(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_handle_unclaim - check for UNCLAIM frame * batadv_handle_unclaim() - check for UNCLAIM frame
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @primary_if: the primary hard interface of this batman soft interface * @primary_if: the primary hard interface of this batman soft interface
* @backbone_addr: originator address of the backbone (Ethernet source) * @backbone_addr: originator address of the backbone (Ethernet source)
...@@ -951,7 +951,7 @@ static bool batadv_handle_unclaim(struct batadv_priv *bat_priv, ...@@ -951,7 +951,7 @@ static bool batadv_handle_unclaim(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_handle_claim - check for CLAIM frame * batadv_handle_claim() - check for CLAIM frame
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @primary_if: the primary hard interface of this batman soft interface * @primary_if: the primary hard interface of this batman soft interface
* @backbone_addr: originator address of the backbone (Ethernet Source) * @backbone_addr: originator address of the backbone (Ethernet Source)
...@@ -988,7 +988,7 @@ static bool batadv_handle_claim(struct batadv_priv *bat_priv, ...@@ -988,7 +988,7 @@ static bool batadv_handle_claim(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_check_claim_group - check for claim group membership * batadv_check_claim_group() - check for claim group membership
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @primary_if: the primary interface of this batman interface * @primary_if: the primary interface of this batman interface
* @hw_src: the Hardware source in the ARP Header * @hw_src: the Hardware source in the ARP Header
...@@ -1063,7 +1063,7 @@ static int batadv_check_claim_group(struct batadv_priv *bat_priv, ...@@ -1063,7 +1063,7 @@ static int batadv_check_claim_group(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_bla_process_claim - Check if this is a claim frame, and process it * batadv_bla_process_claim() - Check if this is a claim frame, and process it
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @primary_if: the primary hard interface of this batman soft interface * @primary_if: the primary hard interface of this batman soft interface
* @skb: the frame to be checked * @skb: the frame to be checked
...@@ -1205,7 +1205,7 @@ static bool batadv_bla_process_claim(struct batadv_priv *bat_priv, ...@@ -1205,7 +1205,7 @@ static bool batadv_bla_process_claim(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_bla_purge_backbone_gw - Remove backbone gateways after a timeout or * batadv_bla_purge_backbone_gw() - Remove backbone gateways after a timeout or
* immediately * immediately
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @now: whether the whole hash shall be wiped now * @now: whether the whole hash shall be wiped now
...@@ -1258,7 +1258,7 @@ static void batadv_bla_purge_backbone_gw(struct batadv_priv *bat_priv, int now) ...@@ -1258,7 +1258,7 @@ static void batadv_bla_purge_backbone_gw(struct batadv_priv *bat_priv, int now)
} }
/** /**
* batadv_bla_purge_claims - Remove claims after a timeout or immediately * batadv_bla_purge_claims() - Remove claims after a timeout or immediately
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @primary_if: the selected primary interface, may be NULL if now is set * @primary_if: the selected primary interface, may be NULL if now is set
* @now: whether the whole hash shall be wiped now * @now: whether the whole hash shall be wiped now
...@@ -1316,7 +1316,7 @@ static void batadv_bla_purge_claims(struct batadv_priv *bat_priv, ...@@ -1316,7 +1316,7 @@ static void batadv_bla_purge_claims(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_bla_update_orig_address - Update the backbone gateways when the own * batadv_bla_update_orig_address() - Update the backbone gateways when the own
* originator address changes * originator address changes
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @primary_if: the new selected primary_if * @primary_if: the new selected primary_if
...@@ -1372,7 +1372,7 @@ void batadv_bla_update_orig_address(struct batadv_priv *bat_priv, ...@@ -1372,7 +1372,7 @@ void batadv_bla_update_orig_address(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_bla_send_loopdetect - send a loopdetect frame * batadv_bla_send_loopdetect() - send a loopdetect frame
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @backbone_gw: the backbone gateway for which a loop should be detected * @backbone_gw: the backbone gateway for which a loop should be detected
* *
...@@ -1392,7 +1392,7 @@ batadv_bla_send_loopdetect(struct batadv_priv *bat_priv, ...@@ -1392,7 +1392,7 @@ batadv_bla_send_loopdetect(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_bla_status_update - purge bla interfaces if necessary * batadv_bla_status_update() - purge bla interfaces if necessary
* @net_dev: the soft interface net device * @net_dev: the soft interface net device
*/ */
void batadv_bla_status_update(struct net_device *net_dev) void batadv_bla_status_update(struct net_device *net_dev)
...@@ -1412,7 +1412,7 @@ void batadv_bla_status_update(struct net_device *net_dev) ...@@ -1412,7 +1412,7 @@ void batadv_bla_status_update(struct net_device *net_dev)
} }
/** /**
* batadv_bla_periodic_work - performs periodic bla work * batadv_bla_periodic_work() - performs periodic bla work
* @work: kernel work struct * @work: kernel work struct
* *
* periodic work to do: * periodic work to do:
...@@ -1517,7 +1517,7 @@ static struct lock_class_key batadv_claim_hash_lock_class_key; ...@@ -1517,7 +1517,7 @@ static struct lock_class_key batadv_claim_hash_lock_class_key;
static struct lock_class_key batadv_backbone_hash_lock_class_key; static struct lock_class_key batadv_backbone_hash_lock_class_key;
/** /**
* batadv_bla_init - initialize all bla structures * batadv_bla_init() - initialize all bla structures
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Return: 0 on success, < 0 on error. * Return: 0 on success, < 0 on error.
...@@ -1579,7 +1579,7 @@ int batadv_bla_init(struct batadv_priv *bat_priv) ...@@ -1579,7 +1579,7 @@ int batadv_bla_init(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_bla_check_bcast_duplist - Check if a frame is in the broadcast dup. * batadv_bla_check_bcast_duplist() - Check if a frame is in the broadcast dup.
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: contains the bcast_packet to be checked * @skb: contains the bcast_packet to be checked
* *
...@@ -1652,7 +1652,7 @@ bool batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv, ...@@ -1652,7 +1652,7 @@ bool batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_bla_is_backbone_gw_orig - Check if the originator is a gateway for * batadv_bla_is_backbone_gw_orig() - Check if the originator is a gateway for
* the VLAN identified by vid. * the VLAN identified by vid.
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig: originator mac address * @orig: originator mac address
...@@ -1692,7 +1692,7 @@ bool batadv_bla_is_backbone_gw_orig(struct batadv_priv *bat_priv, u8 *orig, ...@@ -1692,7 +1692,7 @@ bool batadv_bla_is_backbone_gw_orig(struct batadv_priv *bat_priv, u8 *orig,
} }
/** /**
* batadv_bla_is_backbone_gw - check if originator is a backbone gw for a VLAN. * batadv_bla_is_backbone_gw() - check if originator is a backbone gw for a VLAN
* @skb: the frame to be checked * @skb: the frame to be checked
* @orig_node: the orig_node of the frame * @orig_node: the orig_node of the frame
* @hdr_size: maximum length of the frame * @hdr_size: maximum length of the frame
...@@ -1726,7 +1726,7 @@ bool batadv_bla_is_backbone_gw(struct sk_buff *skb, ...@@ -1726,7 +1726,7 @@ bool batadv_bla_is_backbone_gw(struct sk_buff *skb,
} }
/** /**
* batadv_bla_free - free all bla structures * batadv_bla_free() - free all bla structures
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* for softinterface free or module unload * for softinterface free or module unload
...@@ -1753,7 +1753,7 @@ void batadv_bla_free(struct batadv_priv *bat_priv) ...@@ -1753,7 +1753,7 @@ void batadv_bla_free(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_bla_loopdetect_check - check and handle a detected loop * batadv_bla_loopdetect_check() - check and handle a detected loop
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the packet to check * @skb: the packet to check
* @primary_if: interface where the request came on * @primary_if: interface where the request came on
...@@ -1802,7 +1802,7 @@ batadv_bla_loopdetect_check(struct batadv_priv *bat_priv, struct sk_buff *skb, ...@@ -1802,7 +1802,7 @@ batadv_bla_loopdetect_check(struct batadv_priv *bat_priv, struct sk_buff *skb,
} }
/** /**
* batadv_bla_rx - check packets coming from the mesh. * batadv_bla_rx() - check packets coming from the mesh.
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the frame to be checked * @skb: the frame to be checked
* @vid: the VLAN ID of the frame * @vid: the VLAN ID of the frame
...@@ -1914,7 +1914,7 @@ bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, ...@@ -1914,7 +1914,7 @@ bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb,
} }
/** /**
* batadv_bla_tx - check packets going into the mesh * batadv_bla_tx() - check packets going into the mesh
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the frame to be checked * @skb: the frame to be checked
* @vid: the VLAN ID of the frame * @vid: the VLAN ID of the frame
...@@ -2022,7 +2022,7 @@ bool batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb, ...@@ -2022,7 +2022,7 @@ bool batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb,
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_bla_claim_table_seq_print_text - print the claim table in a seq file * batadv_bla_claim_table_seq_print_text() - print the claim table in a seq file
* @seq: seq file to print on * @seq: seq file to print on
* @offset: not used * @offset: not used
* *
...@@ -2084,7 +2084,7 @@ int batadv_bla_claim_table_seq_print_text(struct seq_file *seq, void *offset) ...@@ -2084,7 +2084,7 @@ int batadv_bla_claim_table_seq_print_text(struct seq_file *seq, void *offset)
#endif #endif
/** /**
* batadv_bla_claim_dump_entry - dump one entry of the claim table * batadv_bla_claim_dump_entry() - dump one entry of the claim table
* to a netlink socket * to a netlink socket
* @msg: buffer for the message * @msg: buffer for the message
* @portid: netlink port * @portid: netlink port
...@@ -2143,7 +2143,7 @@ batadv_bla_claim_dump_entry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2143,7 +2143,7 @@ batadv_bla_claim_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_bla_claim_dump_bucket - dump one bucket of the claim table * batadv_bla_claim_dump_bucket() - dump one bucket of the claim table
* to a netlink socket * to a netlink socket
* @msg: buffer for the message * @msg: buffer for the message
* @portid: netlink port * @portid: netlink port
...@@ -2180,7 +2180,7 @@ batadv_bla_claim_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2180,7 +2180,7 @@ batadv_bla_claim_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_bla_claim_dump - dump claim table to a netlink socket * batadv_bla_claim_dump() - dump claim table to a netlink socket
* @msg: buffer for the message * @msg: buffer for the message
* @cb: callback structure containing arguments * @cb: callback structure containing arguments
* *
...@@ -2247,8 +2247,8 @@ int batadv_bla_claim_dump(struct sk_buff *msg, struct netlink_callback *cb) ...@@ -2247,8 +2247,8 @@ int batadv_bla_claim_dump(struct sk_buff *msg, struct netlink_callback *cb)
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_bla_backbone_table_seq_print_text - print the backbone table in a seq * batadv_bla_backbone_table_seq_print_text() - print the backbone table in a
* file * seq file
* @seq: seq file to print on * @seq: seq file to print on
* @offset: not used * @offset: not used
* *
...@@ -2312,8 +2312,8 @@ int batadv_bla_backbone_table_seq_print_text(struct seq_file *seq, void *offset) ...@@ -2312,8 +2312,8 @@ int batadv_bla_backbone_table_seq_print_text(struct seq_file *seq, void *offset)
#endif #endif
/** /**
* batadv_bla_backbone_dump_entry - dump one entry of the backbone table * batadv_bla_backbone_dump_entry() - dump one entry of the backbone table to a
* to a netlink socket * netlink socket
* @msg: buffer for the message * @msg: buffer for the message
* @portid: netlink port * @portid: netlink port
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -2373,8 +2373,8 @@ batadv_bla_backbone_dump_entry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2373,8 +2373,8 @@ batadv_bla_backbone_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_bla_backbone_dump_bucket - dump one bucket of the backbone table * batadv_bla_backbone_dump_bucket() - dump one bucket of the backbone table to
* to a netlink socket * a netlink socket
* @msg: buffer for the message * @msg: buffer for the message
* @portid: netlink port * @portid: netlink port
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -2410,7 +2410,7 @@ batadv_bla_backbone_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2410,7 +2410,7 @@ batadv_bla_backbone_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_bla_backbone_dump - dump backbone table to a netlink socket * batadv_bla_backbone_dump() - dump backbone table to a netlink socket
* @msg: buffer for the message * @msg: buffer for the message
* @cb: callback structure containing arguments * @cb: callback structure containing arguments
* *
...@@ -2477,7 +2477,7 @@ int batadv_bla_backbone_dump(struct sk_buff *msg, struct netlink_callback *cb) ...@@ -2477,7 +2477,7 @@ int batadv_bla_backbone_dump(struct sk_buff *msg, struct netlink_callback *cb)
#ifdef CONFIG_BATMAN_ADV_DAT #ifdef CONFIG_BATMAN_ADV_DAT
/** /**
* batadv_bla_check_claim - check if address is claimed * batadv_bla_check_claim() - check if address is claimed
* *
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: mac address of which the claim status is checked * @addr: mac address of which the claim status is checked
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich * Simon Wunderlich
...@@ -30,8 +31,8 @@ struct seq_file; ...@@ -30,8 +31,8 @@ struct seq_file;
struct sk_buff; struct sk_buff;
/** /**
* batadv_bla_is_loopdetect_mac - check if the mac address is from a loop detect * batadv_bla_is_loopdetect_mac() - check if the mac address is from a loop
* frame sent by bridge loop avoidance * detect frame sent by bridge loop avoidance
* @mac: mac address to check * @mac: mac address to check
* *
* Return: true if the it looks like a loop detect frame * Return: true if the it looks like a loop detect frame
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2010-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2010-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
...@@ -25,7 +26,6 @@ ...@@ -25,7 +26,6 @@
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/printk.h> #include <linux/printk.h>
#include <linux/sched.h> /* for linux/wait.h */
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/stat.h> #include <linux/stat.h>
#include <linux/stddef.h> #include <linux/stddef.h>
...@@ -66,8 +66,8 @@ static int batadv_originators_open(struct inode *inode, struct file *file) ...@@ -66,8 +66,8 @@ static int batadv_originators_open(struct inode *inode, struct file *file)
} }
/** /**
* batadv_originators_hardif_open - handles debugfs output for the * batadv_originators_hardif_open() - handles debugfs output for the originator
* originator table of an hard interface * table of an hard interface
* @inode: inode pointer to debugfs file * @inode: inode pointer to debugfs file
* @file: pointer to the seq_file * @file: pointer to the seq_file
* *
...@@ -117,7 +117,7 @@ static int batadv_bla_backbone_table_open(struct inode *inode, ...@@ -117,7 +117,7 @@ static int batadv_bla_backbone_table_open(struct inode *inode,
#ifdef CONFIG_BATMAN_ADV_DAT #ifdef CONFIG_BATMAN_ADV_DAT
/** /**
* batadv_dat_cache_open - Prepare file handler for reads from dat_chache * batadv_dat_cache_open() - Prepare file handler for reads from dat_chache
* @inode: inode which was opened * @inode: inode which was opened
* @file: file handle to be initialized * @file: file handle to be initialized
* *
...@@ -154,7 +154,7 @@ static int batadv_nc_nodes_open(struct inode *inode, struct file *file) ...@@ -154,7 +154,7 @@ static int batadv_nc_nodes_open(struct inode *inode, struct file *file)
#ifdef CONFIG_BATMAN_ADV_MCAST #ifdef CONFIG_BATMAN_ADV_MCAST
/** /**
* batadv_mcast_flags_open - prepare file handler for reads from mcast_flags * batadv_mcast_flags_open() - prepare file handler for reads from mcast_flags
* @inode: inode which was opened * @inode: inode which was opened
* @file: file handle to be initialized * @file: file handle to be initialized
* *
...@@ -259,6 +259,9 @@ static struct batadv_debuginfo *batadv_hardif_debuginfos[] = { ...@@ -259,6 +259,9 @@ static struct batadv_debuginfo *batadv_hardif_debuginfos[] = {
NULL, NULL,
}; };
/**
* batadv_debugfs_init() - Initialize soft interface independent debugfs entries
*/
void batadv_debugfs_init(void) void batadv_debugfs_init(void)
{ {
struct batadv_debuginfo **bat_debug; struct batadv_debuginfo **bat_debug;
...@@ -289,6 +292,9 @@ void batadv_debugfs_init(void) ...@@ -289,6 +292,9 @@ void batadv_debugfs_init(void)
batadv_debugfs = NULL; batadv_debugfs = NULL;
} }
/**
* batadv_debugfs_destroy() - Remove all debugfs entries
*/
void batadv_debugfs_destroy(void) void batadv_debugfs_destroy(void)
{ {
debugfs_remove_recursive(batadv_debugfs); debugfs_remove_recursive(batadv_debugfs);
...@@ -296,7 +302,7 @@ void batadv_debugfs_destroy(void) ...@@ -296,7 +302,7 @@ void batadv_debugfs_destroy(void)
} }
/** /**
* batadv_debugfs_add_hardif - creates the base directory for a hard interface * batadv_debugfs_add_hardif() - creates the base directory for a hard interface
* in debugfs. * in debugfs.
* @hard_iface: hard interface which should be added. * @hard_iface: hard interface which should be added.
* *
...@@ -338,7 +344,7 @@ int batadv_debugfs_add_hardif(struct batadv_hard_iface *hard_iface) ...@@ -338,7 +344,7 @@ int batadv_debugfs_add_hardif(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_debugfs_del_hardif - delete the base directory for a hard interface * batadv_debugfs_del_hardif() - delete the base directory for a hard interface
* in debugfs. * in debugfs.
* @hard_iface: hard interface which is deleted. * @hard_iface: hard interface which is deleted.
*/ */
...@@ -355,6 +361,12 @@ void batadv_debugfs_del_hardif(struct batadv_hard_iface *hard_iface) ...@@ -355,6 +361,12 @@ void batadv_debugfs_del_hardif(struct batadv_hard_iface *hard_iface)
} }
} }
/**
* batadv_debugfs_add_meshif() - Initialize interface dependent debugfs entries
* @dev: netdev struct of the soft interface
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_debugfs_add_meshif(struct net_device *dev) int batadv_debugfs_add_meshif(struct net_device *dev)
{ {
struct batadv_priv *bat_priv = netdev_priv(dev); struct batadv_priv *bat_priv = netdev_priv(dev);
...@@ -401,6 +413,10 @@ int batadv_debugfs_add_meshif(struct net_device *dev) ...@@ -401,6 +413,10 @@ int batadv_debugfs_add_meshif(struct net_device *dev)
return -ENOMEM; return -ENOMEM;
} }
/**
* batadv_debugfs_del_meshif() - Remove interface dependent debugfs entries
* @dev: netdev struct of the soft interface
*/
void batadv_debugfs_del_meshif(struct net_device *dev) void batadv_debugfs_del_meshif(struct net_device *dev)
{ {
struct batadv_priv *bat_priv = netdev_priv(dev); struct batadv_priv *bat_priv = netdev_priv(dev);
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2010-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2010-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors:
* *
* Antonio Quartulli * Antonio Quartulli
...@@ -23,7 +24,7 @@ ...@@ -23,7 +24,7 @@
#include <linux/byteorder/generic.h> #include <linux/byteorder/generic.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_arp.h> #include <linux/if_arp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
...@@ -55,7 +56,7 @@ ...@@ -55,7 +56,7 @@
static void batadv_dat_purge(struct work_struct *work); static void batadv_dat_purge(struct work_struct *work);
/** /**
* batadv_dat_start_timer - initialise the DAT periodic worker * batadv_dat_start_timer() - initialise the DAT periodic worker
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
static void batadv_dat_start_timer(struct batadv_priv *bat_priv) static void batadv_dat_start_timer(struct batadv_priv *bat_priv)
...@@ -66,7 +67,7 @@ static void batadv_dat_start_timer(struct batadv_priv *bat_priv) ...@@ -66,7 +67,7 @@ static void batadv_dat_start_timer(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_dat_entry_release - release dat_entry from lists and queue for free * batadv_dat_entry_release() - release dat_entry from lists and queue for free
* after rcu grace period * after rcu grace period
* @ref: kref pointer of the dat_entry * @ref: kref pointer of the dat_entry
*/ */
...@@ -80,7 +81,7 @@ static void batadv_dat_entry_release(struct kref *ref) ...@@ -80,7 +81,7 @@ static void batadv_dat_entry_release(struct kref *ref)
} }
/** /**
* batadv_dat_entry_put - decrement the dat_entry refcounter and possibly * batadv_dat_entry_put() - decrement the dat_entry refcounter and possibly
* release it * release it
* @dat_entry: dat_entry to be free'd * @dat_entry: dat_entry to be free'd
*/ */
...@@ -90,7 +91,7 @@ static void batadv_dat_entry_put(struct batadv_dat_entry *dat_entry) ...@@ -90,7 +91,7 @@ static void batadv_dat_entry_put(struct batadv_dat_entry *dat_entry)
} }
/** /**
* batadv_dat_to_purge - check whether a dat_entry has to be purged or not * batadv_dat_to_purge() - check whether a dat_entry has to be purged or not
* @dat_entry: the entry to check * @dat_entry: the entry to check
* *
* Return: true if the entry has to be purged now, false otherwise. * Return: true if the entry has to be purged now, false otherwise.
...@@ -102,7 +103,7 @@ static bool batadv_dat_to_purge(struct batadv_dat_entry *dat_entry) ...@@ -102,7 +103,7 @@ static bool batadv_dat_to_purge(struct batadv_dat_entry *dat_entry)
} }
/** /**
* __batadv_dat_purge - delete entries from the DAT local storage * __batadv_dat_purge() - delete entries from the DAT local storage
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @to_purge: function in charge to decide whether an entry has to be purged or * @to_purge: function in charge to decide whether an entry has to be purged or
* not. This function takes the dat_entry as argument and has to * not. This function takes the dat_entry as argument and has to
...@@ -145,8 +146,8 @@ static void __batadv_dat_purge(struct batadv_priv *bat_priv, ...@@ -145,8 +146,8 @@ static void __batadv_dat_purge(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_dat_purge - periodic task that deletes old entries from the local DAT * batadv_dat_purge() - periodic task that deletes old entries from the local
* hash table * DAT hash table
* @work: kernel work struct * @work: kernel work struct
*/ */
static void batadv_dat_purge(struct work_struct *work) static void batadv_dat_purge(struct work_struct *work)
...@@ -164,7 +165,7 @@ static void batadv_dat_purge(struct work_struct *work) ...@@ -164,7 +165,7 @@ static void batadv_dat_purge(struct work_struct *work)
} }
/** /**
* batadv_compare_dat - comparing function used in the local DAT hash table * batadv_compare_dat() - comparing function used in the local DAT hash table
* @node: node in the local table * @node: node in the local table
* @data2: second object to compare the node to * @data2: second object to compare the node to
* *
...@@ -179,7 +180,7 @@ static bool batadv_compare_dat(const struct hlist_node *node, const void *data2) ...@@ -179,7 +180,7 @@ static bool batadv_compare_dat(const struct hlist_node *node, const void *data2)
} }
/** /**
* batadv_arp_hw_src - extract the hw_src field from an ARP packet * batadv_arp_hw_src() - extract the hw_src field from an ARP packet
* @skb: ARP packet * @skb: ARP packet
* @hdr_size: size of the possible header before the ARP packet * @hdr_size: size of the possible header before the ARP packet
* *
...@@ -196,7 +197,7 @@ static u8 *batadv_arp_hw_src(struct sk_buff *skb, int hdr_size) ...@@ -196,7 +197,7 @@ static u8 *batadv_arp_hw_src(struct sk_buff *skb, int hdr_size)
} }
/** /**
* batadv_arp_ip_src - extract the ip_src field from an ARP packet * batadv_arp_ip_src() - extract the ip_src field from an ARP packet
* @skb: ARP packet * @skb: ARP packet
* @hdr_size: size of the possible header before the ARP packet * @hdr_size: size of the possible header before the ARP packet
* *
...@@ -208,7 +209,7 @@ static __be32 batadv_arp_ip_src(struct sk_buff *skb, int hdr_size) ...@@ -208,7 +209,7 @@ static __be32 batadv_arp_ip_src(struct sk_buff *skb, int hdr_size)
} }
/** /**
* batadv_arp_hw_dst - extract the hw_dst field from an ARP packet * batadv_arp_hw_dst() - extract the hw_dst field from an ARP packet
* @skb: ARP packet * @skb: ARP packet
* @hdr_size: size of the possible header before the ARP packet * @hdr_size: size of the possible header before the ARP packet
* *
...@@ -220,7 +221,7 @@ static u8 *batadv_arp_hw_dst(struct sk_buff *skb, int hdr_size) ...@@ -220,7 +221,7 @@ static u8 *batadv_arp_hw_dst(struct sk_buff *skb, int hdr_size)
} }
/** /**
* batadv_arp_ip_dst - extract the ip_dst field from an ARP packet * batadv_arp_ip_dst() - extract the ip_dst field from an ARP packet
* @skb: ARP packet * @skb: ARP packet
* @hdr_size: size of the possible header before the ARP packet * @hdr_size: size of the possible header before the ARP packet
* *
...@@ -232,7 +233,7 @@ static __be32 batadv_arp_ip_dst(struct sk_buff *skb, int hdr_size) ...@@ -232,7 +233,7 @@ static __be32 batadv_arp_ip_dst(struct sk_buff *skb, int hdr_size)
} }
/** /**
* batadv_hash_dat - compute the hash value for an IP address * batadv_hash_dat() - compute the hash value for an IP address
* @data: data to hash * @data: data to hash
* @size: size of the hash table * @size: size of the hash table
* *
...@@ -267,7 +268,7 @@ static u32 batadv_hash_dat(const void *data, u32 size) ...@@ -267,7 +268,7 @@ static u32 batadv_hash_dat(const void *data, u32 size)
} }
/** /**
* batadv_dat_entry_hash_find - look for a given dat_entry in the local hash * batadv_dat_entry_hash_find() - look for a given dat_entry in the local hash
* table * table
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ip: search key * @ip: search key
...@@ -310,7 +311,7 @@ batadv_dat_entry_hash_find(struct batadv_priv *bat_priv, __be32 ip, ...@@ -310,7 +311,7 @@ batadv_dat_entry_hash_find(struct batadv_priv *bat_priv, __be32 ip,
} }
/** /**
* batadv_dat_entry_add - add a new dat entry or update it if already exists * batadv_dat_entry_add() - add a new dat entry or update it if already exists
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ip: ipv4 to add/edit * @ip: ipv4 to add/edit
* @mac_addr: mac address to assign to the given ipv4 * @mac_addr: mac address to assign to the given ipv4
...@@ -367,7 +368,8 @@ static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip, ...@@ -367,7 +368,8 @@ static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip,
#ifdef CONFIG_BATMAN_ADV_DEBUG #ifdef CONFIG_BATMAN_ADV_DEBUG
/** /**
* batadv_dbg_arp - print a debug message containing all the ARP packet details * batadv_dbg_arp() - print a debug message containing all the ARP packet
* details
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: ARP packet * @skb: ARP packet
* @hdr_size: size of the possible header before the ARP packet * @hdr_size: size of the possible header before the ARP packet
...@@ -448,7 +450,7 @@ static void batadv_dbg_arp(struct batadv_priv *bat_priv, struct sk_buff *skb, ...@@ -448,7 +450,7 @@ static void batadv_dbg_arp(struct batadv_priv *bat_priv, struct sk_buff *skb,
#endif /* CONFIG_BATMAN_ADV_DEBUG */ #endif /* CONFIG_BATMAN_ADV_DEBUG */
/** /**
* batadv_is_orig_node_eligible - check whether a node can be a DHT candidate * batadv_is_orig_node_eligible() - check whether a node can be a DHT candidate
* @res: the array with the already selected candidates * @res: the array with the already selected candidates
* @select: number of already selected candidates * @select: number of already selected candidates
* @tmp_max: address of the currently evaluated node * @tmp_max: address of the currently evaluated node
...@@ -502,7 +504,7 @@ static bool batadv_is_orig_node_eligible(struct batadv_dat_candidate *res, ...@@ -502,7 +504,7 @@ static bool batadv_is_orig_node_eligible(struct batadv_dat_candidate *res,
} }
/** /**
* batadv_choose_next_candidate - select the next DHT candidate * batadv_choose_next_candidate() - select the next DHT candidate
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @cands: candidates array * @cands: candidates array
* @select: number of candidates already present in the array * @select: number of candidates already present in the array
...@@ -566,8 +568,8 @@ static void batadv_choose_next_candidate(struct batadv_priv *bat_priv, ...@@ -566,8 +568,8 @@ static void batadv_choose_next_candidate(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_dat_select_candidates - select the nodes which the DHT message has to * batadv_dat_select_candidates() - select the nodes which the DHT message has
* be sent to * to be sent to
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ip_dst: ipv4 to look up in the DHT * @ip_dst: ipv4 to look up in the DHT
* @vid: VLAN identifier * @vid: VLAN identifier
...@@ -612,7 +614,7 @@ batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst, ...@@ -612,7 +614,7 @@ batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst,
} }
/** /**
* batadv_dat_send_data - send a payload to the selected candidates * batadv_dat_send_data() - send a payload to the selected candidates
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: payload to send * @skb: payload to send
* @ip: the DHT key * @ip: the DHT key
...@@ -688,7 +690,7 @@ static bool batadv_dat_send_data(struct batadv_priv *bat_priv, ...@@ -688,7 +690,7 @@ static bool batadv_dat_send_data(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_dat_tvlv_container_update - update the dat tvlv container after dat * batadv_dat_tvlv_container_update() - update the dat tvlv container after dat
* setting change * setting change
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
...@@ -710,7 +712,7 @@ static void batadv_dat_tvlv_container_update(struct batadv_priv *bat_priv) ...@@ -710,7 +712,7 @@ static void batadv_dat_tvlv_container_update(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_dat_status_update - update the dat tvlv container after dat * batadv_dat_status_update() - update the dat tvlv container after dat
* setting change * setting change
* @net_dev: the soft interface net device * @net_dev: the soft interface net device
*/ */
...@@ -722,7 +724,7 @@ void batadv_dat_status_update(struct net_device *net_dev) ...@@ -722,7 +724,7 @@ void batadv_dat_status_update(struct net_device *net_dev)
} }
/** /**
* batadv_dat_tvlv_ogm_handler_v1 - process incoming dat tvlv container * batadv_dat_tvlv_ogm_handler_v1() - process incoming dat tvlv container
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig: the orig_node of the ogm * @orig: the orig_node of the ogm
* @flags: flags indicating the tvlv state (see batadv_tvlv_handler_flags) * @flags: flags indicating the tvlv state (see batadv_tvlv_handler_flags)
...@@ -741,7 +743,7 @@ static void batadv_dat_tvlv_ogm_handler_v1(struct batadv_priv *bat_priv, ...@@ -741,7 +743,7 @@ static void batadv_dat_tvlv_ogm_handler_v1(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_dat_hash_free - free the local DAT hash table * batadv_dat_hash_free() - free the local DAT hash table
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
static void batadv_dat_hash_free(struct batadv_priv *bat_priv) static void batadv_dat_hash_free(struct batadv_priv *bat_priv)
...@@ -757,7 +759,7 @@ static void batadv_dat_hash_free(struct batadv_priv *bat_priv) ...@@ -757,7 +759,7 @@ static void batadv_dat_hash_free(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_dat_init - initialise the DAT internals * batadv_dat_init() - initialise the DAT internals
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Return: 0 in case of success, a negative error code otherwise * Return: 0 in case of success, a negative error code otherwise
...@@ -782,7 +784,7 @@ int batadv_dat_init(struct batadv_priv *bat_priv) ...@@ -782,7 +784,7 @@ int batadv_dat_init(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_dat_free - free the DAT internals * batadv_dat_free() - free the DAT internals
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
void batadv_dat_free(struct batadv_priv *bat_priv) void batadv_dat_free(struct batadv_priv *bat_priv)
...@@ -797,7 +799,7 @@ void batadv_dat_free(struct batadv_priv *bat_priv) ...@@ -797,7 +799,7 @@ void batadv_dat_free(struct batadv_priv *bat_priv)
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_dat_cache_seq_print_text - print the local DAT hash table * batadv_dat_cache_seq_print_text() - print the local DAT hash table
* @seq: seq file to print on * @seq: seq file to print on
* @offset: not used * @offset: not used
* *
...@@ -850,7 +852,7 @@ int batadv_dat_cache_seq_print_text(struct seq_file *seq, void *offset) ...@@ -850,7 +852,7 @@ int batadv_dat_cache_seq_print_text(struct seq_file *seq, void *offset)
#endif #endif
/** /**
* batadv_arp_get_type - parse an ARP packet and gets the type * batadv_arp_get_type() - parse an ARP packet and gets the type
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: packet to analyse * @skb: packet to analyse
* @hdr_size: size of the possible header before the ARP packet in the skb * @hdr_size: size of the possible header before the ARP packet in the skb
...@@ -924,7 +926,7 @@ static u16 batadv_arp_get_type(struct batadv_priv *bat_priv, ...@@ -924,7 +926,7 @@ static u16 batadv_arp_get_type(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_dat_get_vid - extract the VLAN identifier from skb if any * batadv_dat_get_vid() - extract the VLAN identifier from skb if any
* @skb: the buffer containing the packet to extract the VID from * @skb: the buffer containing the packet to extract the VID from
* @hdr_size: the size of the batman-adv header encapsulating the packet * @hdr_size: the size of the batman-adv header encapsulating the packet
* *
...@@ -950,7 +952,7 @@ static unsigned short batadv_dat_get_vid(struct sk_buff *skb, int *hdr_size) ...@@ -950,7 +952,7 @@ static unsigned short batadv_dat_get_vid(struct sk_buff *skb, int *hdr_size)
} }
/** /**
* batadv_dat_arp_create_reply - create an ARP Reply * batadv_dat_arp_create_reply() - create an ARP Reply
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ip_src: ARP sender IP * @ip_src: ARP sender IP
* @ip_dst: ARP target IP * @ip_dst: ARP target IP
...@@ -985,7 +987,7 @@ batadv_dat_arp_create_reply(struct batadv_priv *bat_priv, __be32 ip_src, ...@@ -985,7 +987,7 @@ batadv_dat_arp_create_reply(struct batadv_priv *bat_priv, __be32 ip_src,
} }
/** /**
* batadv_dat_snoop_outgoing_arp_request - snoop the ARP request and try to * batadv_dat_snoop_outgoing_arp_request() - snoop the ARP request and try to
* answer using DAT * answer using DAT
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: packet to check * @skb: packet to check
...@@ -1083,7 +1085,7 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv, ...@@ -1083,7 +1085,7 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_dat_snoop_incoming_arp_request - snoop the ARP request and try to * batadv_dat_snoop_incoming_arp_request() - snoop the ARP request and try to
* answer using the local DAT storage * answer using the local DAT storage
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: packet to check * @skb: packet to check
...@@ -1153,7 +1155,7 @@ bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv, ...@@ -1153,7 +1155,7 @@ bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_dat_snoop_outgoing_arp_reply - snoop the ARP reply and fill the DHT * batadv_dat_snoop_outgoing_arp_reply() - snoop the ARP reply and fill the DHT
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: packet to check * @skb: packet to check
*/ */
...@@ -1193,8 +1195,8 @@ void batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv, ...@@ -1193,8 +1195,8 @@ void batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_dat_snoop_incoming_arp_reply - snoop the ARP reply and fill the local * batadv_dat_snoop_incoming_arp_reply() - snoop the ARP reply and fill the
* DAT storage only * local DAT storage only
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: packet to check * @skb: packet to check
* @hdr_size: size of the encapsulation header * @hdr_size: size of the encapsulation header
...@@ -1282,8 +1284,8 @@ bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv, ...@@ -1282,8 +1284,8 @@ bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_dat_drop_broadcast_packet - check if an ARP request has to be dropped * batadv_dat_drop_broadcast_packet() - check if an ARP request has to be
* (because the node has already obtained the reply via DAT) or not * dropped (because the node has already obtained the reply via DAT) or not
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @forw_packet: the broadcast packet * @forw_packet: the broadcast packet
* *
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2011-2017 B.A.T.M.A.N. contributors:
* *
* Antonio Quartulli * Antonio Quartulli
...@@ -48,7 +49,7 @@ bool batadv_dat_drop_broadcast_packet(struct batadv_priv *bat_priv, ...@@ -48,7 +49,7 @@ bool batadv_dat_drop_broadcast_packet(struct batadv_priv *bat_priv,
struct batadv_forw_packet *forw_packet); struct batadv_forw_packet *forw_packet);
/** /**
* batadv_dat_init_orig_node_addr - assign a DAT address to the orig_node * batadv_dat_init_orig_node_addr() - assign a DAT address to the orig_node
* @orig_node: the node to assign the DAT address to * @orig_node: the node to assign the DAT address to
*/ */
static inline void static inline void
...@@ -61,7 +62,7 @@ batadv_dat_init_orig_node_addr(struct batadv_orig_node *orig_node) ...@@ -61,7 +62,7 @@ batadv_dat_init_orig_node_addr(struct batadv_orig_node *orig_node)
} }
/** /**
* batadv_dat_init_own_addr - assign a DAT address to the node itself * batadv_dat_init_own_addr() - assign a DAT address to the node itself
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @primary_if: a pointer to the primary interface * @primary_if: a pointer to the primary interface
*/ */
...@@ -82,7 +83,7 @@ void batadv_dat_free(struct batadv_priv *bat_priv); ...@@ -82,7 +83,7 @@ void batadv_dat_free(struct batadv_priv *bat_priv);
int batadv_dat_cache_seq_print_text(struct seq_file *seq, void *offset); int batadv_dat_cache_seq_print_text(struct seq_file *seq, void *offset);
/** /**
* batadv_dat_inc_counter - increment the correct DAT packet counter * batadv_dat_inc_counter() - increment the correct DAT packet counter
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @subtype: the 4addr subtype of the packet to be counted * @subtype: the 4addr subtype of the packet to be counted
* *
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors:
* *
* Martin Hundebøll <martin@hundeboll.net> * Martin Hundebøll <martin@hundeboll.net>
...@@ -22,7 +23,7 @@ ...@@ -22,7 +23,7 @@
#include <linux/byteorder/generic.h> #include <linux/byteorder/generic.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -41,7 +42,7 @@ ...@@ -41,7 +42,7 @@
#include "soft-interface.h" #include "soft-interface.h"
/** /**
* batadv_frag_clear_chain - delete entries in the fragment buffer chain * batadv_frag_clear_chain() - delete entries in the fragment buffer chain
* @head: head of chain with entries. * @head: head of chain with entries.
* @dropped: whether the chain is cleared because all fragments are dropped * @dropped: whether the chain is cleared because all fragments are dropped
* *
...@@ -65,7 +66,7 @@ static void batadv_frag_clear_chain(struct hlist_head *head, bool dropped) ...@@ -65,7 +66,7 @@ static void batadv_frag_clear_chain(struct hlist_head *head, bool dropped)
} }
/** /**
* batadv_frag_purge_orig - free fragments associated to an orig * batadv_frag_purge_orig() - free fragments associated to an orig
* @orig_node: originator to free fragments from * @orig_node: originator to free fragments from
* @check_cb: optional function to tell if an entry should be purged * @check_cb: optional function to tell if an entry should be purged
*/ */
...@@ -89,7 +90,7 @@ void batadv_frag_purge_orig(struct batadv_orig_node *orig_node, ...@@ -89,7 +90,7 @@ void batadv_frag_purge_orig(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_frag_size_limit - maximum possible size of packet to be fragmented * batadv_frag_size_limit() - maximum possible size of packet to be fragmented
* *
* Return: the maximum size of payload that can be fragmented. * Return: the maximum size of payload that can be fragmented.
*/ */
...@@ -104,7 +105,7 @@ static int batadv_frag_size_limit(void) ...@@ -104,7 +105,7 @@ static int batadv_frag_size_limit(void)
} }
/** /**
* batadv_frag_init_chain - check and prepare fragment chain for new fragment * batadv_frag_init_chain() - check and prepare fragment chain for new fragment
* @chain: chain in fragments table to init * @chain: chain in fragments table to init
* @seqno: sequence number of the received fragment * @seqno: sequence number of the received fragment
* *
...@@ -134,7 +135,7 @@ static bool batadv_frag_init_chain(struct batadv_frag_table_entry *chain, ...@@ -134,7 +135,7 @@ static bool batadv_frag_init_chain(struct batadv_frag_table_entry *chain,
} }
/** /**
* batadv_frag_insert_packet - insert a fragment into a fragment chain * batadv_frag_insert_packet() - insert a fragment into a fragment chain
* @orig_node: originator that the fragment was received from * @orig_node: originator that the fragment was received from
* @skb: skb to insert * @skb: skb to insert
* @chain_out: list head to attach complete chains of fragments to * @chain_out: list head to attach complete chains of fragments to
...@@ -248,7 +249,7 @@ static bool batadv_frag_insert_packet(struct batadv_orig_node *orig_node, ...@@ -248,7 +249,7 @@ static bool batadv_frag_insert_packet(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_frag_merge_packets - merge a chain of fragments * batadv_frag_merge_packets() - merge a chain of fragments
* @chain: head of chain with fragments * @chain: head of chain with fragments
* *
* Expand the first skb in the chain and copy the content of the remaining * Expand the first skb in the chain and copy the content of the remaining
...@@ -306,7 +307,7 @@ batadv_frag_merge_packets(struct hlist_head *chain) ...@@ -306,7 +307,7 @@ batadv_frag_merge_packets(struct hlist_head *chain)
} }
/** /**
* batadv_frag_skb_buffer - buffer fragment for later merge * batadv_frag_skb_buffer() - buffer fragment for later merge
* @skb: skb to buffer * @skb: skb to buffer
* @orig_node_src: originator that the skb is received from * @orig_node_src: originator that the skb is received from
* *
...@@ -346,7 +347,7 @@ bool batadv_frag_skb_buffer(struct sk_buff **skb, ...@@ -346,7 +347,7 @@ bool batadv_frag_skb_buffer(struct sk_buff **skb,
} }
/** /**
* batadv_frag_skb_fwd - forward fragments that would exceed MTU when merged * batadv_frag_skb_fwd() - forward fragments that would exceed MTU when merged
* @skb: skb to forward * @skb: skb to forward
* @recv_if: interface that the skb is received on * @recv_if: interface that the skb is received on
* @orig_node_src: originator that the skb is received from * @orig_node_src: originator that the skb is received from
...@@ -400,7 +401,7 @@ bool batadv_frag_skb_fwd(struct sk_buff *skb, ...@@ -400,7 +401,7 @@ bool batadv_frag_skb_fwd(struct sk_buff *skb,
} }
/** /**
* batadv_frag_create - create a fragment from skb * batadv_frag_create() - create a fragment from skb
* @skb: skb to create fragment from * @skb: skb to create fragment from
* @frag_head: header to use in new fragment * @frag_head: header to use in new fragment
* @fragment_size: size of new fragment * @fragment_size: size of new fragment
...@@ -438,7 +439,7 @@ static struct sk_buff *batadv_frag_create(struct sk_buff *skb, ...@@ -438,7 +439,7 @@ static struct sk_buff *batadv_frag_create(struct sk_buff *skb,
} }
/** /**
* batadv_frag_send_packet - create up to 16 fragments from the passed skb * batadv_frag_send_packet() - create up to 16 fragments from the passed skb
* @skb: skb to create fragments from * @skb: skb to create fragments from
* @orig_node: final destination of the created fragments * @orig_node: final destination of the created fragments
* @neigh_node: next-hop of the created fragments * @neigh_node: next-hop of the created fragments
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2013-2017 B.A.T.M.A.N. contributors:
* *
* Martin Hundebøll <martin@hundeboll.net> * Martin Hundebøll <martin@hundeboll.net>
...@@ -39,7 +40,7 @@ int batadv_frag_send_packet(struct sk_buff *skb, ...@@ -39,7 +40,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
struct batadv_neigh_node *neigh_node); struct batadv_neigh_node *neigh_node);
/** /**
* batadv_frag_check_entry - check if a list of fragments has timed out * batadv_frag_check_entry() - check if a list of fragments has timed out
* @frags_entry: table entry to check * @frags_entry: table entry to check
* *
* Return: true if the frags entry has timed out, false otherwise. * Return: true if the frags entry has timed out, false otherwise.
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2009-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2009-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
...@@ -22,7 +23,7 @@ ...@@ -22,7 +23,7 @@
#include <linux/byteorder/generic.h> #include <linux/byteorder/generic.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
#include <linux/in.h> #include <linux/in.h>
...@@ -68,8 +69,8 @@ ...@@ -68,8 +69,8 @@
#define BATADV_DHCP_CHADDR_OFFSET 28 #define BATADV_DHCP_CHADDR_OFFSET 28
/** /**
* batadv_gw_node_release - release gw_node from lists and queue for free after * batadv_gw_node_release() - release gw_node from lists and queue for free
* rcu grace period * after rcu grace period
* @ref: kref pointer of the gw_node * @ref: kref pointer of the gw_node
*/ */
static void batadv_gw_node_release(struct kref *ref) static void batadv_gw_node_release(struct kref *ref)
...@@ -83,7 +84,8 @@ static void batadv_gw_node_release(struct kref *ref) ...@@ -83,7 +84,8 @@ static void batadv_gw_node_release(struct kref *ref)
} }
/** /**
* batadv_gw_node_put - decrement the gw_node refcounter and possibly release it * batadv_gw_node_put() - decrement the gw_node refcounter and possibly release
* it
* @gw_node: gateway node to free * @gw_node: gateway node to free
*/ */
void batadv_gw_node_put(struct batadv_gw_node *gw_node) void batadv_gw_node_put(struct batadv_gw_node *gw_node)
...@@ -91,6 +93,12 @@ void batadv_gw_node_put(struct batadv_gw_node *gw_node) ...@@ -91,6 +93,12 @@ void batadv_gw_node_put(struct batadv_gw_node *gw_node)
kref_put(&gw_node->refcount, batadv_gw_node_release); kref_put(&gw_node->refcount, batadv_gw_node_release);
} }
/**
* batadv_gw_get_selected_gw_node() - Get currently selected gateway
* @bat_priv: the bat priv with all the soft interface information
*
* Return: selected gateway (with increased refcnt), NULL on errors
*/
struct batadv_gw_node * struct batadv_gw_node *
batadv_gw_get_selected_gw_node(struct batadv_priv *bat_priv) batadv_gw_get_selected_gw_node(struct batadv_priv *bat_priv)
{ {
...@@ -109,6 +117,12 @@ batadv_gw_get_selected_gw_node(struct batadv_priv *bat_priv) ...@@ -109,6 +117,12 @@ batadv_gw_get_selected_gw_node(struct batadv_priv *bat_priv)
return gw_node; return gw_node;
} }
/**
* batadv_gw_get_selected_orig() - Get originator of currently selected gateway
* @bat_priv: the bat priv with all the soft interface information
*
* Return: orig_node of selected gateway (with increased refcnt), NULL on errors
*/
struct batadv_orig_node * struct batadv_orig_node *
batadv_gw_get_selected_orig(struct batadv_priv *bat_priv) batadv_gw_get_selected_orig(struct batadv_priv *bat_priv)
{ {
...@@ -155,7 +169,7 @@ static void batadv_gw_select(struct batadv_priv *bat_priv, ...@@ -155,7 +169,7 @@ static void batadv_gw_select(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_gw_reselect - force a gateway reselection * batadv_gw_reselect() - force a gateway reselection
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Set a flag to remind the GW component to perform a new gateway reselection. * Set a flag to remind the GW component to perform a new gateway reselection.
...@@ -171,7 +185,7 @@ void batadv_gw_reselect(struct batadv_priv *bat_priv) ...@@ -171,7 +185,7 @@ void batadv_gw_reselect(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_gw_check_client_stop - check if client mode has been switched off * batadv_gw_check_client_stop() - check if client mode has been switched off
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* This function assumes the caller has checked that the gw state *is actually * This function assumes the caller has checked that the gw state *is actually
...@@ -202,6 +216,10 @@ void batadv_gw_check_client_stop(struct batadv_priv *bat_priv) ...@@ -202,6 +216,10 @@ void batadv_gw_check_client_stop(struct batadv_priv *bat_priv)
batadv_gw_node_put(curr_gw); batadv_gw_node_put(curr_gw);
} }
/**
* batadv_gw_election() - Elect the best gateway
* @bat_priv: the bat priv with all the soft interface information
*/
void batadv_gw_election(struct batadv_priv *bat_priv) void batadv_gw_election(struct batadv_priv *bat_priv)
{ {
struct batadv_gw_node *curr_gw = NULL; struct batadv_gw_node *curr_gw = NULL;
...@@ -290,6 +308,11 @@ void batadv_gw_election(struct batadv_priv *bat_priv) ...@@ -290,6 +308,11 @@ void batadv_gw_election(struct batadv_priv *bat_priv)
batadv_neigh_ifinfo_put(router_ifinfo); batadv_neigh_ifinfo_put(router_ifinfo);
} }
/**
* batadv_gw_check_election() - Elect orig node as best gateway when eligible
* @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node which is to be checked
*/
void batadv_gw_check_election(struct batadv_priv *bat_priv, void batadv_gw_check_election(struct batadv_priv *bat_priv,
struct batadv_orig_node *orig_node) struct batadv_orig_node *orig_node)
{ {
...@@ -321,7 +344,7 @@ void batadv_gw_check_election(struct batadv_priv *bat_priv, ...@@ -321,7 +344,7 @@ void batadv_gw_check_election(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_gw_node_add - add gateway node to list of available gateways * batadv_gw_node_add() - add gateway node to list of available gateways
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: originator announcing gateway capabilities * @orig_node: originator announcing gateway capabilities
* @gateway: announced bandwidth information * @gateway: announced bandwidth information
...@@ -364,7 +387,7 @@ static void batadv_gw_node_add(struct batadv_priv *bat_priv, ...@@ -364,7 +387,7 @@ static void batadv_gw_node_add(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_gw_node_get - retrieve gateway node from list of available gateways * batadv_gw_node_get() - retrieve gateway node from list of available gateways
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: originator announcing gateway capabilities * @orig_node: originator announcing gateway capabilities
* *
...@@ -393,7 +416,7 @@ struct batadv_gw_node *batadv_gw_node_get(struct batadv_priv *bat_priv, ...@@ -393,7 +416,7 @@ struct batadv_gw_node *batadv_gw_node_get(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_gw_node_update - update list of available gateways with changed * batadv_gw_node_update() - update list of available gateways with changed
* bandwidth information * bandwidth information
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: originator announcing gateway capabilities * @orig_node: originator announcing gateway capabilities
...@@ -458,6 +481,11 @@ void batadv_gw_node_update(struct batadv_priv *bat_priv, ...@@ -458,6 +481,11 @@ void batadv_gw_node_update(struct batadv_priv *bat_priv,
batadv_gw_node_put(gw_node); batadv_gw_node_put(gw_node);
} }
/**
* batadv_gw_node_delete() - Remove orig_node from gateway list
* @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node which is currently in process of being removed
*/
void batadv_gw_node_delete(struct batadv_priv *bat_priv, void batadv_gw_node_delete(struct batadv_priv *bat_priv,
struct batadv_orig_node *orig_node) struct batadv_orig_node *orig_node)
{ {
...@@ -469,6 +497,10 @@ void batadv_gw_node_delete(struct batadv_priv *bat_priv, ...@@ -469,6 +497,10 @@ void batadv_gw_node_delete(struct batadv_priv *bat_priv,
batadv_gw_node_update(bat_priv, orig_node, &gateway); batadv_gw_node_update(bat_priv, orig_node, &gateway);
} }
/**
* batadv_gw_node_free() - Free gateway information from soft interface
* @bat_priv: the bat priv with all the soft interface information
*/
void batadv_gw_node_free(struct batadv_priv *bat_priv) void batadv_gw_node_free(struct batadv_priv *bat_priv)
{ {
struct batadv_gw_node *gw_node; struct batadv_gw_node *gw_node;
...@@ -484,6 +516,14 @@ void batadv_gw_node_free(struct batadv_priv *bat_priv) ...@@ -484,6 +516,14 @@ void batadv_gw_node_free(struct batadv_priv *bat_priv)
} }
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/**
* batadv_gw_client_seq_print_text() - Print the gateway table in a seq file
* @seq: seq file to print on
* @offset: not used
*
* Return: always 0
*/
int batadv_gw_client_seq_print_text(struct seq_file *seq, void *offset) int batadv_gw_client_seq_print_text(struct seq_file *seq, void *offset)
{ {
struct net_device *net_dev = (struct net_device *)seq->private; struct net_device *net_dev = (struct net_device *)seq->private;
...@@ -514,7 +554,7 @@ int batadv_gw_client_seq_print_text(struct seq_file *seq, void *offset) ...@@ -514,7 +554,7 @@ int batadv_gw_client_seq_print_text(struct seq_file *seq, void *offset)
#endif #endif
/** /**
* batadv_gw_dump - Dump gateways into a message * batadv_gw_dump() - Dump gateways into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @cb: Control block containing additional options * @cb: Control block containing additional options
* *
...@@ -567,7 +607,7 @@ int batadv_gw_dump(struct sk_buff *msg, struct netlink_callback *cb) ...@@ -567,7 +607,7 @@ int batadv_gw_dump(struct sk_buff *msg, struct netlink_callback *cb)
} }
/** /**
* batadv_gw_dhcp_recipient_get - check if a packet is a DHCP message * batadv_gw_dhcp_recipient_get() - check if a packet is a DHCP message
* @skb: the packet to check * @skb: the packet to check
* @header_len: a pointer to the batman-adv header size * @header_len: a pointer to the batman-adv header size
* @chaddr: buffer where the client address will be stored. Valid * @chaddr: buffer where the client address will be stored. Valid
...@@ -686,7 +726,8 @@ batadv_gw_dhcp_recipient_get(struct sk_buff *skb, unsigned int *header_len, ...@@ -686,7 +726,8 @@ batadv_gw_dhcp_recipient_get(struct sk_buff *skb, unsigned int *header_len,
} }
/** /**
* batadv_gw_out_of_range - check if the dhcp request destination is the best gw * batadv_gw_out_of_range() - check if the dhcp request destination is the best
* gateway
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the outgoing packet * @skb: the outgoing packet
* *
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2009-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2009-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2009-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2009-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
...@@ -33,8 +34,8 @@ ...@@ -33,8 +34,8 @@
#include "tvlv.h" #include "tvlv.h"
/** /**
* batadv_parse_throughput - parse supplied string buffer to extract throughput * batadv_parse_throughput() - parse supplied string buffer to extract
* information * throughput 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
* @description: text shown when throughput string cannot be parsed * @description: text shown when throughput string cannot be parsed
...@@ -100,8 +101,8 @@ bool batadv_parse_throughput(struct net_device *net_dev, char *buff, ...@@ -100,8 +101,8 @@ bool batadv_parse_throughput(struct net_device *net_dev, char *buff,
} }
/** /**
* batadv_parse_gw_bandwidth - parse supplied string buffer to extract download * batadv_parse_gw_bandwidth() - parse supplied string buffer to extract
* and upload bandwidth information * download and upload bandwidth 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 * @down: pointer holding the returned download bandwidth information
...@@ -136,8 +137,8 @@ static bool batadv_parse_gw_bandwidth(struct net_device *net_dev, char *buff, ...@@ -136,8 +137,8 @@ static bool batadv_parse_gw_bandwidth(struct net_device *net_dev, char *buff,
} }
/** /**
* batadv_gw_tvlv_container_update - update the gw tvlv container after gateway * batadv_gw_tvlv_container_update() - update the gw tvlv container after
* setting change * gateway setting change
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
void batadv_gw_tvlv_container_update(struct batadv_priv *bat_priv) void batadv_gw_tvlv_container_update(struct batadv_priv *bat_priv)
...@@ -164,6 +165,15 @@ void batadv_gw_tvlv_container_update(struct batadv_priv *bat_priv) ...@@ -164,6 +165,15 @@ void batadv_gw_tvlv_container_update(struct batadv_priv *bat_priv)
} }
} }
/**
* batadv_gw_bandwidth_set() - Parse and set download/upload gateway bandwidth
* from supplied string buffer
* @net_dev: netdev struct of the soft interface
* @buff: the buffer containing the user data
* @count: number of bytes in the buffer
*
* Return: 'count' on success or a negative error code in case of failure
*/
ssize_t batadv_gw_bandwidth_set(struct net_device *net_dev, char *buff, ssize_t batadv_gw_bandwidth_set(struct net_device *net_dev, char *buff,
size_t count) size_t count)
{ {
...@@ -207,7 +217,7 @@ ssize_t batadv_gw_bandwidth_set(struct net_device *net_dev, char *buff, ...@@ -207,7 +217,7 @@ ssize_t batadv_gw_bandwidth_set(struct net_device *net_dev, char *buff,
} }
/** /**
* batadv_gw_tvlv_ogm_handler_v1 - process incoming gateway tvlv container * batadv_gw_tvlv_ogm_handler_v1() - process incoming gateway tvlv container
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig: the orig_node of the ogm * @orig: the orig_node of the ogm
* @flags: flags indicating the tvlv state (see batadv_tvlv_handler_flags) * @flags: flags indicating the tvlv state (see batadv_tvlv_handler_flags)
...@@ -248,7 +258,7 @@ static void batadv_gw_tvlv_ogm_handler_v1(struct batadv_priv *bat_priv, ...@@ -248,7 +258,7 @@ static void batadv_gw_tvlv_ogm_handler_v1(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_gw_init - initialise the gateway handling internals * batadv_gw_init() - initialise the gateway handling internals
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
void batadv_gw_init(struct batadv_priv *bat_priv) void batadv_gw_init(struct batadv_priv *bat_priv)
...@@ -264,7 +274,7 @@ void batadv_gw_init(struct batadv_priv *bat_priv) ...@@ -264,7 +274,7 @@ void batadv_gw_init(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_gw_free - free the gateway handling internals * batadv_gw_free() - free the gateway handling internals
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
void batadv_gw_free(struct batadv_priv *bat_priv) void batadv_gw_free(struct batadv_priv *bat_priv)
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2009-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2009-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
...@@ -32,11 +33,12 @@ enum batadv_gw_modes { ...@@ -32,11 +33,12 @@ enum batadv_gw_modes {
/** /**
* enum batadv_bandwidth_units - bandwidth unit types * enum batadv_bandwidth_units - bandwidth unit types
* @BATADV_BW_UNIT_KBIT: unit type kbit
* @BATADV_BW_UNIT_MBIT: unit type mbit
*/ */
enum batadv_bandwidth_units { enum batadv_bandwidth_units {
/** @BATADV_BW_UNIT_KBIT: unit type kbit */
BATADV_BW_UNIT_KBIT, BATADV_BW_UNIT_KBIT,
/** @BATADV_BW_UNIT_MBIT: unit type mbit */
BATADV_BW_UNIT_MBIT, BATADV_BW_UNIT_MBIT,
}; };
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -22,7 +23,7 @@ ...@@ -22,7 +23,7 @@
#include <linux/bug.h> #include <linux/bug.h>
#include <linux/byteorder/generic.h> #include <linux/byteorder/generic.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if.h> #include <linux/if.h>
#include <linux/if_arp.h> #include <linux/if_arp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
...@@ -52,7 +53,7 @@ ...@@ -52,7 +53,7 @@
#include "translation-table.h" #include "translation-table.h"
/** /**
* batadv_hardif_release - release hard interface from lists and queue for * batadv_hardif_release() - release hard interface from lists and queue for
* free after rcu grace period * free after rcu grace period
* @ref: kref pointer of the hard interface * @ref: kref pointer of the hard interface
*/ */
...@@ -66,6 +67,12 @@ void batadv_hardif_release(struct kref *ref) ...@@ -66,6 +67,12 @@ void batadv_hardif_release(struct kref *ref)
kfree_rcu(hard_iface, rcu); kfree_rcu(hard_iface, rcu);
} }
/**
* batadv_hardif_get_by_netdev() - Get hard interface object of a net_device
* @net_dev: net_device to search for
*
* Return: batadv_hard_iface of net_dev (with increased refcnt), NULL on errors
*/
struct batadv_hard_iface * struct batadv_hard_iface *
batadv_hardif_get_by_netdev(const struct net_device *net_dev) batadv_hardif_get_by_netdev(const struct net_device *net_dev)
{ {
...@@ -86,7 +93,7 @@ batadv_hardif_get_by_netdev(const struct net_device *net_dev) ...@@ -86,7 +93,7 @@ batadv_hardif_get_by_netdev(const struct net_device *net_dev)
} }
/** /**
* batadv_getlink_net - return link net namespace (of use fallback) * batadv_getlink_net() - return link net namespace (of use fallback)
* @netdev: net_device to check * @netdev: net_device to check
* @fallback_net: return in case get_link_net is not available for @netdev * @fallback_net: return in case get_link_net is not available for @netdev
* *
...@@ -105,7 +112,7 @@ static struct net *batadv_getlink_net(const struct net_device *netdev, ...@@ -105,7 +112,7 @@ static struct net *batadv_getlink_net(const struct net_device *netdev,
} }
/** /**
* batadv_mutual_parents - check if two devices are each others parent * batadv_mutual_parents() - check if two devices are each others parent
* @dev1: 1st net dev * @dev1: 1st net dev
* @net1: 1st devices netns * @net1: 1st devices netns
* @dev2: 2nd net dev * @dev2: 2nd net dev
...@@ -138,7 +145,7 @@ static bool batadv_mutual_parents(const struct net_device *dev1, ...@@ -138,7 +145,7 @@ static bool batadv_mutual_parents(const struct net_device *dev1,
} }
/** /**
* batadv_is_on_batman_iface - check if a device is a batman iface descendant * batadv_is_on_batman_iface() - check if a device is a batman iface descendant
* @net_dev: the device to check * @net_dev: the device to check
* *
* If the user creates any virtual device on top of a batman-adv interface, it * If the user creates any virtual device on top of a batman-adv interface, it
...@@ -202,7 +209,7 @@ static bool batadv_is_valid_iface(const struct net_device *net_dev) ...@@ -202,7 +209,7 @@ static bool batadv_is_valid_iface(const struct net_device *net_dev)
} }
/** /**
* batadv_get_real_netdevice - check if the given netdev struct is a virtual * batadv_get_real_netdevice() - check if the given netdev struct is a virtual
* interface on top of another 'real' interface * interface on top of another 'real' interface
* @netdev: the device to check * @netdev: the device to check
* *
...@@ -246,7 +253,7 @@ static struct net_device *batadv_get_real_netdevice(struct net_device *netdev) ...@@ -246,7 +253,7 @@ static struct net_device *batadv_get_real_netdevice(struct net_device *netdev)
} }
/** /**
* batadv_get_real_netdev - check if the given net_device struct is a virtual * batadv_get_real_netdev() - check if the given net_device struct is a virtual
* interface on top of another 'real' interface * interface on top of another 'real' interface
* @net_device: the device to check * @net_device: the device to check
* *
...@@ -265,7 +272,7 @@ struct net_device *batadv_get_real_netdev(struct net_device *net_device) ...@@ -265,7 +272,7 @@ struct net_device *batadv_get_real_netdev(struct net_device *net_device)
} }
/** /**
* batadv_is_wext_netdev - check if the given net_device struct is a * batadv_is_wext_netdev() - check if the given net_device struct is a
* wext wifi interface * wext wifi interface
* @net_device: the device to check * @net_device: the device to check
* *
...@@ -289,7 +296,7 @@ static bool batadv_is_wext_netdev(struct net_device *net_device) ...@@ -289,7 +296,7 @@ static bool batadv_is_wext_netdev(struct net_device *net_device)
} }
/** /**
* batadv_is_cfg80211_netdev - check if the given net_device struct is a * batadv_is_cfg80211_netdev() - check if the given net_device struct is a
* cfg80211 wifi interface * cfg80211 wifi interface
* @net_device: the device to check * @net_device: the device to check
* *
...@@ -309,7 +316,7 @@ static bool batadv_is_cfg80211_netdev(struct net_device *net_device) ...@@ -309,7 +316,7 @@ static bool batadv_is_cfg80211_netdev(struct net_device *net_device)
} }
/** /**
* batadv_wifi_flags_evaluate - calculate wifi flags for net_device * batadv_wifi_flags_evaluate() - calculate wifi flags for net_device
* @net_device: the device to check * @net_device: the device to check
* *
* Return: batadv_hard_iface_wifi_flags flags of the device * Return: batadv_hard_iface_wifi_flags flags of the device
...@@ -344,7 +351,7 @@ static u32 batadv_wifi_flags_evaluate(struct net_device *net_device) ...@@ -344,7 +351,7 @@ static u32 batadv_wifi_flags_evaluate(struct net_device *net_device)
} }
/** /**
* batadv_is_cfg80211_hardif - check if the given hardif is a cfg80211 wifi * batadv_is_cfg80211_hardif() - check if the given hardif is a cfg80211 wifi
* interface * interface
* @hard_iface: the device to check * @hard_iface: the device to check
* *
...@@ -362,7 +369,7 @@ bool batadv_is_cfg80211_hardif(struct batadv_hard_iface *hard_iface) ...@@ -362,7 +369,7 @@ bool batadv_is_cfg80211_hardif(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_is_wifi_hardif - check if the given hardif is a wifi interface * batadv_is_wifi_hardif() - check if the given hardif is a wifi interface
* @hard_iface: the device to check * @hard_iface: the device to check
* *
* Return: true if the net device is a 802.11 wireless device, false otherwise. * Return: true if the net device is a 802.11 wireless device, false otherwise.
...@@ -376,7 +383,7 @@ bool batadv_is_wifi_hardif(struct batadv_hard_iface *hard_iface) ...@@ -376,7 +383,7 @@ bool batadv_is_wifi_hardif(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_hardif_no_broadcast - check whether (re)broadcast is necessary * batadv_hardif_no_broadcast() - check whether (re)broadcast is necessary
* @if_outgoing: the outgoing interface checked and considered for (re)broadcast * @if_outgoing: the outgoing interface checked and considered for (re)broadcast
* @orig_addr: the originator of this packet * @orig_addr: the originator of this packet
* @orig_neigh: originator address of the forwarder we just got the packet from * @orig_neigh: originator address of the forwarder we just got the packet from
...@@ -560,6 +567,13 @@ static void batadv_hardif_recalc_extra_skbroom(struct net_device *soft_iface) ...@@ -560,6 +567,13 @@ static void batadv_hardif_recalc_extra_skbroom(struct net_device *soft_iface)
soft_iface->needed_tailroom = lower_tailroom; soft_iface->needed_tailroom = lower_tailroom;
} }
/**
* batadv_hardif_min_mtu() - Calculate maximum MTU for soft interface
* @soft_iface: netdev struct of the soft interface
*
* Return: MTU for the soft-interface (limited by the minimal MTU of all active
* slave interfaces)
*/
int batadv_hardif_min_mtu(struct net_device *soft_iface) int batadv_hardif_min_mtu(struct net_device *soft_iface)
{ {
struct batadv_priv *bat_priv = netdev_priv(soft_iface); struct batadv_priv *bat_priv = netdev_priv(soft_iface);
...@@ -606,7 +620,11 @@ int batadv_hardif_min_mtu(struct net_device *soft_iface) ...@@ -606,7 +620,11 @@ int batadv_hardif_min_mtu(struct net_device *soft_iface)
return min_t(int, min_mtu - batadv_max_header_len(), ETH_DATA_LEN); return min_t(int, min_mtu - batadv_max_header_len(), ETH_DATA_LEN);
} }
/* adjusts the MTU if a new interface with a smaller MTU appeared. */ /**
* batadv_update_min_mtu() - Adjusts the MTU if a new interface with a smaller
* MTU appeared
* @soft_iface: netdev struct of the soft interface
*/
void batadv_update_min_mtu(struct net_device *soft_iface) void batadv_update_min_mtu(struct net_device *soft_iface)
{ {
soft_iface->mtu = batadv_hardif_min_mtu(soft_iface); soft_iface->mtu = batadv_hardif_min_mtu(soft_iface);
...@@ -667,7 +685,7 @@ batadv_hardif_deactivate_interface(struct batadv_hard_iface *hard_iface) ...@@ -667,7 +685,7 @@ batadv_hardif_deactivate_interface(struct batadv_hard_iface *hard_iface)
} }
/** /**
* batadv_master_del_slave - remove hard_iface from the current master interface * batadv_master_del_slave() - remove hard_iface from the current master iface
* @slave: the interface enslaved in another master * @slave: the interface enslaved in another master
* @master: the master from which slave has to be removed * @master: the master from which slave has to be removed
* *
...@@ -691,6 +709,14 @@ static int batadv_master_del_slave(struct batadv_hard_iface *slave, ...@@ -691,6 +709,14 @@ static int batadv_master_del_slave(struct batadv_hard_iface *slave,
return ret; return ret;
} }
/**
* batadv_hardif_enable_interface() - Enslave hard interface to soft interface
* @hard_iface: hard interface to add to soft interface
* @net: the applicable net namespace
* @iface_name: name of the soft interface
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface, int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface,
struct net *net, const char *iface_name) struct net *net, const char *iface_name)
{ {
...@@ -802,6 +828,12 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface, ...@@ -802,6 +828,12 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface,
return ret; return ret;
} }
/**
* batadv_hardif_disable_interface() - Remove hard interface from soft interface
* @hard_iface: hard interface to be removed
* @autodel: whether to delete soft interface when it doesn't contain any other
* slave interfaces
*/
void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface, void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface,
enum batadv_hard_if_cleanup autodel) enum batadv_hard_if_cleanup autodel)
{ {
...@@ -936,6 +968,9 @@ static void batadv_hardif_remove_interface(struct batadv_hard_iface *hard_iface) ...@@ -936,6 +968,9 @@ static void batadv_hardif_remove_interface(struct batadv_hard_iface *hard_iface)
batadv_hardif_put(hard_iface); batadv_hardif_put(hard_iface);
} }
/**
* batadv_hardif_remove_interfaces() - Remove all hard interfaces
*/
void batadv_hardif_remove_interfaces(void) void batadv_hardif_remove_interfaces(void)
{ {
struct batadv_hard_iface *hard_iface, *hard_iface_tmp; struct batadv_hard_iface *hard_iface, *hard_iface_tmp;
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -30,36 +31,74 @@ ...@@ -30,36 +31,74 @@
struct net_device; struct net_device;
struct net; struct net;
/**
* enum batadv_hard_if_state - State of a hard interface
*/
enum batadv_hard_if_state { enum batadv_hard_if_state {
/**
* @BATADV_IF_NOT_IN_USE: interface is not used as slave interface of a
* batman-adv soft interface
*/
BATADV_IF_NOT_IN_USE, BATADV_IF_NOT_IN_USE,
/**
* @BATADV_IF_TO_BE_REMOVED: interface will be removed from soft
* interface
*/
BATADV_IF_TO_BE_REMOVED, BATADV_IF_TO_BE_REMOVED,
/** @BATADV_IF_INACTIVE: interface is deactivated */
BATADV_IF_INACTIVE, BATADV_IF_INACTIVE,
/** @BATADV_IF_ACTIVE: interface is used */
BATADV_IF_ACTIVE, BATADV_IF_ACTIVE,
/** @BATADV_IF_TO_BE_ACTIVATED: interface is getting activated */
BATADV_IF_TO_BE_ACTIVATED, BATADV_IF_TO_BE_ACTIVATED,
/**
* @BATADV_IF_I_WANT_YOU: interface is queued up (using sysfs) for being
* added as slave interface of a batman-adv soft interface
*/
BATADV_IF_I_WANT_YOU, BATADV_IF_I_WANT_YOU,
}; };
/** /**
* enum batadv_hard_if_bcast - broadcast avoidance options * enum batadv_hard_if_bcast - broadcast avoidance options
* @BATADV_HARDIF_BCAST_OK: Do broadcast on according hard interface
* @BATADV_HARDIF_BCAST_NORECIPIENT: Broadcast not needed, there is no recipient
* @BATADV_HARDIF_BCAST_DUPFWD: There is just the neighbor we got it from
* @BATADV_HARDIF_BCAST_DUPORIG: There is just the originator
*/ */
enum batadv_hard_if_bcast { enum batadv_hard_if_bcast {
/** @BATADV_HARDIF_BCAST_OK: Do broadcast on according hard interface */
BATADV_HARDIF_BCAST_OK = 0, BATADV_HARDIF_BCAST_OK = 0,
/**
* @BATADV_HARDIF_BCAST_NORECIPIENT: Broadcast not needed, there is no
* recipient
*/
BATADV_HARDIF_BCAST_NORECIPIENT, BATADV_HARDIF_BCAST_NORECIPIENT,
/**
* @BATADV_HARDIF_BCAST_DUPFWD: There is just the neighbor we got it
* from
*/
BATADV_HARDIF_BCAST_DUPFWD, BATADV_HARDIF_BCAST_DUPFWD,
/** @BATADV_HARDIF_BCAST_DUPORIG: There is just the originator */
BATADV_HARDIF_BCAST_DUPORIG, BATADV_HARDIF_BCAST_DUPORIG,
}; };
/** /**
* enum batadv_hard_if_cleanup - Cleanup modi for soft_iface after slave removal * enum batadv_hard_if_cleanup - Cleanup modi for soft_iface after slave removal
* @BATADV_IF_CLEANUP_KEEP: Don't automatically delete soft-interface
* @BATADV_IF_CLEANUP_AUTO: Delete soft-interface after last slave was removed
*/ */
enum batadv_hard_if_cleanup { enum batadv_hard_if_cleanup {
/**
* @BATADV_IF_CLEANUP_KEEP: Don't automatically delete soft-interface
*/
BATADV_IF_CLEANUP_KEEP, BATADV_IF_CLEANUP_KEEP,
/**
* @BATADV_IF_CLEANUP_AUTO: Delete soft-interface after last slave was
* removed
*/
BATADV_IF_CLEANUP_AUTO, BATADV_IF_CLEANUP_AUTO,
}; };
...@@ -82,7 +121,7 @@ int batadv_hardif_no_broadcast(struct batadv_hard_iface *if_outgoing, ...@@ -82,7 +121,7 @@ int batadv_hardif_no_broadcast(struct batadv_hard_iface *if_outgoing,
u8 *orig_addr, u8 *orig_neigh); u8 *orig_addr, u8 *orig_neigh);
/** /**
* batadv_hardif_put - decrement the hard interface refcounter and possibly * batadv_hardif_put() - decrement the hard interface refcounter and possibly
* release it * release it
* @hard_iface: the hard interface to free * @hard_iface: the hard interface to free
*/ */
...@@ -91,6 +130,12 @@ static inline void batadv_hardif_put(struct batadv_hard_iface *hard_iface) ...@@ -91,6 +130,12 @@ static inline void batadv_hardif_put(struct batadv_hard_iface *hard_iface)
kref_put(&hard_iface->refcount, batadv_hardif_release); kref_put(&hard_iface->refcount, batadv_hardif_release);
} }
/**
* batadv_primary_if_get_selected() - Get reference to primary interface
* @bat_priv: the bat priv with all the soft interface information
*
* Return: primary interface (with increased refcnt), otherwise NULL
*/
static inline struct batadv_hard_iface * static inline struct batadv_hard_iface *
batadv_primary_if_get_selected(struct batadv_priv *bat_priv) batadv_primary_if_get_selected(struct batadv_priv *bat_priv)
{ {
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2006-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2006-2017 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich, Marek Lindner * Simon Wunderlich, Marek Lindner
...@@ -18,7 +19,7 @@ ...@@ -18,7 +19,7 @@
#include "hash.h" #include "hash.h"
#include "main.h" #include "main.h"
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/lockdep.h> #include <linux/lockdep.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -33,7 +34,10 @@ static void batadv_hash_init(struct batadv_hashtable *hash) ...@@ -33,7 +34,10 @@ static void batadv_hash_init(struct batadv_hashtable *hash)
} }
} }
/* free only the hashtable and the hash itself. */ /**
* batadv_hash_destroy() - Free only the hashtable and the hash itself
* @hash: hash object to destroy
*/
void batadv_hash_destroy(struct batadv_hashtable *hash) void batadv_hash_destroy(struct batadv_hashtable *hash)
{ {
kfree(hash->list_locks); kfree(hash->list_locks);
...@@ -41,7 +45,12 @@ void batadv_hash_destroy(struct batadv_hashtable *hash) ...@@ -41,7 +45,12 @@ void batadv_hash_destroy(struct batadv_hashtable *hash)
kfree(hash); kfree(hash);
} }
/* allocates and clears the hash */ /**
* batadv_hash_new() - Allocates and clears the hashtable
* @size: number of hash buckets to allocate
*
* Return: newly allocated hashtable, NULL on errors
*/
struct batadv_hashtable *batadv_hash_new(u32 size) struct batadv_hashtable *batadv_hash_new(u32 size)
{ {
struct batadv_hashtable *hash; struct batadv_hashtable *hash;
...@@ -70,6 +79,11 @@ struct batadv_hashtable *batadv_hash_new(u32 size) ...@@ -70,6 +79,11 @@ struct batadv_hashtable *batadv_hash_new(u32 size)
return NULL; return NULL;
} }
/**
* batadv_hash_set_lock_class() - Set specific lockdep class for hash spinlocks
* @hash: hash object to modify
* @key: lockdep class key address
*/
void batadv_hash_set_lock_class(struct batadv_hashtable *hash, void batadv_hash_set_lock_class(struct batadv_hashtable *hash,
struct lock_class_key *key) struct lock_class_key *key)
{ {
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2006-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2006-2017 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich, Marek Lindner * Simon Wunderlich, Marek Lindner
...@@ -45,10 +46,18 @@ typedef bool (*batadv_hashdata_compare_cb)(const struct hlist_node *, ...@@ -45,10 +46,18 @@ typedef bool (*batadv_hashdata_compare_cb)(const struct hlist_node *,
typedef u32 (*batadv_hashdata_choose_cb)(const void *, u32); typedef u32 (*batadv_hashdata_choose_cb)(const void *, u32);
typedef void (*batadv_hashdata_free_cb)(struct hlist_node *, void *); typedef void (*batadv_hashdata_free_cb)(struct hlist_node *, void *);
/**
* struct batadv_hashtable - Wrapper of simple hlist based hashtable
*/
struct batadv_hashtable { struct batadv_hashtable {
struct hlist_head *table; /* the hashtable itself with the buckets */ /** @table: the hashtable itself with the buckets */
spinlock_t *list_locks; /* spinlock for each hash list entry */ struct hlist_head *table;
u32 size; /* size of hashtable */
/** @list_locks: spinlock for each hash list entry */
spinlock_t *list_locks;
/** @size: size of hashtable */
u32 size;
}; };
/* allocates and clears the hash */ /* allocates and clears the hash */
...@@ -62,7 +71,7 @@ void batadv_hash_set_lock_class(struct batadv_hashtable *hash, ...@@ -62,7 +71,7 @@ void batadv_hash_set_lock_class(struct batadv_hashtable *hash,
void batadv_hash_destroy(struct batadv_hashtable *hash); void batadv_hash_destroy(struct batadv_hashtable *hash);
/** /**
* batadv_hash_add - adds data to the hashtable * batadv_hash_add() - adds data to the hashtable
* @hash: storage hash table * @hash: storage hash table
* @compare: callback to determine if 2 hash elements are identical * @compare: callback to determine if 2 hash elements are identical
* @choose: callback calculating the hash index * @choose: callback calculating the hash index
...@@ -112,8 +121,15 @@ static inline int batadv_hash_add(struct batadv_hashtable *hash, ...@@ -112,8 +121,15 @@ static inline int batadv_hash_add(struct batadv_hashtable *hash,
return ret; return ret;
} }
/* removes data from hash, if found. data could be the structure you use with /**
* just the key filled, we just need the key for comparing. * batadv_hash_remove() - Removes data from hash, if found
* @hash: hash table
* @compare: callback to determine if 2 hash elements are identical
* @choose: callback calculating the hash index
* @data: data passed to the aforementioned callbacks as argument
*
* ata could be the structure you use with just the key filled, we just need
* the key for comparing.
* *
* Return: returns pointer do data on success, so you can remove the used * Return: returns pointer do data on success, so you can remove the used
* structure yourself, or NULL on error * structure yourself, or NULL on error
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
...@@ -26,6 +27,7 @@ ...@@ -26,6 +27,7 @@
#include <linux/export.h> #include <linux/export.h>
#include <linux/fcntl.h> #include <linux/fcntl.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/list.h> #include <linux/list.h>
...@@ -55,6 +57,9 @@ static void batadv_socket_add_packet(struct batadv_socket_client *socket_client, ...@@ -55,6 +57,9 @@ static void batadv_socket_add_packet(struct batadv_socket_client *socket_client,
struct batadv_icmp_header *icmph, struct batadv_icmp_header *icmph,
size_t icmp_len); size_t icmp_len);
/**
* batadv_socket_init() - Initialize soft interface independent socket data
*/
void batadv_socket_init(void) void batadv_socket_init(void)
{ {
memset(batadv_socket_client_hash, 0, sizeof(batadv_socket_client_hash)); memset(batadv_socket_client_hash, 0, sizeof(batadv_socket_client_hash));
...@@ -314,6 +319,12 @@ static const struct file_operations batadv_fops = { ...@@ -314,6 +319,12 @@ static const struct file_operations batadv_fops = {
.llseek = no_llseek, .llseek = no_llseek,
}; };
/**
* batadv_socket_setup() - Create debugfs "socket" file
* @bat_priv: the bat priv with all the soft interface information
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_socket_setup(struct batadv_priv *bat_priv) int batadv_socket_setup(struct batadv_priv *bat_priv)
{ {
struct dentry *d; struct dentry *d;
...@@ -333,7 +344,7 @@ int batadv_socket_setup(struct batadv_priv *bat_priv) ...@@ -333,7 +344,7 @@ int batadv_socket_setup(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_socket_add_packet - schedule an icmp packet to be sent to * batadv_socket_add_packet() - schedule an icmp packet to be sent to
* userspace on an icmp socket. * userspace on an icmp socket.
* @socket_client: the socket this packet belongs to * @socket_client: the socket this packet belongs to
* @icmph: pointer to the header of the icmp packet * @icmph: pointer to the header of the icmp packet
...@@ -390,7 +401,7 @@ static void batadv_socket_add_packet(struct batadv_socket_client *socket_client, ...@@ -390,7 +401,7 @@ static void batadv_socket_add_packet(struct batadv_socket_client *socket_client,
} }
/** /**
* batadv_socket_receive_packet - schedule an icmp packet to be received * batadv_socket_receive_packet() - schedule an icmp packet to be received
* locally and sent to userspace. * locally and sent to userspace.
* @icmph: pointer to the header of the icmp packet * @icmph: pointer to the header of the icmp packet
* @icmp_len: total length of the icmp packet * @icmp_len: total length of the icmp packet
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2010-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2010-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
...@@ -24,6 +25,7 @@ ...@@ -24,6 +25,7 @@
#include <linux/export.h> #include <linux/export.h>
#include <linux/fcntl.h> #include <linux/fcntl.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/gfp.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
...@@ -86,6 +88,13 @@ static int batadv_fdebug_log(struct batadv_priv_debug_log *debug_log, ...@@ -86,6 +88,13 @@ static int batadv_fdebug_log(struct batadv_priv_debug_log *debug_log,
return 0; return 0;
} }
/**
* batadv_debug_log() - Add debug log entry
* @bat_priv: the bat priv with all the soft interface information
* @fmt: format string
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_debug_log(struct batadv_priv *bat_priv, const char *fmt, ...) int batadv_debug_log(struct batadv_priv *bat_priv, const char *fmt, ...)
{ {
va_list args; va_list args;
...@@ -197,6 +206,12 @@ static const struct file_operations batadv_log_fops = { ...@@ -197,6 +206,12 @@ static const struct file_operations batadv_log_fops = {
.llseek = no_llseek, .llseek = no_llseek,
}; };
/**
* batadv_debug_log_setup() - Initialize debug log
* @bat_priv: the bat priv with all the soft interface information
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_debug_log_setup(struct batadv_priv *bat_priv) int batadv_debug_log_setup(struct batadv_priv *bat_priv)
{ {
struct dentry *d; struct dentry *d;
...@@ -222,6 +237,10 @@ int batadv_debug_log_setup(struct batadv_priv *bat_priv) ...@@ -222,6 +237,10 @@ int batadv_debug_log_setup(struct batadv_priv *bat_priv)
return -ENOMEM; return -ENOMEM;
} }
/**
* batadv_debug_log_cleanup() - Destroy debug log
* @bat_priv: the bat priv with all the soft interface information
*/
void batadv_debug_log_cleanup(struct batadv_priv *bat_priv) void batadv_debug_log_cleanup(struct batadv_priv *bat_priv)
{ {
kfree(bat_priv->debug_log); kfree(bat_priv->debug_log);
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -44,25 +45,33 @@ static inline void batadv_debug_log_cleanup(struct batadv_priv *bat_priv) ...@@ -44,25 +45,33 @@ static inline void batadv_debug_log_cleanup(struct batadv_priv *bat_priv)
/** /**
* enum batadv_dbg_level - available log levels * enum batadv_dbg_level - available log levels
* @BATADV_DBG_BATMAN: OGM and TQ computations related messages
* @BATADV_DBG_ROUTES: route added / changed / deleted
* @BATADV_DBG_TT: translation table messages
* @BATADV_DBG_BLA: bridge loop avoidance messages
* @BATADV_DBG_DAT: ARP snooping and DAT related messages
* @BATADV_DBG_NC: network coding related messages
* @BATADV_DBG_MCAST: multicast related messages
* @BATADV_DBG_TP_METER: throughput meter messages
* @BATADV_DBG_ALL: the union of all the above log levels
*/ */
enum batadv_dbg_level { enum batadv_dbg_level {
/** @BATADV_DBG_BATMAN: OGM and TQ computations related messages */
BATADV_DBG_BATMAN = BIT(0), BATADV_DBG_BATMAN = BIT(0),
/** @BATADV_DBG_ROUTES: route added / changed / deleted */
BATADV_DBG_ROUTES = BIT(1), BATADV_DBG_ROUTES = BIT(1),
/** @BATADV_DBG_TT: translation table messages */
BATADV_DBG_TT = BIT(2), BATADV_DBG_TT = BIT(2),
/** @BATADV_DBG_BLA: bridge loop avoidance messages */
BATADV_DBG_BLA = BIT(3), BATADV_DBG_BLA = BIT(3),
/** @BATADV_DBG_DAT: ARP snooping and DAT related messages */
BATADV_DBG_DAT = BIT(4), BATADV_DBG_DAT = BIT(4),
/** @BATADV_DBG_NC: network coding related messages */
BATADV_DBG_NC = BIT(5), BATADV_DBG_NC = BIT(5),
/** @BATADV_DBG_MCAST: multicast related messages */
BATADV_DBG_MCAST = BIT(6), BATADV_DBG_MCAST = BIT(6),
/** @BATADV_DBG_TP_METER: throughput meter messages */
BATADV_DBG_TP_METER = BIT(7), BATADV_DBG_TP_METER = BIT(7),
/** @BATADV_DBG_ALL: the union of all the above log levels */
BATADV_DBG_ALL = 255, BATADV_DBG_ALL = 255,
}; };
...@@ -70,7 +79,14 @@ enum batadv_dbg_level { ...@@ -70,7 +79,14 @@ enum batadv_dbg_level {
int batadv_debug_log(struct batadv_priv *bat_priv, const char *fmt, ...) int batadv_debug_log(struct batadv_priv *bat_priv, const char *fmt, ...)
__printf(2, 3); __printf(2, 3);
/* possibly ratelimited debug output */ /**
* _batadv_dbg() - Store debug output with(out) ratelimiting
* @type: type of debug message
* @bat_priv: the bat priv with all the soft interface information
* @ratelimited: whether output should be rate limited
* @fmt: format string
* @arg...: variable arguments
*/
#define _batadv_dbg(type, bat_priv, ratelimited, fmt, arg...) \ #define _batadv_dbg(type, bat_priv, ratelimited, fmt, arg...) \
do { \ do { \
struct batadv_priv *__batpriv = (bat_priv); \ struct batadv_priv *__batpriv = (bat_priv); \
...@@ -89,11 +105,30 @@ static inline void _batadv_dbg(int type __always_unused, ...@@ -89,11 +105,30 @@ static inline void _batadv_dbg(int type __always_unused,
} }
#endif #endif
/**
* batadv_dbg() - Store debug output without ratelimiting
* @type: type of debug message
* @bat_priv: the bat priv with all the soft interface information
* @arg...: format string and variable arguments
*/
#define batadv_dbg(type, bat_priv, arg...) \ #define batadv_dbg(type, bat_priv, arg...) \
_batadv_dbg(type, bat_priv, 0, ## arg) _batadv_dbg(type, bat_priv, 0, ## arg)
/**
* batadv_dbg_ratelimited() - Store debug output with ratelimiting
* @type: type of debug message
* @bat_priv: the bat priv with all the soft interface information
* @arg...: format string and variable arguments
*/
#define batadv_dbg_ratelimited(type, bat_priv, arg...) \ #define batadv_dbg_ratelimited(type, bat_priv, arg...) \
_batadv_dbg(type, bat_priv, 1, ## arg) _batadv_dbg(type, bat_priv, 1, ## arg)
/**
* batadv_info() - Store message in debug buffer and print it to kmsg buffer
* @net_dev: the soft interface net device
* @fmt: format string
* @arg...: variable arguments
*/
#define batadv_info(net_dev, fmt, arg...) \ #define batadv_info(net_dev, fmt, arg...) \
do { \ do { \
struct net_device *_netdev = (net_dev); \ struct net_device *_netdev = (net_dev); \
...@@ -101,6 +136,13 @@ static inline void _batadv_dbg(int type __always_unused, ...@@ -101,6 +136,13 @@ static inline void _batadv_dbg(int type __always_unused,
batadv_dbg(BATADV_DBG_ALL, _batpriv, fmt, ## arg); \ batadv_dbg(BATADV_DBG_ALL, _batpriv, fmt, ## arg); \
pr_info("%s: " fmt, _netdev->name, ## arg); \ pr_info("%s: " fmt, _netdev->name, ## arg); \
} while (0) } while (0)
/**
* batadv_err() - Store error in debug buffer and print it to kmsg buffer
* @net_dev: the soft interface net device
* @fmt: format string
* @arg...: variable arguments
*/
#define batadv_err(net_dev, fmt, arg...) \ #define batadv_err(net_dev, fmt, arg...) \
do { \ do { \
struct net_device *_netdev = (net_dev); \ struct net_device *_netdev = (net_dev); \
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -18,12 +19,12 @@ ...@@ -18,12 +19,12 @@
#include "main.h" #include "main.h"
#include <linux/atomic.h> #include <linux/atomic.h>
#include <linux/bug.h> #include <linux/build_bug.h>
#include <linux/byteorder/generic.h> #include <linux/byteorder/generic.h>
#include <linux/crc32c.h> #include <linux/crc32c.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/fs.h>
#include <linux/genetlink.h> #include <linux/genetlink.h>
#include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -139,6 +140,12 @@ static void __exit batadv_exit(void) ...@@ -139,6 +140,12 @@ static void __exit batadv_exit(void)
batadv_tt_cache_destroy(); batadv_tt_cache_destroy();
} }
/**
* batadv_mesh_init() - Initialize soft interface
* @soft_iface: netdev struct of the soft interface
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_mesh_init(struct net_device *soft_iface) int batadv_mesh_init(struct net_device *soft_iface)
{ {
struct batadv_priv *bat_priv = netdev_priv(soft_iface); struct batadv_priv *bat_priv = netdev_priv(soft_iface);
...@@ -216,6 +223,10 @@ int batadv_mesh_init(struct net_device *soft_iface) ...@@ -216,6 +223,10 @@ int batadv_mesh_init(struct net_device *soft_iface)
return ret; return ret;
} }
/**
* batadv_mesh_free() - Deinitialize soft interface
* @soft_iface: netdev struct of the soft interface
*/
void batadv_mesh_free(struct net_device *soft_iface) void batadv_mesh_free(struct net_device *soft_iface)
{ {
struct batadv_priv *bat_priv = netdev_priv(soft_iface); struct batadv_priv *bat_priv = netdev_priv(soft_iface);
...@@ -255,8 +266,8 @@ void batadv_mesh_free(struct net_device *soft_iface) ...@@ -255,8 +266,8 @@ void batadv_mesh_free(struct net_device *soft_iface)
} }
/** /**
* batadv_is_my_mac - check if the given mac address belongs to any of the real * batadv_is_my_mac() - check if the given mac address belongs to any of the
* interfaces in the current mesh * real interfaces in the current mesh
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the address to check * @addr: the address to check
* *
...@@ -286,7 +297,7 @@ bool batadv_is_my_mac(struct batadv_priv *bat_priv, const u8 *addr) ...@@ -286,7 +297,7 @@ bool batadv_is_my_mac(struct batadv_priv *bat_priv, const u8 *addr)
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_seq_print_text_primary_if_get - called from debugfs table printing * batadv_seq_print_text_primary_if_get() - called from debugfs table printing
* function that requires the primary interface * function that requires the primary interface
* @seq: debugfs table seq_file struct * @seq: debugfs table seq_file struct
* *
...@@ -323,7 +334,7 @@ batadv_seq_print_text_primary_if_get(struct seq_file *seq) ...@@ -323,7 +334,7 @@ batadv_seq_print_text_primary_if_get(struct seq_file *seq)
#endif #endif
/** /**
* batadv_max_header_len - calculate maximum encapsulation overhead for a * batadv_max_header_len() - calculate maximum encapsulation overhead for a
* payload packet * payload packet
* *
* Return: the maximum encapsulation overhead in bytes. * Return: the maximum encapsulation overhead in bytes.
...@@ -348,7 +359,7 @@ int batadv_max_header_len(void) ...@@ -348,7 +359,7 @@ int batadv_max_header_len(void)
} }
/** /**
* batadv_skb_set_priority - sets skb priority according to packet content * batadv_skb_set_priority() - sets skb priority according to packet content
* @skb: the packet to be sent * @skb: the packet to be sent
* @offset: offset to the packet content * @offset: offset to the packet content
* *
...@@ -412,6 +423,16 @@ static int batadv_recv_unhandled_packet(struct sk_buff *skb, ...@@ -412,6 +423,16 @@ static int batadv_recv_unhandled_packet(struct sk_buff *skb,
/* incoming packets with the batman ethertype received on any active hard /* incoming packets with the batman ethertype received on any active hard
* interface * interface
*/ */
/**
* batadv_batman_skb_recv() - Handle incoming message from an hard interface
* @skb: the received packet
* @dev: the net device that the packet was received on
* @ptype: packet type of incoming packet (ETH_P_BATMAN)
* @orig_dev: the original receive net device (e.g. bonded device)
*
* Return: NET_RX_SUCCESS on success or NET_RX_DROP in case of failure
*/
int batadv_batman_skb_recv(struct sk_buff *skb, struct net_device *dev, int batadv_batman_skb_recv(struct sk_buff *skb, struct net_device *dev,
struct packet_type *ptype, struct packet_type *ptype,
struct net_device *orig_dev) struct net_device *orig_dev)
...@@ -535,6 +556,13 @@ static void batadv_recv_handler_init(void) ...@@ -535,6 +556,13 @@ static void batadv_recv_handler_init(void)
batadv_rx_handler[BATADV_UNICAST_FRAG] = batadv_recv_frag_packet; batadv_rx_handler[BATADV_UNICAST_FRAG] = batadv_recv_frag_packet;
} }
/**
* batadv_recv_handler_register() - Register handler for batman-adv packet type
* @packet_type: batadv_packettype which should be handled
* @recv_handler: receive handler for the packet type
*
* Return: 0 on success or negative error number in case of failure
*/
int int
batadv_recv_handler_register(u8 packet_type, batadv_recv_handler_register(u8 packet_type,
int (*recv_handler)(struct sk_buff *, int (*recv_handler)(struct sk_buff *,
...@@ -552,13 +580,17 @@ batadv_recv_handler_register(u8 packet_type, ...@@ -552,13 +580,17 @@ batadv_recv_handler_register(u8 packet_type,
return 0; return 0;
} }
/**
* batadv_recv_handler_unregister() - Unregister handler for packet type
* @packet_type: batadv_packettype which should no longer be handled
*/
void batadv_recv_handler_unregister(u8 packet_type) void batadv_recv_handler_unregister(u8 packet_type)
{ {
batadv_rx_handler[packet_type] = batadv_recv_unhandled_packet; batadv_rx_handler[packet_type] = batadv_recv_unhandled_packet;
} }
/** /**
* batadv_skb_crc32 - calculate CRC32 of the whole packet and skip bytes in * batadv_skb_crc32() - calculate CRC32 of the whole packet and skip bytes in
* the header * the header
* @skb: skb pointing to fragmented socket buffers * @skb: skb pointing to fragmented socket buffers
* @payload_ptr: Pointer to position inside the head buffer of the skb * @payload_ptr: Pointer to position inside the head buffer of the skb
...@@ -591,7 +623,7 @@ __be32 batadv_skb_crc32(struct sk_buff *skb, u8 *payload_ptr) ...@@ -591,7 +623,7 @@ __be32 batadv_skb_crc32(struct sk_buff *skb, u8 *payload_ptr)
} }
/** /**
* batadv_get_vid - extract the VLAN identifier from skb if any * batadv_get_vid() - extract the VLAN identifier from skb if any
* @skb: the buffer containing the packet * @skb: the buffer containing the packet
* @header_len: length of the batman header preceding the ethernet header * @header_len: length of the batman header preceding the ethernet header
* *
...@@ -618,7 +650,7 @@ unsigned short batadv_get_vid(struct sk_buff *skb, size_t header_len) ...@@ -618,7 +650,7 @@ unsigned short batadv_get_vid(struct sk_buff *skb, size_t header_len)
} }
/** /**
* batadv_vlan_ap_isola_get - return the AP isolation status for the given vlan * batadv_vlan_ap_isola_get() - return AP isolation status for the given vlan
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @vid: the VLAN identifier for which the AP isolation attributed as to be * @vid: the VLAN identifier for which the AP isolation attributed as to be
* looked up * looked up
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -24,7 +25,7 @@ ...@@ -24,7 +25,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 "2017.4" #define BATADV_SOURCE_VERSION "2018.0"
#endif #endif
/* B.A.T.M.A.N. parameters */ /* B.A.T.M.A.N. parameters */
...@@ -140,24 +141,56 @@ ...@@ -140,24 +141,56 @@
*/ */
#define BATADV_TP_MAX_NUM 5 #define BATADV_TP_MAX_NUM 5
/**
* enum batadv_mesh_state - State of a soft interface
*/
enum batadv_mesh_state { enum batadv_mesh_state {
/** @BATADV_MESH_INACTIVE: soft interface is not yet running */
BATADV_MESH_INACTIVE, BATADV_MESH_INACTIVE,
/** @BATADV_MESH_ACTIVE: interface is up and running */
BATADV_MESH_ACTIVE, BATADV_MESH_ACTIVE,
/** @BATADV_MESH_DEACTIVATING: interface is getting shut down */
BATADV_MESH_DEACTIVATING, BATADV_MESH_DEACTIVATING,
}; };
#define BATADV_BCAST_QUEUE_LEN 256 #define BATADV_BCAST_QUEUE_LEN 256
#define BATADV_BATMAN_QUEUE_LEN 256 #define BATADV_BATMAN_QUEUE_LEN 256
/**
* enum batadv_uev_action - action type of uevent
*/
enum batadv_uev_action { enum batadv_uev_action {
/** @BATADV_UEV_ADD: gateway was selected (after none was selected) */
BATADV_UEV_ADD = 0, BATADV_UEV_ADD = 0,
/**
* @BATADV_UEV_DEL: selected gateway was removed and none is selected
* anymore
*/
BATADV_UEV_DEL, BATADV_UEV_DEL,
/**
* @BATADV_UEV_CHANGE: a different gateway was selected as based gateway
*/
BATADV_UEV_CHANGE, BATADV_UEV_CHANGE,
/**
* @BATADV_UEV_LOOPDETECT: loop was detected which cannot be handled by
* bridge loop avoidance
*/
BATADV_UEV_LOOPDETECT, BATADV_UEV_LOOPDETECT,
}; };
/**
* enum batadv_uev_type - Type of uevent
*/
enum batadv_uev_type { enum batadv_uev_type {
/** @BATADV_UEV_GW: selected gateway was modified */
BATADV_UEV_GW = 0, BATADV_UEV_GW = 0,
/** @BATADV_UEV_BLA: bridge loop avoidance event */
BATADV_UEV_BLA, BATADV_UEV_BLA,
}; };
...@@ -202,7 +235,7 @@ struct seq_file; ...@@ -202,7 +235,7 @@ struct seq_file;
struct sk_buff; struct sk_buff;
/** /**
* batadv_print_vid - return printable version of vid information * batadv_print_vid() - return printable version of vid information
* @vid: the VLAN identifier * @vid: the VLAN identifier
* *
* Return: -1 when no VLAN is used, VLAN id otherwise * Return: -1 when no VLAN is used, VLAN id otherwise
...@@ -238,7 +271,7 @@ void batadv_recv_handler_unregister(u8 packet_type); ...@@ -238,7 +271,7 @@ void batadv_recv_handler_unregister(u8 packet_type);
__be32 batadv_skb_crc32(struct sk_buff *skb, u8 *payload_ptr); __be32 batadv_skb_crc32(struct sk_buff *skb, u8 *payload_ptr);
/** /**
* batadv_compare_eth - Compare two not u16 aligned Ethernet addresses * batadv_compare_eth() - Compare two not u16 aligned Ethernet addresses
* @data1: Pointer to a six-byte array containing the Ethernet address * @data1: Pointer to a six-byte array containing the Ethernet address
* @data2: Pointer other six-byte array containing the Ethernet address * @data2: Pointer other six-byte array containing the Ethernet address
* *
...@@ -252,7 +285,7 @@ static inline bool batadv_compare_eth(const void *data1, const void *data2) ...@@ -252,7 +285,7 @@ static inline bool batadv_compare_eth(const void *data1, const void *data2)
} }
/** /**
* batadv_has_timed_out - compares current time (jiffies) and timestamp + * batadv_has_timed_out() - compares current time (jiffies) and timestamp +
* timeout * timeout
* @timestamp: base value to compare with (in jiffies) * @timestamp: base value to compare with (in jiffies)
* @timeout: added to base value before comparing (in milliseconds) * @timeout: added to base value before comparing (in milliseconds)
...@@ -265,40 +298,96 @@ static inline bool batadv_has_timed_out(unsigned long timestamp, ...@@ -265,40 +298,96 @@ static inline bool batadv_has_timed_out(unsigned long timestamp,
return time_is_before_jiffies(timestamp + msecs_to_jiffies(timeout)); return time_is_before_jiffies(timestamp + msecs_to_jiffies(timeout));
} }
/**
* batadv_atomic_dec_not_zero() - Decrease unless the number is 0
* @v: pointer of type atomic_t
*
* Return: non-zero if v was not 0, and zero otherwise.
*/
#define batadv_atomic_dec_not_zero(v) atomic_add_unless((v), -1, 0) #define batadv_atomic_dec_not_zero(v) atomic_add_unless((v), -1, 0)
/* Returns the smallest signed integer in two's complement with the sizeof x */ /**
* batadv_smallest_signed_int() - Returns the smallest signed integer in two's
* complement with the sizeof x
* @x: type of integer
*
* Return: smallest signed integer of type
*/
#define batadv_smallest_signed_int(x) (1u << (7u + 8u * (sizeof(x) - 1u))) #define batadv_smallest_signed_int(x) (1u << (7u + 8u * (sizeof(x) - 1u)))
/* Checks if a sequence number x is a predecessor/successor of y. /**
* they handle overflows/underflows and can correctly check for a * batadv_seq_before() - Checks if a sequence number x is a predecessor of y
* predecessor/successor unless the variable sequence number has grown by * @x: potential predecessor of @y
* more then 2**(bitwidth(x)-1)-1. * @y: value to compare @x against
*
* It handles overflows/underflows and can correctly check for a predecessor
* unless the variable sequence number has grown by more then
* 2**(bitwidth(x)-1)-1.
*
* This means that for a u8 with the maximum value 255, it would think: * This means that for a u8 with the maximum value 255, it would think:
* - when adding nothing - it is neither a predecessor nor a successor *
* - before adding more than 127 to the starting value - it is a predecessor, * * when adding nothing - it is neither a predecessor nor a successor
* - when adding 128 - it is neither a predecessor nor a successor, * * before adding more than 127 to the starting value - it is a predecessor,
* - after adding more than 127 to the starting value - it is a successor * * when adding 128 - it is neither a predecessor nor a successor,
* * after adding more than 127 to the starting value - it is a successor
*
* Return: true when x is a predecessor of y, false otherwise
*/ */
#define batadv_seq_before(x, y) ({typeof(x)_d1 = (x); \ #define batadv_seq_before(x, y) ({typeof(x)_d1 = (x); \
typeof(y)_d2 = (y); \ typeof(y)_d2 = (y); \
typeof(x)_dummy = (_d1 - _d2); \ typeof(x)_dummy = (_d1 - _d2); \
(void)(&_d1 == &_d2); \ (void)(&_d1 == &_d2); \
_dummy > batadv_smallest_signed_int(_dummy); }) _dummy > batadv_smallest_signed_int(_dummy); })
/**
* batadv_seq_after() - Checks if a sequence number x is a successor of y
* @x: potential sucessor of @y
* @y: value to compare @x against
*
* It handles overflows/underflows and can correctly check for a successor
* unless the variable sequence number has grown by more then
* 2**(bitwidth(x)-1)-1.
*
* This means that for a u8 with the maximum value 255, it would think:
*
* * when adding nothing - it is neither a predecessor nor a successor
* * before adding more than 127 to the starting value - it is a predecessor,
* * when adding 128 - it is neither a predecessor nor a successor,
* * after adding more than 127 to the starting value - it is a successor
*
* Return: true when x is a successor of y, false otherwise
*/
#define batadv_seq_after(x, y) batadv_seq_before(y, x) #define batadv_seq_after(x, y) batadv_seq_before(y, x)
/* Stop preemption on local cpu while incrementing the counter */ /**
* batadv_add_counter() - Add to per cpu statistics counter of soft interface
* @bat_priv: the bat priv with all the soft interface information
* @idx: counter index which should be modified
* @count: value to increase counter by
*
* Stop preemption on local cpu while incrementing the counter
*/
static inline void batadv_add_counter(struct batadv_priv *bat_priv, size_t idx, static inline void batadv_add_counter(struct batadv_priv *bat_priv, size_t idx,
size_t count) size_t count)
{ {
this_cpu_add(bat_priv->bat_counters[idx], count); this_cpu_add(bat_priv->bat_counters[idx], count);
} }
/**
* batadv_inc_counter() - Increase per cpu statistics counter of soft interface
* @b: the bat priv with all the soft interface information
* @i: counter index which should be modified
*/
#define batadv_inc_counter(b, i) batadv_add_counter(b, i, 1) #define batadv_inc_counter(b, i) batadv_add_counter(b, i, 1)
/* Define a macro to reach the control buffer of the skb. The members of the /**
* control buffer are defined in struct batadv_skb_cb in types.h. * BATADV_SKB_CB() - Get batadv_skb_cb from skb control buffer
* The macro is inspired by the similar macro TCP_SKB_CB() in tcp.h. * @__skb: skb holding the control buffer
*
* The members of the control buffer are defined in struct batadv_skb_cb in
* types.h. The macro is inspired by the similar macro TCP_SKB_CB() in tcp.h.
*
* Return: pointer to the batadv_skb_cb of the skb
*/ */
#define BATADV_SKB_CB(__skb) ((struct batadv_skb_cb *)&((__skb)->cb[0])) #define BATADV_SKB_CB(__skb) ((struct batadv_skb_cb *)&((__skb)->cb[0]))
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2014-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2014-2017 B.A.T.M.A.N. contributors:
* *
* Linus Lüssing * Linus Lüssing
...@@ -24,7 +25,7 @@ ...@@ -24,7 +25,7 @@
#include <linux/byteorder/generic.h> #include <linux/byteorder/generic.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/icmpv6.h> #include <linux/icmpv6.h>
#include <linux/if_bridge.h> #include <linux/if_bridge.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
...@@ -65,7 +66,7 @@ ...@@ -65,7 +66,7 @@
static void batadv_mcast_mla_update(struct work_struct *work); static void batadv_mcast_mla_update(struct work_struct *work);
/** /**
* batadv_mcast_start_timer - schedule the multicast periodic worker * batadv_mcast_start_timer() - schedule the multicast periodic worker
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
static void batadv_mcast_start_timer(struct batadv_priv *bat_priv) static void batadv_mcast_start_timer(struct batadv_priv *bat_priv)
...@@ -75,7 +76,7 @@ static void batadv_mcast_start_timer(struct batadv_priv *bat_priv) ...@@ -75,7 +76,7 @@ static void batadv_mcast_start_timer(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_mcast_get_bridge - get the bridge on top of the softif if it exists * batadv_mcast_get_bridge() - get the bridge on top of the softif if it exists
* @soft_iface: netdev struct of the mesh interface * @soft_iface: netdev struct of the mesh interface
* *
* If the given soft interface has a bridge on top then the refcount * If the given soft interface has a bridge on top then the refcount
...@@ -101,7 +102,7 @@ static struct net_device *batadv_mcast_get_bridge(struct net_device *soft_iface) ...@@ -101,7 +102,7 @@ static struct net_device *batadv_mcast_get_bridge(struct net_device *soft_iface)
} }
/** /**
* batadv_mcast_mla_softif_get - get softif multicast listeners * batadv_mcast_mla_softif_get() - get softif multicast listeners
* @dev: the device to collect multicast addresses from * @dev: the device to collect multicast addresses from
* @mcast_list: a list to put found addresses into * @mcast_list: a list to put found addresses into
* *
...@@ -147,7 +148,7 @@ static int batadv_mcast_mla_softif_get(struct net_device *dev, ...@@ -147,7 +148,7 @@ static int batadv_mcast_mla_softif_get(struct net_device *dev,
} }
/** /**
* batadv_mcast_mla_is_duplicate - check whether an address is in a list * batadv_mcast_mla_is_duplicate() - check whether an address is in a list
* @mcast_addr: the multicast address to check * @mcast_addr: the multicast address to check
* @mcast_list: the list with multicast addresses to search in * @mcast_list: the list with multicast addresses to search in
* *
...@@ -167,7 +168,7 @@ static bool batadv_mcast_mla_is_duplicate(u8 *mcast_addr, ...@@ -167,7 +168,7 @@ static bool batadv_mcast_mla_is_duplicate(u8 *mcast_addr,
} }
/** /**
* batadv_mcast_mla_br_addr_cpy - copy a bridge multicast address * batadv_mcast_mla_br_addr_cpy() - copy a bridge multicast address
* @dst: destination to write to - a multicast MAC address * @dst: destination to write to - a multicast MAC address
* @src: source to read from - a multicast IP address * @src: source to read from - a multicast IP address
* *
...@@ -191,7 +192,7 @@ static void batadv_mcast_mla_br_addr_cpy(char *dst, const struct br_ip *src) ...@@ -191,7 +192,7 @@ static void batadv_mcast_mla_br_addr_cpy(char *dst, const struct br_ip *src)
} }
/** /**
* batadv_mcast_mla_bridge_get - get bridged-in multicast listeners * batadv_mcast_mla_bridge_get() - get bridged-in multicast listeners
* @dev: a bridge slave whose bridge to collect multicast addresses from * @dev: a bridge slave whose bridge to collect multicast addresses from
* @mcast_list: a list to put found addresses into * @mcast_list: a list to put found addresses into
* *
...@@ -244,7 +245,7 @@ static int batadv_mcast_mla_bridge_get(struct net_device *dev, ...@@ -244,7 +245,7 @@ static int batadv_mcast_mla_bridge_get(struct net_device *dev,
} }
/** /**
* batadv_mcast_mla_list_free - free a list of multicast addresses * batadv_mcast_mla_list_free() - free a list of multicast addresses
* @mcast_list: the list to free * @mcast_list: the list to free
* *
* Removes and frees all items in the given mcast_list. * Removes and frees all items in the given mcast_list.
...@@ -261,7 +262,7 @@ static void batadv_mcast_mla_list_free(struct hlist_head *mcast_list) ...@@ -261,7 +262,7 @@ static void batadv_mcast_mla_list_free(struct hlist_head *mcast_list)
} }
/** /**
* batadv_mcast_mla_tt_retract - clean up multicast listener announcements * batadv_mcast_mla_tt_retract() - clean up multicast listener announcements
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @mcast_list: a list of addresses which should _not_ be removed * @mcast_list: a list of addresses which should _not_ be removed
* *
...@@ -297,7 +298,7 @@ static void batadv_mcast_mla_tt_retract(struct batadv_priv *bat_priv, ...@@ -297,7 +298,7 @@ static void batadv_mcast_mla_tt_retract(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_mla_tt_add - add multicast listener announcements * batadv_mcast_mla_tt_add() - add multicast listener announcements
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @mcast_list: a list of addresses which are going to get added * @mcast_list: a list of addresses which are going to get added
* *
...@@ -333,7 +334,7 @@ static void batadv_mcast_mla_tt_add(struct batadv_priv *bat_priv, ...@@ -333,7 +334,7 @@ static void batadv_mcast_mla_tt_add(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_has_bridge - check whether the soft-iface is bridged * batadv_mcast_has_bridge() - check whether the soft-iface is bridged
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Checks whether there is a bridge on top of our soft interface. * Checks whether there is a bridge on top of our soft interface.
...@@ -354,7 +355,8 @@ static bool batadv_mcast_has_bridge(struct batadv_priv *bat_priv) ...@@ -354,7 +355,8 @@ static bool batadv_mcast_has_bridge(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_mcast_querier_log - debug output regarding the querier status on link * batadv_mcast_querier_log() - debug output regarding the querier status on
* link
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @str_proto: a string for the querier protocol (e.g. "IGMP" or "MLD") * @str_proto: a string for the querier protocol (e.g. "IGMP" or "MLD")
* @old_state: the previous querier state on our link * @old_state: the previous querier state on our link
...@@ -405,7 +407,8 @@ batadv_mcast_querier_log(struct batadv_priv *bat_priv, char *str_proto, ...@@ -405,7 +407,8 @@ batadv_mcast_querier_log(struct batadv_priv *bat_priv, char *str_proto,
} }
/** /**
* batadv_mcast_bridge_log - debug output for topology changes in bridged setups * batadv_mcast_bridge_log() - debug output for topology changes in bridged
* setups
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @bridged: a flag about whether the soft interface is currently bridged or not * @bridged: a flag about whether the soft interface is currently bridged or not
* @querier_ipv4: (maybe) new status of a potential, selected IGMP querier * @querier_ipv4: (maybe) new status of a potential, selected IGMP querier
...@@ -444,7 +447,7 @@ batadv_mcast_bridge_log(struct batadv_priv *bat_priv, bool bridged, ...@@ -444,7 +447,7 @@ batadv_mcast_bridge_log(struct batadv_priv *bat_priv, bool bridged,
} }
/** /**
* batadv_mcast_flags_logs - output debug information about mcast flag changes * batadv_mcast_flags_logs() - output debug information about mcast flag changes
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @flags: flags indicating the new multicast state * @flags: flags indicating the new multicast state
* *
...@@ -470,7 +473,7 @@ static void batadv_mcast_flags_log(struct batadv_priv *bat_priv, u8 flags) ...@@ -470,7 +473,7 @@ static void batadv_mcast_flags_log(struct batadv_priv *bat_priv, u8 flags)
} }
/** /**
* batadv_mcast_mla_tvlv_update - update multicast tvlv * batadv_mcast_mla_tvlv_update() - update multicast tvlv
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Updates the own multicast tvlv with our current multicast related settings, * Updates the own multicast tvlv with our current multicast related settings,
...@@ -545,7 +548,7 @@ static bool batadv_mcast_mla_tvlv_update(struct batadv_priv *bat_priv) ...@@ -545,7 +548,7 @@ static bool batadv_mcast_mla_tvlv_update(struct batadv_priv *bat_priv)
} }
/** /**
* __batadv_mcast_mla_update - update the own MLAs * __batadv_mcast_mla_update() - update the own MLAs
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Updates the own multicast listener announcements in the translation * Updates the own multicast listener announcements in the translation
...@@ -582,7 +585,7 @@ static void __batadv_mcast_mla_update(struct batadv_priv *bat_priv) ...@@ -582,7 +585,7 @@ static void __batadv_mcast_mla_update(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_mcast_mla_update - update the own MLAs * batadv_mcast_mla_update() - update the own MLAs
* @work: kernel work struct * @work: kernel work struct
* *
* Updates the own multicast listener announcements in the translation * Updates the own multicast listener announcements in the translation
...@@ -605,7 +608,7 @@ static void batadv_mcast_mla_update(struct work_struct *work) ...@@ -605,7 +608,7 @@ static void batadv_mcast_mla_update(struct work_struct *work)
} }
/** /**
* batadv_mcast_is_report_ipv4 - check for IGMP reports * batadv_mcast_is_report_ipv4() - check for IGMP reports
* @skb: the ethernet frame destined for the mesh * @skb: the ethernet frame destined for the mesh
* *
* This call might reallocate skb data. * This call might reallocate skb data.
...@@ -630,7 +633,8 @@ static bool batadv_mcast_is_report_ipv4(struct sk_buff *skb) ...@@ -630,7 +633,8 @@ static bool batadv_mcast_is_report_ipv4(struct sk_buff *skb)
} }
/** /**
* batadv_mcast_forw_mode_check_ipv4 - check for optimized forwarding potential * batadv_mcast_forw_mode_check_ipv4() - check for optimized forwarding
* potential
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the IPv4 packet to check * @skb: the IPv4 packet to check
* @is_unsnoopable: stores whether the destination is snoopable * @is_unsnoopable: stores whether the destination is snoopable
...@@ -671,7 +675,7 @@ static int batadv_mcast_forw_mode_check_ipv4(struct batadv_priv *bat_priv, ...@@ -671,7 +675,7 @@ static int batadv_mcast_forw_mode_check_ipv4(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_is_report_ipv6 - check for MLD reports * batadv_mcast_is_report_ipv6() - check for MLD reports
* @skb: the ethernet frame destined for the mesh * @skb: the ethernet frame destined for the mesh
* *
* This call might reallocate skb data. * This call might reallocate skb data.
...@@ -695,7 +699,8 @@ static bool batadv_mcast_is_report_ipv6(struct sk_buff *skb) ...@@ -695,7 +699,8 @@ static bool batadv_mcast_is_report_ipv6(struct sk_buff *skb)
} }
/** /**
* batadv_mcast_forw_mode_check_ipv6 - check for optimized forwarding potential * batadv_mcast_forw_mode_check_ipv6() - check for optimized forwarding
* potential
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the IPv6 packet to check * @skb: the IPv6 packet to check
* @is_unsnoopable: stores whether the destination is snoopable * @is_unsnoopable: stores whether the destination is snoopable
...@@ -736,7 +741,7 @@ static int batadv_mcast_forw_mode_check_ipv6(struct batadv_priv *bat_priv, ...@@ -736,7 +741,7 @@ static int batadv_mcast_forw_mode_check_ipv6(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_forw_mode_check - check for optimized forwarding potential * batadv_mcast_forw_mode_check() - check for optimized forwarding potential
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the multicast frame to check * @skb: the multicast frame to check
* @is_unsnoopable: stores whether the destination is snoopable * @is_unsnoopable: stores whether the destination is snoopable
...@@ -774,7 +779,7 @@ static int batadv_mcast_forw_mode_check(struct batadv_priv *bat_priv, ...@@ -774,7 +779,7 @@ static int batadv_mcast_forw_mode_check(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_forw_want_all_ip_count - count nodes with unspecific mcast * batadv_mcast_forw_want_all_ip_count() - count nodes with unspecific mcast
* interest * interest
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ethhdr: ethernet header of a packet * @ethhdr: ethernet header of a packet
...@@ -798,7 +803,7 @@ static int batadv_mcast_forw_want_all_ip_count(struct batadv_priv *bat_priv, ...@@ -798,7 +803,7 @@ static int batadv_mcast_forw_want_all_ip_count(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_forw_tt_node_get - get a multicast tt node * batadv_mcast_forw_tt_node_get() - get a multicast tt node
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ethhdr: the ether header containing the multicast destination * @ethhdr: the ether header containing the multicast destination
* *
...@@ -814,7 +819,7 @@ batadv_mcast_forw_tt_node_get(struct batadv_priv *bat_priv, ...@@ -814,7 +819,7 @@ batadv_mcast_forw_tt_node_get(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_forw_ipv4_node_get - get a node with an ipv4 flag * batadv_mcast_forw_ipv4_node_get() - get a node with an ipv4 flag
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Return: an orig_node which has the BATADV_MCAST_WANT_ALL_IPV4 flag set and * Return: an orig_node which has the BATADV_MCAST_WANT_ALL_IPV4 flag set and
...@@ -841,7 +846,7 @@ batadv_mcast_forw_ipv4_node_get(struct batadv_priv *bat_priv) ...@@ -841,7 +846,7 @@ batadv_mcast_forw_ipv4_node_get(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_mcast_forw_ipv6_node_get - get a node with an ipv6 flag * batadv_mcast_forw_ipv6_node_get() - get a node with an ipv6 flag
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Return: an orig_node which has the BATADV_MCAST_WANT_ALL_IPV6 flag set * Return: an orig_node which has the BATADV_MCAST_WANT_ALL_IPV6 flag set
...@@ -868,7 +873,7 @@ batadv_mcast_forw_ipv6_node_get(struct batadv_priv *bat_priv) ...@@ -868,7 +873,7 @@ batadv_mcast_forw_ipv6_node_get(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_mcast_forw_ip_node_get - get a node with an ipv4/ipv6 flag * batadv_mcast_forw_ip_node_get() - get a node with an ipv4/ipv6 flag
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ethhdr: an ethernet header to determine the protocol family from * @ethhdr: an ethernet header to determine the protocol family from
* *
...@@ -892,7 +897,7 @@ batadv_mcast_forw_ip_node_get(struct batadv_priv *bat_priv, ...@@ -892,7 +897,7 @@ batadv_mcast_forw_ip_node_get(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_forw_unsnoop_node_get - get a node with an unsnoopable flag * batadv_mcast_forw_unsnoop_node_get() - get a node with an unsnoopable flag
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Return: an orig_node which has the BATADV_MCAST_WANT_ALL_UNSNOOPABLES flag * Return: an orig_node which has the BATADV_MCAST_WANT_ALL_UNSNOOPABLES flag
...@@ -919,7 +924,7 @@ batadv_mcast_forw_unsnoop_node_get(struct batadv_priv *bat_priv) ...@@ -919,7 +924,7 @@ batadv_mcast_forw_unsnoop_node_get(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_mcast_forw_mode - check on how to forward a multicast packet * batadv_mcast_forw_mode() - check on how to forward a multicast packet
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: The multicast packet to check * @skb: The multicast packet to check
* @orig: an originator to be set to forward the skb to * @orig: an originator to be set to forward the skb to
...@@ -973,7 +978,7 @@ batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb, ...@@ -973,7 +978,7 @@ batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb,
} }
/** /**
* batadv_mcast_want_unsnoop_update - update unsnoop counter and list * batadv_mcast_want_unsnoop_update() - update unsnoop counter and list
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig: the orig_node which multicast state might have changed of * @orig: the orig_node which multicast state might have changed of
* @mcast_flags: flags indicating the new multicast state * @mcast_flags: flags indicating the new multicast state
...@@ -1018,7 +1023,7 @@ static void batadv_mcast_want_unsnoop_update(struct batadv_priv *bat_priv, ...@@ -1018,7 +1023,7 @@ static void batadv_mcast_want_unsnoop_update(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_want_ipv4_update - update want-all-ipv4 counter and list * batadv_mcast_want_ipv4_update() - update want-all-ipv4 counter and list
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig: the orig_node which multicast state might have changed of * @orig: the orig_node which multicast state might have changed of
* @mcast_flags: flags indicating the new multicast state * @mcast_flags: flags indicating the new multicast state
...@@ -1063,7 +1068,7 @@ static void batadv_mcast_want_ipv4_update(struct batadv_priv *bat_priv, ...@@ -1063,7 +1068,7 @@ static void batadv_mcast_want_ipv4_update(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_want_ipv6_update - update want-all-ipv6 counter and list * batadv_mcast_want_ipv6_update() - update want-all-ipv6 counter and list
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig: the orig_node which multicast state might have changed of * @orig: the orig_node which multicast state might have changed of
* @mcast_flags: flags indicating the new multicast state * @mcast_flags: flags indicating the new multicast state
...@@ -1108,7 +1113,7 @@ static void batadv_mcast_want_ipv6_update(struct batadv_priv *bat_priv, ...@@ -1108,7 +1113,7 @@ static void batadv_mcast_want_ipv6_update(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_tvlv_ogm_handler - process incoming multicast tvlv container * batadv_mcast_tvlv_ogm_handler() - process incoming multicast tvlv container
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig: the orig_node of the ogm * @orig: the orig_node of the ogm
* @flags: flags indicating the tvlv state (see batadv_tvlv_handler_flags) * @flags: flags indicating the tvlv state (see batadv_tvlv_handler_flags)
...@@ -1164,7 +1169,7 @@ static void batadv_mcast_tvlv_ogm_handler(struct batadv_priv *bat_priv, ...@@ -1164,7 +1169,7 @@ static void batadv_mcast_tvlv_ogm_handler(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_init - initialize the multicast optimizations structures * batadv_mcast_init() - initialize the multicast optimizations structures
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
void batadv_mcast_init(struct batadv_priv *bat_priv) void batadv_mcast_init(struct batadv_priv *bat_priv)
...@@ -1179,7 +1184,7 @@ void batadv_mcast_init(struct batadv_priv *bat_priv) ...@@ -1179,7 +1184,7 @@ void batadv_mcast_init(struct batadv_priv *bat_priv)
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_mcast_flags_print_header - print own mcast flags to debugfs table * batadv_mcast_flags_print_header() - print own mcast flags to debugfs table
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @seq: debugfs table seq_file struct * @seq: debugfs table seq_file struct
* *
...@@ -1220,7 +1225,7 @@ static void batadv_mcast_flags_print_header(struct batadv_priv *bat_priv, ...@@ -1220,7 +1225,7 @@ static void batadv_mcast_flags_print_header(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_mcast_flags_seq_print_text - print the mcast flags of other nodes * batadv_mcast_flags_seq_print_text() - print the mcast flags of other nodes
* @seq: seq file to print on * @seq: seq file to print on
* @offset: not used * @offset: not used
* *
...@@ -1281,7 +1286,7 @@ int batadv_mcast_flags_seq_print_text(struct seq_file *seq, void *offset) ...@@ -1281,7 +1286,7 @@ int batadv_mcast_flags_seq_print_text(struct seq_file *seq, void *offset)
#endif #endif
/** /**
* batadv_mcast_free - free the multicast optimizations structures * batadv_mcast_free() - free the multicast optimizations structures
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
void batadv_mcast_free(struct batadv_priv *bat_priv) void batadv_mcast_free(struct batadv_priv *bat_priv)
...@@ -1296,7 +1301,7 @@ void batadv_mcast_free(struct batadv_priv *bat_priv) ...@@ -1296,7 +1301,7 @@ void batadv_mcast_free(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_mcast_purge_orig - reset originator global mcast state modifications * batadv_mcast_purge_orig() - reset originator global mcast state modifications
* @orig: the originator which is going to get purged * @orig: the originator which is going to get purged
*/ */
void batadv_mcast_purge_orig(struct batadv_orig_node *orig) void batadv_mcast_purge_orig(struct batadv_orig_node *orig)
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2014-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2014-2017 B.A.T.M.A.N. contributors:
* *
* Linus Lüssing * Linus Lüssing
...@@ -25,15 +26,21 @@ struct sk_buff; ...@@ -25,15 +26,21 @@ struct sk_buff;
/** /**
* enum batadv_forw_mode - the way a packet should be forwarded as * enum batadv_forw_mode - the way a packet should be forwarded as
* @BATADV_FORW_ALL: forward the packet to all nodes (currently via classic
* flooding)
* @BATADV_FORW_SINGLE: forward the packet to a single node (currently via the
* BATMAN unicast routing protocol)
* @BATADV_FORW_NONE: don't forward, drop it
*/ */
enum batadv_forw_mode { enum batadv_forw_mode {
/**
* @BATADV_FORW_ALL: forward the packet to all nodes (currently via
* classic flooding)
*/
BATADV_FORW_ALL, BATADV_FORW_ALL,
/**
* @BATADV_FORW_SINGLE: forward the packet to a single node (currently
* via the BATMAN unicast routing protocol)
*/
BATADV_FORW_SINGLE, BATADV_FORW_SINGLE,
/** @BATADV_FORW_NONE: don't forward, drop it */
BATADV_FORW_NONE, BATADV_FORW_NONE,
}; };
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2016-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2016-2017 B.A.T.M.A.N. contributors:
* *
* Matthias Schiffer * Matthias Schiffer
...@@ -23,8 +24,8 @@ ...@@ -23,8 +24,8 @@
#include <linux/cache.h> #include <linux/cache.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/export.h> #include <linux/export.h>
#include <linux/fs.h>
#include <linux/genetlink.h> #include <linux/genetlink.h>
#include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -99,7 +100,7 @@ static const struct nla_policy batadv_netlink_policy[NUM_BATADV_ATTR] = { ...@@ -99,7 +100,7 @@ static const struct nla_policy batadv_netlink_policy[NUM_BATADV_ATTR] = {
}; };
/** /**
* batadv_netlink_get_ifindex - Extract an interface index from a message * batadv_netlink_get_ifindex() - Extract an interface index from a message
* @nlh: Message header * @nlh: Message header
* @attrtype: Attribute which holds an interface index * @attrtype: Attribute which holds an interface index
* *
...@@ -114,7 +115,7 @@ batadv_netlink_get_ifindex(const struct nlmsghdr *nlh, int attrtype) ...@@ -114,7 +115,7 @@ batadv_netlink_get_ifindex(const struct nlmsghdr *nlh, int attrtype)
} }
/** /**
* batadv_netlink_mesh_info_put - fill in generic information about mesh * batadv_netlink_mesh_info_put() - fill in generic information about mesh
* interface * interface
* @msg: netlink message to be sent back * @msg: netlink message to be sent back
* @soft_iface: interface for which the data should be taken * @soft_iface: interface for which the data should be taken
...@@ -169,7 +170,7 @@ batadv_netlink_mesh_info_put(struct sk_buff *msg, struct net_device *soft_iface) ...@@ -169,7 +170,7 @@ batadv_netlink_mesh_info_put(struct sk_buff *msg, struct net_device *soft_iface)
} }
/** /**
* batadv_netlink_get_mesh_info - handle incoming BATADV_CMD_GET_MESH_INFO * batadv_netlink_get_mesh_info() - handle incoming BATADV_CMD_GET_MESH_INFO
* netlink request * netlink request
* @skb: received netlink message * @skb: received netlink message
* @info: receiver information * @info: receiver information
...@@ -230,7 +231,7 @@ batadv_netlink_get_mesh_info(struct sk_buff *skb, struct genl_info *info) ...@@ -230,7 +231,7 @@ batadv_netlink_get_mesh_info(struct sk_buff *skb, struct genl_info *info)
} }
/** /**
* batadv_netlink_tp_meter_put - Fill information of started tp_meter session * batadv_netlink_tp_meter_put() - Fill information of started tp_meter session
* @msg: netlink message to be sent back * @msg: netlink message to be sent back
* @cookie: tp meter session cookie * @cookie: tp meter session cookie
* *
...@@ -246,7 +247,7 @@ batadv_netlink_tp_meter_put(struct sk_buff *msg, u32 cookie) ...@@ -246,7 +247,7 @@ batadv_netlink_tp_meter_put(struct sk_buff *msg, u32 cookie)
} }
/** /**
* batadv_netlink_tpmeter_notify - send tp_meter result via netlink to client * batadv_netlink_tpmeter_notify() - send tp_meter result via netlink to client
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @dst: destination of tp_meter session * @dst: destination of tp_meter session
* @result: reason for tp meter session stop * @result: reason for tp meter session stop
...@@ -309,7 +310,7 @@ int batadv_netlink_tpmeter_notify(struct batadv_priv *bat_priv, const u8 *dst, ...@@ -309,7 +310,7 @@ int batadv_netlink_tpmeter_notify(struct batadv_priv *bat_priv, const u8 *dst,
} }
/** /**
* batadv_netlink_tp_meter_start - Start a new tp_meter session * batadv_netlink_tp_meter_start() - Start a new tp_meter session
* @skb: received netlink message * @skb: received netlink message
* @info: receiver information * @info: receiver information
* *
...@@ -386,7 +387,7 @@ batadv_netlink_tp_meter_start(struct sk_buff *skb, struct genl_info *info) ...@@ -386,7 +387,7 @@ batadv_netlink_tp_meter_start(struct sk_buff *skb, struct genl_info *info)
} }
/** /**
* batadv_netlink_tp_meter_start - Cancel a running tp_meter session * batadv_netlink_tp_meter_start() - Cancel a running tp_meter session
* @skb: received netlink message * @skb: received netlink message
* @info: receiver information * @info: receiver information
* *
...@@ -431,7 +432,7 @@ batadv_netlink_tp_meter_cancel(struct sk_buff *skb, struct genl_info *info) ...@@ -431,7 +432,7 @@ batadv_netlink_tp_meter_cancel(struct sk_buff *skb, struct genl_info *info)
} }
/** /**
* batadv_netlink_dump_hardif_entry - Dump one hard interface into a message * batadv_netlink_dump_hardif_entry() - Dump one hard interface into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -473,7 +474,7 @@ batadv_netlink_dump_hardif_entry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -473,7 +474,7 @@ batadv_netlink_dump_hardif_entry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_netlink_dump_hardifs - Dump all hard interface into a messages * batadv_netlink_dump_hardifs() - Dump all hard interface into a messages
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @cb: Parameters from query * @cb: Parameters from query
* *
...@@ -620,7 +621,7 @@ struct genl_family batadv_netlink_family __ro_after_init = { ...@@ -620,7 +621,7 @@ struct genl_family batadv_netlink_family __ro_after_init = {
}; };
/** /**
* batadv_netlink_register - register batadv genl netlink family * batadv_netlink_register() - register batadv genl netlink family
*/ */
void __init batadv_netlink_register(void) void __init batadv_netlink_register(void)
{ {
...@@ -632,7 +633,7 @@ void __init batadv_netlink_register(void) ...@@ -632,7 +633,7 @@ void __init batadv_netlink_register(void)
} }
/** /**
* batadv_netlink_unregister - unregister batadv genl netlink family * batadv_netlink_unregister() - unregister batadv genl netlink family
*/ */
void batadv_netlink_unregister(void) void batadv_netlink_unregister(void)
{ {
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2016-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2016-2017 B.A.T.M.A.N. contributors:
* *
* Matthias Schiffer * Matthias Schiffer
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2012-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2012-2017 B.A.T.M.A.N. contributors:
* *
* Martin Hundebøll, Jeppe Ledet-Pedersen * Martin Hundebøll, Jeppe Ledet-Pedersen
...@@ -25,7 +26,7 @@ ...@@ -25,7 +26,7 @@
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/if_packet.h> #include <linux/if_packet.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -35,6 +36,7 @@ ...@@ -35,6 +36,7 @@
#include <linux/kref.h> #include <linux/kref.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/lockdep.h> #include <linux/lockdep.h>
#include <linux/net.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/printk.h> #include <linux/printk.h>
#include <linux/random.h> #include <linux/random.h>
...@@ -65,7 +67,7 @@ static int batadv_nc_recv_coded_packet(struct sk_buff *skb, ...@@ -65,7 +67,7 @@ static int batadv_nc_recv_coded_packet(struct sk_buff *skb,
struct batadv_hard_iface *recv_if); struct batadv_hard_iface *recv_if);
/** /**
* batadv_nc_init - one-time initialization for network coding * batadv_nc_init() - one-time initialization for network coding
* *
* Return: 0 on success or negative error number in case of failure * Return: 0 on success or negative error number in case of failure
*/ */
...@@ -81,7 +83,7 @@ int __init batadv_nc_init(void) ...@@ -81,7 +83,7 @@ int __init batadv_nc_init(void)
} }
/** /**
* batadv_nc_start_timer - initialise the nc periodic worker * batadv_nc_start_timer() - initialise the nc periodic worker
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
static void batadv_nc_start_timer(struct batadv_priv *bat_priv) static void batadv_nc_start_timer(struct batadv_priv *bat_priv)
...@@ -91,7 +93,7 @@ static void batadv_nc_start_timer(struct batadv_priv *bat_priv) ...@@ -91,7 +93,7 @@ static void batadv_nc_start_timer(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_nc_tvlv_container_update - update the network coding tvlv container * batadv_nc_tvlv_container_update() - update the network coding tvlv container
* after network coding setting change * after network coding setting change
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
...@@ -113,7 +115,7 @@ static void batadv_nc_tvlv_container_update(struct batadv_priv *bat_priv) ...@@ -113,7 +115,7 @@ static void batadv_nc_tvlv_container_update(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_nc_status_update - update the network coding tvlv container after * batadv_nc_status_update() - update the network coding tvlv container after
* network coding setting change * network coding setting change
* @net_dev: the soft interface net device * @net_dev: the soft interface net device
*/ */
...@@ -125,7 +127,7 @@ void batadv_nc_status_update(struct net_device *net_dev) ...@@ -125,7 +127,7 @@ void batadv_nc_status_update(struct net_device *net_dev)
} }
/** /**
* batadv_nc_tvlv_ogm_handler_v1 - process incoming nc tvlv container * batadv_nc_tvlv_ogm_handler_v1() - process incoming nc tvlv container
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig: the orig_node of the ogm * @orig: the orig_node of the ogm
* @flags: flags indicating the tvlv state (see batadv_tvlv_handler_flags) * @flags: flags indicating the tvlv state (see batadv_tvlv_handler_flags)
...@@ -144,7 +146,7 @@ static void batadv_nc_tvlv_ogm_handler_v1(struct batadv_priv *bat_priv, ...@@ -144,7 +146,7 @@ static void batadv_nc_tvlv_ogm_handler_v1(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_mesh_init - initialise coding hash table and start house keeping * batadv_nc_mesh_init() - initialise coding hash table and start house keeping
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Return: 0 on success or negative error number in case of failure * Return: 0 on success or negative error number in case of failure
...@@ -185,7 +187,7 @@ int batadv_nc_mesh_init(struct batadv_priv *bat_priv) ...@@ -185,7 +187,7 @@ int batadv_nc_mesh_init(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_nc_init_bat_priv - initialise the nc specific bat_priv variables * batadv_nc_init_bat_priv() - initialise the nc specific bat_priv variables
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
void batadv_nc_init_bat_priv(struct batadv_priv *bat_priv) void batadv_nc_init_bat_priv(struct batadv_priv *bat_priv)
...@@ -197,7 +199,7 @@ void batadv_nc_init_bat_priv(struct batadv_priv *bat_priv) ...@@ -197,7 +199,7 @@ void batadv_nc_init_bat_priv(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_nc_init_orig - initialise the nc fields of an orig_node * batadv_nc_init_orig() - initialise the nc fields of an orig_node
* @orig_node: the orig_node which is going to be initialised * @orig_node: the orig_node which is going to be initialised
*/ */
void batadv_nc_init_orig(struct batadv_orig_node *orig_node) void batadv_nc_init_orig(struct batadv_orig_node *orig_node)
...@@ -209,8 +211,8 @@ void batadv_nc_init_orig(struct batadv_orig_node *orig_node) ...@@ -209,8 +211,8 @@ void batadv_nc_init_orig(struct batadv_orig_node *orig_node)
} }
/** /**
* batadv_nc_node_release - release nc_node from lists and queue for free after * batadv_nc_node_release() - release nc_node from lists and queue for free
* rcu grace period * after rcu grace period
* @ref: kref pointer of the nc_node * @ref: kref pointer of the nc_node
*/ */
static void batadv_nc_node_release(struct kref *ref) static void batadv_nc_node_release(struct kref *ref)
...@@ -224,7 +226,7 @@ static void batadv_nc_node_release(struct kref *ref) ...@@ -224,7 +226,7 @@ static void batadv_nc_node_release(struct kref *ref)
} }
/** /**
* batadv_nc_node_put - decrement the nc_node refcounter and possibly * batadv_nc_node_put() - decrement the nc_node refcounter and possibly
* release it * release it
* @nc_node: nc_node to be free'd * @nc_node: nc_node to be free'd
*/ */
...@@ -234,8 +236,8 @@ static void batadv_nc_node_put(struct batadv_nc_node *nc_node) ...@@ -234,8 +236,8 @@ static void batadv_nc_node_put(struct batadv_nc_node *nc_node)
} }
/** /**
* batadv_nc_path_release - release nc_path from lists and queue for free after * batadv_nc_path_release() - release nc_path from lists and queue for free
* rcu grace period * after rcu grace period
* @ref: kref pointer of the nc_path * @ref: kref pointer of the nc_path
*/ */
static void batadv_nc_path_release(struct kref *ref) static void batadv_nc_path_release(struct kref *ref)
...@@ -248,7 +250,7 @@ static void batadv_nc_path_release(struct kref *ref) ...@@ -248,7 +250,7 @@ static void batadv_nc_path_release(struct kref *ref)
} }
/** /**
* batadv_nc_path_put - decrement the nc_path refcounter and possibly * batadv_nc_path_put() - decrement the nc_path refcounter and possibly
* release it * release it
* @nc_path: nc_path to be free'd * @nc_path: nc_path to be free'd
*/ */
...@@ -258,7 +260,7 @@ static void batadv_nc_path_put(struct batadv_nc_path *nc_path) ...@@ -258,7 +260,7 @@ static void batadv_nc_path_put(struct batadv_nc_path *nc_path)
} }
/** /**
* batadv_nc_packet_free - frees nc packet * batadv_nc_packet_free() - frees nc packet
* @nc_packet: the nc packet to free * @nc_packet: the nc packet to free
* @dropped: whether the packet is freed because is is dropped * @dropped: whether the packet is freed because is is dropped
*/ */
...@@ -275,7 +277,7 @@ static void batadv_nc_packet_free(struct batadv_nc_packet *nc_packet, ...@@ -275,7 +277,7 @@ static void batadv_nc_packet_free(struct batadv_nc_packet *nc_packet,
} }
/** /**
* batadv_nc_to_purge_nc_node - checks whether an nc node has to be purged * batadv_nc_to_purge_nc_node() - checks whether an nc node has to be purged
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @nc_node: the nc node to check * @nc_node: the nc node to check
* *
...@@ -291,7 +293,7 @@ static bool batadv_nc_to_purge_nc_node(struct batadv_priv *bat_priv, ...@@ -291,7 +293,7 @@ static bool batadv_nc_to_purge_nc_node(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_to_purge_nc_path_coding - checks whether an nc path has timed out * batadv_nc_to_purge_nc_path_coding() - checks whether an nc path has timed out
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @nc_path: the nc path to check * @nc_path: the nc path to check
* *
...@@ -311,7 +313,8 @@ static bool batadv_nc_to_purge_nc_path_coding(struct batadv_priv *bat_priv, ...@@ -311,7 +313,8 @@ static bool batadv_nc_to_purge_nc_path_coding(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_to_purge_nc_path_decoding - checks whether an nc path has timed out * batadv_nc_to_purge_nc_path_decoding() - checks whether an nc path has timed
* out
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @nc_path: the nc path to check * @nc_path: the nc path to check
* *
...@@ -331,7 +334,7 @@ static bool batadv_nc_to_purge_nc_path_decoding(struct batadv_priv *bat_priv, ...@@ -331,7 +334,7 @@ static bool batadv_nc_to_purge_nc_path_decoding(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_purge_orig_nc_nodes - go through list of nc nodes and purge stale * batadv_nc_purge_orig_nc_nodes() - go through list of nc nodes and purge stale
* entries * entries
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @list: list of nc nodes * @list: list of nc nodes
...@@ -369,7 +372,7 @@ batadv_nc_purge_orig_nc_nodes(struct batadv_priv *bat_priv, ...@@ -369,7 +372,7 @@ batadv_nc_purge_orig_nc_nodes(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_purge_orig - purges all nc node data attached of the given * batadv_nc_purge_orig() - purges all nc node data attached of the given
* originator * originator
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig_node with the nc node entries to be purged * @orig_node: orig_node with the nc node entries to be purged
...@@ -395,8 +398,8 @@ void batadv_nc_purge_orig(struct batadv_priv *bat_priv, ...@@ -395,8 +398,8 @@ void batadv_nc_purge_orig(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_purge_orig_hash - traverse entire originator hash to check if they * batadv_nc_purge_orig_hash() - traverse entire originator hash to check if
* have timed out nc nodes * they have timed out nc nodes
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
static void batadv_nc_purge_orig_hash(struct batadv_priv *bat_priv) static void batadv_nc_purge_orig_hash(struct batadv_priv *bat_priv)
...@@ -422,7 +425,7 @@ static void batadv_nc_purge_orig_hash(struct batadv_priv *bat_priv) ...@@ -422,7 +425,7 @@ static void batadv_nc_purge_orig_hash(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_nc_purge_paths - traverse all nc paths part of the hash and remove * batadv_nc_purge_paths() - traverse all nc paths part of the hash and remove
* unused ones * unused ones
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @hash: hash table containing the nc paths to check * @hash: hash table containing the nc paths to check
...@@ -481,7 +484,7 @@ static void batadv_nc_purge_paths(struct batadv_priv *bat_priv, ...@@ -481,7 +484,7 @@ static void batadv_nc_purge_paths(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_hash_key_gen - computes the nc_path hash key * batadv_nc_hash_key_gen() - computes the nc_path hash key
* @key: buffer to hold the final hash key * @key: buffer to hold the final hash key
* @src: source ethernet mac address going into the hash key * @src: source ethernet mac address going into the hash key
* @dst: destination ethernet mac address going into the hash key * @dst: destination ethernet mac address going into the hash key
...@@ -494,7 +497,7 @@ static void batadv_nc_hash_key_gen(struct batadv_nc_path *key, const char *src, ...@@ -494,7 +497,7 @@ static void batadv_nc_hash_key_gen(struct batadv_nc_path *key, const char *src,
} }
/** /**
* batadv_nc_hash_choose - compute the hash value for an nc path * batadv_nc_hash_choose() - compute the hash value for an nc path
* @data: data to hash * @data: data to hash
* @size: size of the hash table * @size: size of the hash table
* *
...@@ -512,7 +515,7 @@ static u32 batadv_nc_hash_choose(const void *data, u32 size) ...@@ -512,7 +515,7 @@ static u32 batadv_nc_hash_choose(const void *data, u32 size)
} }
/** /**
* batadv_nc_hash_compare - comparing function used in the network coding hash * batadv_nc_hash_compare() - comparing function used in the network coding hash
* tables * tables
* @node: node in the local table * @node: node in the local table
* @data2: second object to compare the node to * @data2: second object to compare the node to
...@@ -538,7 +541,7 @@ static bool batadv_nc_hash_compare(const struct hlist_node *node, ...@@ -538,7 +541,7 @@ static bool batadv_nc_hash_compare(const struct hlist_node *node,
} }
/** /**
* batadv_nc_hash_find - search for an existing nc path and return it * batadv_nc_hash_find() - search for an existing nc path and return it
* @hash: hash table containing the nc path * @hash: hash table containing the nc path
* @data: search key * @data: search key
* *
...@@ -575,7 +578,7 @@ batadv_nc_hash_find(struct batadv_hashtable *hash, ...@@ -575,7 +578,7 @@ batadv_nc_hash_find(struct batadv_hashtable *hash,
} }
/** /**
* batadv_nc_send_packet - send non-coded packet and free nc_packet struct * batadv_nc_send_packet() - send non-coded packet and free nc_packet struct
* @nc_packet: the nc packet to send * @nc_packet: the nc packet to send
*/ */
static void batadv_nc_send_packet(struct batadv_nc_packet *nc_packet) static void batadv_nc_send_packet(struct batadv_nc_packet *nc_packet)
...@@ -586,7 +589,7 @@ static void batadv_nc_send_packet(struct batadv_nc_packet *nc_packet) ...@@ -586,7 +589,7 @@ static void batadv_nc_send_packet(struct batadv_nc_packet *nc_packet)
} }
/** /**
* batadv_nc_sniffed_purge - Checks timestamp of given sniffed nc_packet. * batadv_nc_sniffed_purge() - Checks timestamp of given sniffed nc_packet.
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @nc_path: the nc path the packet belongs to * @nc_path: the nc path the packet belongs to
* @nc_packet: the nc packet to be checked * @nc_packet: the nc packet to be checked
...@@ -625,7 +628,7 @@ static bool batadv_nc_sniffed_purge(struct batadv_priv *bat_priv, ...@@ -625,7 +628,7 @@ static bool batadv_nc_sniffed_purge(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_fwd_flush - Checks the timestamp of the given nc packet. * batadv_nc_fwd_flush() - Checks the timestamp of the given nc packet.
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @nc_path: the nc path the packet belongs to * @nc_path: the nc path the packet belongs to
* @nc_packet: the nc packet to be checked * @nc_packet: the nc packet to be checked
...@@ -663,8 +666,8 @@ static bool batadv_nc_fwd_flush(struct batadv_priv *bat_priv, ...@@ -663,8 +666,8 @@ static bool batadv_nc_fwd_flush(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_process_nc_paths - traverse given nc packet pool and free timed out * batadv_nc_process_nc_paths() - traverse given nc packet pool and free timed
* nc packets * out nc packets
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @hash: to be processed hash table * @hash: to be processed hash table
* @process_fn: Function called to process given nc packet. Should return true * @process_fn: Function called to process given nc packet. Should return true
...@@ -709,7 +712,8 @@ batadv_nc_process_nc_paths(struct batadv_priv *bat_priv, ...@@ -709,7 +712,8 @@ batadv_nc_process_nc_paths(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_worker - periodic task for house keeping related to network coding * batadv_nc_worker() - periodic task for house keeping related to network
* coding
* @work: kernel work struct * @work: kernel work struct
*/ */
static void batadv_nc_worker(struct work_struct *work) static void batadv_nc_worker(struct work_struct *work)
...@@ -749,8 +753,8 @@ static void batadv_nc_worker(struct work_struct *work) ...@@ -749,8 +753,8 @@ static void batadv_nc_worker(struct work_struct *work)
} }
/** /**
* batadv_can_nc_with_orig - checks whether the given orig node is suitable for * batadv_can_nc_with_orig() - checks whether the given orig node is suitable
* coding or not * for coding or not
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: neighboring orig node which may be used as nc candidate * @orig_node: neighboring orig node which may be used as nc candidate
* @ogm_packet: incoming ogm packet also used for the checks * @ogm_packet: incoming ogm packet also used for the checks
...@@ -790,7 +794,7 @@ static bool batadv_can_nc_with_orig(struct batadv_priv *bat_priv, ...@@ -790,7 +794,7 @@ static bool batadv_can_nc_with_orig(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_find_nc_node - search for an existing nc node and return it * batadv_nc_find_nc_node() - search for an existing nc node and return it
* @orig_node: orig node originating the ogm packet * @orig_node: orig node originating the ogm packet
* @orig_neigh_node: neighboring orig node from which we received the ogm packet * @orig_neigh_node: neighboring orig node from which we received the ogm packet
* (can be equal to orig_node) * (can be equal to orig_node)
...@@ -830,7 +834,7 @@ batadv_nc_find_nc_node(struct batadv_orig_node *orig_node, ...@@ -830,7 +834,7 @@ batadv_nc_find_nc_node(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_nc_get_nc_node - retrieves an nc node or creates the entry if it was * batadv_nc_get_nc_node() - retrieves an nc node or creates the entry if it was
* not found * not found
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node originating the ogm packet * @orig_node: orig node originating the ogm packet
...@@ -890,7 +894,7 @@ batadv_nc_get_nc_node(struct batadv_priv *bat_priv, ...@@ -890,7 +894,7 @@ batadv_nc_get_nc_node(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_update_nc_node - updates stored incoming and outgoing nc node * batadv_nc_update_nc_node() - updates stored incoming and outgoing nc node
* structs (best called on incoming OGMs) * structs (best called on incoming OGMs)
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node originating the ogm packet * @orig_node: orig node originating the ogm packet
...@@ -945,7 +949,7 @@ void batadv_nc_update_nc_node(struct batadv_priv *bat_priv, ...@@ -945,7 +949,7 @@ void batadv_nc_update_nc_node(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_get_path - get existing nc_path or allocate a new one * batadv_nc_get_path() - get existing nc_path or allocate a new one
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @hash: hash table containing the nc path * @hash: hash table containing the nc path
* @src: ethernet source address - first half of the nc path search key * @src: ethernet source address - first half of the nc path search key
...@@ -1006,7 +1010,7 @@ static struct batadv_nc_path *batadv_nc_get_path(struct batadv_priv *bat_priv, ...@@ -1006,7 +1010,7 @@ static struct batadv_nc_path *batadv_nc_get_path(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_random_weight_tq - scale the receivers TQ-value to avoid unfair * batadv_nc_random_weight_tq() - scale the receivers TQ-value to avoid unfair
* selection of a receiver with slightly lower TQ than the other * selection of a receiver with slightly lower TQ than the other
* @tq: to be weighted tq value * @tq: to be weighted tq value
* *
...@@ -1029,7 +1033,7 @@ static u8 batadv_nc_random_weight_tq(u8 tq) ...@@ -1029,7 +1033,7 @@ static u8 batadv_nc_random_weight_tq(u8 tq)
} }
/** /**
* batadv_nc_memxor - XOR destination with source * batadv_nc_memxor() - XOR destination with source
* @dst: byte array to XOR into * @dst: byte array to XOR into
* @src: byte array to XOR from * @src: byte array to XOR from
* @len: length of destination array * @len: length of destination array
...@@ -1043,7 +1047,7 @@ static void batadv_nc_memxor(char *dst, const char *src, unsigned int len) ...@@ -1043,7 +1047,7 @@ static void batadv_nc_memxor(char *dst, const char *src, unsigned int len)
} }
/** /**
* batadv_nc_code_packets - code a received unicast_packet with an nc packet * batadv_nc_code_packets() - code a received unicast_packet with an nc packet
* into a coded_packet and send it * into a coded_packet and send it
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: data skb to forward * @skb: data skb to forward
...@@ -1236,7 +1240,7 @@ static bool batadv_nc_code_packets(struct batadv_priv *bat_priv, ...@@ -1236,7 +1240,7 @@ static bool batadv_nc_code_packets(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_skb_coding_possible - true if a decoded skb is available at dst. * batadv_nc_skb_coding_possible() - true if a decoded skb is available at dst.
* @skb: data skb to forward * @skb: data skb to forward
* @dst: destination mac address of the other skb to code with * @dst: destination mac address of the other skb to code with
* @src: source mac address of skb * @src: source mac address of skb
...@@ -1260,7 +1264,7 @@ static bool batadv_nc_skb_coding_possible(struct sk_buff *skb, u8 *dst, u8 *src) ...@@ -1260,7 +1264,7 @@ static bool batadv_nc_skb_coding_possible(struct sk_buff *skb, u8 *dst, u8 *src)
} }
/** /**
* batadv_nc_path_search - Find the coding path matching in_nc_node and * batadv_nc_path_search() - Find the coding path matching in_nc_node and
* out_nc_node to retrieve a buffered packet that can be used for coding. * out_nc_node to retrieve a buffered packet that can be used for coding.
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @in_nc_node: pointer to skb next hop's neighbor nc node * @in_nc_node: pointer to skb next hop's neighbor nc node
...@@ -1328,8 +1332,8 @@ batadv_nc_path_search(struct batadv_priv *bat_priv, ...@@ -1328,8 +1332,8 @@ batadv_nc_path_search(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_skb_src_search - Loops through the list of neighoring nodes of the * batadv_nc_skb_src_search() - Loops through the list of neighoring nodes of
* skb's sender (may be equal to the originator). * the skb's sender (may be equal to the originator).
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: data skb to forward * @skb: data skb to forward
* @eth_dst: next hop mac address of skb * @eth_dst: next hop mac address of skb
...@@ -1374,7 +1378,7 @@ batadv_nc_skb_src_search(struct batadv_priv *bat_priv, ...@@ -1374,7 +1378,7 @@ batadv_nc_skb_src_search(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_skb_store_before_coding - set the ethernet src and dst of the * batadv_nc_skb_store_before_coding() - set the ethernet src and dst of the
* unicast skb before it is stored for use in later decoding * unicast skb before it is stored for use in later decoding
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: data skb to store * @skb: data skb to store
...@@ -1409,7 +1413,7 @@ static void batadv_nc_skb_store_before_coding(struct batadv_priv *bat_priv, ...@@ -1409,7 +1413,7 @@ static void batadv_nc_skb_store_before_coding(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_skb_dst_search - Loops through list of neighboring nodes to dst. * batadv_nc_skb_dst_search() - Loops through list of neighboring nodes to dst.
* @skb: data skb to forward * @skb: data skb to forward
* @neigh_node: next hop to forward packet to * @neigh_node: next hop to forward packet to
* @ethhdr: pointer to the ethernet header inside the skb * @ethhdr: pointer to the ethernet header inside the skb
...@@ -1467,7 +1471,7 @@ static bool batadv_nc_skb_dst_search(struct sk_buff *skb, ...@@ -1467,7 +1471,7 @@ static bool batadv_nc_skb_dst_search(struct sk_buff *skb,
} }
/** /**
* batadv_nc_skb_add_to_path - buffer skb for later encoding / decoding * batadv_nc_skb_add_to_path() - buffer skb for later encoding / decoding
* @skb: skb to add to path * @skb: skb to add to path
* @nc_path: path to add skb to * @nc_path: path to add skb to
* @neigh_node: next hop to forward packet to * @neigh_node: next hop to forward packet to
...@@ -1502,7 +1506,7 @@ static bool batadv_nc_skb_add_to_path(struct sk_buff *skb, ...@@ -1502,7 +1506,7 @@ static bool batadv_nc_skb_add_to_path(struct sk_buff *skb,
} }
/** /**
* batadv_nc_skb_forward - try to code a packet or add it to the coding packet * batadv_nc_skb_forward() - try to code a packet or add it to the coding packet
* buffer * buffer
* @skb: data skb to forward * @skb: data skb to forward
* @neigh_node: next hop to forward packet to * @neigh_node: next hop to forward packet to
...@@ -1559,8 +1563,8 @@ bool batadv_nc_skb_forward(struct sk_buff *skb, ...@@ -1559,8 +1563,8 @@ bool batadv_nc_skb_forward(struct sk_buff *skb,
} }
/** /**
* batadv_nc_skb_store_for_decoding - save a clone of the skb which can be used * batadv_nc_skb_store_for_decoding() - save a clone of the skb which can be
* when decoding coded packets * used when decoding coded packets
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: data skb to store * @skb: data skb to store
*/ */
...@@ -1620,7 +1624,7 @@ void batadv_nc_skb_store_for_decoding(struct batadv_priv *bat_priv, ...@@ -1620,7 +1624,7 @@ void batadv_nc_skb_store_for_decoding(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_skb_store_sniffed_unicast - check if a received unicast packet * batadv_nc_skb_store_sniffed_unicast() - check if a received unicast packet
* should be saved in the decoding buffer and, if so, store it there * should be saved in the decoding buffer and, if so, store it there
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: unicast skb to store * @skb: unicast skb to store
...@@ -1640,7 +1644,7 @@ void batadv_nc_skb_store_sniffed_unicast(struct batadv_priv *bat_priv, ...@@ -1640,7 +1644,7 @@ void batadv_nc_skb_store_sniffed_unicast(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_skb_decode_packet - decode given skb using the decode data stored * batadv_nc_skb_decode_packet() - decode given skb using the decode data stored
* in nc_packet * in nc_packet
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: unicast skb to decode * @skb: unicast skb to decode
...@@ -1734,7 +1738,7 @@ batadv_nc_skb_decode_packet(struct batadv_priv *bat_priv, struct sk_buff *skb, ...@@ -1734,7 +1738,7 @@ batadv_nc_skb_decode_packet(struct batadv_priv *bat_priv, struct sk_buff *skb,
} }
/** /**
* batadv_nc_find_decoding_packet - search through buffered decoding data to * batadv_nc_find_decoding_packet() - search through buffered decoding data to
* find the data needed to decode the coded packet * find the data needed to decode the coded packet
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ethhdr: pointer to the ethernet header inside the coded packet * @ethhdr: pointer to the ethernet header inside the coded packet
...@@ -1799,7 +1803,7 @@ batadv_nc_find_decoding_packet(struct batadv_priv *bat_priv, ...@@ -1799,7 +1803,7 @@ batadv_nc_find_decoding_packet(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_nc_recv_coded_packet - try to decode coded packet and enqueue the * batadv_nc_recv_coded_packet() - try to decode coded packet and enqueue the
* resulting unicast packet * resulting unicast packet
* @skb: incoming coded packet * @skb: incoming coded packet
* @recv_if: pointer to interface this packet was received on * @recv_if: pointer to interface this packet was received on
...@@ -1874,7 +1878,7 @@ static int batadv_nc_recv_coded_packet(struct sk_buff *skb, ...@@ -1874,7 +1878,7 @@ static int batadv_nc_recv_coded_packet(struct sk_buff *skb,
} }
/** /**
* batadv_nc_mesh_free - clean up network coding memory * batadv_nc_mesh_free() - clean up network coding memory
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
void batadv_nc_mesh_free(struct batadv_priv *bat_priv) void batadv_nc_mesh_free(struct batadv_priv *bat_priv)
...@@ -1891,7 +1895,7 @@ void batadv_nc_mesh_free(struct batadv_priv *bat_priv) ...@@ -1891,7 +1895,7 @@ void batadv_nc_mesh_free(struct batadv_priv *bat_priv)
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_nc_nodes_seq_print_text - print the nc node information * batadv_nc_nodes_seq_print_text() - print the nc node information
* @seq: seq file to print on * @seq: seq file to print on
* @offset: not used * @offset: not used
* *
...@@ -1954,7 +1958,7 @@ int batadv_nc_nodes_seq_print_text(struct seq_file *seq, void *offset) ...@@ -1954,7 +1958,7 @@ int batadv_nc_nodes_seq_print_text(struct seq_file *seq, void *offset)
} }
/** /**
* batadv_nc_init_debugfs - create nc folder and related files in debugfs * batadv_nc_init_debugfs() - create nc folder and related files in debugfs
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Return: 0 on success or negative error number in case of failure * Return: 0 on success or negative error number in case of failure
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2012-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2012-2017 B.A.T.M.A.N. contributors:
* *
* Martin Hundebøll, Jeppe Ledet-Pedersen * Martin Hundebøll, Jeppe Ledet-Pedersen
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2009-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2009-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -21,7 +22,7 @@ ...@@ -21,7 +22,7 @@
#include <linux/atomic.h> #include <linux/atomic.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/kref.h> #include <linux/kref.h>
...@@ -30,10 +31,12 @@ ...@@ -30,10 +31,12 @@
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/netlink.h> #include <linux/netlink.h>
#include <linux/rculist.h> #include <linux/rculist.h>
#include <linux/rcupdate.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/skbuff.h> #include <linux/skbuff.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/stddef.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <net/sock.h> #include <net/sock.h>
#include <uapi/linux/batman_adv.h> #include <uapi/linux/batman_adv.h>
...@@ -55,10 +58,47 @@ ...@@ -55,10 +58,47 @@
/* hash class keys */ /* hash class keys */
static struct lock_class_key batadv_orig_hash_lock_class_key; static struct lock_class_key batadv_orig_hash_lock_class_key;
/**
* batadv_orig_hash_find() - Find and return originator from orig_hash
* @bat_priv: the bat priv with all the soft interface information
* @data: mac address of the originator
*
* Return: orig_node (with increased refcnt), NULL on errors
*/
struct batadv_orig_node *
batadv_orig_hash_find(struct batadv_priv *bat_priv, const void *data)
{
struct batadv_hashtable *hash = bat_priv->orig_hash;
struct hlist_head *head;
struct batadv_orig_node *orig_node, *orig_node_tmp = NULL;
int index;
if (!hash)
return NULL;
index = batadv_choose_orig(data, hash->size);
head = &hash->table[index];
rcu_read_lock();
hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
if (!batadv_compare_eth(orig_node, data))
continue;
if (!kref_get_unless_zero(&orig_node->refcount))
continue;
orig_node_tmp = orig_node;
break;
}
rcu_read_unlock();
return orig_node_tmp;
}
static void batadv_purge_orig(struct work_struct *work); static void batadv_purge_orig(struct work_struct *work);
/** /**
* batadv_compare_orig - comparing function used in the originator hash table * batadv_compare_orig() - comparing function used in the originator hash table
* @node: node in the local table * @node: node in the local table
* @data2: second object to compare the node to * @data2: second object to compare the node to
* *
...@@ -73,7 +113,7 @@ bool batadv_compare_orig(const struct hlist_node *node, const void *data2) ...@@ -73,7 +113,7 @@ bool batadv_compare_orig(const struct hlist_node *node, const void *data2)
} }
/** /**
* batadv_orig_node_vlan_get - get an orig_node_vlan object * batadv_orig_node_vlan_get() - get an orig_node_vlan object
* @orig_node: the originator serving the VLAN * @orig_node: the originator serving the VLAN
* @vid: the VLAN identifier * @vid: the VLAN identifier
* *
...@@ -104,7 +144,7 @@ batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node, ...@@ -104,7 +144,7 @@ batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_orig_node_vlan_new - search and possibly create an orig_node_vlan * batadv_orig_node_vlan_new() - search and possibly create an orig_node_vlan
* object * object
* @orig_node: the originator serving the VLAN * @orig_node: the originator serving the VLAN
* @vid: the VLAN identifier * @vid: the VLAN identifier
...@@ -145,7 +185,7 @@ batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node, ...@@ -145,7 +185,7 @@ batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_orig_node_vlan_release - release originator-vlan object from lists * batadv_orig_node_vlan_release() - release originator-vlan object from lists
* and queue for free after rcu grace period * and queue for free after rcu grace period
* @ref: kref pointer of the originator-vlan object * @ref: kref pointer of the originator-vlan object
*/ */
...@@ -159,7 +199,7 @@ static void batadv_orig_node_vlan_release(struct kref *ref) ...@@ -159,7 +199,7 @@ static void batadv_orig_node_vlan_release(struct kref *ref)
} }
/** /**
* batadv_orig_node_vlan_put - decrement the refcounter and possibly release * batadv_orig_node_vlan_put() - decrement the refcounter and possibly release
* the originator-vlan object * the originator-vlan object
* @orig_vlan: the originator-vlan object to release * @orig_vlan: the originator-vlan object to release
*/ */
...@@ -168,6 +208,12 @@ void batadv_orig_node_vlan_put(struct batadv_orig_node_vlan *orig_vlan) ...@@ -168,6 +208,12 @@ void batadv_orig_node_vlan_put(struct batadv_orig_node_vlan *orig_vlan)
kref_put(&orig_vlan->refcount, batadv_orig_node_vlan_release); kref_put(&orig_vlan->refcount, batadv_orig_node_vlan_release);
} }
/**
* batadv_originator_init() - Initialize all originator structures
* @bat_priv: the bat priv with all the soft interface information
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_originator_init(struct batadv_priv *bat_priv) int batadv_originator_init(struct batadv_priv *bat_priv)
{ {
if (bat_priv->orig_hash) if (bat_priv->orig_hash)
...@@ -193,7 +239,7 @@ int batadv_originator_init(struct batadv_priv *bat_priv) ...@@ -193,7 +239,7 @@ int batadv_originator_init(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_neigh_ifinfo_release - release neigh_ifinfo from lists and queue for * batadv_neigh_ifinfo_release() - release neigh_ifinfo from lists and queue for
* free after rcu grace period * free after rcu grace period
* @ref: kref pointer of the neigh_ifinfo * @ref: kref pointer of the neigh_ifinfo
*/ */
...@@ -210,7 +256,7 @@ static void batadv_neigh_ifinfo_release(struct kref *ref) ...@@ -210,7 +256,7 @@ static void batadv_neigh_ifinfo_release(struct kref *ref)
} }
/** /**
* batadv_neigh_ifinfo_put - decrement the refcounter and possibly release * batadv_neigh_ifinfo_put() - decrement the refcounter and possibly release
* the neigh_ifinfo * the neigh_ifinfo
* @neigh_ifinfo: the neigh_ifinfo object to release * @neigh_ifinfo: the neigh_ifinfo object to release
*/ */
...@@ -220,7 +266,7 @@ void batadv_neigh_ifinfo_put(struct batadv_neigh_ifinfo *neigh_ifinfo) ...@@ -220,7 +266,7 @@ void batadv_neigh_ifinfo_put(struct batadv_neigh_ifinfo *neigh_ifinfo)
} }
/** /**
* batadv_hardif_neigh_release - release hardif neigh node from lists and * batadv_hardif_neigh_release() - release hardif neigh node from lists and
* queue for free after rcu grace period * queue for free after rcu grace period
* @ref: kref pointer of the neigh_node * @ref: kref pointer of the neigh_node
*/ */
...@@ -240,7 +286,7 @@ static void batadv_hardif_neigh_release(struct kref *ref) ...@@ -240,7 +286,7 @@ static void batadv_hardif_neigh_release(struct kref *ref)
} }
/** /**
* batadv_hardif_neigh_put - decrement the hardif neighbors refcounter * batadv_hardif_neigh_put() - decrement the hardif neighbors refcounter
* and possibly release it * and possibly release it
* @hardif_neigh: hardif neigh neighbor to free * @hardif_neigh: hardif neigh neighbor to free
*/ */
...@@ -250,7 +296,7 @@ void batadv_hardif_neigh_put(struct batadv_hardif_neigh_node *hardif_neigh) ...@@ -250,7 +296,7 @@ void batadv_hardif_neigh_put(struct batadv_hardif_neigh_node *hardif_neigh)
} }
/** /**
* batadv_neigh_node_release - release neigh_node from lists and queue for * batadv_neigh_node_release() - release neigh_node from lists and queue for
* free after rcu grace period * free after rcu grace period
* @ref: kref pointer of the neigh_node * @ref: kref pointer of the neigh_node
*/ */
...@@ -275,7 +321,7 @@ static void batadv_neigh_node_release(struct kref *ref) ...@@ -275,7 +321,7 @@ static void batadv_neigh_node_release(struct kref *ref)
} }
/** /**
* batadv_neigh_node_put - decrement the neighbors refcounter and possibly * batadv_neigh_node_put() - decrement the neighbors refcounter and possibly
* release it * release it
* @neigh_node: neigh neighbor to free * @neigh_node: neigh neighbor to free
*/ */
...@@ -285,7 +331,7 @@ void batadv_neigh_node_put(struct batadv_neigh_node *neigh_node) ...@@ -285,7 +331,7 @@ void batadv_neigh_node_put(struct batadv_neigh_node *neigh_node)
} }
/** /**
* batadv_orig_router_get - router to the originator depending on iface * batadv_orig_router_get() - router to the originator depending on iface
* @orig_node: the orig node for the router * @orig_node: the orig node for the router
* @if_outgoing: the interface where the payload packet has been received or * @if_outgoing: the interface where the payload packet has been received or
* the OGM should be sent to * the OGM should be sent to
...@@ -318,7 +364,7 @@ batadv_orig_router_get(struct batadv_orig_node *orig_node, ...@@ -318,7 +364,7 @@ batadv_orig_router_get(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_orig_ifinfo_get - find the ifinfo from an orig_node * batadv_orig_ifinfo_get() - find the ifinfo from an orig_node
* @orig_node: the orig node to be queried * @orig_node: the orig node to be queried
* @if_outgoing: the interface for which the ifinfo should be acquired * @if_outgoing: the interface for which the ifinfo should be acquired
* *
...@@ -350,7 +396,7 @@ batadv_orig_ifinfo_get(struct batadv_orig_node *orig_node, ...@@ -350,7 +396,7 @@ batadv_orig_ifinfo_get(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_orig_ifinfo_new - search and possibly create an orig_ifinfo object * batadv_orig_ifinfo_new() - search and possibly create an orig_ifinfo object
* @orig_node: the orig node to be queried * @orig_node: the orig node to be queried
* @if_outgoing: the interface for which the ifinfo should be acquired * @if_outgoing: the interface for which the ifinfo should be acquired
* *
...@@ -396,7 +442,7 @@ batadv_orig_ifinfo_new(struct batadv_orig_node *orig_node, ...@@ -396,7 +442,7 @@ batadv_orig_ifinfo_new(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_neigh_ifinfo_get - find the ifinfo from an neigh_node * batadv_neigh_ifinfo_get() - find the ifinfo from an neigh_node
* @neigh: the neigh node to be queried * @neigh: the neigh node to be queried
* @if_outgoing: the interface for which the ifinfo should be acquired * @if_outgoing: the interface for which the ifinfo should be acquired
* *
...@@ -429,7 +475,7 @@ batadv_neigh_ifinfo_get(struct batadv_neigh_node *neigh, ...@@ -429,7 +475,7 @@ batadv_neigh_ifinfo_get(struct batadv_neigh_node *neigh,
} }
/** /**
* batadv_neigh_ifinfo_new - search and possibly create an neigh_ifinfo object * batadv_neigh_ifinfo_new() - search and possibly create an neigh_ifinfo object
* @neigh: the neigh node to be queried * @neigh: the neigh node to be queried
* @if_outgoing: the interface for which the ifinfo should be acquired * @if_outgoing: the interface for which the ifinfo should be acquired
* *
...@@ -472,7 +518,7 @@ batadv_neigh_ifinfo_new(struct batadv_neigh_node *neigh, ...@@ -472,7 +518,7 @@ batadv_neigh_ifinfo_new(struct batadv_neigh_node *neigh,
} }
/** /**
* batadv_neigh_node_get - retrieve a neighbour from the list * batadv_neigh_node_get() - retrieve a neighbour from the list
* @orig_node: originator which the neighbour belongs to * @orig_node: originator which the neighbour belongs to
* @hard_iface: the interface where this neighbour is connected to * @hard_iface: the interface where this neighbour is connected to
* @addr: the address of the neighbour * @addr: the address of the neighbour
...@@ -509,7 +555,7 @@ batadv_neigh_node_get(const struct batadv_orig_node *orig_node, ...@@ -509,7 +555,7 @@ batadv_neigh_node_get(const struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_hardif_neigh_create - create a hardif neighbour node * batadv_hardif_neigh_create() - create a hardif neighbour node
* @hard_iface: the interface this neighbour is connected to * @hard_iface: the interface this neighbour is connected to
* @neigh_addr: the interface address of the neighbour to retrieve * @neigh_addr: the interface address of the neighbour to retrieve
* @orig_node: originator object representing the neighbour * @orig_node: originator object representing the neighbour
...@@ -555,7 +601,7 @@ batadv_hardif_neigh_create(struct batadv_hard_iface *hard_iface, ...@@ -555,7 +601,7 @@ batadv_hardif_neigh_create(struct batadv_hard_iface *hard_iface,
} }
/** /**
* batadv_hardif_neigh_get_or_create - retrieve or create a hardif neighbour * batadv_hardif_neigh_get_or_create() - retrieve or create a hardif neighbour
* node * node
* @hard_iface: the interface this neighbour is connected to * @hard_iface: the interface this neighbour is connected to
* @neigh_addr: the interface address of the neighbour to retrieve * @neigh_addr: the interface address of the neighbour to retrieve
...@@ -579,7 +625,7 @@ batadv_hardif_neigh_get_or_create(struct batadv_hard_iface *hard_iface, ...@@ -579,7 +625,7 @@ batadv_hardif_neigh_get_or_create(struct batadv_hard_iface *hard_iface,
} }
/** /**
* batadv_hardif_neigh_get - retrieve a hardif neighbour from the list * batadv_hardif_neigh_get() - retrieve a hardif neighbour from the list
* @hard_iface: the interface where this neighbour is connected to * @hard_iface: the interface where this neighbour is connected to
* @neigh_addr: the address of the neighbour * @neigh_addr: the address of the neighbour
* *
...@@ -611,7 +657,7 @@ batadv_hardif_neigh_get(const struct batadv_hard_iface *hard_iface, ...@@ -611,7 +657,7 @@ batadv_hardif_neigh_get(const struct batadv_hard_iface *hard_iface,
} }
/** /**
* batadv_neigh_node_create - create a neigh node object * batadv_neigh_node_create() - create a neigh node object
* @orig_node: originator object representing the neighbour * @orig_node: originator object representing the neighbour
* @hard_iface: the interface where the neighbour is connected to * @hard_iface: the interface where the neighbour is connected to
* @neigh_addr: the mac address of the neighbour interface * @neigh_addr: the mac address of the neighbour interface
...@@ -676,7 +722,7 @@ batadv_neigh_node_create(struct batadv_orig_node *orig_node, ...@@ -676,7 +722,7 @@ batadv_neigh_node_create(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_neigh_node_get_or_create - retrieve or create a neigh node object * batadv_neigh_node_get_or_create() - retrieve or create a neigh node object
* @orig_node: originator object representing the neighbour * @orig_node: originator object representing the neighbour
* @hard_iface: the interface where the neighbour is connected to * @hard_iface: the interface where the neighbour is connected to
* @neigh_addr: the mac address of the neighbour interface * @neigh_addr: the mac address of the neighbour interface
...@@ -700,7 +746,7 @@ batadv_neigh_node_get_or_create(struct batadv_orig_node *orig_node, ...@@ -700,7 +746,7 @@ batadv_neigh_node_get_or_create(struct batadv_orig_node *orig_node,
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_hardif_neigh_seq_print_text - print the single hop neighbour list * batadv_hardif_neigh_seq_print_text() - print the single hop neighbour list
* @seq: neighbour table seq_file struct * @seq: neighbour table seq_file struct
* @offset: not used * @offset: not used
* *
...@@ -735,8 +781,8 @@ int batadv_hardif_neigh_seq_print_text(struct seq_file *seq, void *offset) ...@@ -735,8 +781,8 @@ int batadv_hardif_neigh_seq_print_text(struct seq_file *seq, void *offset)
#endif #endif
/** /**
* batadv_hardif_neigh_dump - Dump to netlink the neighbor infos for a specific * batadv_hardif_neigh_dump() - Dump to netlink the neighbor infos for a
* outgoing interface * specific outgoing interface
* @msg: message to dump into * @msg: message to dump into
* @cb: parameters for the dump * @cb: parameters for the dump
* *
...@@ -812,7 +858,7 @@ int batadv_hardif_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb) ...@@ -812,7 +858,7 @@ int batadv_hardif_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb)
} }
/** /**
* batadv_orig_ifinfo_release - release orig_ifinfo from lists and queue for * batadv_orig_ifinfo_release() - release orig_ifinfo from lists and queue for
* free after rcu grace period * free after rcu grace period
* @ref: kref pointer of the orig_ifinfo * @ref: kref pointer of the orig_ifinfo
*/ */
...@@ -835,7 +881,7 @@ static void batadv_orig_ifinfo_release(struct kref *ref) ...@@ -835,7 +881,7 @@ static void batadv_orig_ifinfo_release(struct kref *ref)
} }
/** /**
* batadv_orig_ifinfo_put - decrement the refcounter and possibly release * batadv_orig_ifinfo_put() - decrement the refcounter and possibly release
* the orig_ifinfo * the orig_ifinfo
* @orig_ifinfo: the orig_ifinfo object to release * @orig_ifinfo: the orig_ifinfo object to release
*/ */
...@@ -845,7 +891,7 @@ void batadv_orig_ifinfo_put(struct batadv_orig_ifinfo *orig_ifinfo) ...@@ -845,7 +891,7 @@ void batadv_orig_ifinfo_put(struct batadv_orig_ifinfo *orig_ifinfo)
} }
/** /**
* batadv_orig_node_free_rcu - free the orig_node * batadv_orig_node_free_rcu() - free the orig_node
* @rcu: rcu pointer of the orig_node * @rcu: rcu pointer of the orig_node
*/ */
static void batadv_orig_node_free_rcu(struct rcu_head *rcu) static void batadv_orig_node_free_rcu(struct rcu_head *rcu)
...@@ -866,7 +912,7 @@ static void batadv_orig_node_free_rcu(struct rcu_head *rcu) ...@@ -866,7 +912,7 @@ static void batadv_orig_node_free_rcu(struct rcu_head *rcu)
} }
/** /**
* batadv_orig_node_release - release orig_node from lists and queue for * batadv_orig_node_release() - release orig_node from lists and queue for
* free after rcu grace period * free after rcu grace period
* @ref: kref pointer of the orig_node * @ref: kref pointer of the orig_node
*/ */
...@@ -917,7 +963,7 @@ static void batadv_orig_node_release(struct kref *ref) ...@@ -917,7 +963,7 @@ static void batadv_orig_node_release(struct kref *ref)
} }
/** /**
* batadv_orig_node_put - decrement the orig node refcounter and possibly * batadv_orig_node_put() - decrement the orig node refcounter and possibly
* release it * release it
* @orig_node: the orig node to free * @orig_node: the orig node to free
*/ */
...@@ -926,6 +972,10 @@ void batadv_orig_node_put(struct batadv_orig_node *orig_node) ...@@ -926,6 +972,10 @@ void batadv_orig_node_put(struct batadv_orig_node *orig_node)
kref_put(&orig_node->refcount, batadv_orig_node_release); kref_put(&orig_node->refcount, batadv_orig_node_release);
} }
/**
* batadv_originator_free() - Free all originator structures
* @bat_priv: the bat priv with all the soft interface information
*/
void batadv_originator_free(struct batadv_priv *bat_priv) void batadv_originator_free(struct batadv_priv *bat_priv)
{ {
struct batadv_hashtable *hash = bat_priv->orig_hash; struct batadv_hashtable *hash = bat_priv->orig_hash;
...@@ -959,7 +1009,7 @@ void batadv_originator_free(struct batadv_priv *bat_priv) ...@@ -959,7 +1009,7 @@ void batadv_originator_free(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_orig_node_new - creates a new orig_node * batadv_orig_node_new() - creates a new orig_node
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the mac address of the originator * @addr: the mac address of the originator
* *
...@@ -1038,7 +1088,7 @@ struct batadv_orig_node *batadv_orig_node_new(struct batadv_priv *bat_priv, ...@@ -1038,7 +1088,7 @@ struct batadv_orig_node *batadv_orig_node_new(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_purge_neigh_ifinfo - purge obsolete ifinfo entries from neighbor * batadv_purge_neigh_ifinfo() - purge obsolete ifinfo entries from neighbor
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @neigh: orig node which is to be checked * @neigh: orig node which is to be checked
*/ */
...@@ -1079,7 +1129,7 @@ batadv_purge_neigh_ifinfo(struct batadv_priv *bat_priv, ...@@ -1079,7 +1129,7 @@ batadv_purge_neigh_ifinfo(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_purge_orig_ifinfo - purge obsolete ifinfo entries from originator * batadv_purge_orig_ifinfo() - purge obsolete ifinfo entries from originator
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node which is to be checked * @orig_node: orig node which is to be checked
* *
...@@ -1131,7 +1181,7 @@ batadv_purge_orig_ifinfo(struct batadv_priv *bat_priv, ...@@ -1131,7 +1181,7 @@ batadv_purge_orig_ifinfo(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_purge_orig_neighbors - purges neighbors from originator * batadv_purge_orig_neighbors() - purges neighbors from originator
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node which is to be checked * @orig_node: orig node which is to be checked
* *
...@@ -1189,7 +1239,7 @@ batadv_purge_orig_neighbors(struct batadv_priv *bat_priv, ...@@ -1189,7 +1239,7 @@ batadv_purge_orig_neighbors(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_find_best_neighbor - finds the best neighbor after purging * batadv_find_best_neighbor() - finds the best neighbor after purging
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node which is to be checked * @orig_node: orig node which is to be checked
* @if_outgoing: the interface for which the metric should be compared * @if_outgoing: the interface for which the metric should be compared
...@@ -1224,7 +1274,7 @@ batadv_find_best_neighbor(struct batadv_priv *bat_priv, ...@@ -1224,7 +1274,7 @@ batadv_find_best_neighbor(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_purge_orig_node - purges obsolete information from an orig_node * batadv_purge_orig_node() - purges obsolete information from an orig_node
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node which is to be checked * @orig_node: orig node which is to be checked
* *
...@@ -1341,12 +1391,24 @@ static void batadv_purge_orig(struct work_struct *work) ...@@ -1341,12 +1391,24 @@ static void batadv_purge_orig(struct work_struct *work)
msecs_to_jiffies(BATADV_ORIG_WORK_PERIOD)); msecs_to_jiffies(BATADV_ORIG_WORK_PERIOD));
} }
/**
* batadv_purge_orig_ref() - Purge all outdated originators
* @bat_priv: the bat priv with all the soft interface information
*/
void batadv_purge_orig_ref(struct batadv_priv *bat_priv) void batadv_purge_orig_ref(struct batadv_priv *bat_priv)
{ {
_batadv_purge_orig(bat_priv); _batadv_purge_orig(bat_priv);
} }
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/**
* batadv_orig_seq_print_text() - Print the originator table in a seq file
* @seq: seq file to print on
* @offset: not used
*
* Return: always 0
*/
int batadv_orig_seq_print_text(struct seq_file *seq, void *offset) int batadv_orig_seq_print_text(struct seq_file *seq, void *offset)
{ {
struct net_device *net_dev = (struct net_device *)seq->private; struct net_device *net_dev = (struct net_device *)seq->private;
...@@ -1376,7 +1438,7 @@ int batadv_orig_seq_print_text(struct seq_file *seq, void *offset) ...@@ -1376,7 +1438,7 @@ int batadv_orig_seq_print_text(struct seq_file *seq, void *offset)
} }
/** /**
* batadv_orig_hardif_seq_print_text - writes originator infos for a specific * batadv_orig_hardif_seq_print_text() - writes originator infos for a specific
* outgoing interface * outgoing interface
* @seq: debugfs table seq_file struct * @seq: debugfs table seq_file struct
* @offset: not used * @offset: not used
...@@ -1423,7 +1485,7 @@ int batadv_orig_hardif_seq_print_text(struct seq_file *seq, void *offset) ...@@ -1423,7 +1485,7 @@ int batadv_orig_hardif_seq_print_text(struct seq_file *seq, void *offset)
#endif #endif
/** /**
* batadv_orig_dump - Dump to netlink the originator infos for a specific * batadv_orig_dump() - Dump to netlink the originator infos for a specific
* outgoing interface * outgoing interface
* @msg: message to dump into * @msg: message to dump into
* @cb: parameters for the dump * @cb: parameters for the dump
...@@ -1499,6 +1561,13 @@ int batadv_orig_dump(struct sk_buff *msg, struct netlink_callback *cb) ...@@ -1499,6 +1561,13 @@ int batadv_orig_dump(struct sk_buff *msg, struct netlink_callback *cb)
return ret; return ret;
} }
/**
* batadv_orig_hash_add_if() - Add interface to originators in orig_hash
* @hard_iface: hard interface to add (already slave of the soft interface)
* @max_if_num: new number of interfaces
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_orig_hash_add_if(struct batadv_hard_iface *hard_iface, int batadv_orig_hash_add_if(struct batadv_hard_iface *hard_iface,
int max_if_num) int max_if_num)
{ {
...@@ -1534,6 +1603,13 @@ int batadv_orig_hash_add_if(struct batadv_hard_iface *hard_iface, ...@@ -1534,6 +1603,13 @@ int batadv_orig_hash_add_if(struct batadv_hard_iface *hard_iface,
return -ENOMEM; return -ENOMEM;
} }
/**
* batadv_orig_hash_del_if() - Remove interface from originators in orig_hash
* @hard_iface: hard interface to remove (still slave of the soft interface)
* @max_if_num: new number of interfaces
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_orig_hash_del_if(struct batadv_hard_iface *hard_iface, int batadv_orig_hash_del_if(struct batadv_hard_iface *hard_iface,
int max_if_num) int max_if_num)
{ {
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -23,14 +24,8 @@ ...@@ -23,14 +24,8 @@
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/jhash.h> #include <linux/jhash.h>
#include <linux/kref.h>
#include <linux/rculist.h>
#include <linux/rcupdate.h>
#include <linux/stddef.h>
#include <linux/types.h> #include <linux/types.h>
#include "hash.h"
struct netlink_callback; struct netlink_callback;
struct seq_file; struct seq_file;
struct sk_buff; struct sk_buff;
...@@ -89,8 +84,13 @@ batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node, ...@@ -89,8 +84,13 @@ batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node,
unsigned short vid); unsigned short vid);
void batadv_orig_node_vlan_put(struct batadv_orig_node_vlan *orig_vlan); void batadv_orig_node_vlan_put(struct batadv_orig_node_vlan *orig_vlan);
/* hashfunction to choose an entry in a hash table of given size /**
* hash algorithm from http://en.wikipedia.org/wiki/Hash_table * batadv_choose_orig() - Return the index of the orig entry in the hash table
* @data: mac address of the originator node
* @size: the size of the hash table
*
* Return: the hash index where the object represented by @data should be
* stored at.
*/ */
static inline u32 batadv_choose_orig(const void *data, u32 size) static inline u32 batadv_choose_orig(const void *data, u32 size)
{ {
...@@ -100,34 +100,7 @@ static inline u32 batadv_choose_orig(const void *data, u32 size) ...@@ -100,34 +100,7 @@ static inline u32 batadv_choose_orig(const void *data, u32 size)
return hash % size; return hash % size;
} }
static inline struct batadv_orig_node * struct batadv_orig_node *
batadv_orig_hash_find(struct batadv_priv *bat_priv, const void *data) batadv_orig_hash_find(struct batadv_priv *bat_priv, const void *data);
{
struct batadv_hashtable *hash = bat_priv->orig_hash;
struct hlist_head *head;
struct batadv_orig_node *orig_node, *orig_node_tmp = NULL;
int index;
if (!hash)
return NULL;
index = batadv_choose_orig(data, hash->size);
head = &hash->table[index];
rcu_read_lock();
hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
if (!batadv_compare_eth(orig_node, data))
continue;
if (!kref_get_unless_zero(&orig_node->refcount))
continue;
orig_node_tmp = orig_node;
break;
}
rcu_read_unlock();
return orig_node_tmp;
}
#endif /* _NET_BATMAN_ADV_ORIGINATOR_H_ */ #endif /* _NET_BATMAN_ADV_ORIGINATOR_H_ */
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -21,6 +22,12 @@ ...@@ -21,6 +22,12 @@
#include <asm/byteorder.h> #include <asm/byteorder.h>
#include <linux/types.h> #include <linux/types.h>
/**
* batadv_tp_is_error() - Check throughput meter return code for error
* @n: throughput meter return code
*
* Return: 0 when not error was detected, != 0 otherwise
*/
#define batadv_tp_is_error(n) ((u8)(n) > 127 ? 1 : 0) #define batadv_tp_is_error(n) ((u8)(n) > 127 ? 1 : 0)
/** /**
...@@ -88,7 +95,15 @@ enum batadv_iv_flags { ...@@ -88,7 +95,15 @@ enum batadv_iv_flags {
BATADV_DIRECTLINK = BIT(2), BATADV_DIRECTLINK = BIT(2),
}; };
/* ICMP message types */ /**
* enum batadv_icmp_packettype - ICMP message types
* @BATADV_ECHO_REPLY: success reply to BATADV_ECHO_REQUEST
* @BATADV_DESTINATION_UNREACHABLE: failure when route to destination not found
* @BATADV_ECHO_REQUEST: request BATADV_ECHO_REPLY from destination
* @BATADV_TTL_EXCEEDED: error after BATADV_ECHO_REQUEST traversed too many hops
* @BATADV_PARAMETER_PROBLEM: return code for malformed messages
* @BATADV_TP: throughput meter packet
*/
enum batadv_icmp_packettype { enum batadv_icmp_packettype {
BATADV_ECHO_REPLY = 0, BATADV_ECHO_REPLY = 0,
BATADV_DESTINATION_UNREACHABLE = 3, BATADV_DESTINATION_UNREACHABLE = 3,
...@@ -136,7 +151,14 @@ enum batadv_vlan_flags { ...@@ -136,7 +151,14 @@ enum batadv_vlan_flags {
BATADV_VLAN_HAS_TAG = BIT(15), BATADV_VLAN_HAS_TAG = BIT(15),
}; };
/* claim frame types for the bridge loop avoidance */ /**
* enum batadv_bla_claimframe - claim frame types for the bridge loop avoidance
* @BATADV_CLAIM_TYPE_CLAIM: claim of a client mac address
* @BATADV_CLAIM_TYPE_UNCLAIM: unclaim of a client mac address
* @BATADV_CLAIM_TYPE_ANNOUNCE: announcement of backbone with current crc
* @BATADV_CLAIM_TYPE_REQUEST: request of full claim table
* @BATADV_CLAIM_TYPE_LOOPDETECT: mesh-traversing loop detect packet
*/
enum batadv_bla_claimframe { enum batadv_bla_claimframe {
BATADV_CLAIM_TYPE_CLAIM = 0x00, BATADV_CLAIM_TYPE_CLAIM = 0x00,
BATADV_CLAIM_TYPE_UNCLAIM = 0x01, BATADV_CLAIM_TYPE_UNCLAIM = 0x01,
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -54,7 +55,7 @@ static int batadv_route_unicast_packet(struct sk_buff *skb, ...@@ -54,7 +55,7 @@ static int batadv_route_unicast_packet(struct sk_buff *skb,
struct batadv_hard_iface *recv_if); struct batadv_hard_iface *recv_if);
/** /**
* _batadv_update_route - set the router for this originator * _batadv_update_route() - set the router for this originator
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node which is to be configured * @orig_node: orig node which is to be configured
* @recv_if: the receive interface for which this route is set * @recv_if: the receive interface for which this route is set
...@@ -118,7 +119,7 @@ static void _batadv_update_route(struct batadv_priv *bat_priv, ...@@ -118,7 +119,7 @@ static void _batadv_update_route(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_update_route - set the router for this originator * batadv_update_route() - set the router for this originator
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node which is to be configured * @orig_node: orig node which is to be configured
* @recv_if: the receive interface for which this route is set * @recv_if: the receive interface for which this route is set
...@@ -145,7 +146,7 @@ void batadv_update_route(struct batadv_priv *bat_priv, ...@@ -145,7 +146,7 @@ void batadv_update_route(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_window_protected - checks whether the host restarted and is in the * batadv_window_protected() - checks whether the host restarted and is in the
* protection time. * protection time.
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @seq_num_diff: difference between the current/received sequence number and * @seq_num_diff: difference between the current/received sequence number and
...@@ -180,6 +181,14 @@ bool batadv_window_protected(struct batadv_priv *bat_priv, s32 seq_num_diff, ...@@ -180,6 +181,14 @@ bool batadv_window_protected(struct batadv_priv *bat_priv, s32 seq_num_diff,
return false; return false;
} }
/**
* batadv_check_management_packet() - Check preconditions for management packets
* @skb: incoming packet buffer
* @hard_iface: incoming hard interface
* @header_len: minimal header length of packet type
*
* Return: true when management preconditions are met, false otherwise
*/
bool batadv_check_management_packet(struct sk_buff *skb, bool batadv_check_management_packet(struct sk_buff *skb,
struct batadv_hard_iface *hard_iface, struct batadv_hard_iface *hard_iface,
int header_len) int header_len)
...@@ -212,7 +221,7 @@ bool batadv_check_management_packet(struct sk_buff *skb, ...@@ -212,7 +221,7 @@ bool batadv_check_management_packet(struct sk_buff *skb,
} }
/** /**
* batadv_recv_my_icmp_packet - receive an icmp packet locally * batadv_recv_my_icmp_packet() - receive an icmp packet locally
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: icmp packet to process * @skb: icmp packet to process
* *
...@@ -347,6 +356,13 @@ static int batadv_recv_icmp_ttl_exceeded(struct batadv_priv *bat_priv, ...@@ -347,6 +356,13 @@ static int batadv_recv_icmp_ttl_exceeded(struct batadv_priv *bat_priv,
return ret; return ret;
} }
/**
* batadv_recv_icmp_packet() - Process incoming icmp packet
* @skb: incoming packet buffer
* @recv_if: incoming hard interface
*
* Return: NET_RX_SUCCESS on success or NET_RX_DROP in case of failure
*/
int batadv_recv_icmp_packet(struct sk_buff *skb, int batadv_recv_icmp_packet(struct sk_buff *skb,
struct batadv_hard_iface *recv_if) struct batadv_hard_iface *recv_if)
{ {
...@@ -440,7 +456,7 @@ int batadv_recv_icmp_packet(struct sk_buff *skb, ...@@ -440,7 +456,7 @@ int batadv_recv_icmp_packet(struct sk_buff *skb,
} }
/** /**
* batadv_check_unicast_packet - Check for malformed unicast packets * batadv_check_unicast_packet() - Check for malformed unicast packets
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: packet to check * @skb: packet to check
* @hdr_size: size of header to pull * @hdr_size: size of header to pull
...@@ -478,7 +494,7 @@ static int batadv_check_unicast_packet(struct batadv_priv *bat_priv, ...@@ -478,7 +494,7 @@ static int batadv_check_unicast_packet(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_last_bonding_get - Get last_bonding_candidate of orig_node * batadv_last_bonding_get() - Get last_bonding_candidate of orig_node
* @orig_node: originator node whose last bonding candidate should be retrieved * @orig_node: originator node whose last bonding candidate should be retrieved
* *
* Return: last bonding candidate of router or NULL if not found * Return: last bonding candidate of router or NULL if not found
...@@ -501,7 +517,7 @@ batadv_last_bonding_get(struct batadv_orig_node *orig_node) ...@@ -501,7 +517,7 @@ batadv_last_bonding_get(struct batadv_orig_node *orig_node)
} }
/** /**
* batadv_last_bonding_replace - Replace last_bonding_candidate of orig_node * batadv_last_bonding_replace() - Replace last_bonding_candidate of orig_node
* @orig_node: originator node whose bonding candidates should be replaced * @orig_node: originator node whose bonding candidates should be replaced
* @new_candidate: new bonding candidate or NULL * @new_candidate: new bonding candidate or NULL
*/ */
...@@ -524,7 +540,7 @@ batadv_last_bonding_replace(struct batadv_orig_node *orig_node, ...@@ -524,7 +540,7 @@ batadv_last_bonding_replace(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_find_router - find a suitable router for this originator * batadv_find_router() - find a suitable router for this originator
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: the destination node * @orig_node: the destination node
* @recv_if: pointer to interface this packet was received on * @recv_if: pointer to interface this packet was received on
...@@ -741,7 +757,7 @@ static int batadv_route_unicast_packet(struct sk_buff *skb, ...@@ -741,7 +757,7 @@ static int batadv_route_unicast_packet(struct sk_buff *skb,
} }
/** /**
* batadv_reroute_unicast_packet - update the unicast header for re-routing * batadv_reroute_unicast_packet() - update the unicast header for re-routing
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @unicast_packet: the unicast header to be updated * @unicast_packet: the unicast header to be updated
* @dst_addr: the payload destination * @dst_addr: the payload destination
...@@ -904,7 +920,7 @@ static bool batadv_check_unicast_ttvn(struct batadv_priv *bat_priv, ...@@ -904,7 +920,7 @@ static bool batadv_check_unicast_ttvn(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_recv_unhandled_unicast_packet - receive and process packets which * batadv_recv_unhandled_unicast_packet() - receive and process packets which
* are in the unicast number space but not yet known to the implementation * are in the unicast number space but not yet known to the implementation
* @skb: unicast tvlv packet to process * @skb: unicast tvlv packet to process
* @recv_if: pointer to interface this packet was received on * @recv_if: pointer to interface this packet was received on
...@@ -935,6 +951,13 @@ int batadv_recv_unhandled_unicast_packet(struct sk_buff *skb, ...@@ -935,6 +951,13 @@ int batadv_recv_unhandled_unicast_packet(struct sk_buff *skb,
return NET_RX_DROP; return NET_RX_DROP;
} }
/**
* batadv_recv_unicast_packet() - Process incoming unicast packet
* @skb: incoming packet buffer
* @recv_if: incoming hard interface
*
* Return: NET_RX_SUCCESS on success or NET_RX_DROP in case of failure
*/
int batadv_recv_unicast_packet(struct sk_buff *skb, int batadv_recv_unicast_packet(struct sk_buff *skb,
struct batadv_hard_iface *recv_if) struct batadv_hard_iface *recv_if)
{ {
...@@ -1036,7 +1059,7 @@ int batadv_recv_unicast_packet(struct sk_buff *skb, ...@@ -1036,7 +1059,7 @@ int batadv_recv_unicast_packet(struct sk_buff *skb,
} }
/** /**
* batadv_recv_unicast_tvlv - receive and process unicast tvlv packets * batadv_recv_unicast_tvlv() - receive and process unicast tvlv packets
* @skb: unicast tvlv packet to process * @skb: unicast tvlv packet to process
* @recv_if: pointer to interface this packet was received on * @recv_if: pointer to interface this packet was received on
* *
...@@ -1090,7 +1113,7 @@ int batadv_recv_unicast_tvlv(struct sk_buff *skb, ...@@ -1090,7 +1113,7 @@ int batadv_recv_unicast_tvlv(struct sk_buff *skb,
} }
/** /**
* batadv_recv_frag_packet - process received fragment * batadv_recv_frag_packet() - process received fragment
* @skb: the received fragment * @skb: the received fragment
* @recv_if: interface that the skb is received on * @recv_if: interface that the skb is received on
* *
...@@ -1155,6 +1178,13 @@ int batadv_recv_frag_packet(struct sk_buff *skb, ...@@ -1155,6 +1178,13 @@ int batadv_recv_frag_packet(struct sk_buff *skb,
return ret; return ret;
} }
/**
* batadv_recv_bcast_packet() - Process incoming broadcast packet
* @skb: incoming packet buffer
* @recv_if: incoming hard interface
*
* Return: NET_RX_SUCCESS on success or NET_RX_DROP in case of failure
*/
int batadv_recv_bcast_packet(struct sk_buff *skb, int batadv_recv_bcast_packet(struct sk_buff *skb,
struct batadv_hard_iface *recv_if) struct batadv_hard_iface *recv_if)
{ {
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -23,7 +24,7 @@ ...@@ -23,7 +24,7 @@
#include <linux/byteorder/generic.h> #include <linux/byteorder/generic.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if.h> #include <linux/if.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
...@@ -54,7 +55,7 @@ ...@@ -54,7 +55,7 @@
static void batadv_send_outstanding_bcast_packet(struct work_struct *work); static void batadv_send_outstanding_bcast_packet(struct work_struct *work);
/** /**
* batadv_send_skb_packet - send an already prepared packet * batadv_send_skb_packet() - send an already prepared packet
* @skb: the packet to send * @skb: the packet to send
* @hard_iface: the interface to use to send the broadcast packet * @hard_iface: the interface to use to send the broadcast packet
* @dst_addr: the payload destination * @dst_addr: the payload destination
...@@ -123,12 +124,30 @@ int batadv_send_skb_packet(struct sk_buff *skb, ...@@ -123,12 +124,30 @@ int batadv_send_skb_packet(struct sk_buff *skb,
return NET_XMIT_DROP; return NET_XMIT_DROP;
} }
/**
* batadv_send_broadcast_skb() - Send broadcast packet via hard interface
* @skb: packet to be transmitted (with batadv header and no outer eth header)
* @hard_iface: outgoing interface
*
* Return: A negative errno code is returned on a failure. A success does not
* guarantee the frame will be transmitted as it may be dropped due
* to congestion or traffic shaping.
*/
int batadv_send_broadcast_skb(struct sk_buff *skb, int batadv_send_broadcast_skb(struct sk_buff *skb,
struct batadv_hard_iface *hard_iface) struct batadv_hard_iface *hard_iface)
{ {
return batadv_send_skb_packet(skb, hard_iface, batadv_broadcast_addr); return batadv_send_skb_packet(skb, hard_iface, batadv_broadcast_addr);
} }
/**
* batadv_send_unicast_skb() - Send unicast packet to neighbor
* @skb: packet to be transmitted (with batadv header and no outer eth header)
* @neigh: neighbor which is used as next hop to destination
*
* Return: A negative errno code is returned on a failure. A success does not
* guarantee the frame will be transmitted as it may be dropped due
* to congestion or traffic shaping.
*/
int batadv_send_unicast_skb(struct sk_buff *skb, int batadv_send_unicast_skb(struct sk_buff *skb,
struct batadv_neigh_node *neigh) struct batadv_neigh_node *neigh)
{ {
...@@ -153,7 +172,7 @@ int batadv_send_unicast_skb(struct sk_buff *skb, ...@@ -153,7 +172,7 @@ int batadv_send_unicast_skb(struct sk_buff *skb,
} }
/** /**
* batadv_send_skb_to_orig - Lookup next-hop and transmit skb. * batadv_send_skb_to_orig() - Lookup next-hop and transmit skb.
* @skb: Packet to be transmitted. * @skb: Packet to be transmitted.
* @orig_node: Final destination of the packet. * @orig_node: Final destination of the packet.
* @recv_if: Interface used when receiving the packet (can be NULL). * @recv_if: Interface used when receiving the packet (can be NULL).
...@@ -216,7 +235,7 @@ int batadv_send_skb_to_orig(struct sk_buff *skb, ...@@ -216,7 +235,7 @@ int batadv_send_skb_to_orig(struct sk_buff *skb,
} }
/** /**
* batadv_send_skb_push_fill_unicast - extend the buffer and initialize the * batadv_send_skb_push_fill_unicast() - extend the buffer and initialize the
* common fields for unicast packets * common fields for unicast packets
* @skb: the skb carrying the unicast header to initialize * @skb: the skb carrying the unicast header to initialize
* @hdr_size: amount of bytes to push at the beginning of the skb * @hdr_size: amount of bytes to push at the beginning of the skb
...@@ -249,7 +268,7 @@ batadv_send_skb_push_fill_unicast(struct sk_buff *skb, int hdr_size, ...@@ -249,7 +268,7 @@ batadv_send_skb_push_fill_unicast(struct sk_buff *skb, int hdr_size,
} }
/** /**
* batadv_send_skb_prepare_unicast - encapsulate an skb with a unicast header * batadv_send_skb_prepare_unicast() - encapsulate an skb with a unicast header
* @skb: the skb containing the payload to encapsulate * @skb: the skb containing the payload to encapsulate
* @orig_node: the destination node * @orig_node: the destination node
* *
...@@ -264,7 +283,7 @@ static bool batadv_send_skb_prepare_unicast(struct sk_buff *skb, ...@@ -264,7 +283,7 @@ static bool batadv_send_skb_prepare_unicast(struct sk_buff *skb,
} }
/** /**
* batadv_send_skb_prepare_unicast_4addr - encapsulate an skb with a * batadv_send_skb_prepare_unicast_4addr() - encapsulate an skb with a
* unicast 4addr header * unicast 4addr header
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the skb containing the payload to encapsulate * @skb: the skb containing the payload to encapsulate
...@@ -308,7 +327,7 @@ bool batadv_send_skb_prepare_unicast_4addr(struct batadv_priv *bat_priv, ...@@ -308,7 +327,7 @@ bool batadv_send_skb_prepare_unicast_4addr(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_send_skb_unicast - encapsulate and send an skb via unicast * batadv_send_skb_unicast() - encapsulate and send an skb via unicast
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: payload to send * @skb: payload to send
* @packet_type: the batman unicast packet type to use * @packet_type: the batman unicast packet type to use
...@@ -378,7 +397,7 @@ int batadv_send_skb_unicast(struct batadv_priv *bat_priv, ...@@ -378,7 +397,7 @@ int batadv_send_skb_unicast(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_send_skb_via_tt_generic - send an skb via TT lookup * batadv_send_skb_via_tt_generic() - send an skb via TT lookup
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: payload to send * @skb: payload to send
* @packet_type: the batman unicast packet type to use * @packet_type: the batman unicast packet type to use
...@@ -425,7 +444,7 @@ int batadv_send_skb_via_tt_generic(struct batadv_priv *bat_priv, ...@@ -425,7 +444,7 @@ int batadv_send_skb_via_tt_generic(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_send_skb_via_gw - send an skb via gateway lookup * batadv_send_skb_via_gw() - send an skb via gateway lookup
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: payload to send * @skb: payload to send
* @vid: the vid to be used to search the translation table * @vid: the vid to be used to search the translation table
...@@ -452,7 +471,7 @@ int batadv_send_skb_via_gw(struct batadv_priv *bat_priv, struct sk_buff *skb, ...@@ -452,7 +471,7 @@ int batadv_send_skb_via_gw(struct batadv_priv *bat_priv, struct sk_buff *skb,
} }
/** /**
* batadv_forw_packet_free - free a forwarding packet * batadv_forw_packet_free() - free a forwarding packet
* @forw_packet: The packet to free * @forw_packet: The packet to free
* @dropped: whether the packet is freed because is is dropped * @dropped: whether the packet is freed because is is dropped
* *
...@@ -477,7 +496,7 @@ void batadv_forw_packet_free(struct batadv_forw_packet *forw_packet, ...@@ -477,7 +496,7 @@ void batadv_forw_packet_free(struct batadv_forw_packet *forw_packet,
} }
/** /**
* batadv_forw_packet_alloc - allocate a forwarding packet * batadv_forw_packet_alloc() - allocate a forwarding packet
* @if_incoming: The (optional) if_incoming to be grabbed * @if_incoming: The (optional) if_incoming to be grabbed
* @if_outgoing: The (optional) if_outgoing to be grabbed * @if_outgoing: The (optional) if_outgoing to be grabbed
* @queue_left: The (optional) queue counter to decrease * @queue_left: The (optional) queue counter to decrease
...@@ -543,7 +562,7 @@ batadv_forw_packet_alloc(struct batadv_hard_iface *if_incoming, ...@@ -543,7 +562,7 @@ batadv_forw_packet_alloc(struct batadv_hard_iface *if_incoming,
} }
/** /**
* batadv_forw_packet_was_stolen - check whether someone stole this packet * batadv_forw_packet_was_stolen() - check whether someone stole this packet
* @forw_packet: the forwarding packet to check * @forw_packet: the forwarding packet to check
* *
* This function checks whether the given forwarding packet was claimed by * This function checks whether the given forwarding packet was claimed by
...@@ -558,7 +577,7 @@ batadv_forw_packet_was_stolen(struct batadv_forw_packet *forw_packet) ...@@ -558,7 +577,7 @@ batadv_forw_packet_was_stolen(struct batadv_forw_packet *forw_packet)
} }
/** /**
* batadv_forw_packet_steal - claim a forw_packet for free() * batadv_forw_packet_steal() - claim a forw_packet for free()
* @forw_packet: the forwarding packet to steal * @forw_packet: the forwarding packet to steal
* @lock: a key to the store to steal from (e.g. forw_{bat,bcast}_list_lock) * @lock: a key to the store to steal from (e.g. forw_{bat,bcast}_list_lock)
* *
...@@ -589,7 +608,7 @@ bool batadv_forw_packet_steal(struct batadv_forw_packet *forw_packet, ...@@ -589,7 +608,7 @@ bool batadv_forw_packet_steal(struct batadv_forw_packet *forw_packet,
} }
/** /**
* batadv_forw_packet_list_steal - claim a list of forward packets for free() * batadv_forw_packet_list_steal() - claim a list of forward packets for free()
* @forw_list: the to be stolen forward packets * @forw_list: the to be stolen forward packets
* @cleanup_list: a backup pointer, to be able to dispose the packet later * @cleanup_list: a backup pointer, to be able to dispose the packet later
* @hard_iface: the interface to steal forward packets from * @hard_iface: the interface to steal forward packets from
...@@ -625,7 +644,7 @@ batadv_forw_packet_list_steal(struct hlist_head *forw_list, ...@@ -625,7 +644,7 @@ batadv_forw_packet_list_steal(struct hlist_head *forw_list,
} }
/** /**
* batadv_forw_packet_list_free - free a list of forward packets * batadv_forw_packet_list_free() - free a list of forward packets
* @head: a list of to be freed forw_packets * @head: a list of to be freed forw_packets
* *
* This function cancels the scheduling of any packet in the provided list, * This function cancels the scheduling of any packet in the provided list,
...@@ -649,7 +668,7 @@ static void batadv_forw_packet_list_free(struct hlist_head *head) ...@@ -649,7 +668,7 @@ static void batadv_forw_packet_list_free(struct hlist_head *head)
} }
/** /**
* batadv_forw_packet_queue - try to queue a forwarding packet * batadv_forw_packet_queue() - try to queue a forwarding packet
* @forw_packet: the forwarding packet to queue * @forw_packet: the forwarding packet to queue
* @lock: a key to the store (e.g. forw_{bat,bcast}_list_lock) * @lock: a key to the store (e.g. forw_{bat,bcast}_list_lock)
* @head: the shelve to queue it on (e.g. forw_{bat,bcast}_list) * @head: the shelve to queue it on (e.g. forw_{bat,bcast}_list)
...@@ -693,7 +712,7 @@ static void batadv_forw_packet_queue(struct batadv_forw_packet *forw_packet, ...@@ -693,7 +712,7 @@ static void batadv_forw_packet_queue(struct batadv_forw_packet *forw_packet,
} }
/** /**
* batadv_forw_packet_bcast_queue - try to queue a broadcast packet * batadv_forw_packet_bcast_queue() - try to queue a broadcast packet
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @forw_packet: the forwarding packet to queue * @forw_packet: the forwarding packet to queue
* @send_time: timestamp (jiffies) when the packet is to be sent * @send_time: timestamp (jiffies) when the packet is to be sent
...@@ -712,7 +731,7 @@ batadv_forw_packet_bcast_queue(struct batadv_priv *bat_priv, ...@@ -712,7 +731,7 @@ batadv_forw_packet_bcast_queue(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_forw_packet_ogmv1_queue - try to queue an OGMv1 packet * batadv_forw_packet_ogmv1_queue() - try to queue an OGMv1 packet
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @forw_packet: the forwarding packet to queue * @forw_packet: the forwarding packet to queue
* @send_time: timestamp (jiffies) when the packet is to be sent * @send_time: timestamp (jiffies) when the packet is to be sent
...@@ -730,7 +749,7 @@ void batadv_forw_packet_ogmv1_queue(struct batadv_priv *bat_priv, ...@@ -730,7 +749,7 @@ void batadv_forw_packet_ogmv1_queue(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_add_bcast_packet_to_list - queue broadcast packet for multiple sends * batadv_add_bcast_packet_to_list() - queue broadcast packet for multiple sends
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: broadcast packet to add * @skb: broadcast packet to add
* @delay: number of jiffies to wait before sending * @delay: number of jiffies to wait before sending
...@@ -790,7 +809,7 @@ int batadv_add_bcast_packet_to_list(struct batadv_priv *bat_priv, ...@@ -790,7 +809,7 @@ int batadv_add_bcast_packet_to_list(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_forw_packet_bcasts_left - check if a retransmission is necessary * batadv_forw_packet_bcasts_left() - check if a retransmission is necessary
* @forw_packet: the forwarding packet to check * @forw_packet: the forwarding packet to check
* @hard_iface: the interface to check on * @hard_iface: the interface to check on
* *
...@@ -818,7 +837,8 @@ batadv_forw_packet_bcasts_left(struct batadv_forw_packet *forw_packet, ...@@ -818,7 +837,8 @@ batadv_forw_packet_bcasts_left(struct batadv_forw_packet *forw_packet,
} }
/** /**
* batadv_forw_packet_bcasts_inc - increment retransmission counter of a packet * batadv_forw_packet_bcasts_inc() - increment retransmission counter of a
* packet
* @forw_packet: the packet to increase the counter for * @forw_packet: the packet to increase the counter for
*/ */
static void static void
...@@ -828,7 +848,7 @@ batadv_forw_packet_bcasts_inc(struct batadv_forw_packet *forw_packet) ...@@ -828,7 +848,7 @@ batadv_forw_packet_bcasts_inc(struct batadv_forw_packet *forw_packet)
} }
/** /**
* batadv_forw_packet_is_rebroadcast - check packet for previous transmissions * batadv_forw_packet_is_rebroadcast() - check packet for previous transmissions
* @forw_packet: the packet to check * @forw_packet: the packet to check
* *
* Return: True if this packet was transmitted before, false otherwise. * Return: True if this packet was transmitted before, false otherwise.
...@@ -953,7 +973,7 @@ static void batadv_send_outstanding_bcast_packet(struct work_struct *work) ...@@ -953,7 +973,7 @@ static void batadv_send_outstanding_bcast_packet(struct work_struct *work)
} }
/** /**
* batadv_purge_outstanding_packets - stop/purge scheduled bcast/OGMv1 packets * batadv_purge_outstanding_packets() - stop/purge scheduled bcast/OGMv1 packets
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @hard_iface: the hard interface to cancel and purge bcast/ogm packets on * @hard_iface: the hard interface to cancel and purge bcast/ogm packets on
* *
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -76,7 +77,7 @@ int batadv_send_skb_via_gw(struct batadv_priv *bat_priv, struct sk_buff *skb, ...@@ -76,7 +77,7 @@ int batadv_send_skb_via_gw(struct batadv_priv *bat_priv, struct sk_buff *skb,
unsigned short vid); unsigned short vid);
/** /**
* batadv_send_skb_via_tt - send an skb via TT lookup * batadv_send_skb_via_tt() - send an skb via TT lookup
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the payload to send * @skb: the payload to send
* @dst_hint: can be used to override the destination contained in the skb * @dst_hint: can be used to override the destination contained in the skb
...@@ -97,7 +98,7 @@ static inline int batadv_send_skb_via_tt(struct batadv_priv *bat_priv, ...@@ -97,7 +98,7 @@ static inline int batadv_send_skb_via_tt(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_send_skb_via_tt_4addr - send an skb via TT lookup * batadv_send_skb_via_tt_4addr() - send an skb via TT lookup
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the payload to send * @skb: the payload to send
* @packet_subtype: the unicast 4addr packet subtype to use * @packet_subtype: the unicast 4addr packet subtype to use
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -26,7 +27,7 @@ ...@@ -26,7 +27,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/ethtool.h> #include <linux/ethtool.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
...@@ -64,6 +65,13 @@ ...@@ -64,6 +65,13 @@
#include "sysfs.h" #include "sysfs.h"
#include "translation-table.h" #include "translation-table.h"
/**
* batadv_skb_head_push() - Increase header size and move (push) head pointer
* @skb: packet buffer which should be modified
* @len: number of bytes to add
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_skb_head_push(struct sk_buff *skb, unsigned int len) int batadv_skb_head_push(struct sk_buff *skb, unsigned int len)
{ {
int result; int result;
...@@ -96,7 +104,7 @@ static int batadv_interface_release(struct net_device *dev) ...@@ -96,7 +104,7 @@ static int batadv_interface_release(struct net_device *dev)
} }
/** /**
* batadv_sum_counter - Sum the cpu-local counters for index 'idx' * batadv_sum_counter() - Sum the cpu-local counters for index 'idx'
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @idx: index of counter to sum up * @idx: index of counter to sum up
* *
...@@ -169,7 +177,7 @@ static int batadv_interface_change_mtu(struct net_device *dev, int new_mtu) ...@@ -169,7 +177,7 @@ static int batadv_interface_change_mtu(struct net_device *dev, int new_mtu)
} }
/** /**
* batadv_interface_set_rx_mode - set the rx mode of a device * batadv_interface_set_rx_mode() - set the rx mode of a device
* @dev: registered network device to modify * @dev: registered network device to modify
* *
* We do not actually need to set any rx filters for the virtual batman * We do not actually need to set any rx filters for the virtual batman
...@@ -389,7 +397,7 @@ static int batadv_interface_tx(struct sk_buff *skb, ...@@ -389,7 +397,7 @@ static int batadv_interface_tx(struct sk_buff *skb,
} }
/** /**
* batadv_interface_rx - receive ethernet frame on local batman-adv interface * batadv_interface_rx() - receive ethernet frame on local batman-adv interface
* @soft_iface: local interface which will receive the ethernet frame * @soft_iface: local interface which will receive the ethernet frame
* @skb: ethernet frame for @soft_iface * @skb: ethernet frame for @soft_iface
* @hdr_size: size of already parsed batman-adv header * @hdr_size: size of already parsed batman-adv header
...@@ -501,8 +509,8 @@ void batadv_interface_rx(struct net_device *soft_iface, ...@@ -501,8 +509,8 @@ void batadv_interface_rx(struct net_device *soft_iface,
} }
/** /**
* batadv_softif_vlan_release - release vlan from lists and queue for free after * batadv_softif_vlan_release() - release vlan from lists and queue for free
* rcu grace period * after rcu grace period
* @ref: kref pointer of the vlan object * @ref: kref pointer of the vlan object
*/ */
static void batadv_softif_vlan_release(struct kref *ref) static void batadv_softif_vlan_release(struct kref *ref)
...@@ -519,7 +527,7 @@ static void batadv_softif_vlan_release(struct kref *ref) ...@@ -519,7 +527,7 @@ static void batadv_softif_vlan_release(struct kref *ref)
} }
/** /**
* batadv_softif_vlan_put - decrease the vlan object refcounter and * batadv_softif_vlan_put() - decrease the vlan object refcounter and
* possibly release it * possibly release it
* @vlan: the vlan object to release * @vlan: the vlan object to release
*/ */
...@@ -532,7 +540,7 @@ void batadv_softif_vlan_put(struct batadv_softif_vlan *vlan) ...@@ -532,7 +540,7 @@ void batadv_softif_vlan_put(struct batadv_softif_vlan *vlan)
} }
/** /**
* batadv_softif_vlan_get - get the vlan object for a specific vid * batadv_softif_vlan_get() - get the vlan object for a specific vid
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @vid: the identifier of the vlan object to retrieve * @vid: the identifier of the vlan object to retrieve
* *
...@@ -561,7 +569,7 @@ struct batadv_softif_vlan *batadv_softif_vlan_get(struct batadv_priv *bat_priv, ...@@ -561,7 +569,7 @@ struct batadv_softif_vlan *batadv_softif_vlan_get(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_softif_create_vlan - allocate the needed resources for a new vlan * batadv_softif_create_vlan() - allocate the needed resources for a new vlan
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @vid: the VLAN identifier * @vid: the VLAN identifier
* *
...@@ -613,7 +621,7 @@ int batadv_softif_create_vlan(struct batadv_priv *bat_priv, unsigned short vid) ...@@ -613,7 +621,7 @@ int batadv_softif_create_vlan(struct batadv_priv *bat_priv, unsigned short vid)
} }
/** /**
* batadv_softif_destroy_vlan - remove and destroy a softif_vlan object * batadv_softif_destroy_vlan() - remove and destroy a softif_vlan object
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @vlan: the object to remove * @vlan: the object to remove
*/ */
...@@ -631,7 +639,7 @@ static void batadv_softif_destroy_vlan(struct batadv_priv *bat_priv, ...@@ -631,7 +639,7 @@ static void batadv_softif_destroy_vlan(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_interface_add_vid - ndo_add_vid API implementation * batadv_interface_add_vid() - ndo_add_vid API implementation
* @dev: the netdev of the mesh interface * @dev: the netdev of the mesh interface
* @proto: protocol of the the vlan id * @proto: protocol of the the vlan id
* @vid: identifier of the new vlan * @vid: identifier of the new vlan
...@@ -689,7 +697,7 @@ static int batadv_interface_add_vid(struct net_device *dev, __be16 proto, ...@@ -689,7 +697,7 @@ static int batadv_interface_add_vid(struct net_device *dev, __be16 proto,
} }
/** /**
* batadv_interface_kill_vid - ndo_kill_vid API implementation * batadv_interface_kill_vid() - ndo_kill_vid API implementation
* @dev: the netdev of the mesh interface * @dev: the netdev of the mesh interface
* @proto: protocol of the the vlan id * @proto: protocol of the the vlan id
* @vid: identifier of the deleted vlan * @vid: identifier of the deleted vlan
...@@ -732,7 +740,7 @@ static struct lock_class_key batadv_netdev_xmit_lock_key; ...@@ -732,7 +740,7 @@ static struct lock_class_key batadv_netdev_xmit_lock_key;
static struct lock_class_key batadv_netdev_addr_lock_key; static struct lock_class_key batadv_netdev_addr_lock_key;
/** /**
* batadv_set_lockdep_class_one - Set lockdep class for a single tx queue * batadv_set_lockdep_class_one() - Set lockdep class for a single tx queue
* @dev: device which owns the tx queue * @dev: device which owns the tx queue
* @txq: tx queue to modify * @txq: tx queue to modify
* @_unused: always NULL * @_unused: always NULL
...@@ -745,7 +753,7 @@ static void batadv_set_lockdep_class_one(struct net_device *dev, ...@@ -745,7 +753,7 @@ static void batadv_set_lockdep_class_one(struct net_device *dev,
} }
/** /**
* batadv_set_lockdep_class - Set txq and addr_list lockdep class * batadv_set_lockdep_class() - Set txq and addr_list lockdep class
* @dev: network device to modify * @dev: network device to modify
*/ */
static void batadv_set_lockdep_class(struct net_device *dev) static void batadv_set_lockdep_class(struct net_device *dev)
...@@ -755,7 +763,7 @@ static void batadv_set_lockdep_class(struct net_device *dev) ...@@ -755,7 +763,7 @@ static void batadv_set_lockdep_class(struct net_device *dev)
} }
/** /**
* batadv_softif_init_late - late stage initialization of soft interface * batadv_softif_init_late() - late stage initialization of soft interface
* @dev: registered network device to modify * @dev: registered network device to modify
* *
* Return: error code on failures * Return: error code on failures
...@@ -860,7 +868,7 @@ static int batadv_softif_init_late(struct net_device *dev) ...@@ -860,7 +868,7 @@ static int batadv_softif_init_late(struct net_device *dev)
} }
/** /**
* batadv_softif_slave_add - Add a slave interface to a batadv_soft_interface * batadv_softif_slave_add() - Add a slave interface to a batadv_soft_interface
* @dev: batadv_soft_interface used as master interface * @dev: batadv_soft_interface used as master interface
* @slave_dev: net_device which should become the slave interface * @slave_dev: net_device which should become the slave interface
* @extack: extended ACK report struct * @extack: extended ACK report struct
...@@ -888,7 +896,7 @@ static int batadv_softif_slave_add(struct net_device *dev, ...@@ -888,7 +896,7 @@ static int batadv_softif_slave_add(struct net_device *dev,
} }
/** /**
* batadv_softif_slave_del - Delete a slave iface from a batadv_soft_interface * batadv_softif_slave_del() - Delete a slave iface from a batadv_soft_interface
* @dev: batadv_soft_interface used as master interface * @dev: batadv_soft_interface used as master interface
* @slave_dev: net_device which should be removed from the master interface * @slave_dev: net_device which should be removed from the master interface
* *
...@@ -1023,7 +1031,7 @@ static const struct ethtool_ops batadv_ethtool_ops = { ...@@ -1023,7 +1031,7 @@ static const struct ethtool_ops batadv_ethtool_ops = {
}; };
/** /**
* batadv_softif_free - Deconstructor of batadv_soft_interface * batadv_softif_free() - Deconstructor of batadv_soft_interface
* @dev: Device to cleanup and remove * @dev: Device to cleanup and remove
*/ */
static void batadv_softif_free(struct net_device *dev) static void batadv_softif_free(struct net_device *dev)
...@@ -1039,7 +1047,7 @@ static void batadv_softif_free(struct net_device *dev) ...@@ -1039,7 +1047,7 @@ static void batadv_softif_free(struct net_device *dev)
} }
/** /**
* batadv_softif_init_early - early stage initialization of soft interface * batadv_softif_init_early() - early stage initialization of soft interface
* @dev: registered network device to modify * @dev: registered network device to modify
*/ */
static void batadv_softif_init_early(struct net_device *dev) static void batadv_softif_init_early(struct net_device *dev)
...@@ -1063,6 +1071,13 @@ static void batadv_softif_init_early(struct net_device *dev) ...@@ -1063,6 +1071,13 @@ static void batadv_softif_init_early(struct net_device *dev)
dev->ethtool_ops = &batadv_ethtool_ops; dev->ethtool_ops = &batadv_ethtool_ops;
} }
/**
* batadv_softif_create() - Create and register soft interface
* @net: the applicable net namespace
* @name: name of the new soft interface
*
* Return: newly allocated soft_interface, NULL on errors
*/
struct net_device *batadv_softif_create(struct net *net, const char *name) struct net_device *batadv_softif_create(struct net *net, const char *name)
{ {
struct net_device *soft_iface; struct net_device *soft_iface;
...@@ -1089,7 +1104,7 @@ struct net_device *batadv_softif_create(struct net *net, const char *name) ...@@ -1089,7 +1104,7 @@ struct net_device *batadv_softif_create(struct net *net, const char *name)
} }
/** /**
* batadv_softif_destroy_sysfs - deletion of batadv_soft_interface via sysfs * batadv_softif_destroy_sysfs() - deletion of batadv_soft_interface via sysfs
* @soft_iface: the to-be-removed batman-adv interface * @soft_iface: the to-be-removed batman-adv interface
*/ */
void batadv_softif_destroy_sysfs(struct net_device *soft_iface) void batadv_softif_destroy_sysfs(struct net_device *soft_iface)
...@@ -1111,7 +1126,8 @@ void batadv_softif_destroy_sysfs(struct net_device *soft_iface) ...@@ -1111,7 +1126,8 @@ void batadv_softif_destroy_sysfs(struct net_device *soft_iface)
} }
/** /**
* batadv_softif_destroy_netlink - deletion of batadv_soft_interface via netlink * batadv_softif_destroy_netlink() - deletion of batadv_soft_interface via
* netlink
* @soft_iface: the to-be-removed batman-adv interface * @soft_iface: the to-be-removed batman-adv interface
* @head: list pointer * @head: list pointer
*/ */
...@@ -1139,6 +1155,12 @@ static void batadv_softif_destroy_netlink(struct net_device *soft_iface, ...@@ -1139,6 +1155,12 @@ static void batadv_softif_destroy_netlink(struct net_device *soft_iface,
unregister_netdevice_queue(soft_iface, head); unregister_netdevice_queue(soft_iface, head);
} }
/**
* batadv_softif_is_valid() - Check whether device is a batadv soft interface
* @net_dev: device which should be checked
*
* Return: true when net_dev is a batman-adv interface, false otherwise
*/
bool batadv_softif_is_valid(const struct net_device *net_dev) bool batadv_softif_is_valid(const struct net_device *net_dev)
{ {
if (net_dev->netdev_ops->ndo_start_xmit == batadv_interface_tx) if (net_dev->netdev_ops->ndo_start_xmit == batadv_interface_tx)
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2010-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2010-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
...@@ -22,10 +23,11 @@ ...@@ -22,10 +23,11 @@
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if.h> #include <linux/if.h>
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/kobject.h>
#include <linux/kref.h> #include <linux/kref.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/printk.h> #include <linux/printk.h>
...@@ -63,7 +65,7 @@ static struct batadv_priv *batadv_kobj_to_batpriv(struct kobject *obj) ...@@ -63,7 +65,7 @@ static struct batadv_priv *batadv_kobj_to_batpriv(struct kobject *obj)
} }
/** /**
* batadv_vlan_kobj_to_batpriv - convert a vlan kobj in the associated batpriv * batadv_vlan_kobj_to_batpriv() - convert a vlan kobj in the associated batpriv
* @obj: kobject to covert * @obj: kobject to covert
* *
* Return: the associated batadv_priv struct. * Return: the associated batadv_priv struct.
...@@ -83,7 +85,7 @@ static struct batadv_priv *batadv_vlan_kobj_to_batpriv(struct kobject *obj) ...@@ -83,7 +85,7 @@ static struct batadv_priv *batadv_vlan_kobj_to_batpriv(struct kobject *obj)
} }
/** /**
* batadv_kobj_to_vlan - convert a kobj in the associated softif_vlan struct * batadv_kobj_to_vlan() - convert a kobj in the associated softif_vlan struct
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @obj: kobject to covert * @obj: kobject to covert
* *
...@@ -598,7 +600,7 @@ static ssize_t batadv_store_gw_bwidth(struct kobject *kobj, ...@@ -598,7 +600,7 @@ static ssize_t batadv_store_gw_bwidth(struct kobject *kobj,
} }
/** /**
* batadv_show_isolation_mark - print the current isolation mark/mask * batadv_show_isolation_mark() - print the current isolation mark/mask
* @kobj: kobject representing the private mesh sysfs directory * @kobj: kobject representing the private mesh sysfs directory
* @attr: the batman-adv attribute the user is interacting with * @attr: the batman-adv attribute the user is interacting with
* @buff: the buffer that will contain the data to send back to the user * @buff: the buffer that will contain the data to send back to the user
...@@ -616,8 +618,8 @@ static ssize_t batadv_show_isolation_mark(struct kobject *kobj, ...@@ -616,8 +618,8 @@ static ssize_t batadv_show_isolation_mark(struct kobject *kobj,
} }
/** /**
* batadv_store_isolation_mark - parse and store the isolation mark/mask entered * batadv_store_isolation_mark() - parse and store the isolation mark/mask
* by the user * entered by the user
* @kobj: kobject representing the private mesh sysfs directory * @kobj: kobject representing the private mesh sysfs directory
* @attr: the batman-adv attribute the user is interacting with * @attr: the batman-adv attribute the user is interacting with
* @buff: the buffer containing the user data * @buff: the buffer containing the user data
...@@ -733,6 +735,12 @@ static struct batadv_attribute *batadv_vlan_attrs[] = { ...@@ -733,6 +735,12 @@ static struct batadv_attribute *batadv_vlan_attrs[] = {
NULL, NULL,
}; };
/**
* batadv_sysfs_add_meshif() - Add soft interface specific sysfs entries
* @dev: netdev struct of the soft interface
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_sysfs_add_meshif(struct net_device *dev) int batadv_sysfs_add_meshif(struct net_device *dev)
{ {
struct kobject *batif_kobject = &dev->dev.kobj; struct kobject *batif_kobject = &dev->dev.kobj;
...@@ -773,6 +781,10 @@ int batadv_sysfs_add_meshif(struct net_device *dev) ...@@ -773,6 +781,10 @@ int batadv_sysfs_add_meshif(struct net_device *dev)
return -ENOMEM; return -ENOMEM;
} }
/**
* batadv_sysfs_del_meshif() - Remove soft interface specific sysfs entries
* @dev: netdev struct of the soft interface
*/
void batadv_sysfs_del_meshif(struct net_device *dev) void batadv_sysfs_del_meshif(struct net_device *dev)
{ {
struct batadv_priv *bat_priv = netdev_priv(dev); struct batadv_priv *bat_priv = netdev_priv(dev);
...@@ -788,7 +800,7 @@ void batadv_sysfs_del_meshif(struct net_device *dev) ...@@ -788,7 +800,7 @@ void batadv_sysfs_del_meshif(struct net_device *dev)
} }
/** /**
* batadv_sysfs_add_vlan - add all the needed sysfs objects for the new vlan * batadv_sysfs_add_vlan() - add all the needed sysfs objects for the new vlan
* @dev: netdev of the mesh interface * @dev: netdev of the mesh interface
* @vlan: private data of the newly added VLAN interface * @vlan: private data of the newly added VLAN interface
* *
...@@ -849,7 +861,7 @@ int batadv_sysfs_add_vlan(struct net_device *dev, ...@@ -849,7 +861,7 @@ int batadv_sysfs_add_vlan(struct net_device *dev,
} }
/** /**
* batadv_sysfs_del_vlan - remove all the sysfs objects for a given VLAN * batadv_sysfs_del_vlan() - remove all the sysfs objects for a given VLAN
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @vlan: the private data of the VLAN to destroy * @vlan: the private data of the VLAN to destroy
*/ */
...@@ -894,7 +906,7 @@ static ssize_t batadv_show_mesh_iface(struct kobject *kobj, ...@@ -894,7 +906,7 @@ static ssize_t batadv_show_mesh_iface(struct kobject *kobj,
} }
/** /**
* batadv_store_mesh_iface_finish - store new hardif mesh_iface state * batadv_store_mesh_iface_finish() - store new hardif mesh_iface state
* @net_dev: netdevice to add/remove to/from batman-adv soft-interface * @net_dev: netdevice to add/remove to/from batman-adv soft-interface
* @ifname: name of soft-interface to modify * @ifname: name of soft-interface to modify
* *
...@@ -947,7 +959,7 @@ static int batadv_store_mesh_iface_finish(struct net_device *net_dev, ...@@ -947,7 +959,7 @@ static int batadv_store_mesh_iface_finish(struct net_device *net_dev,
} }
/** /**
* batadv_store_mesh_iface_work - store new hardif mesh_iface state * batadv_store_mesh_iface_work() - store new hardif mesh_iface state
* @work: work queue item * @work: work queue item
* *
* Changes the parts of the hard+soft interface which can not be modified under * Changes the parts of the hard+soft interface which can not be modified under
...@@ -1043,7 +1055,7 @@ static ssize_t batadv_show_iface_status(struct kobject *kobj, ...@@ -1043,7 +1055,7 @@ static ssize_t batadv_show_iface_status(struct kobject *kobj,
#ifdef CONFIG_BATMAN_ADV_BATMAN_V #ifdef CONFIG_BATMAN_ADV_BATMAN_V
/** /**
* batadv_store_throughput_override - parse and store throughput override * batadv_store_throughput_override() - parse and store throughput override
* entered by the user * entered by the user
* @kobj: kobject representing the private mesh sysfs directory * @kobj: kobject representing the private mesh sysfs directory
* @attr: the batman-adv attribute the user is interacting with * @attr: the batman-adv attribute the user is interacting with
...@@ -1130,6 +1142,13 @@ static struct batadv_attribute *batadv_batman_attrs[] = { ...@@ -1130,6 +1142,13 @@ static struct batadv_attribute *batadv_batman_attrs[] = {
NULL, NULL,
}; };
/**
* batadv_sysfs_add_hardif() - Add hard interface specific sysfs entries
* @hardif_obj: address where to store the pointer to new sysfs folder
* @dev: netdev struct of the hard interface
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_sysfs_add_hardif(struct kobject **hardif_obj, struct net_device *dev) int batadv_sysfs_add_hardif(struct kobject **hardif_obj, struct net_device *dev)
{ {
struct kobject *hardif_kobject = &dev->dev.kobj; struct kobject *hardif_kobject = &dev->dev.kobj;
...@@ -1164,6 +1183,11 @@ int batadv_sysfs_add_hardif(struct kobject **hardif_obj, struct net_device *dev) ...@@ -1164,6 +1183,11 @@ int batadv_sysfs_add_hardif(struct kobject **hardif_obj, struct net_device *dev)
return -ENOMEM; return -ENOMEM;
} }
/**
* batadv_sysfs_del_hardif() - Remove hard interface specific sysfs entries
* @hardif_obj: address to the pointer to which stores batman-adv sysfs folder
* of the hard interface
*/
void batadv_sysfs_del_hardif(struct kobject **hardif_obj) void batadv_sysfs_del_hardif(struct kobject **hardif_obj)
{ {
kobject_uevent(*hardif_obj, KOBJ_REMOVE); kobject_uevent(*hardif_obj, KOBJ_REMOVE);
...@@ -1172,6 +1196,16 @@ void batadv_sysfs_del_hardif(struct kobject **hardif_obj) ...@@ -1172,6 +1196,16 @@ void batadv_sysfs_del_hardif(struct kobject **hardif_obj)
*hardif_obj = NULL; *hardif_obj = NULL;
} }
/**
* batadv_throw_uevent() - Send an uevent with batman-adv specific env data
* @bat_priv: the bat priv with all the soft interface information
* @type: subsystem type of event. Stored in uevent's BATTYPE
* @action: action type of event. Stored in uevent's BATACTION
* @data: string with additional information to the event (ignored for
* BATADV_UEV_DEL). Stored in uevent's BATDATA
*
* Return: 0 on success or negative error number in case of failure
*/
int batadv_throw_uevent(struct batadv_priv *bat_priv, enum batadv_uev_type type, int batadv_throw_uevent(struct batadv_priv *bat_priv, enum batadv_uev_type type,
enum batadv_uev_action action, const char *data) enum batadv_uev_action action, const char *data)
{ {
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2010-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2010-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
...@@ -35,10 +36,23 @@ struct net_device; ...@@ -35,10 +36,23 @@ struct net_device;
*/ */
#define BATADV_SYSFS_VLAN_SUBDIR_PREFIX "vlan" #define BATADV_SYSFS_VLAN_SUBDIR_PREFIX "vlan"
/**
* struct batadv_attribute - sysfs export helper for batman-adv attributes
*/
struct batadv_attribute { struct batadv_attribute {
/** @attr: sysfs attribute file */
struct attribute attr; struct attribute attr;
/**
* @show: function to export the current attribute's content to sysfs
*/
ssize_t (*show)(struct kobject *kobj, struct attribute *attr, ssize_t (*show)(struct kobject *kobj, struct attribute *attr,
char *buf); char *buf);
/**
* @store: function to load new value from character buffer and save it
* in batman-adv attribute
*/
ssize_t (*store)(struct kobject *kobj, struct attribute *attr, ssize_t (*store)(struct kobject *kobj, struct attribute *attr,
char *buf, size_t count); char *buf, size_t count);
}; };
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2012-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2012-2017 B.A.T.M.A.N. contributors:
* *
* Edo Monticelli, Antonio Quartulli * Edo Monticelli, Antonio Quartulli
...@@ -19,13 +20,13 @@ ...@@ -19,13 +20,13 @@
#include "main.h" #include "main.h"
#include <linux/atomic.h> #include <linux/atomic.h>
#include <linux/bug.h> #include <linux/build_bug.h>
#include <linux/byteorder/generic.h> #include <linux/byteorder/generic.h>
#include <linux/cache.h> #include <linux/cache.h>
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
...@@ -97,7 +98,7 @@ ...@@ -97,7 +98,7 @@
static u8 batadv_tp_prerandom[4096] __read_mostly; static u8 batadv_tp_prerandom[4096] __read_mostly;
/** /**
* batadv_tp_session_cookie - generate session cookie based on session ids * batadv_tp_session_cookie() - generate session cookie based on session ids
* @session: TP session identifier * @session: TP session identifier
* @icmp_uid: icmp pseudo uid of the tp session * @icmp_uid: icmp pseudo uid of the tp session
* *
...@@ -115,7 +116,7 @@ static u32 batadv_tp_session_cookie(const u8 session[2], u8 icmp_uid) ...@@ -115,7 +116,7 @@ static u32 batadv_tp_session_cookie(const u8 session[2], u8 icmp_uid)
} }
/** /**
* batadv_tp_cwnd - compute the new cwnd size * batadv_tp_cwnd() - compute the new cwnd size
* @base: base cwnd size value * @base: base cwnd size value
* @increment: the value to add to base to get the new size * @increment: the value to add to base to get the new size
* @min: minumim cwnd value (usually MSS) * @min: minumim cwnd value (usually MSS)
...@@ -140,7 +141,7 @@ static u32 batadv_tp_cwnd(u32 base, u32 increment, u32 min) ...@@ -140,7 +141,7 @@ static u32 batadv_tp_cwnd(u32 base, u32 increment, u32 min)
} }
/** /**
* batadv_tp_updated_cwnd - update the Congestion Windows * batadv_tp_updated_cwnd() - update the Congestion Windows
* @tp_vars: the private data of the current TP meter session * @tp_vars: the private data of the current TP meter session
* @mss: maximum segment size of transmission * @mss: maximum segment size of transmission
* *
...@@ -176,7 +177,7 @@ static void batadv_tp_update_cwnd(struct batadv_tp_vars *tp_vars, u32 mss) ...@@ -176,7 +177,7 @@ static void batadv_tp_update_cwnd(struct batadv_tp_vars *tp_vars, u32 mss)
} }
/** /**
* batadv_tp_update_rto - calculate new retransmission timeout * batadv_tp_update_rto() - calculate new retransmission timeout
* @tp_vars: the private data of the current TP meter session * @tp_vars: the private data of the current TP meter session
* @new_rtt: new roundtrip time in msec * @new_rtt: new roundtrip time in msec
*/ */
...@@ -212,7 +213,7 @@ static void batadv_tp_update_rto(struct batadv_tp_vars *tp_vars, ...@@ -212,7 +213,7 @@ static void batadv_tp_update_rto(struct batadv_tp_vars *tp_vars,
} }
/** /**
* batadv_tp_batctl_notify - send client status result to client * batadv_tp_batctl_notify() - send client status result to client
* @reason: reason for tp meter session stop * @reason: reason for tp meter session stop
* @dst: destination of tp_meter session * @dst: destination of tp_meter session
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
...@@ -244,7 +245,7 @@ static void batadv_tp_batctl_notify(enum batadv_tp_meter_reason reason, ...@@ -244,7 +245,7 @@ static void batadv_tp_batctl_notify(enum batadv_tp_meter_reason reason,
} }
/** /**
* batadv_tp_batctl_error_notify - send client error result to client * batadv_tp_batctl_error_notify() - send client error result to client
* @reason: reason for tp meter session stop * @reason: reason for tp meter session stop
* @dst: destination of tp_meter session * @dst: destination of tp_meter session
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
...@@ -259,7 +260,7 @@ static void batadv_tp_batctl_error_notify(enum batadv_tp_meter_reason reason, ...@@ -259,7 +260,7 @@ static void batadv_tp_batctl_error_notify(enum batadv_tp_meter_reason reason,
} }
/** /**
* batadv_tp_list_find - find a tp_vars object in the global list * batadv_tp_list_find() - find a tp_vars object in the global list
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @dst: the other endpoint MAC address to look for * @dst: the other endpoint MAC address to look for
* *
...@@ -294,7 +295,8 @@ static struct batadv_tp_vars *batadv_tp_list_find(struct batadv_priv *bat_priv, ...@@ -294,7 +295,8 @@ static struct batadv_tp_vars *batadv_tp_list_find(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tp_list_find_session - find tp_vars session object in the global list * batadv_tp_list_find_session() - find tp_vars session object in the global
* list
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @dst: the other endpoint MAC address to look for * @dst: the other endpoint MAC address to look for
* @session: session identifier * @session: session identifier
...@@ -335,7 +337,7 @@ batadv_tp_list_find_session(struct batadv_priv *bat_priv, const u8 *dst, ...@@ -335,7 +337,7 @@ batadv_tp_list_find_session(struct batadv_priv *bat_priv, const u8 *dst,
} }
/** /**
* batadv_tp_vars_release - release batadv_tp_vars from lists and queue for * batadv_tp_vars_release() - release batadv_tp_vars from lists and queue for
* free after rcu grace period * free after rcu grace period
* @ref: kref pointer of the batadv_tp_vars * @ref: kref pointer of the batadv_tp_vars
*/ */
...@@ -360,7 +362,7 @@ static void batadv_tp_vars_release(struct kref *ref) ...@@ -360,7 +362,7 @@ static void batadv_tp_vars_release(struct kref *ref)
} }
/** /**
* batadv_tp_vars_put - decrement the batadv_tp_vars refcounter and possibly * batadv_tp_vars_put() - decrement the batadv_tp_vars refcounter and possibly
* release it * release it
* @tp_vars: the private data of the current TP meter session to be free'd * @tp_vars: the private data of the current TP meter session to be free'd
*/ */
...@@ -370,7 +372,7 @@ static void batadv_tp_vars_put(struct batadv_tp_vars *tp_vars) ...@@ -370,7 +372,7 @@ static void batadv_tp_vars_put(struct batadv_tp_vars *tp_vars)
} }
/** /**
* batadv_tp_sender_cleanup - cleanup sender data and drop and timer * batadv_tp_sender_cleanup() - cleanup sender data and drop and timer
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tp_vars: the private data of the current TP meter session to cleanup * @tp_vars: the private data of the current TP meter session to cleanup
*/ */
...@@ -400,7 +402,7 @@ static void batadv_tp_sender_cleanup(struct batadv_priv *bat_priv, ...@@ -400,7 +402,7 @@ static void batadv_tp_sender_cleanup(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tp_sender_end - print info about ended session and inform client * batadv_tp_sender_end() - print info about ended session and inform client
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tp_vars: the private data of the current TP meter session * @tp_vars: the private data of the current TP meter session
*/ */
...@@ -433,7 +435,7 @@ static void batadv_tp_sender_end(struct batadv_priv *bat_priv, ...@@ -433,7 +435,7 @@ static void batadv_tp_sender_end(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tp_sender_shutdown - let sender thread/timer stop gracefully * batadv_tp_sender_shutdown() - let sender thread/timer stop gracefully
* @tp_vars: the private data of the current TP meter session * @tp_vars: the private data of the current TP meter session
* @reason: reason for tp meter session stop * @reason: reason for tp meter session stop
*/ */
...@@ -447,7 +449,7 @@ static void batadv_tp_sender_shutdown(struct batadv_tp_vars *tp_vars, ...@@ -447,7 +449,7 @@ static void batadv_tp_sender_shutdown(struct batadv_tp_vars *tp_vars,
} }
/** /**
* batadv_tp_sender_finish - stop sender session after test_length was reached * batadv_tp_sender_finish() - stop sender session after test_length was reached
* @work: delayed work reference of the related tp_vars * @work: delayed work reference of the related tp_vars
*/ */
static void batadv_tp_sender_finish(struct work_struct *work) static void batadv_tp_sender_finish(struct work_struct *work)
...@@ -463,7 +465,7 @@ static void batadv_tp_sender_finish(struct work_struct *work) ...@@ -463,7 +465,7 @@ static void batadv_tp_sender_finish(struct work_struct *work)
} }
/** /**
* batadv_tp_reset_sender_timer - reschedule the sender timer * batadv_tp_reset_sender_timer() - reschedule the sender timer
* @tp_vars: the private TP meter data for this session * @tp_vars: the private TP meter data for this session
* *
* Reschedule the timer using tp_vars->rto as delay * Reschedule the timer using tp_vars->rto as delay
...@@ -481,7 +483,7 @@ static void batadv_tp_reset_sender_timer(struct batadv_tp_vars *tp_vars) ...@@ -481,7 +483,7 @@ static void batadv_tp_reset_sender_timer(struct batadv_tp_vars *tp_vars)
} }
/** /**
* batadv_tp_sender_timeout - timer that fires in case of packet loss * batadv_tp_sender_timeout() - timer that fires in case of packet loss
* @t: address to timer_list inside tp_vars * @t: address to timer_list inside tp_vars
* *
* If fired it means that there was packet loss. * If fired it means that there was packet loss.
...@@ -531,7 +533,7 @@ static void batadv_tp_sender_timeout(struct timer_list *t) ...@@ -531,7 +533,7 @@ static void batadv_tp_sender_timeout(struct timer_list *t)
} }
/** /**
* batadv_tp_fill_prerandom - Fill buffer with prefetched random bytes * batadv_tp_fill_prerandom() - Fill buffer with prefetched random bytes
* @tp_vars: the private TP meter data for this session * @tp_vars: the private TP meter data for this session
* @buf: Buffer to fill with bytes * @buf: Buffer to fill with bytes
* @nbytes: amount of pseudorandom bytes * @nbytes: amount of pseudorandom bytes
...@@ -563,7 +565,7 @@ static void batadv_tp_fill_prerandom(struct batadv_tp_vars *tp_vars, ...@@ -563,7 +565,7 @@ static void batadv_tp_fill_prerandom(struct batadv_tp_vars *tp_vars,
} }
/** /**
* batadv_tp_send_msg - send a single message * batadv_tp_send_msg() - send a single message
* @tp_vars: the private TP meter data for this session * @tp_vars: the private TP meter data for this session
* @src: source mac address * @src: source mac address
* @orig_node: the originator of the destination * @orig_node: the originator of the destination
...@@ -623,7 +625,7 @@ static int batadv_tp_send_msg(struct batadv_tp_vars *tp_vars, const u8 *src, ...@@ -623,7 +625,7 @@ static int batadv_tp_send_msg(struct batadv_tp_vars *tp_vars, const u8 *src,
} }
/** /**
* batadv_tp_recv_ack - ACK receiving function * batadv_tp_recv_ack() - ACK receiving function
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the buffer containing the received packet * @skb: the buffer containing the received packet
* *
...@@ -765,7 +767,7 @@ static void batadv_tp_recv_ack(struct batadv_priv *bat_priv, ...@@ -765,7 +767,7 @@ static void batadv_tp_recv_ack(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tp_avail - check if congestion window is not full * batadv_tp_avail() - check if congestion window is not full
* @tp_vars: the private data of the current TP meter session * @tp_vars: the private data of the current TP meter session
* @payload_len: size of the payload of a single message * @payload_len: size of the payload of a single message
* *
...@@ -783,7 +785,7 @@ static bool batadv_tp_avail(struct batadv_tp_vars *tp_vars, ...@@ -783,7 +785,7 @@ static bool batadv_tp_avail(struct batadv_tp_vars *tp_vars,
} }
/** /**
* batadv_tp_wait_available - wait until congestion window becomes free or * batadv_tp_wait_available() - wait until congestion window becomes free or
* timeout is reached * timeout is reached
* @tp_vars: the private data of the current TP meter session * @tp_vars: the private data of the current TP meter session
* @plen: size of the payload of a single message * @plen: size of the payload of a single message
...@@ -805,7 +807,7 @@ static int batadv_tp_wait_available(struct batadv_tp_vars *tp_vars, size_t plen) ...@@ -805,7 +807,7 @@ static int batadv_tp_wait_available(struct batadv_tp_vars *tp_vars, size_t plen)
} }
/** /**
* batadv_tp_send - main sending thread of a tp meter session * batadv_tp_send() - main sending thread of a tp meter session
* @arg: address of the related tp_vars * @arg: address of the related tp_vars
* *
* Return: nothing, this function never returns * Return: nothing, this function never returns
...@@ -904,7 +906,8 @@ static int batadv_tp_send(void *arg) ...@@ -904,7 +906,8 @@ static int batadv_tp_send(void *arg)
} }
/** /**
* batadv_tp_start_kthread - start new thread which manages the tp meter sender * batadv_tp_start_kthread() - start new thread which manages the tp meter
* sender
* @tp_vars: the private data of the current TP meter session * @tp_vars: the private data of the current TP meter session
*/ */
static void batadv_tp_start_kthread(struct batadv_tp_vars *tp_vars) static void batadv_tp_start_kthread(struct batadv_tp_vars *tp_vars)
...@@ -935,7 +938,7 @@ static void batadv_tp_start_kthread(struct batadv_tp_vars *tp_vars) ...@@ -935,7 +938,7 @@ static void batadv_tp_start_kthread(struct batadv_tp_vars *tp_vars)
} }
/** /**
* batadv_tp_start - start a new tp meter session * batadv_tp_start() - start a new tp meter session
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @dst: the receiver MAC address * @dst: the receiver MAC address
* @test_length: test length in milliseconds * @test_length: test length in milliseconds
...@@ -1060,7 +1063,7 @@ void batadv_tp_start(struct batadv_priv *bat_priv, const u8 *dst, ...@@ -1060,7 +1063,7 @@ void batadv_tp_start(struct batadv_priv *bat_priv, const u8 *dst,
} }
/** /**
* batadv_tp_stop - stop currently running tp meter session * batadv_tp_stop() - stop currently running tp meter session
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @dst: the receiver MAC address * @dst: the receiver MAC address
* @return_value: reason for tp meter session stop * @return_value: reason for tp meter session stop
...@@ -1092,7 +1095,7 @@ void batadv_tp_stop(struct batadv_priv *bat_priv, const u8 *dst, ...@@ -1092,7 +1095,7 @@ void batadv_tp_stop(struct batadv_priv *bat_priv, const u8 *dst,
} }
/** /**
* batadv_tp_reset_receiver_timer - reset the receiver shutdown timer * batadv_tp_reset_receiver_timer() - reset the receiver shutdown timer
* @tp_vars: the private data of the current TP meter session * @tp_vars: the private data of the current TP meter session
* *
* start the receiver shutdown timer or reset it if already started * start the receiver shutdown timer or reset it if already started
...@@ -1104,7 +1107,7 @@ static void batadv_tp_reset_receiver_timer(struct batadv_tp_vars *tp_vars) ...@@ -1104,7 +1107,7 @@ static void batadv_tp_reset_receiver_timer(struct batadv_tp_vars *tp_vars)
} }
/** /**
* batadv_tp_receiver_shutdown - stop a tp meter receiver when timeout is * batadv_tp_receiver_shutdown() - stop a tp meter receiver when timeout is
* reached without received ack * reached without received ack
* @t: address to timer_list inside tp_vars * @t: address to timer_list inside tp_vars
*/ */
...@@ -1149,7 +1152,7 @@ static void batadv_tp_receiver_shutdown(struct timer_list *t) ...@@ -1149,7 +1152,7 @@ static void batadv_tp_receiver_shutdown(struct timer_list *t)
} }
/** /**
* batadv_tp_send_ack - send an ACK packet * batadv_tp_send_ack() - send an ACK packet
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @dst: the mac address of the destination originator * @dst: the mac address of the destination originator
* @seq: the sequence number to ACK * @seq: the sequence number to ACK
...@@ -1221,7 +1224,7 @@ static int batadv_tp_send_ack(struct batadv_priv *bat_priv, const u8 *dst, ...@@ -1221,7 +1224,7 @@ static int batadv_tp_send_ack(struct batadv_priv *bat_priv, const u8 *dst,
} }
/** /**
* batadv_tp_handle_out_of_order - store an out of order packet * batadv_tp_handle_out_of_order() - store an out of order packet
* @tp_vars: the private data of the current TP meter session * @tp_vars: the private data of the current TP meter session
* @skb: the buffer containing the received packet * @skb: the buffer containing the received packet
* *
...@@ -1297,7 +1300,7 @@ static bool batadv_tp_handle_out_of_order(struct batadv_tp_vars *tp_vars, ...@@ -1297,7 +1300,7 @@ static bool batadv_tp_handle_out_of_order(struct batadv_tp_vars *tp_vars,
} }
/** /**
* batadv_tp_ack_unordered - update number received bytes in current stream * batadv_tp_ack_unordered() - update number received bytes in current stream
* without gaps * without gaps
* @tp_vars: the private data of the current TP meter session * @tp_vars: the private data of the current TP meter session
*/ */
...@@ -1330,7 +1333,7 @@ static void batadv_tp_ack_unordered(struct batadv_tp_vars *tp_vars) ...@@ -1330,7 +1333,7 @@ static void batadv_tp_ack_unordered(struct batadv_tp_vars *tp_vars)
} }
/** /**
* batadv_tp_init_recv - return matching or create new receiver tp_vars * batadv_tp_init_recv() - return matching or create new receiver tp_vars
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @icmp: received icmp tp msg * @icmp: received icmp tp msg
* *
...@@ -1383,7 +1386,7 @@ batadv_tp_init_recv(struct batadv_priv *bat_priv, ...@@ -1383,7 +1386,7 @@ batadv_tp_init_recv(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tp_recv_msg - process a single data message * batadv_tp_recv_msg() - process a single data message
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the buffer containing the received packet * @skb: the buffer containing the received packet
* *
...@@ -1468,7 +1471,7 @@ static void batadv_tp_recv_msg(struct batadv_priv *bat_priv, ...@@ -1468,7 +1471,7 @@ static void batadv_tp_recv_msg(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tp_meter_recv - main TP Meter receiving function * batadv_tp_meter_recv() - main TP Meter receiving function
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @skb: the buffer containing the received packet * @skb: the buffer containing the received packet
*/ */
...@@ -1494,7 +1497,7 @@ void batadv_tp_meter_recv(struct batadv_priv *bat_priv, struct sk_buff *skb) ...@@ -1494,7 +1497,7 @@ void batadv_tp_meter_recv(struct batadv_priv *bat_priv, struct sk_buff *skb)
} }
/** /**
* batadv_tp_meter_init - initialize global tp_meter structures * batadv_tp_meter_init() - initialize global tp_meter structures
*/ */
void __init batadv_tp_meter_init(void) void __init batadv_tp_meter_init(void)
{ {
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2012-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2012-2017 B.A.T.M.A.N. contributors:
* *
* Edo Monticelli, Antonio Quartulli * Edo Monticelli, Antonio Quartulli
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich, Antonio Quartulli * Marek Lindner, Simon Wunderlich, Antonio Quartulli
...@@ -20,14 +21,14 @@ ...@@ -20,14 +21,14 @@
#include <linux/atomic.h> #include <linux/atomic.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/bug.h> #include <linux/build_bug.h>
#include <linux/byteorder/generic.h> #include <linux/byteorder/generic.h>
#include <linux/cache.h> #include <linux/cache.h>
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/crc32c.h> #include <linux/crc32c.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/jhash.h> #include <linux/jhash.h>
...@@ -36,6 +37,7 @@ ...@@ -36,6 +37,7 @@
#include <linux/kref.h> #include <linux/kref.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/lockdep.h> #include <linux/lockdep.h>
#include <linux/net.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/netlink.h> #include <linux/netlink.h>
#include <linux/rculist.h> #include <linux/rculist.h>
...@@ -86,7 +88,7 @@ static void batadv_tt_global_del(struct batadv_priv *bat_priv, ...@@ -86,7 +88,7 @@ static void batadv_tt_global_del(struct batadv_priv *bat_priv,
bool roaming); bool roaming);
/** /**
* batadv_compare_tt - check if two TT entries are the same * batadv_compare_tt() - check if two TT entries are the same
* @node: the list element pointer of the first TT entry * @node: the list element pointer of the first TT entry
* @data2: pointer to the tt_common_entry of the second TT entry * @data2: pointer to the tt_common_entry of the second TT entry
* *
...@@ -105,7 +107,7 @@ static bool batadv_compare_tt(const struct hlist_node *node, const void *data2) ...@@ -105,7 +107,7 @@ static bool batadv_compare_tt(const struct hlist_node *node, const void *data2)
} }
/** /**
* batadv_choose_tt - return the index of the tt entry in the hash table * batadv_choose_tt() - return the index of the tt entry in the hash table
* @data: pointer to the tt_common_entry object to map * @data: pointer to the tt_common_entry object to map
* @size: the size of the hash table * @size: the size of the hash table
* *
...@@ -125,7 +127,7 @@ static inline u32 batadv_choose_tt(const void *data, u32 size) ...@@ -125,7 +127,7 @@ static inline u32 batadv_choose_tt(const void *data, u32 size)
} }
/** /**
* batadv_tt_hash_find - look for a client in the given hash table * batadv_tt_hash_find() - look for a client in the given hash table
* @hash: the hash table to search * @hash: the hash table to search
* @addr: the mac address of the client to look for * @addr: the mac address of the client to look for
* @vid: VLAN identifier * @vid: VLAN identifier
...@@ -170,7 +172,7 @@ batadv_tt_hash_find(struct batadv_hashtable *hash, const u8 *addr, ...@@ -170,7 +172,7 @@ batadv_tt_hash_find(struct batadv_hashtable *hash, const u8 *addr,
} }
/** /**
* batadv_tt_local_hash_find - search the local table for a given client * batadv_tt_local_hash_find() - search the local table for a given client
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the mac address of the client to look for * @addr: the mac address of the client to look for
* @vid: VLAN identifier * @vid: VLAN identifier
...@@ -195,7 +197,7 @@ batadv_tt_local_hash_find(struct batadv_priv *bat_priv, const u8 *addr, ...@@ -195,7 +197,7 @@ batadv_tt_local_hash_find(struct batadv_priv *bat_priv, const u8 *addr,
} }
/** /**
* batadv_tt_global_hash_find - search the global table for a given client * batadv_tt_global_hash_find() - search the global table for a given client
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the mac address of the client to look for * @addr: the mac address of the client to look for
* @vid: VLAN identifier * @vid: VLAN identifier
...@@ -220,7 +222,7 @@ batadv_tt_global_hash_find(struct batadv_priv *bat_priv, const u8 *addr, ...@@ -220,7 +222,7 @@ batadv_tt_global_hash_find(struct batadv_priv *bat_priv, const u8 *addr,
} }
/** /**
* batadv_tt_local_entry_free_rcu - free the tt_local_entry * batadv_tt_local_entry_free_rcu() - free the tt_local_entry
* @rcu: rcu pointer of the tt_local_entry * @rcu: rcu pointer of the tt_local_entry
*/ */
static void batadv_tt_local_entry_free_rcu(struct rcu_head *rcu) static void batadv_tt_local_entry_free_rcu(struct rcu_head *rcu)
...@@ -234,7 +236,7 @@ static void batadv_tt_local_entry_free_rcu(struct rcu_head *rcu) ...@@ -234,7 +236,7 @@ static void batadv_tt_local_entry_free_rcu(struct rcu_head *rcu)
} }
/** /**
* batadv_tt_local_entry_release - release tt_local_entry from lists and queue * batadv_tt_local_entry_release() - release tt_local_entry from lists and queue
* for free after rcu grace period * for free after rcu grace period
* @ref: kref pointer of the nc_node * @ref: kref pointer of the nc_node
*/ */
...@@ -251,7 +253,7 @@ static void batadv_tt_local_entry_release(struct kref *ref) ...@@ -251,7 +253,7 @@ static void batadv_tt_local_entry_release(struct kref *ref)
} }
/** /**
* batadv_tt_local_entry_put - decrement the tt_local_entry refcounter and * batadv_tt_local_entry_put() - decrement the tt_local_entry refcounter and
* possibly release it * possibly release it
* @tt_local_entry: tt_local_entry to be free'd * @tt_local_entry: tt_local_entry to be free'd
*/ */
...@@ -263,7 +265,7 @@ batadv_tt_local_entry_put(struct batadv_tt_local_entry *tt_local_entry) ...@@ -263,7 +265,7 @@ batadv_tt_local_entry_put(struct batadv_tt_local_entry *tt_local_entry)
} }
/** /**
* batadv_tt_global_entry_free_rcu - free the tt_global_entry * batadv_tt_global_entry_free_rcu() - free the tt_global_entry
* @rcu: rcu pointer of the tt_global_entry * @rcu: rcu pointer of the tt_global_entry
*/ */
static void batadv_tt_global_entry_free_rcu(struct rcu_head *rcu) static void batadv_tt_global_entry_free_rcu(struct rcu_head *rcu)
...@@ -277,8 +279,8 @@ static void batadv_tt_global_entry_free_rcu(struct rcu_head *rcu) ...@@ -277,8 +279,8 @@ static void batadv_tt_global_entry_free_rcu(struct rcu_head *rcu)
} }
/** /**
* batadv_tt_global_entry_release - release tt_global_entry from lists and queue * batadv_tt_global_entry_release() - release tt_global_entry from lists and
* for free after rcu grace period * queue for free after rcu grace period
* @ref: kref pointer of the nc_node * @ref: kref pointer of the nc_node
*/ */
static void batadv_tt_global_entry_release(struct kref *ref) static void batadv_tt_global_entry_release(struct kref *ref)
...@@ -294,7 +296,7 @@ static void batadv_tt_global_entry_release(struct kref *ref) ...@@ -294,7 +296,7 @@ static void batadv_tt_global_entry_release(struct kref *ref)
} }
/** /**
* batadv_tt_global_entry_put - decrement the tt_global_entry refcounter and * batadv_tt_global_entry_put() - decrement the tt_global_entry refcounter and
* possibly release it * possibly release it
* @tt_global_entry: tt_global_entry to be free'd * @tt_global_entry: tt_global_entry to be free'd
*/ */
...@@ -306,7 +308,7 @@ batadv_tt_global_entry_put(struct batadv_tt_global_entry *tt_global_entry) ...@@ -306,7 +308,7 @@ batadv_tt_global_entry_put(struct batadv_tt_global_entry *tt_global_entry)
} }
/** /**
* batadv_tt_global_hash_count - count the number of orig entries * batadv_tt_global_hash_count() - count the number of orig entries
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the mac address of the client to count entries for * @addr: the mac address of the client to count entries for
* @vid: VLAN identifier * @vid: VLAN identifier
...@@ -331,8 +333,8 @@ int batadv_tt_global_hash_count(struct batadv_priv *bat_priv, ...@@ -331,8 +333,8 @@ int batadv_tt_global_hash_count(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_local_size_mod - change the size by v of the local table identified * batadv_tt_local_size_mod() - change the size by v of the local table
* by vid * identified by vid
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @vid: the VLAN identifier of the sub-table to change * @vid: the VLAN identifier of the sub-table to change
* @v: the amount to sum to the local table size * @v: the amount to sum to the local table size
...@@ -352,8 +354,8 @@ static void batadv_tt_local_size_mod(struct batadv_priv *bat_priv, ...@@ -352,8 +354,8 @@ static void batadv_tt_local_size_mod(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_local_size_inc - increase by one the local table size for the given * batadv_tt_local_size_inc() - increase by one the local table size for the
* vid * given vid
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @vid: the VLAN identifier * @vid: the VLAN identifier
*/ */
...@@ -364,8 +366,8 @@ static void batadv_tt_local_size_inc(struct batadv_priv *bat_priv, ...@@ -364,8 +366,8 @@ static void batadv_tt_local_size_inc(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_local_size_dec - decrease by one the local table size for the given * batadv_tt_local_size_dec() - decrease by one the local table size for the
* vid * given vid
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @vid: the VLAN identifier * @vid: the VLAN identifier
*/ */
...@@ -376,7 +378,7 @@ static void batadv_tt_local_size_dec(struct batadv_priv *bat_priv, ...@@ -376,7 +378,7 @@ static void batadv_tt_local_size_dec(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_global_size_mod - change the size by v of the global table * batadv_tt_global_size_mod() - change the size by v of the global table
* for orig_node identified by vid * for orig_node identified by vid
* @orig_node: the originator for which the table has to be modified * @orig_node: the originator for which the table has to be modified
* @vid: the VLAN identifier * @vid: the VLAN identifier
...@@ -404,7 +406,7 @@ static void batadv_tt_global_size_mod(struct batadv_orig_node *orig_node, ...@@ -404,7 +406,7 @@ static void batadv_tt_global_size_mod(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_tt_global_size_inc - increase by one the global table size for the * batadv_tt_global_size_inc() - increase by one the global table size for the
* given vid * given vid
* @orig_node: the originator which global table size has to be decreased * @orig_node: the originator which global table size has to be decreased
* @vid: the vlan identifier * @vid: the vlan identifier
...@@ -416,7 +418,7 @@ static void batadv_tt_global_size_inc(struct batadv_orig_node *orig_node, ...@@ -416,7 +418,7 @@ static void batadv_tt_global_size_inc(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_tt_global_size_dec - decrease by one the global table size for the * batadv_tt_global_size_dec() - decrease by one the global table size for the
* given vid * given vid
* @orig_node: the originator which global table size has to be decreased * @orig_node: the originator which global table size has to be decreased
* @vid: the vlan identifier * @vid: the vlan identifier
...@@ -428,7 +430,7 @@ static void batadv_tt_global_size_dec(struct batadv_orig_node *orig_node, ...@@ -428,7 +430,7 @@ static void batadv_tt_global_size_dec(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_tt_orig_list_entry_free_rcu - free the orig_entry * batadv_tt_orig_list_entry_free_rcu() - free the orig_entry
* @rcu: rcu pointer of the orig_entry * @rcu: rcu pointer of the orig_entry
*/ */
static void batadv_tt_orig_list_entry_free_rcu(struct rcu_head *rcu) static void batadv_tt_orig_list_entry_free_rcu(struct rcu_head *rcu)
...@@ -441,7 +443,7 @@ static void batadv_tt_orig_list_entry_free_rcu(struct rcu_head *rcu) ...@@ -441,7 +443,7 @@ static void batadv_tt_orig_list_entry_free_rcu(struct rcu_head *rcu)
} }
/** /**
* batadv_tt_orig_list_entry_release - release tt orig entry from lists and * batadv_tt_orig_list_entry_release() - release tt orig entry from lists and
* queue for free after rcu grace period * queue for free after rcu grace period
* @ref: kref pointer of the tt orig entry * @ref: kref pointer of the tt orig entry
*/ */
...@@ -457,7 +459,7 @@ static void batadv_tt_orig_list_entry_release(struct kref *ref) ...@@ -457,7 +459,7 @@ static void batadv_tt_orig_list_entry_release(struct kref *ref)
} }
/** /**
* batadv_tt_orig_list_entry_put - decrement the tt orig entry refcounter and * batadv_tt_orig_list_entry_put() - decrement the tt orig entry refcounter and
* possibly release it * possibly release it
* @orig_entry: tt orig entry to be free'd * @orig_entry: tt orig entry to be free'd
*/ */
...@@ -468,7 +470,7 @@ batadv_tt_orig_list_entry_put(struct batadv_tt_orig_list_entry *orig_entry) ...@@ -468,7 +470,7 @@ batadv_tt_orig_list_entry_put(struct batadv_tt_orig_list_entry *orig_entry)
} }
/** /**
* batadv_tt_local_event - store a local TT event (ADD/DEL) * batadv_tt_local_event() - store a local TT event (ADD/DEL)
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tt_local_entry: the TT entry involved in the event * @tt_local_entry: the TT entry involved in the event
* @event_flags: flags to store in the event structure * @event_flags: flags to store in the event structure
...@@ -543,7 +545,7 @@ static void batadv_tt_local_event(struct batadv_priv *bat_priv, ...@@ -543,7 +545,7 @@ static void batadv_tt_local_event(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_len - compute length in bytes of given number of tt changes * batadv_tt_len() - compute length in bytes of given number of tt changes
* @changes_num: number of tt changes * @changes_num: number of tt changes
* *
* Return: computed length in bytes. * Return: computed length in bytes.
...@@ -554,7 +556,7 @@ static int batadv_tt_len(int changes_num) ...@@ -554,7 +556,7 @@ static int batadv_tt_len(int changes_num)
} }
/** /**
* batadv_tt_entries - compute the number of entries fitting in tt_len bytes * batadv_tt_entries() - compute the number of entries fitting in tt_len bytes
* @tt_len: available space * @tt_len: available space
* *
* Return: the number of entries. * Return: the number of entries.
...@@ -565,8 +567,8 @@ static u16 batadv_tt_entries(u16 tt_len) ...@@ -565,8 +567,8 @@ static u16 batadv_tt_entries(u16 tt_len)
} }
/** /**
* batadv_tt_local_table_transmit_size - calculates the local translation table * batadv_tt_local_table_transmit_size() - calculates the local translation
* size when transmitted over the air * table size when transmitted over the air
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Return: local translation table size in bytes. * Return: local translation table size in bytes.
...@@ -625,7 +627,7 @@ static void batadv_tt_global_free(struct batadv_priv *bat_priv, ...@@ -625,7 +627,7 @@ static void batadv_tt_global_free(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_local_add - add a new client to the local table or update an * batadv_tt_local_add() - add a new client to the local table or update an
* existing client * existing client
* @soft_iface: netdev struct of the mesh interface * @soft_iface: netdev struct of the mesh interface
* @addr: the mac address of the client to add * @addr: the mac address of the client to add
...@@ -830,7 +832,7 @@ bool batadv_tt_local_add(struct net_device *soft_iface, const u8 *addr, ...@@ -830,7 +832,7 @@ bool batadv_tt_local_add(struct net_device *soft_iface, const u8 *addr,
} }
/** /**
* batadv_tt_prepare_tvlv_global_data - prepare the TVLV TT header to send * batadv_tt_prepare_tvlv_global_data() - prepare the TVLV TT header to send
* within a TT Response directed to another node * within a TT Response directed to another node
* @orig_node: originator for which the TT data has to be prepared * @orig_node: originator for which the TT data has to be prepared
* @tt_data: uninitialised pointer to the address of the TVLV buffer * @tt_data: uninitialised pointer to the address of the TVLV buffer
...@@ -903,8 +905,8 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node, ...@@ -903,8 +905,8 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_tt_prepare_tvlv_local_data - allocate and prepare the TT TVLV for this * batadv_tt_prepare_tvlv_local_data() - allocate and prepare the TT TVLV for
* node * this node
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tt_data: uninitialised pointer to the address of the TVLV buffer * @tt_data: uninitialised pointer to the address of the TVLV buffer
* @tt_change: uninitialised pointer to the address of the area where the TT * @tt_change: uninitialised pointer to the address of the area where the TT
...@@ -977,8 +979,8 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv, ...@@ -977,8 +979,8 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_tvlv_container_update - update the translation table tvlv container * batadv_tt_tvlv_container_update() - update the translation table tvlv
* after local tt changes have been committed * container after local tt changes have been committed
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
static void batadv_tt_tvlv_container_update(struct batadv_priv *bat_priv) static void batadv_tt_tvlv_container_update(struct batadv_priv *bat_priv)
...@@ -1053,6 +1055,14 @@ static void batadv_tt_tvlv_container_update(struct batadv_priv *bat_priv) ...@@ -1053,6 +1055,14 @@ static void batadv_tt_tvlv_container_update(struct batadv_priv *bat_priv)
} }
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/**
* batadv_tt_local_seq_print_text() - Print the local tt table in a seq file
* @seq: seq file to print on
* @offset: not used
*
* Return: always 0
*/
int batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset) int batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset)
{ {
struct net_device *net_dev = (struct net_device *)seq->private; struct net_device *net_dev = (struct net_device *)seq->private;
...@@ -1123,7 +1133,7 @@ int batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset) ...@@ -1123,7 +1133,7 @@ int batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset)
#endif #endif
/** /**
* batadv_tt_local_dump_entry - Dump one TT local entry into a message * batadv_tt_local_dump_entry() - Dump one TT local entry into a message
* @msg :Netlink message to dump into * @msg :Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -1179,7 +1189,7 @@ batadv_tt_local_dump_entry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -1179,7 +1189,7 @@ batadv_tt_local_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_tt_local_dump_bucket - Dump one TT local bucket into a message * batadv_tt_local_dump_bucket() - Dump one TT local bucket into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -1216,7 +1226,7 @@ batadv_tt_local_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -1216,7 +1226,7 @@ batadv_tt_local_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_tt_local_dump - Dump TT local entries into a message * batadv_tt_local_dump() - Dump TT local entries into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @cb: Parameters from query * @cb: Parameters from query
* *
...@@ -1300,7 +1310,7 @@ batadv_tt_local_set_pending(struct batadv_priv *bat_priv, ...@@ -1300,7 +1310,7 @@ batadv_tt_local_set_pending(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_local_remove - logically remove an entry from the local table * batadv_tt_local_remove() - logically remove an entry from the local table
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the MAC address of the client to remove * @addr: the MAC address of the client to remove
* @vid: VLAN identifier * @vid: VLAN identifier
...@@ -1362,7 +1372,7 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr, ...@@ -1362,7 +1372,7 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr,
} }
/** /**
* batadv_tt_local_purge_list - purge inactive tt local entries * batadv_tt_local_purge_list() - purge inactive tt local entries
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @head: pointer to the list containing the local tt entries * @head: pointer to the list containing the local tt entries
* @timeout: parameter deciding whether a given tt local entry is considered * @timeout: parameter deciding whether a given tt local entry is considered
...@@ -1397,7 +1407,7 @@ static void batadv_tt_local_purge_list(struct batadv_priv *bat_priv, ...@@ -1397,7 +1407,7 @@ static void batadv_tt_local_purge_list(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_local_purge - purge inactive tt local entries * batadv_tt_local_purge() - purge inactive tt local entries
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @timeout: parameter deciding whether a given tt local entry is considered * @timeout: parameter deciding whether a given tt local entry is considered
* inactive or not * inactive or not
...@@ -1490,7 +1500,7 @@ static void batadv_tt_changes_list_free(struct batadv_priv *bat_priv) ...@@ -1490,7 +1500,7 @@ static void batadv_tt_changes_list_free(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_tt_global_orig_entry_find - find a TT orig_list_entry * batadv_tt_global_orig_entry_find() - find a TT orig_list_entry
* @entry: the TT global entry where the orig_list_entry has to be * @entry: the TT global entry where the orig_list_entry has to be
* extracted from * extracted from
* @orig_node: the originator for which the orig_list_entry has to be found * @orig_node: the originator for which the orig_list_entry has to be found
...@@ -1524,8 +1534,8 @@ batadv_tt_global_orig_entry_find(const struct batadv_tt_global_entry *entry, ...@@ -1524,8 +1534,8 @@ batadv_tt_global_orig_entry_find(const struct batadv_tt_global_entry *entry,
} }
/** /**
* batadv_tt_global_entry_has_orig - check if a TT global entry is also handled * batadv_tt_global_entry_has_orig() - check if a TT global entry is also
* by a given originator * handled by a given originator
* @entry: the TT global entry to check * @entry: the TT global entry to check
* @orig_node: the originator to search in the list * @orig_node: the originator to search in the list
* *
...@@ -1550,7 +1560,7 @@ batadv_tt_global_entry_has_orig(const struct batadv_tt_global_entry *entry, ...@@ -1550,7 +1560,7 @@ batadv_tt_global_entry_has_orig(const struct batadv_tt_global_entry *entry,
} }
/** /**
* batadv_tt_global_sync_flags - update TT sync flags * batadv_tt_global_sync_flags() - update TT sync flags
* @tt_global: the TT global entry to update sync flags in * @tt_global: the TT global entry to update sync flags in
* *
* Updates the sync flag bits in the tt_global flag attribute with a logical * Updates the sync flag bits in the tt_global flag attribute with a logical
...@@ -1574,7 +1584,7 @@ batadv_tt_global_sync_flags(struct batadv_tt_global_entry *tt_global) ...@@ -1574,7 +1584,7 @@ batadv_tt_global_sync_flags(struct batadv_tt_global_entry *tt_global)
} }
/** /**
* batadv_tt_global_orig_entry_add - add or update a TT orig entry * batadv_tt_global_orig_entry_add() - add or update a TT orig entry
* @tt_global: the TT global entry to add an orig entry in * @tt_global: the TT global entry to add an orig entry in
* @orig_node: the originator to add an orig entry for * @orig_node: the originator to add an orig entry for
* @ttvn: translation table version number of this changeset * @ttvn: translation table version number of this changeset
...@@ -1624,7 +1634,7 @@ batadv_tt_global_orig_entry_add(struct batadv_tt_global_entry *tt_global, ...@@ -1624,7 +1634,7 @@ batadv_tt_global_orig_entry_add(struct batadv_tt_global_entry *tt_global,
} }
/** /**
* batadv_tt_global_add - add a new TT global entry or update an existing one * batadv_tt_global_add() - add a new TT global entry or update an existing one
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: the originator announcing the client * @orig_node: the originator announcing the client
* @tt_addr: the mac address of the non-mesh client * @tt_addr: the mac address of the non-mesh client
...@@ -1796,7 +1806,7 @@ static bool batadv_tt_global_add(struct batadv_priv *bat_priv, ...@@ -1796,7 +1806,7 @@ static bool batadv_tt_global_add(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_transtable_best_orig - Get best originator list entry from tt entry * batadv_transtable_best_orig() - Get best originator list entry from tt entry
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tt_global_entry: global translation table entry to be analyzed * @tt_global_entry: global translation table entry to be analyzed
* *
...@@ -1842,8 +1852,8 @@ batadv_transtable_best_orig(struct batadv_priv *bat_priv, ...@@ -1842,8 +1852,8 @@ batadv_transtable_best_orig(struct batadv_priv *bat_priv,
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** /**
* batadv_tt_global_print_entry - print all orig nodes who announce the address * batadv_tt_global_print_entry() - print all orig nodes who announce the
* for this global entry * address for this global entry
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tt_global_entry: global translation table entry to be printed * @tt_global_entry: global translation table entry to be printed
* @seq: debugfs table seq_file struct * @seq: debugfs table seq_file struct
...@@ -1925,6 +1935,13 @@ batadv_tt_global_print_entry(struct batadv_priv *bat_priv, ...@@ -1925,6 +1935,13 @@ batadv_tt_global_print_entry(struct batadv_priv *bat_priv,
} }
} }
/**
* batadv_tt_global_seq_print_text() - Print the global tt table in a seq file
* @seq: seq file to print on
* @offset: not used
*
* Return: always 0
*/
int batadv_tt_global_seq_print_text(struct seq_file *seq, void *offset) int batadv_tt_global_seq_print_text(struct seq_file *seq, void *offset)
{ {
struct net_device *net_dev = (struct net_device *)seq->private; struct net_device *net_dev = (struct net_device *)seq->private;
...@@ -1967,7 +1984,7 @@ int batadv_tt_global_seq_print_text(struct seq_file *seq, void *offset) ...@@ -1967,7 +1984,7 @@ int batadv_tt_global_seq_print_text(struct seq_file *seq, void *offset)
#endif #endif
/** /**
* batadv_tt_global_dump_subentry - Dump all TT local entries into a message * batadv_tt_global_dump_subentry() - Dump all TT local entries into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -2028,7 +2045,7 @@ batadv_tt_global_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2028,7 +2045,7 @@ batadv_tt_global_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_tt_global_dump_entry - Dump one TT global entry into a message * batadv_tt_global_dump_entry() - Dump one TT global entry into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -2073,7 +2090,7 @@ batadv_tt_global_dump_entry(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2073,7 +2090,7 @@ batadv_tt_global_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_tt_global_dump_bucket - Dump one TT local bucket into a message * batadv_tt_global_dump_bucket() - Dump one TT local bucket into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @portid: Port making netlink request * @portid: Port making netlink request
* @seq: Sequence number of netlink message * @seq: Sequence number of netlink message
...@@ -2112,7 +2129,7 @@ batadv_tt_global_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq, ...@@ -2112,7 +2129,7 @@ batadv_tt_global_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
} }
/** /**
* batadv_tt_global_dump - Dump TT global entries into a message * batadv_tt_global_dump() - Dump TT global entries into a message
* @msg: Netlink message to dump into * @msg: Netlink message to dump into
* @cb: Parameters from query * @cb: Parameters from query
* *
...@@ -2180,7 +2197,7 @@ int batadv_tt_global_dump(struct sk_buff *msg, struct netlink_callback *cb) ...@@ -2180,7 +2197,7 @@ int batadv_tt_global_dump(struct sk_buff *msg, struct netlink_callback *cb)
} }
/** /**
* _batadv_tt_global_del_orig_entry - remove and free an orig_entry * _batadv_tt_global_del_orig_entry() - remove and free an orig_entry
* @tt_global_entry: the global entry to remove the orig_entry from * @tt_global_entry: the global entry to remove the orig_entry from
* @orig_entry: the orig entry to remove and free * @orig_entry: the orig entry to remove and free
* *
...@@ -2222,7 +2239,7 @@ batadv_tt_global_del_orig_list(struct batadv_tt_global_entry *tt_global_entry) ...@@ -2222,7 +2239,7 @@ batadv_tt_global_del_orig_list(struct batadv_tt_global_entry *tt_global_entry)
} }
/** /**
* batadv_tt_global_del_orig_node - remove orig_node from a global tt entry * batadv_tt_global_del_orig_node() - remove orig_node from a global tt entry
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tt_global_entry: the global entry to remove the orig_node from * @tt_global_entry: the global entry to remove the orig_node from
* @orig_node: the originator announcing the client * @orig_node: the originator announcing the client
...@@ -2301,7 +2318,7 @@ batadv_tt_global_del_roaming(struct batadv_priv *bat_priv, ...@@ -2301,7 +2318,7 @@ batadv_tt_global_del_roaming(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_global_del - remove a client from the global table * batadv_tt_global_del() - remove a client from the global table
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: an originator serving this client * @orig_node: an originator serving this client
* @addr: the mac address of the client * @addr: the mac address of the client
...@@ -2367,8 +2384,8 @@ static void batadv_tt_global_del(struct batadv_priv *bat_priv, ...@@ -2367,8 +2384,8 @@ static void batadv_tt_global_del(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_global_del_orig - remove all the TT global entries belonging to the * batadv_tt_global_del_orig() - remove all the TT global entries belonging to
* given originator matching the provided vid * the given originator matching the provided vid
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: the originator owning the entries to remove * @orig_node: the originator owning the entries to remove
* @match_vid: the VLAN identifier to match. If negative all the entries will be * @match_vid: the VLAN identifier to match. If negative all the entries will be
...@@ -2539,7 +2556,7 @@ _batadv_is_ap_isolated(struct batadv_tt_local_entry *tt_local_entry, ...@@ -2539,7 +2556,7 @@ _batadv_is_ap_isolated(struct batadv_tt_local_entry *tt_local_entry,
} }
/** /**
* batadv_transtable_search - get the mesh destination for a given client * batadv_transtable_search() - get the mesh destination for a given client
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @src: mac address of the source client * @src: mac address of the source client
* @addr: mac address of the destination client * @addr: mac address of the destination client
...@@ -2599,7 +2616,7 @@ struct batadv_orig_node *batadv_transtable_search(struct batadv_priv *bat_priv, ...@@ -2599,7 +2616,7 @@ struct batadv_orig_node *batadv_transtable_search(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_global_crc - calculates the checksum of the local table belonging * batadv_tt_global_crc() - calculates the checksum of the local table belonging
* to the given orig_node * to the given orig_node
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: originator for which the CRC should be computed * @orig_node: originator for which the CRC should be computed
...@@ -2694,7 +2711,7 @@ static u32 batadv_tt_global_crc(struct batadv_priv *bat_priv, ...@@ -2694,7 +2711,7 @@ static u32 batadv_tt_global_crc(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_local_crc - calculates the checksum of the local table * batadv_tt_local_crc() - calculates the checksum of the local table
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @vid: VLAN identifier for which the CRC32 has to be computed * @vid: VLAN identifier for which the CRC32 has to be computed
* *
...@@ -2751,7 +2768,7 @@ static u32 batadv_tt_local_crc(struct batadv_priv *bat_priv, ...@@ -2751,7 +2768,7 @@ static u32 batadv_tt_local_crc(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_req_node_release - free tt_req node entry * batadv_tt_req_node_release() - free tt_req node entry
* @ref: kref pointer of the tt req_node entry * @ref: kref pointer of the tt req_node entry
*/ */
static void batadv_tt_req_node_release(struct kref *ref) static void batadv_tt_req_node_release(struct kref *ref)
...@@ -2764,7 +2781,7 @@ static void batadv_tt_req_node_release(struct kref *ref) ...@@ -2764,7 +2781,7 @@ static void batadv_tt_req_node_release(struct kref *ref)
} }
/** /**
* batadv_tt_req_node_put - decrement the tt_req_node refcounter and * batadv_tt_req_node_put() - decrement the tt_req_node refcounter and
* possibly release it * possibly release it
* @tt_req_node: tt_req_node to be free'd * @tt_req_node: tt_req_node to be free'd
*/ */
...@@ -2826,7 +2843,7 @@ static void batadv_tt_req_purge(struct batadv_priv *bat_priv) ...@@ -2826,7 +2843,7 @@ static void batadv_tt_req_purge(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_tt_req_node_new - search and possibly create a tt_req_node object * batadv_tt_req_node_new() - search and possibly create a tt_req_node object
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node this request is being issued for * @orig_node: orig node this request is being issued for
* *
...@@ -2863,7 +2880,7 @@ batadv_tt_req_node_new(struct batadv_priv *bat_priv, ...@@ -2863,7 +2880,7 @@ batadv_tt_req_node_new(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_local_valid - verify that given tt entry is a valid one * batadv_tt_local_valid() - verify that given tt entry is a valid one
* @entry_ptr: to be checked local tt entry * @entry_ptr: to be checked local tt entry
* @data_ptr: not used but definition required to satisfy the callback prototype * @data_ptr: not used but definition required to satisfy the callback prototype
* *
...@@ -2897,7 +2914,7 @@ static bool batadv_tt_global_valid(const void *entry_ptr, ...@@ -2897,7 +2914,7 @@ static bool batadv_tt_global_valid(const void *entry_ptr,
} }
/** /**
* batadv_tt_tvlv_generate - fill the tvlv buff with the tt entries from the * batadv_tt_tvlv_generate() - fill the tvlv buff with the tt entries from the
* specified tt hash * specified tt hash
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @hash: hash table containing the tt entries * @hash: hash table containing the tt entries
...@@ -2948,7 +2965,7 @@ static void batadv_tt_tvlv_generate(struct batadv_priv *bat_priv, ...@@ -2948,7 +2965,7 @@ static void batadv_tt_tvlv_generate(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_global_check_crc - check if all the CRCs are correct * batadv_tt_global_check_crc() - check if all the CRCs are correct
* @orig_node: originator for which the CRCs have to be checked * @orig_node: originator for which the CRCs have to be checked
* @tt_vlan: pointer to the first tvlv VLAN entry * @tt_vlan: pointer to the first tvlv VLAN entry
* @num_vlan: number of tvlv VLAN entries * @num_vlan: number of tvlv VLAN entries
...@@ -3005,7 +3022,7 @@ static bool batadv_tt_global_check_crc(struct batadv_orig_node *orig_node, ...@@ -3005,7 +3022,7 @@ static bool batadv_tt_global_check_crc(struct batadv_orig_node *orig_node,
} }
/** /**
* batadv_tt_local_update_crc - update all the local CRCs * batadv_tt_local_update_crc() - update all the local CRCs
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
static void batadv_tt_local_update_crc(struct batadv_priv *bat_priv) static void batadv_tt_local_update_crc(struct batadv_priv *bat_priv)
...@@ -3021,7 +3038,7 @@ static void batadv_tt_local_update_crc(struct batadv_priv *bat_priv) ...@@ -3021,7 +3038,7 @@ static void batadv_tt_local_update_crc(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_tt_global_update_crc - update all the global CRCs for this orig_node * batadv_tt_global_update_crc() - update all the global CRCs for this orig_node
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: the orig_node for which the CRCs have to be updated * @orig_node: the orig_node for which the CRCs have to be updated
*/ */
...@@ -3048,7 +3065,7 @@ static void batadv_tt_global_update_crc(struct batadv_priv *bat_priv, ...@@ -3048,7 +3065,7 @@ static void batadv_tt_global_update_crc(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_send_tt_request - send a TT Request message to a given node * batadv_send_tt_request() - send a TT Request message to a given node
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @dst_orig_node: the destination of the message * @dst_orig_node: the destination of the message
* @ttvn: the version number that the source of the message is looking for * @ttvn: the version number that the source of the message is looking for
...@@ -3137,7 +3154,7 @@ static bool batadv_send_tt_request(struct batadv_priv *bat_priv, ...@@ -3137,7 +3154,7 @@ static bool batadv_send_tt_request(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_send_other_tt_response - send reply to tt request concerning another * batadv_send_other_tt_response() - send reply to tt request concerning another
* node's translation table * node's translation table
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tt_data: tt data containing the tt request information * @tt_data: tt data containing the tt request information
...@@ -3270,8 +3287,8 @@ static bool batadv_send_other_tt_response(struct batadv_priv *bat_priv, ...@@ -3270,8 +3287,8 @@ static bool batadv_send_other_tt_response(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_send_my_tt_response - send reply to tt request concerning this node's * batadv_send_my_tt_response() - send reply to tt request concerning this
* translation table * node's translation table
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tt_data: tt data containing the tt request information * @tt_data: tt data containing the tt request information
* @req_src: mac address of tt request sender * @req_src: mac address of tt request sender
...@@ -3388,7 +3405,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv, ...@@ -3388,7 +3405,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_send_tt_response - send reply to tt request * batadv_send_tt_response() - send reply to tt request
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tt_data: tt data containing the tt request information * @tt_data: tt data containing the tt request information
* @req_src: mac address of tt request sender * @req_src: mac address of tt request sender
...@@ -3484,7 +3501,7 @@ static void batadv_tt_update_changes(struct batadv_priv *bat_priv, ...@@ -3484,7 +3501,7 @@ static void batadv_tt_update_changes(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_is_my_client - check if a client is served by the local node * batadv_is_my_client() - check if a client is served by the local node
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the mac address of the client to check * @addr: the mac address of the client to check
* @vid: VLAN identifier * @vid: VLAN identifier
...@@ -3514,7 +3531,7 @@ bool batadv_is_my_client(struct batadv_priv *bat_priv, const u8 *addr, ...@@ -3514,7 +3531,7 @@ bool batadv_is_my_client(struct batadv_priv *bat_priv, const u8 *addr,
} }
/** /**
* batadv_handle_tt_response - process incoming tt reply * batadv_handle_tt_response() - process incoming tt reply
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tt_data: tt data containing the tt request information * @tt_data: tt data containing the tt request information
* @resp_src: mac address of tt reply sender * @resp_src: mac address of tt reply sender
...@@ -3607,7 +3624,7 @@ static void batadv_tt_roam_purge(struct batadv_priv *bat_priv) ...@@ -3607,7 +3624,7 @@ static void batadv_tt_roam_purge(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_tt_check_roam_count - check if a client has roamed too frequently * batadv_tt_check_roam_count() - check if a client has roamed too frequently
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @client: mac address of the roaming client * @client: mac address of the roaming client
* *
...@@ -3662,7 +3679,7 @@ static bool batadv_tt_check_roam_count(struct batadv_priv *bat_priv, u8 *client) ...@@ -3662,7 +3679,7 @@ static bool batadv_tt_check_roam_count(struct batadv_priv *bat_priv, u8 *client)
} }
/** /**
* batadv_send_roam_adv - send a roaming advertisement message * batadv_send_roam_adv() - send a roaming advertisement message
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @client: mac address of the roaming client * @client: mac address of the roaming client
* @vid: VLAN identifier * @vid: VLAN identifier
...@@ -3727,6 +3744,10 @@ static void batadv_tt_purge(struct work_struct *work) ...@@ -3727,6 +3744,10 @@ static void batadv_tt_purge(struct work_struct *work)
msecs_to_jiffies(BATADV_TT_WORK_PERIOD)); msecs_to_jiffies(BATADV_TT_WORK_PERIOD));
} }
/**
* batadv_tt_free() - Free translation table of soft interface
* @bat_priv: the bat priv with all the soft interface information
*/
void batadv_tt_free(struct batadv_priv *bat_priv) void batadv_tt_free(struct batadv_priv *bat_priv)
{ {
batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_TT, 1); batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_TT, 1);
...@@ -3744,7 +3765,7 @@ void batadv_tt_free(struct batadv_priv *bat_priv) ...@@ -3744,7 +3765,7 @@ void batadv_tt_free(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_tt_local_set_flags - set or unset the specified flags on the local * batadv_tt_local_set_flags() - set or unset the specified flags on the local
* table and possibly count them in the TT size * table and possibly count them in the TT size
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @flags: the flag to switch * @flags: the flag to switch
...@@ -3830,7 +3851,7 @@ static void batadv_tt_local_purge_pending_clients(struct batadv_priv *bat_priv) ...@@ -3830,7 +3851,7 @@ static void batadv_tt_local_purge_pending_clients(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_tt_local_commit_changes_nolock - commit all pending local tt changes * batadv_tt_local_commit_changes_nolock() - commit all pending local tt changes
* which have been queued in the time since the last commit * which have been queued in the time since the last commit
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
...@@ -3863,7 +3884,7 @@ static void batadv_tt_local_commit_changes_nolock(struct batadv_priv *bat_priv) ...@@ -3863,7 +3884,7 @@ static void batadv_tt_local_commit_changes_nolock(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_tt_local_commit_changes - commit all pending local tt changes which * batadv_tt_local_commit_changes() - commit all pending local tt changes which
* have been queued in the time since the last commit * have been queued in the time since the last commit
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
*/ */
...@@ -3874,6 +3895,15 @@ void batadv_tt_local_commit_changes(struct batadv_priv *bat_priv) ...@@ -3874,6 +3895,15 @@ void batadv_tt_local_commit_changes(struct batadv_priv *bat_priv)
spin_unlock_bh(&bat_priv->tt.commit_lock); spin_unlock_bh(&bat_priv->tt.commit_lock);
} }
/**
* batadv_is_ap_isolated() - Check if packet from upper layer should be dropped
* @bat_priv: the bat priv with all the soft interface information
* @src: source mac address of packet
* @dst: destination mac address of packet
* @vid: vlan id of packet
*
* Return: true when src+dst(+vid) pair should be isolated, false otherwise
*/
bool batadv_is_ap_isolated(struct batadv_priv *bat_priv, u8 *src, u8 *dst, bool batadv_is_ap_isolated(struct batadv_priv *bat_priv, u8 *src, u8 *dst,
unsigned short vid) unsigned short vid)
{ {
...@@ -3909,7 +3939,7 @@ bool batadv_is_ap_isolated(struct batadv_priv *bat_priv, u8 *src, u8 *dst, ...@@ -3909,7 +3939,7 @@ bool batadv_is_ap_isolated(struct batadv_priv *bat_priv, u8 *src, u8 *dst,
} }
/** /**
* batadv_tt_update_orig - update global translation table with new tt * batadv_tt_update_orig() - update global translation table with new tt
* information received via ogms * information received via ogms
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig_node: the orig_node of the ogm * @orig_node: the orig_node of the ogm
...@@ -3994,7 +4024,7 @@ static void batadv_tt_update_orig(struct batadv_priv *bat_priv, ...@@ -3994,7 +4024,7 @@ static void batadv_tt_update_orig(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_global_client_is_roaming - check if a client is marked as roaming * batadv_tt_global_client_is_roaming() - check if a client is marked as roaming
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the mac address of the client to check * @addr: the mac address of the client to check
* @vid: VLAN identifier * @vid: VLAN identifier
...@@ -4020,7 +4050,7 @@ bool batadv_tt_global_client_is_roaming(struct batadv_priv *bat_priv, ...@@ -4020,7 +4050,7 @@ bool batadv_tt_global_client_is_roaming(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_local_client_is_roaming - tells whether the client is roaming * batadv_tt_local_client_is_roaming() - tells whether the client is roaming
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the mac address of the local client to query * @addr: the mac address of the local client to query
* @vid: VLAN identifier * @vid: VLAN identifier
...@@ -4045,6 +4075,15 @@ bool batadv_tt_local_client_is_roaming(struct batadv_priv *bat_priv, ...@@ -4045,6 +4075,15 @@ bool batadv_tt_local_client_is_roaming(struct batadv_priv *bat_priv,
return ret; return ret;
} }
/**
* batadv_tt_add_temporary_global_entry() - Add temporary entry to global TT
* @bat_priv: the bat priv with all the soft interface information
* @orig_node: orig node which the temporary entry should be associated with
* @addr: mac address of the client
* @vid: VLAN id of the new temporary global translation table
*
* Return: true when temporary tt entry could be added, false otherwise
*/
bool batadv_tt_add_temporary_global_entry(struct batadv_priv *bat_priv, bool batadv_tt_add_temporary_global_entry(struct batadv_priv *bat_priv,
struct batadv_orig_node *orig_node, struct batadv_orig_node *orig_node,
const unsigned char *addr, const unsigned char *addr,
...@@ -4069,7 +4108,7 @@ bool batadv_tt_add_temporary_global_entry(struct batadv_priv *bat_priv, ...@@ -4069,7 +4108,7 @@ bool batadv_tt_add_temporary_global_entry(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_local_resize_to_mtu - resize the local translation table fit the * batadv_tt_local_resize_to_mtu() - resize the local translation table fit the
* maximum packet size that can be transported through the mesh * maximum packet size that can be transported through the mesh
* @soft_iface: netdev struct of the mesh interface * @soft_iface: netdev struct of the mesh interface
* *
...@@ -4110,7 +4149,7 @@ void batadv_tt_local_resize_to_mtu(struct net_device *soft_iface) ...@@ -4110,7 +4149,7 @@ void batadv_tt_local_resize_to_mtu(struct net_device *soft_iface)
} }
/** /**
* batadv_tt_tvlv_ogm_handler_v1 - process incoming tt tvlv container * batadv_tt_tvlv_ogm_handler_v1() - process incoming tt tvlv container
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @orig: the orig_node of the ogm * @orig: the orig_node of the ogm
* @flags: flags indicating the tvlv state (see batadv_tvlv_handler_flags) * @flags: flags indicating the tvlv state (see batadv_tvlv_handler_flags)
...@@ -4149,7 +4188,7 @@ static void batadv_tt_tvlv_ogm_handler_v1(struct batadv_priv *bat_priv, ...@@ -4149,7 +4188,7 @@ static void batadv_tt_tvlv_ogm_handler_v1(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_tvlv_unicast_handler_v1 - process incoming (unicast) tt tvlv * batadv_tt_tvlv_unicast_handler_v1() - process incoming (unicast) tt tvlv
* container * container
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @src: mac address of tt tvlv sender * @src: mac address of tt tvlv sender
...@@ -4231,7 +4270,8 @@ static int batadv_tt_tvlv_unicast_handler_v1(struct batadv_priv *bat_priv, ...@@ -4231,7 +4270,8 @@ static int batadv_tt_tvlv_unicast_handler_v1(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_roam_tvlv_unicast_handler_v1 - process incoming tt roam tvlv container * batadv_roam_tvlv_unicast_handler_v1() - process incoming tt roam tvlv
* container
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @src: mac address of tt tvlv sender * @src: mac address of tt tvlv sender
* @dst: mac address of tt tvlv recipient * @dst: mac address of tt tvlv recipient
...@@ -4281,7 +4321,7 @@ static int batadv_roam_tvlv_unicast_handler_v1(struct batadv_priv *bat_priv, ...@@ -4281,7 +4321,7 @@ static int batadv_roam_tvlv_unicast_handler_v1(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_init - initialise the translation table internals * batadv_tt_init() - initialise the translation table internals
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
* Return: 0 on success or negative error number in case of failure. * Return: 0 on success or negative error number in case of failure.
...@@ -4317,7 +4357,7 @@ int batadv_tt_init(struct batadv_priv *bat_priv) ...@@ -4317,7 +4357,7 @@ int batadv_tt_init(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_tt_global_is_isolated - check if a client is marked as isolated * batadv_tt_global_is_isolated() - check if a client is marked as isolated
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @addr: the mac address of the client * @addr: the mac address of the client
* @vid: the identifier of the VLAN where this client is connected * @vid: the identifier of the VLAN where this client is connected
...@@ -4343,7 +4383,7 @@ bool batadv_tt_global_is_isolated(struct batadv_priv *bat_priv, ...@@ -4343,7 +4383,7 @@ bool batadv_tt_global_is_isolated(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tt_cache_init - Initialize tt memory object cache * batadv_tt_cache_init() - Initialize tt memory object cache
* *
* Return: 0 on success or negative error number in case of failure. * Return: 0 on success or negative error number in case of failure.
*/ */
...@@ -4412,7 +4452,7 @@ int __init batadv_tt_cache_init(void) ...@@ -4412,7 +4452,7 @@ int __init batadv_tt_cache_init(void)
} }
/** /**
* batadv_tt_cache_destroy - Destroy tt memory object cache * batadv_tt_cache_destroy() - Destroy tt memory object cache
*/ */
void batadv_tt_cache_destroy(void) void batadv_tt_cache_destroy(void)
{ {
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich, Antonio Quartulli * Marek Lindner, Simon Wunderlich, Antonio Quartulli
......
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -19,7 +20,7 @@ ...@@ -19,7 +20,7 @@
#include <linux/byteorder/generic.h> #include <linux/byteorder/generic.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/fs.h> #include <linux/gfp.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/kref.h> #include <linux/kref.h>
...@@ -42,7 +43,7 @@ ...@@ -42,7 +43,7 @@
#include "tvlv.h" #include "tvlv.h"
/** /**
* batadv_tvlv_handler_release - release tvlv handler from lists and queue for * batadv_tvlv_handler_release() - release tvlv handler from lists and queue for
* free after rcu grace period * free after rcu grace period
* @ref: kref pointer of the tvlv * @ref: kref pointer of the tvlv
*/ */
...@@ -55,7 +56,7 @@ static void batadv_tvlv_handler_release(struct kref *ref) ...@@ -55,7 +56,7 @@ static void batadv_tvlv_handler_release(struct kref *ref)
} }
/** /**
* batadv_tvlv_handler_put - decrement the tvlv container refcounter and * batadv_tvlv_handler_put() - decrement the tvlv container refcounter and
* possibly release it * possibly release it
* @tvlv_handler: the tvlv handler to free * @tvlv_handler: the tvlv handler to free
*/ */
...@@ -65,7 +66,7 @@ static void batadv_tvlv_handler_put(struct batadv_tvlv_handler *tvlv_handler) ...@@ -65,7 +66,7 @@ static void batadv_tvlv_handler_put(struct batadv_tvlv_handler *tvlv_handler)
} }
/** /**
* batadv_tvlv_handler_get - retrieve tvlv handler from the tvlv handler list * batadv_tvlv_handler_get() - retrieve tvlv handler from the tvlv handler list
* based on the provided type and version (both need to match) * based on the provided type and version (both need to match)
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @type: tvlv handler type to look for * @type: tvlv handler type to look for
...@@ -99,7 +100,7 @@ batadv_tvlv_handler_get(struct batadv_priv *bat_priv, u8 type, u8 version) ...@@ -99,7 +100,7 @@ batadv_tvlv_handler_get(struct batadv_priv *bat_priv, u8 type, u8 version)
} }
/** /**
* batadv_tvlv_container_release - release tvlv from lists and free * batadv_tvlv_container_release() - release tvlv from lists and free
* @ref: kref pointer of the tvlv * @ref: kref pointer of the tvlv
*/ */
static void batadv_tvlv_container_release(struct kref *ref) static void batadv_tvlv_container_release(struct kref *ref)
...@@ -111,7 +112,7 @@ static void batadv_tvlv_container_release(struct kref *ref) ...@@ -111,7 +112,7 @@ static void batadv_tvlv_container_release(struct kref *ref)
} }
/** /**
* batadv_tvlv_container_put - decrement the tvlv container refcounter and * batadv_tvlv_container_put() - decrement the tvlv container refcounter and
* possibly release it * possibly release it
* @tvlv: the tvlv container to free * @tvlv: the tvlv container to free
*/ */
...@@ -121,7 +122,7 @@ static void batadv_tvlv_container_put(struct batadv_tvlv_container *tvlv) ...@@ -121,7 +122,7 @@ static void batadv_tvlv_container_put(struct batadv_tvlv_container *tvlv)
} }
/** /**
* batadv_tvlv_container_get - retrieve tvlv container from the tvlv container * batadv_tvlv_container_get() - retrieve tvlv container from the tvlv container
* list based on the provided type and version (both need to match) * list based on the provided type and version (both need to match)
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @type: tvlv container type to look for * @type: tvlv container type to look for
...@@ -155,7 +156,7 @@ batadv_tvlv_container_get(struct batadv_priv *bat_priv, u8 type, u8 version) ...@@ -155,7 +156,7 @@ batadv_tvlv_container_get(struct batadv_priv *bat_priv, u8 type, u8 version)
} }
/** /**
* batadv_tvlv_container_list_size - calculate the size of the tvlv container * batadv_tvlv_container_list_size() - calculate the size of the tvlv container
* list entries * list entries
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* *
...@@ -180,8 +181,8 @@ static u16 batadv_tvlv_container_list_size(struct batadv_priv *bat_priv) ...@@ -180,8 +181,8 @@ static u16 batadv_tvlv_container_list_size(struct batadv_priv *bat_priv)
} }
/** /**
* batadv_tvlv_container_remove - remove tvlv container from the tvlv container * batadv_tvlv_container_remove() - remove tvlv container from the tvlv
* list * container list
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tvlv: the to be removed tvlv container * @tvlv: the to be removed tvlv container
* *
...@@ -204,7 +205,7 @@ static void batadv_tvlv_container_remove(struct batadv_priv *bat_priv, ...@@ -204,7 +205,7 @@ static void batadv_tvlv_container_remove(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tvlv_container_unregister - unregister tvlv container based on the * batadv_tvlv_container_unregister() - unregister tvlv container based on the
* provided type and version (both need to match) * provided type and version (both need to match)
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @type: tvlv container type to unregister * @type: tvlv container type to unregister
...@@ -222,7 +223,7 @@ void batadv_tvlv_container_unregister(struct batadv_priv *bat_priv, ...@@ -222,7 +223,7 @@ void batadv_tvlv_container_unregister(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tvlv_container_register - register tvlv type, version and content * batadv_tvlv_container_register() - register tvlv type, version and content
* to be propagated with each (primary interface) OGM * to be propagated with each (primary interface) OGM
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @type: tvlv container type * @type: tvlv container type
...@@ -267,7 +268,7 @@ void batadv_tvlv_container_register(struct batadv_priv *bat_priv, ...@@ -267,7 +268,7 @@ void batadv_tvlv_container_register(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tvlv_realloc_packet_buff - reallocate packet buffer to accommodate * batadv_tvlv_realloc_packet_buff() - reallocate packet buffer to accommodate
* requested packet size * requested packet size
* @packet_buff: packet buffer * @packet_buff: packet buffer
* @packet_buff_len: packet buffer size * @packet_buff_len: packet buffer size
...@@ -300,7 +301,7 @@ static bool batadv_tvlv_realloc_packet_buff(unsigned char **packet_buff, ...@@ -300,7 +301,7 @@ static bool batadv_tvlv_realloc_packet_buff(unsigned char **packet_buff,
} }
/** /**
* batadv_tvlv_container_ogm_append - append tvlv container content to given * batadv_tvlv_container_ogm_append() - append tvlv container content to given
* OGM packet buffer * OGM packet buffer
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @packet_buff: ogm packet buffer * @packet_buff: ogm packet buffer
...@@ -353,7 +354,7 @@ u16 batadv_tvlv_container_ogm_append(struct batadv_priv *bat_priv, ...@@ -353,7 +354,7 @@ u16 batadv_tvlv_container_ogm_append(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tvlv_call_handler - parse the given tvlv buffer to call the * batadv_tvlv_call_handler() - parse the given tvlv buffer to call the
* appropriate handlers * appropriate handlers
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @tvlv_handler: tvlv callback function handling the tvlv content * @tvlv_handler: tvlv callback function handling the tvlv content
...@@ -407,7 +408,7 @@ static int batadv_tvlv_call_handler(struct batadv_priv *bat_priv, ...@@ -407,7 +408,7 @@ static int batadv_tvlv_call_handler(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tvlv_containers_process - parse the given tvlv buffer to call the * batadv_tvlv_containers_process() - parse the given tvlv buffer to call the
* appropriate handlers * appropriate handlers
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @ogm_source: flag indicating whether the tvlv is an ogm or a unicast packet * @ogm_source: flag indicating whether the tvlv is an ogm or a unicast packet
...@@ -474,7 +475,7 @@ int batadv_tvlv_containers_process(struct batadv_priv *bat_priv, ...@@ -474,7 +475,7 @@ int batadv_tvlv_containers_process(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tvlv_ogm_receive - process an incoming ogm and call the appropriate * batadv_tvlv_ogm_receive() - process an incoming ogm and call the appropriate
* handlers * handlers
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @batadv_ogm_packet: ogm packet containing the tvlv containers * @batadv_ogm_packet: ogm packet containing the tvlv containers
...@@ -501,7 +502,7 @@ void batadv_tvlv_ogm_receive(struct batadv_priv *bat_priv, ...@@ -501,7 +502,7 @@ void batadv_tvlv_ogm_receive(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tvlv_handler_register - register tvlv handler based on the provided * batadv_tvlv_handler_register() - register tvlv handler based on the provided
* type and version (both need to match) for ogm tvlv payload and/or unicast * type and version (both need to match) for ogm tvlv payload and/or unicast
* payload * payload
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
...@@ -556,7 +557,7 @@ void batadv_tvlv_handler_register(struct batadv_priv *bat_priv, ...@@ -556,7 +557,7 @@ void batadv_tvlv_handler_register(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tvlv_handler_unregister - unregister tvlv handler based on the * batadv_tvlv_handler_unregister() - unregister tvlv handler based on the
* provided type and version (both need to match) * provided type and version (both need to match)
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @type: tvlv handler type to be unregistered * @type: tvlv handler type to be unregistered
...@@ -579,7 +580,7 @@ void batadv_tvlv_handler_unregister(struct batadv_priv *bat_priv, ...@@ -579,7 +580,7 @@ void batadv_tvlv_handler_unregister(struct batadv_priv *bat_priv,
} }
/** /**
* batadv_tvlv_unicast_send - send a unicast packet with tvlv payload to the * batadv_tvlv_unicast_send() - send a unicast packet with tvlv payload to the
* specified host * specified host
* @bat_priv: the bat priv with all the soft interface information * @bat_priv: the bat priv with all the soft interface information
* @src: source mac address of the unicast packet * @src: source mac address of the unicast packet
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors: /* Copyright (C) 2007-2017 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
...@@ -54,13 +55,15 @@ struct seq_file; ...@@ -54,13 +55,15 @@ struct seq_file;
/** /**
* enum batadv_dhcp_recipient - dhcp destination * enum batadv_dhcp_recipient - dhcp destination
* @BATADV_DHCP_NO: packet is not a dhcp message
* @BATADV_DHCP_TO_SERVER: dhcp message is directed to a server
* @BATADV_DHCP_TO_CLIENT: dhcp message is directed to a client
*/ */
enum batadv_dhcp_recipient { enum batadv_dhcp_recipient {
/** @BATADV_DHCP_NO: packet is not a dhcp message */
BATADV_DHCP_NO = 0, BATADV_DHCP_NO = 0,
/** @BATADV_DHCP_TO_SERVER: dhcp message is directed to a server */
BATADV_DHCP_TO_SERVER, BATADV_DHCP_TO_SERVER,
/** @BATADV_DHCP_TO_CLIENT: dhcp message is directed to a client */
BATADV_DHCP_TO_CLIENT, BATADV_DHCP_TO_CLIENT,
}; };
...@@ -78,196 +81,274 @@ enum batadv_dhcp_recipient { ...@@ -78,196 +81,274 @@ enum batadv_dhcp_recipient {
/** /**
* struct batadv_hard_iface_bat_iv - per hard-interface B.A.T.M.A.N. IV data * struct batadv_hard_iface_bat_iv - per hard-interface B.A.T.M.A.N. IV data
* @ogm_buff: buffer holding the OGM packet
* @ogm_buff_len: length of the OGM packet buffer
* @ogm_seqno: OGM sequence number - used to identify each OGM
*/ */
struct batadv_hard_iface_bat_iv { struct batadv_hard_iface_bat_iv {
/** @ogm_buff: buffer holding the OGM packet */
unsigned char *ogm_buff; unsigned char *ogm_buff;
/** @ogm_buff_len: length of the OGM packet buffer */
int ogm_buff_len; int ogm_buff_len;
/** @ogm_seqno: OGM sequence number - used to identify each OGM */
atomic_t ogm_seqno; atomic_t ogm_seqno;
}; };
/** /**
* enum batadv_v_hard_iface_flags - interface flags useful to B.A.T.M.A.N. V * enum batadv_v_hard_iface_flags - interface flags useful to B.A.T.M.A.N. V
* @BATADV_FULL_DUPLEX: tells if the connection over this link is full-duplex
* @BATADV_WARNING_DEFAULT: tells whether we have warned the user that no
* throughput data is available for this interface and that default values are
* assumed.
*/ */
enum batadv_v_hard_iface_flags { enum batadv_v_hard_iface_flags {
/**
* @BATADV_FULL_DUPLEX: tells if the connection over this link is
* full-duplex
*/
BATADV_FULL_DUPLEX = BIT(0), BATADV_FULL_DUPLEX = BIT(0),
/**
* @BATADV_WARNING_DEFAULT: tells whether we have warned the user that
* no throughput data is available for this interface and that default
* values are assumed.
*/
BATADV_WARNING_DEFAULT = BIT(1), BATADV_WARNING_DEFAULT = BIT(1),
}; };
/** /**
* struct batadv_hard_iface_bat_v - per hard-interface B.A.T.M.A.N. V data * struct batadv_hard_iface_bat_v - per hard-interface B.A.T.M.A.N. V data
* @elp_interval: time interval between two ELP transmissions
* @elp_seqno: current ELP sequence number
* @elp_skb: base skb containing the ELP message to send
* @elp_wq: workqueue used to schedule ELP transmissions
* @throughput_override: throughput override to disable link auto-detection
* @flags: interface specific flags
*/ */
struct batadv_hard_iface_bat_v { struct batadv_hard_iface_bat_v {
/** @elp_interval: time interval between two ELP transmissions */
atomic_t elp_interval; atomic_t elp_interval;
/** @elp_seqno: current ELP sequence number */
atomic_t elp_seqno; atomic_t elp_seqno;
/** @elp_skb: base skb containing the ELP message to send */
struct sk_buff *elp_skb; struct sk_buff *elp_skb;
/** @elp_wq: workqueue used to schedule ELP transmissions */
struct delayed_work elp_wq; struct delayed_work elp_wq;
/**
* @throughput_override: throughput override to disable link
* auto-detection
*/
atomic_t throughput_override; atomic_t throughput_override;
/** @flags: interface specific flags */
u8 flags; u8 flags;
}; };
/** /**
* enum batadv_hard_iface_wifi_flags - Flags describing the wifi configuration * enum batadv_hard_iface_wifi_flags - Flags describing the wifi configuration
* of a batadv_hard_iface * of a batadv_hard_iface
* @BATADV_HARDIF_WIFI_WEXT_DIRECT: it is a wext wifi device
* @BATADV_HARDIF_WIFI_CFG80211_DIRECT: it is a cfg80211 wifi device
* @BATADV_HARDIF_WIFI_WEXT_INDIRECT: link device is a wext wifi device
* @BATADV_HARDIF_WIFI_CFG80211_INDIRECT: link device is a cfg80211 wifi device
*/ */
enum batadv_hard_iface_wifi_flags { enum batadv_hard_iface_wifi_flags {
/** @BATADV_HARDIF_WIFI_WEXT_DIRECT: it is a wext wifi device */
BATADV_HARDIF_WIFI_WEXT_DIRECT = BIT(0), BATADV_HARDIF_WIFI_WEXT_DIRECT = BIT(0),
/** @BATADV_HARDIF_WIFI_CFG80211_DIRECT: it is a cfg80211 wifi device */
BATADV_HARDIF_WIFI_CFG80211_DIRECT = BIT(1), BATADV_HARDIF_WIFI_CFG80211_DIRECT = BIT(1),
/**
* @BATADV_HARDIF_WIFI_WEXT_INDIRECT: link device is a wext wifi device
*/
BATADV_HARDIF_WIFI_WEXT_INDIRECT = BIT(2), BATADV_HARDIF_WIFI_WEXT_INDIRECT = BIT(2),
/**
* @BATADV_HARDIF_WIFI_CFG80211_INDIRECT: link device is a cfg80211 wifi
* device
*/
BATADV_HARDIF_WIFI_CFG80211_INDIRECT = BIT(3), BATADV_HARDIF_WIFI_CFG80211_INDIRECT = BIT(3),
}; };
/** /**
* struct batadv_hard_iface - network device known to batman-adv * struct batadv_hard_iface - network device known to batman-adv
* @list: list node for batadv_hardif_list
* @if_num: identificator of the interface
* @if_status: status of the interface for batman-adv
* @num_bcasts: number of payload re-broadcasts on this interface (ARQ)
* @wifi_flags: flags whether this is (directly or indirectly) a wifi interface
* @net_dev: pointer to the net_device
* @hardif_obj: kobject of the per interface sysfs "mesh" directory
* @refcount: number of contexts the object is used
* @batman_adv_ptype: packet type describing packets that should be processed by
* batman-adv for this interface
* @soft_iface: the batman-adv interface which uses this network interface
* @rcu: struct used for freeing in an RCU-safe manner
* @bat_iv: per hard-interface B.A.T.M.A.N. IV data
* @bat_v: per hard-interface B.A.T.M.A.N. V data
* @debug_dir: dentry for nc subdir in batman-adv directory in debugfs
* @neigh_list: list of unique single hop neighbors via this interface
* @neigh_list_lock: lock protecting neigh_list
*/ */
struct batadv_hard_iface { struct batadv_hard_iface {
/** @list: list node for batadv_hardif_list */
struct list_head list; struct list_head list;
/** @if_num: identificator of the interface */
s16 if_num; s16 if_num;
/** @if_status: status of the interface for batman-adv */
char if_status; char if_status;
/**
* @num_bcasts: number of payload re-broadcasts on this interface (ARQ)
*/
u8 num_bcasts; u8 num_bcasts;
/**
* @wifi_flags: flags whether this is (directly or indirectly) a wifi
* interface
*/
u32 wifi_flags; u32 wifi_flags;
/** @net_dev: pointer to the net_device */
struct net_device *net_dev; struct net_device *net_dev;
/** @hardif_obj: kobject of the per interface sysfs "mesh" directory */
struct kobject *hardif_obj; struct kobject *hardif_obj;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/**
* @batman_adv_ptype: packet type describing packets that should be
* processed by batman-adv for this interface
*/
struct packet_type batman_adv_ptype; struct packet_type batman_adv_ptype;
/**
* @soft_iface: the batman-adv interface which uses this network
* interface
*/
struct net_device *soft_iface; struct net_device *soft_iface;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
/** @bat_iv: per hard-interface B.A.T.M.A.N. IV data */
struct batadv_hard_iface_bat_iv bat_iv; struct batadv_hard_iface_bat_iv bat_iv;
#ifdef CONFIG_BATMAN_ADV_BATMAN_V #ifdef CONFIG_BATMAN_ADV_BATMAN_V
/** @bat_v: per hard-interface B.A.T.M.A.N. V data */
struct batadv_hard_iface_bat_v bat_v; struct batadv_hard_iface_bat_v bat_v;
#endif #endif
/**
* @debug_dir: dentry for nc subdir in batman-adv directory in debugfs
*/
struct dentry *debug_dir; struct dentry *debug_dir;
/**
* @neigh_list: list of unique single hop neighbors via this interface
*/
struct hlist_head neigh_list; struct hlist_head neigh_list;
/* neigh_list_lock protects: neigh_list */
/** @neigh_list_lock: lock protecting neigh_list */
spinlock_t neigh_list_lock; spinlock_t neigh_list_lock;
}; };
/** /**
* struct batadv_orig_ifinfo - originator info per outgoing interface * struct batadv_orig_ifinfo - originator info per outgoing interface
* @list: list node for orig_node::ifinfo_list
* @if_outgoing: pointer to outgoing hard-interface
* @router: router that should be used to reach this originator
* @last_real_seqno: last and best known sequence number
* @last_ttl: ttl of last received packet
* @last_seqno_forwarded: seqno of the OGM which was forwarded last
* @batman_seqno_reset: time when the batman seqno window was reset
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner
*/ */
struct batadv_orig_ifinfo { struct batadv_orig_ifinfo {
/** @list: list node for &batadv_orig_node.ifinfo_list */
struct hlist_node list; struct hlist_node list;
/** @if_outgoing: pointer to outgoing hard-interface */
struct batadv_hard_iface *if_outgoing; struct batadv_hard_iface *if_outgoing;
struct batadv_neigh_node __rcu *router; /* rcu protected pointer */
/** @router: router that should be used to reach this originator */
struct batadv_neigh_node __rcu *router;
/** @last_real_seqno: last and best known sequence number */
u32 last_real_seqno; u32 last_real_seqno;
/** @last_ttl: ttl of last received packet */
u8 last_ttl; u8 last_ttl;
/** @last_seqno_forwarded: seqno of the OGM which was forwarded last */
u32 last_seqno_forwarded; u32 last_seqno_forwarded;
/** @batman_seqno_reset: time when the batman seqno window was reset */
unsigned long batman_seqno_reset; unsigned long batman_seqno_reset;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
/** /**
* struct batadv_frag_table_entry - head in the fragment buffer table * struct batadv_frag_table_entry - head in the fragment buffer table
* @fragment_list: head of list with fragments
* @lock: lock to protect the list of fragments
* @timestamp: time (jiffie) of last received fragment
* @seqno: sequence number of the fragments in the list
* @size: accumulated size of packets in list
* @total_size: expected size of the assembled packet
*/ */
struct batadv_frag_table_entry { struct batadv_frag_table_entry {
/** @fragment_list: head of list with fragments */
struct hlist_head fragment_list; struct hlist_head fragment_list;
spinlock_t lock; /* protects fragment_list */
/** @lock: lock to protect the list of fragments */
spinlock_t lock;
/** @timestamp: time (jiffie) of last received fragment */
unsigned long timestamp; unsigned long timestamp;
/** @seqno: sequence number of the fragments in the list */
u16 seqno; u16 seqno;
/** @size: accumulated size of packets in list */
u16 size; u16 size;
/** @total_size: expected size of the assembled packet */
u16 total_size; u16 total_size;
}; };
/** /**
* struct batadv_frag_list_entry - entry in a list of fragments * struct batadv_frag_list_entry - entry in a list of fragments
* @list: list node information
* @skb: fragment
* @no: fragment number in the set
*/ */
struct batadv_frag_list_entry { struct batadv_frag_list_entry {
/** @list: list node information */
struct hlist_node list; struct hlist_node list;
/** @skb: fragment */
struct sk_buff *skb; struct sk_buff *skb;
/** @no: fragment number in the set */
u8 no; u8 no;
}; };
/** /**
* struct batadv_vlan_tt - VLAN specific TT attributes * struct batadv_vlan_tt - VLAN specific TT attributes
* @crc: CRC32 checksum of the entries belonging to this vlan
* @num_entries: number of TT entries for this VLAN
*/ */
struct batadv_vlan_tt { struct batadv_vlan_tt {
/** @crc: CRC32 checksum of the entries belonging to this vlan */
u32 crc; u32 crc;
/** @num_entries: number of TT entries for this VLAN */
atomic_t num_entries; atomic_t num_entries;
}; };
/** /**
* struct batadv_orig_node_vlan - VLAN specific data per orig_node * struct batadv_orig_node_vlan - VLAN specific data per orig_node
* @vid: the VLAN identifier
* @tt: VLAN specific TT attributes
* @list: list node for orig_node::vlan_list
* @refcount: number of context where this object is currently in use
* @rcu: struct used for freeing in a RCU-safe manner
*/ */
struct batadv_orig_node_vlan { struct batadv_orig_node_vlan {
/** @vid: the VLAN identifier */
unsigned short vid; unsigned short vid;
/** @tt: VLAN specific TT attributes */
struct batadv_vlan_tt tt; struct batadv_vlan_tt tt;
/** @list: list node for &batadv_orig_node.vlan_list */
struct hlist_node list; struct hlist_node list;
/**
* @refcount: number of context where this object is currently in use
*/
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in a RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
/** /**
* struct batadv_orig_bat_iv - B.A.T.M.A.N. IV private orig_node members * struct batadv_orig_bat_iv - B.A.T.M.A.N. IV private orig_node members
* @bcast_own: set of bitfields (one per hard-interface) where each one counts
* the number of our OGMs this orig_node rebroadcasted "back" to us (relative
* to last_real_seqno). Every bitfield is BATADV_TQ_LOCAL_WINDOW_SIZE bits long.
* @bcast_own_sum: sum of bcast_own
* @ogm_cnt_lock: lock protecting bcast_own, bcast_own_sum,
* neigh_node->bat_iv.real_bits & neigh_node->bat_iv.real_packet_count
*/ */
struct batadv_orig_bat_iv { struct batadv_orig_bat_iv {
/**
* @bcast_own: set of bitfields (one per hard-interface) where each one
* counts the number of our OGMs this orig_node rebroadcasted "back" to
* us (relative to last_real_seqno). Every bitfield is
* BATADV_TQ_LOCAL_WINDOW_SIZE bits long.
*/
unsigned long *bcast_own; unsigned long *bcast_own;
/** @bcast_own_sum: sum of bcast_own */
u8 *bcast_own_sum; u8 *bcast_own_sum;
/* ogm_cnt_lock protects: bcast_own, bcast_own_sum,
/**
* @ogm_cnt_lock: lock protecting bcast_own, bcast_own_sum,
* neigh_node->bat_iv.real_bits & neigh_node->bat_iv.real_packet_count * neigh_node->bat_iv.real_bits & neigh_node->bat_iv.real_packet_count
*/ */
spinlock_t ogm_cnt_lock; spinlock_t ogm_cnt_lock;
...@@ -275,130 +356,205 @@ struct batadv_orig_bat_iv { ...@@ -275,130 +356,205 @@ struct batadv_orig_bat_iv {
/** /**
* struct batadv_orig_node - structure for orig_list maintaining nodes of mesh * struct batadv_orig_node - structure for orig_list maintaining nodes of mesh
* @orig: originator ethernet address
* @ifinfo_list: list for routers per outgoing interface
* @last_bonding_candidate: pointer to last ifinfo of last used router
* @dat_addr: address of the orig node in the distributed hash
* @last_seen: time when last packet from this node was received
* @bcast_seqno_reset: time when the broadcast seqno window was reset
* @mcast_handler_lock: synchronizes mcast-capability and -flag changes
* @mcast_flags: multicast flags announced by the orig node
* @mcast_want_all_unsnoopables_node: a list node for the
* mcast.want_all_unsnoopables 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
* @capabilities: announced capabilities of this originator
* @capa_initialized: bitfield to remember whether a capability was initialized
* @last_ttvn: last seen translation table version number
* @tt_buff: last tt changeset this node received from the orig node
* @tt_buff_len: length of the last tt changeset this node received from the
* orig node
* @tt_buff_lock: lock that protects tt_buff and tt_buff_len
* @tt_lock: prevents from updating the table while reading it. Table update is
* made up by two operations (data structure update and metdata -CRC/TTVN-
* recalculation) and they have to be executed atomically in order to avoid
* another thread to read the table/metadata between those.
* @bcast_bits: bitfield containing the info which payload broadcast originated
* from this orig node this host already has seen (relative to
* last_bcast_seqno)
* @last_bcast_seqno: last broadcast sequence number received by this host
* @neigh_list: list of potential next hop neighbor towards this orig node
* @neigh_list_lock: lock protecting neigh_list and router
* @hash_entry: hlist node for batadv_priv::orig_hash
* @bat_priv: pointer to soft_iface this orig node belongs to
* @bcast_seqno_lock: lock protecting bcast_bits & last_bcast_seqno
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner
* @in_coding_list: list of nodes this orig can hear
* @out_coding_list: list of nodes that can hear this orig
* @in_coding_list_lock: protects in_coding_list
* @out_coding_list_lock: protects out_coding_list
* @fragments: array with heads for fragment chains
* @vlan_list: a list of orig_node_vlan structs, one per VLAN served by the
* originator represented by this object
* @vlan_list_lock: lock protecting vlan_list
* @bat_iv: B.A.T.M.A.N. IV private structure
*/ */
struct batadv_orig_node { struct batadv_orig_node {
/** @orig: originator ethernet address */
u8 orig[ETH_ALEN]; u8 orig[ETH_ALEN];
/** @ifinfo_list: list for routers per outgoing interface */
struct hlist_head ifinfo_list; struct hlist_head ifinfo_list;
/**
* @last_bonding_candidate: pointer to last ifinfo of last used router
*/
struct batadv_orig_ifinfo *last_bonding_candidate; struct batadv_orig_ifinfo *last_bonding_candidate;
#ifdef CONFIG_BATMAN_ADV_DAT #ifdef CONFIG_BATMAN_ADV_DAT
/** @dat_addr: address of the orig node in the distributed hash */
batadv_dat_addr_t dat_addr; batadv_dat_addr_t dat_addr;
#endif #endif
/** @last_seen: time when last packet from this node was received */
unsigned long last_seen; unsigned long last_seen;
/**
* @bcast_seqno_reset: time when the broadcast seqno window was reset
*/
unsigned long bcast_seqno_reset; unsigned long bcast_seqno_reset;
#ifdef CONFIG_BATMAN_ADV_MCAST #ifdef CONFIG_BATMAN_ADV_MCAST
/* synchronizes mcast tvlv specific orig changes */ /**
* @mcast_handler_lock: synchronizes mcast-capability and -flag changes
*/
spinlock_t mcast_handler_lock; spinlock_t mcast_handler_lock;
/** @mcast_flags: multicast flags announced by the orig node */
u8 mcast_flags; u8 mcast_flags;
/**
* @mcast_want_all_unsnoopables_node: a list node for the
* mcast.want_all_unsnoopables list
*/
struct hlist_node mcast_want_all_unsnoopables_node; struct hlist_node mcast_want_all_unsnoopables_node;
/**
* @mcast_want_all_ipv4_node: a list node for the mcast.want_all_ipv4
* list
*/
struct hlist_node mcast_want_all_ipv4_node; struct hlist_node mcast_want_all_ipv4_node;
/**
* @mcast_want_all_ipv6_node: a list node for the mcast.want_all_ipv6
* list
*/
struct hlist_node mcast_want_all_ipv6_node; struct hlist_node mcast_want_all_ipv6_node;
#endif #endif
/** @capabilities: announced capabilities of this originator */
unsigned long capabilities; unsigned long capabilities;
/**
* @capa_initialized: bitfield to remember whether a capability was
* initialized
*/
unsigned long capa_initialized; unsigned long capa_initialized;
/** @last_ttvn: last seen translation table version number */
atomic_t last_ttvn; atomic_t last_ttvn;
/** @tt_buff: last tt changeset this node received from the orig node */
unsigned char *tt_buff; unsigned char *tt_buff;
/**
* @tt_buff_len: length of the last tt changeset this node received
* from the orig node
*/
s16 tt_buff_len; s16 tt_buff_len;
spinlock_t tt_buff_lock; /* protects tt_buff & tt_buff_len */
/* prevents from changing the table while reading it */ /** @tt_buff_lock: lock that protects tt_buff and tt_buff_len */
spinlock_t tt_buff_lock;
/**
* @tt_lock: prevents from updating the table while reading it. Table
* update is made up by two operations (data structure update and
* metdata -CRC/TTVN-recalculation) and they have to be executed
* atomically in order to avoid another thread to read the
* table/metadata between those.
*/
spinlock_t tt_lock; spinlock_t tt_lock;
/**
* @bcast_bits: bitfield containing the info which payload broadcast
* originated from this orig node this host already has seen (relative
* to last_bcast_seqno)
*/
DECLARE_BITMAP(bcast_bits, BATADV_TQ_LOCAL_WINDOW_SIZE); DECLARE_BITMAP(bcast_bits, BATADV_TQ_LOCAL_WINDOW_SIZE);
/**
* @last_bcast_seqno: last broadcast sequence number received by this
* host
*/
u32 last_bcast_seqno; u32 last_bcast_seqno;
/**
* @neigh_list: list of potential next hop neighbor towards this orig
* node
*/
struct hlist_head neigh_list; struct hlist_head neigh_list;
/* neigh_list_lock protects: neigh_list, ifinfo_list,
/**
* @neigh_list_lock: lock protecting neigh_list, ifinfo_list,
* last_bonding_candidate and router * last_bonding_candidate and router
*/ */
spinlock_t neigh_list_lock; spinlock_t neigh_list_lock;
/** @hash_entry: hlist node for &batadv_priv.orig_hash */
struct hlist_node hash_entry; struct hlist_node hash_entry;
/** @bat_priv: pointer to soft_iface this orig node belongs to */
struct batadv_priv *bat_priv; struct batadv_priv *bat_priv;
/* bcast_seqno_lock protects: bcast_bits & last_bcast_seqno */
/** @bcast_seqno_lock: lock protecting bcast_bits & last_bcast_seqno */
spinlock_t bcast_seqno_lock; spinlock_t bcast_seqno_lock;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
#ifdef CONFIG_BATMAN_ADV_NC #ifdef CONFIG_BATMAN_ADV_NC
/** @in_coding_list: list of nodes this orig can hear */
struct list_head in_coding_list; struct list_head in_coding_list;
/** @out_coding_list: list of nodes that can hear this orig */
struct list_head out_coding_list; struct list_head out_coding_list;
spinlock_t in_coding_list_lock; /* Protects in_coding_list */
spinlock_t out_coding_list_lock; /* Protects out_coding_list */ /** @in_coding_list_lock: protects in_coding_list */
spinlock_t in_coding_list_lock;
/** @out_coding_list_lock: protects out_coding_list */
spinlock_t out_coding_list_lock;
#endif #endif
/** @fragments: array with heads for fragment chains */
struct batadv_frag_table_entry fragments[BATADV_FRAG_BUFFER_COUNT]; struct batadv_frag_table_entry fragments[BATADV_FRAG_BUFFER_COUNT];
/**
* @vlan_list: a list of orig_node_vlan structs, one per VLAN served by
* the originator represented by this object
*/
struct hlist_head vlan_list; struct hlist_head vlan_list;
spinlock_t vlan_list_lock; /* protects vlan_list */
/** @vlan_list_lock: lock protecting vlan_list */
spinlock_t vlan_list_lock;
/** @bat_iv: B.A.T.M.A.N. IV private structure */
struct batadv_orig_bat_iv bat_iv; struct batadv_orig_bat_iv bat_iv;
}; };
/** /**
* enum batadv_orig_capabilities - orig node capabilities * enum batadv_orig_capabilities - orig node capabilities
* @BATADV_ORIG_CAPA_HAS_DAT: orig node has distributed arp table enabled
* @BATADV_ORIG_CAPA_HAS_NC: orig node has network coding enabled
* @BATADV_ORIG_CAPA_HAS_TT: orig node has tt capability
* @BATADV_ORIG_CAPA_HAS_MCAST: orig node has some multicast capability
* (= orig node announces a tvlv of type BATADV_TVLV_MCAST)
*/ */
enum batadv_orig_capabilities { enum batadv_orig_capabilities {
/**
* @BATADV_ORIG_CAPA_HAS_DAT: orig node has distributed arp table
* enabled
*/
BATADV_ORIG_CAPA_HAS_DAT, BATADV_ORIG_CAPA_HAS_DAT,
/** @BATADV_ORIG_CAPA_HAS_NC: orig node has network coding enabled */
BATADV_ORIG_CAPA_HAS_NC, BATADV_ORIG_CAPA_HAS_NC,
/** @BATADV_ORIG_CAPA_HAS_TT: orig node has tt capability */
BATADV_ORIG_CAPA_HAS_TT, BATADV_ORIG_CAPA_HAS_TT,
/**
* @BATADV_ORIG_CAPA_HAS_MCAST: orig node has some multicast capability
* (= orig node announces a tvlv of type BATADV_TVLV_MCAST)
*/
BATADV_ORIG_CAPA_HAS_MCAST, BATADV_ORIG_CAPA_HAS_MCAST,
}; };
/** /**
* struct batadv_gw_node - structure for orig nodes announcing gw capabilities * struct batadv_gw_node - structure for orig nodes announcing gw capabilities
* @list: list node for batadv_priv_gw::list
* @orig_node: pointer to corresponding orig node
* @bandwidth_down: advertised uplink download bandwidth
* @bandwidth_up: advertised uplink upload bandwidth
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner
*/ */
struct batadv_gw_node { struct batadv_gw_node {
/** @list: list node for &batadv_priv_gw.list */
struct hlist_node list; struct hlist_node list;
/** @orig_node: pointer to corresponding orig node */
struct batadv_orig_node *orig_node; struct batadv_orig_node *orig_node;
/** @bandwidth_down: advertised uplink download bandwidth */
u32 bandwidth_down; u32 bandwidth_down;
/** @bandwidth_up: advertised uplink upload bandwidth */
u32 bandwidth_up; u32 bandwidth_up;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
...@@ -407,118 +563,161 @@ DECLARE_EWMA(throughput, 10, 8) ...@@ -407,118 +563,161 @@ DECLARE_EWMA(throughput, 10, 8)
/** /**
* struct batadv_hardif_neigh_node_bat_v - B.A.T.M.A.N. V private neighbor * struct batadv_hardif_neigh_node_bat_v - B.A.T.M.A.N. V private neighbor
* information * information
* @throughput: ewma link throughput towards this neighbor
* @elp_interval: time interval between two ELP transmissions
* @elp_latest_seqno: latest and best known ELP sequence number
* @last_unicast_tx: when the last unicast packet has been sent to this neighbor
* @metric_work: work queue callback item for metric update
*/ */
struct batadv_hardif_neigh_node_bat_v { struct batadv_hardif_neigh_node_bat_v {
/** @throughput: ewma link throughput towards this neighbor */
struct ewma_throughput throughput; struct ewma_throughput throughput;
/** @elp_interval: time interval between two ELP transmissions */
u32 elp_interval; u32 elp_interval;
/** @elp_latest_seqno: latest and best known ELP sequence number */
u32 elp_latest_seqno; u32 elp_latest_seqno;
/**
* @last_unicast_tx: when the last unicast packet has been sent to this
* neighbor
*/
unsigned long last_unicast_tx; unsigned long last_unicast_tx;
/** @metric_work: work queue callback item for metric update */
struct work_struct metric_work; struct work_struct metric_work;
}; };
/** /**
* struct batadv_hardif_neigh_node - unique neighbor per hard-interface * struct batadv_hardif_neigh_node - unique neighbor per hard-interface
* @list: list node for batadv_hard_iface::neigh_list
* @addr: the MAC address of the neighboring interface
* @orig: the address of the originator this neighbor node belongs to
* @if_incoming: pointer to incoming hard-interface
* @last_seen: when last packet via this neighbor was received
* @bat_v: B.A.T.M.A.N. V private data
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in a RCU-safe manner
*/ */
struct batadv_hardif_neigh_node { struct batadv_hardif_neigh_node {
/** @list: list node for &batadv_hard_iface.neigh_list */
struct hlist_node list; struct hlist_node list;
/** @addr: the MAC address of the neighboring interface */
u8 addr[ETH_ALEN]; u8 addr[ETH_ALEN];
/**
* @orig: the address of the originator this neighbor node belongs to
*/
u8 orig[ETH_ALEN]; u8 orig[ETH_ALEN];
/** @if_incoming: pointer to incoming hard-interface */
struct batadv_hard_iface *if_incoming; struct batadv_hard_iface *if_incoming;
/** @last_seen: when last packet via this neighbor was received */
unsigned long last_seen; unsigned long last_seen;
#ifdef CONFIG_BATMAN_ADV_BATMAN_V #ifdef CONFIG_BATMAN_ADV_BATMAN_V
/** @bat_v: B.A.T.M.A.N. V private data */
struct batadv_hardif_neigh_node_bat_v bat_v; struct batadv_hardif_neigh_node_bat_v bat_v;
#endif #endif
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in a RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
/** /**
* struct batadv_neigh_node - structure for single hops neighbors * struct batadv_neigh_node - structure for single hops neighbors
* @list: list node for batadv_orig_node::neigh_list
* @orig_node: pointer to corresponding orig_node
* @addr: the MAC address of the neighboring interface
* @ifinfo_list: list for routing metrics per outgoing interface
* @ifinfo_lock: lock protecting private ifinfo members and list
* @if_incoming: pointer to incoming hard-interface
* @last_seen: when last packet via this neighbor was received
* @hardif_neigh: hardif_neigh of this neighbor
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner
*/ */
struct batadv_neigh_node { struct batadv_neigh_node {
/** @list: list node for &batadv_orig_node.neigh_list */
struct hlist_node list; struct hlist_node list;
/** @orig_node: pointer to corresponding orig_node */
struct batadv_orig_node *orig_node; struct batadv_orig_node *orig_node;
/** @addr: the MAC address of the neighboring interface */
u8 addr[ETH_ALEN]; u8 addr[ETH_ALEN];
/** @ifinfo_list: list for routing metrics per outgoing interface */
struct hlist_head ifinfo_list; struct hlist_head ifinfo_list;
spinlock_t ifinfo_lock; /* protects ifinfo_list and its members */
/** @ifinfo_lock: lock protecting ifinfo_list and its members */
spinlock_t ifinfo_lock;
/** @if_incoming: pointer to incoming hard-interface */
struct batadv_hard_iface *if_incoming; struct batadv_hard_iface *if_incoming;
/** @last_seen: when last packet via this neighbor was received */
unsigned long last_seen; unsigned long last_seen;
/** @hardif_neigh: hardif_neigh of this neighbor */
struct batadv_hardif_neigh_node *hardif_neigh; struct batadv_hardif_neigh_node *hardif_neigh;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
/** /**
* struct batadv_neigh_ifinfo_bat_iv - neighbor information per outgoing * struct batadv_neigh_ifinfo_bat_iv - neighbor information per outgoing
* interface for B.A.T.M.A.N. IV * interface for B.A.T.M.A.N. IV
* @tq_recv: ring buffer of received TQ values from this neigh node
* @tq_index: ring buffer index
* @tq_avg: averaged tq of all tq values in the ring buffer (tq_recv)
* @real_bits: bitfield containing the number of OGMs received from this neigh
* node (relative to orig_node->last_real_seqno)
* @real_packet_count: counted result of real_bits
*/ */
struct batadv_neigh_ifinfo_bat_iv { struct batadv_neigh_ifinfo_bat_iv {
/** @tq_recv: ring buffer of received TQ values from this neigh node */
u8 tq_recv[BATADV_TQ_GLOBAL_WINDOW_SIZE]; u8 tq_recv[BATADV_TQ_GLOBAL_WINDOW_SIZE];
/** @tq_index: ring buffer index */
u8 tq_index; u8 tq_index;
/**
* @tq_avg: averaged tq of all tq values in the ring buffer (tq_recv)
*/
u8 tq_avg; u8 tq_avg;
/**
* @real_bits: bitfield containing the number of OGMs received from this
* neigh node (relative to orig_node->last_real_seqno)
*/
DECLARE_BITMAP(real_bits, BATADV_TQ_LOCAL_WINDOW_SIZE); DECLARE_BITMAP(real_bits, BATADV_TQ_LOCAL_WINDOW_SIZE);
/** @real_packet_count: counted result of real_bits */
u8 real_packet_count; u8 real_packet_count;
}; };
/** /**
* struct batadv_neigh_ifinfo_bat_v - neighbor information per outgoing * struct batadv_neigh_ifinfo_bat_v - neighbor information per outgoing
* interface for B.A.T.M.A.N. V * interface for B.A.T.M.A.N. V
* @throughput: last throughput metric received from originator via this neigh
* @last_seqno: last sequence number known for this neighbor
*/ */
struct batadv_neigh_ifinfo_bat_v { struct batadv_neigh_ifinfo_bat_v {
/**
* @throughput: last throughput metric received from originator via this
* neigh
*/
u32 throughput; u32 throughput;
/** @last_seqno: last sequence number known for this neighbor */
u32 last_seqno; u32 last_seqno;
}; };
/** /**
* struct batadv_neigh_ifinfo - neighbor information per outgoing interface * struct batadv_neigh_ifinfo - neighbor information per outgoing interface
* @list: list node for batadv_neigh_node::ifinfo_list
* @if_outgoing: pointer to outgoing hard-interface
* @bat_iv: B.A.T.M.A.N. IV private structure
* @bat_v: B.A.T.M.A.N. V private data
* @last_ttl: last received ttl from this neigh node
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in a RCU-safe manner
*/ */
struct batadv_neigh_ifinfo { struct batadv_neigh_ifinfo {
/** @list: list node for &batadv_neigh_node.ifinfo_list */
struct hlist_node list; struct hlist_node list;
/** @if_outgoing: pointer to outgoing hard-interface */
struct batadv_hard_iface *if_outgoing; struct batadv_hard_iface *if_outgoing;
/** @bat_iv: B.A.T.M.A.N. IV private structure */
struct batadv_neigh_ifinfo_bat_iv bat_iv; struct batadv_neigh_ifinfo_bat_iv bat_iv;
#ifdef CONFIG_BATMAN_ADV_BATMAN_V #ifdef CONFIG_BATMAN_ADV_BATMAN_V
/** @bat_v: B.A.T.M.A.N. V private data */
struct batadv_neigh_ifinfo_bat_v bat_v; struct batadv_neigh_ifinfo_bat_v bat_v;
#endif #endif
/** @last_ttl: last received ttl from this neigh node */
u8 last_ttl; u8 last_ttl;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in a RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
...@@ -526,148 +725,278 @@ struct batadv_neigh_ifinfo { ...@@ -526,148 +725,278 @@ struct batadv_neigh_ifinfo {
/** /**
* struct batadv_bcast_duplist_entry - structure for LAN broadcast suppression * struct batadv_bcast_duplist_entry - structure for LAN broadcast suppression
* @orig: mac address of orig node orginating the broadcast
* @crc: crc32 checksum of broadcast payload
* @entrytime: time when the broadcast packet was received
*/ */
struct batadv_bcast_duplist_entry { struct batadv_bcast_duplist_entry {
/** @orig: mac address of orig node orginating the broadcast */
u8 orig[ETH_ALEN]; u8 orig[ETH_ALEN];
/** @crc: crc32 checksum of broadcast payload */
__be32 crc; __be32 crc;
/** @entrytime: time when the broadcast packet was received */
unsigned long entrytime; unsigned long entrytime;
}; };
#endif #endif
/** /**
* enum batadv_counters - indices for traffic counters * enum batadv_counters - indices for traffic counters
* @BATADV_CNT_TX: transmitted payload traffic packet counter
* @BATADV_CNT_TX_BYTES: transmitted payload traffic bytes counter
* @BATADV_CNT_TX_DROPPED: dropped transmission payload traffic packet counter
* @BATADV_CNT_RX: received payload traffic packet counter
* @BATADV_CNT_RX_BYTES: received payload traffic bytes counter
* @BATADV_CNT_FORWARD: forwarded payload traffic packet counter
* @BATADV_CNT_FORWARD_BYTES: forwarded payload traffic bytes counter
* @BATADV_CNT_MGMT_TX: transmitted routing protocol traffic packet counter
* @BATADV_CNT_MGMT_TX_BYTES: transmitted routing protocol traffic bytes counter
* @BATADV_CNT_MGMT_RX: received routing protocol traffic packet counter
* @BATADV_CNT_MGMT_RX_BYTES: received routing protocol traffic bytes counter
* @BATADV_CNT_FRAG_TX: transmitted fragment traffic packet counter
* @BATADV_CNT_FRAG_TX_BYTES: transmitted fragment traffic bytes counter
* @BATADV_CNT_FRAG_RX: received fragment traffic packet counter
* @BATADV_CNT_FRAG_RX_BYTES: received fragment traffic bytes counter
* @BATADV_CNT_FRAG_FWD: forwarded fragment traffic packet counter
* @BATADV_CNT_FRAG_FWD_BYTES: forwarded fragment traffic bytes counter
* @BATADV_CNT_TT_REQUEST_TX: transmitted tt req traffic packet counter
* @BATADV_CNT_TT_REQUEST_RX: received tt req traffic packet counter
* @BATADV_CNT_TT_RESPONSE_TX: transmitted tt resp traffic packet counter
* @BATADV_CNT_TT_RESPONSE_RX: received tt resp traffic packet counter
* @BATADV_CNT_TT_ROAM_ADV_TX: transmitted tt roam traffic packet counter
* @BATADV_CNT_TT_ROAM_ADV_RX: received tt roam traffic packet counter
* @BATADV_CNT_DAT_GET_TX: transmitted dht GET traffic packet counter
* @BATADV_CNT_DAT_GET_RX: received dht GET traffic packet counter
* @BATADV_CNT_DAT_PUT_TX: transmitted dht PUT traffic packet counter
* @BATADV_CNT_DAT_PUT_RX: received dht PUT traffic packet counter
* @BATADV_CNT_DAT_CACHED_REPLY_TX: transmitted dat cache reply traffic packet
* counter
* @BATADV_CNT_NC_CODE: transmitted nc-combined traffic packet counter
* @BATADV_CNT_NC_CODE_BYTES: transmitted nc-combined traffic bytes counter
* @BATADV_CNT_NC_RECODE: transmitted nc-recombined traffic packet counter
* @BATADV_CNT_NC_RECODE_BYTES: transmitted nc-recombined traffic bytes counter
* @BATADV_CNT_NC_BUFFER: counter for packets buffered for later nc decoding
* @BATADV_CNT_NC_DECODE: received and nc-decoded traffic packet counter
* @BATADV_CNT_NC_DECODE_BYTES: received and nc-decoded traffic bytes counter
* @BATADV_CNT_NC_DECODE_FAILED: received and decode-failed traffic packet
* counter
* @BATADV_CNT_NC_SNIFFED: counter for nc-decoded packets received in promisc
* mode.
* @BATADV_CNT_NUM: number of traffic counters
*/ */
enum batadv_counters { enum batadv_counters {
/** @BATADV_CNT_TX: transmitted payload traffic packet counter */
BATADV_CNT_TX, BATADV_CNT_TX,
/** @BATADV_CNT_TX_BYTES: transmitted payload traffic bytes counter */
BATADV_CNT_TX_BYTES, BATADV_CNT_TX_BYTES,
/**
* @BATADV_CNT_TX_DROPPED: dropped transmission payload traffic packet
* counter
*/
BATADV_CNT_TX_DROPPED, BATADV_CNT_TX_DROPPED,
/** @BATADV_CNT_RX: received payload traffic packet counter */
BATADV_CNT_RX, BATADV_CNT_RX,
/** @BATADV_CNT_RX_BYTES: received payload traffic bytes counter */
BATADV_CNT_RX_BYTES, BATADV_CNT_RX_BYTES,
/** @BATADV_CNT_FORWARD: forwarded payload traffic packet counter */
BATADV_CNT_FORWARD, BATADV_CNT_FORWARD,
/**
* @BATADV_CNT_FORWARD_BYTES: forwarded payload traffic bytes counter
*/
BATADV_CNT_FORWARD_BYTES, BATADV_CNT_FORWARD_BYTES,
/**
* @BATADV_CNT_MGMT_TX: transmitted routing protocol traffic packet
* counter
*/
BATADV_CNT_MGMT_TX, BATADV_CNT_MGMT_TX,
/**
* @BATADV_CNT_MGMT_TX_BYTES: transmitted routing protocol traffic bytes
* counter
*/
BATADV_CNT_MGMT_TX_BYTES, BATADV_CNT_MGMT_TX_BYTES,
/**
* @BATADV_CNT_MGMT_RX: received routing protocol traffic packet counter
*/
BATADV_CNT_MGMT_RX, BATADV_CNT_MGMT_RX,
/**
* @BATADV_CNT_MGMT_RX_BYTES: received routing protocol traffic bytes
* counter
*/
BATADV_CNT_MGMT_RX_BYTES, BATADV_CNT_MGMT_RX_BYTES,
/** @BATADV_CNT_FRAG_TX: transmitted fragment traffic packet counter */
BATADV_CNT_FRAG_TX, BATADV_CNT_FRAG_TX,
/**
* @BATADV_CNT_FRAG_TX_BYTES: transmitted fragment traffic bytes counter
*/
BATADV_CNT_FRAG_TX_BYTES, BATADV_CNT_FRAG_TX_BYTES,
/** @BATADV_CNT_FRAG_RX: received fragment traffic packet counter */
BATADV_CNT_FRAG_RX, BATADV_CNT_FRAG_RX,
/**
* @BATADV_CNT_FRAG_RX_BYTES: received fragment traffic bytes counter
*/
BATADV_CNT_FRAG_RX_BYTES, BATADV_CNT_FRAG_RX_BYTES,
/** @BATADV_CNT_FRAG_FWD: forwarded fragment traffic packet counter */
BATADV_CNT_FRAG_FWD, BATADV_CNT_FRAG_FWD,
/**
* @BATADV_CNT_FRAG_FWD_BYTES: forwarded fragment traffic bytes counter
*/
BATADV_CNT_FRAG_FWD_BYTES, BATADV_CNT_FRAG_FWD_BYTES,
/**
* @BATADV_CNT_TT_REQUEST_TX: transmitted tt req traffic packet counter
*/
BATADV_CNT_TT_REQUEST_TX, BATADV_CNT_TT_REQUEST_TX,
/** @BATADV_CNT_TT_REQUEST_RX: received tt req traffic packet counter */
BATADV_CNT_TT_REQUEST_RX, BATADV_CNT_TT_REQUEST_RX,
/**
* @BATADV_CNT_TT_RESPONSE_TX: transmitted tt resp traffic packet
* counter
*/
BATADV_CNT_TT_RESPONSE_TX, BATADV_CNT_TT_RESPONSE_TX,
/**
* @BATADV_CNT_TT_RESPONSE_RX: received tt resp traffic packet counter
*/
BATADV_CNT_TT_RESPONSE_RX, BATADV_CNT_TT_RESPONSE_RX,
/**
* @BATADV_CNT_TT_ROAM_ADV_TX: transmitted tt roam traffic packet
* counter
*/
BATADV_CNT_TT_ROAM_ADV_TX, BATADV_CNT_TT_ROAM_ADV_TX,
/**
* @BATADV_CNT_TT_ROAM_ADV_RX: received tt roam traffic packet counter
*/
BATADV_CNT_TT_ROAM_ADV_RX, BATADV_CNT_TT_ROAM_ADV_RX,
#ifdef CONFIG_BATMAN_ADV_DAT #ifdef CONFIG_BATMAN_ADV_DAT
/**
* @BATADV_CNT_DAT_GET_TX: transmitted dht GET traffic packet counter
*/
BATADV_CNT_DAT_GET_TX, BATADV_CNT_DAT_GET_TX,
/** @BATADV_CNT_DAT_GET_RX: received dht GET traffic packet counter */
BATADV_CNT_DAT_GET_RX, BATADV_CNT_DAT_GET_RX,
/**
* @BATADV_CNT_DAT_PUT_TX: transmitted dht PUT traffic packet counter
*/
BATADV_CNT_DAT_PUT_TX, BATADV_CNT_DAT_PUT_TX,
/** @BATADV_CNT_DAT_PUT_RX: received dht PUT traffic packet counter */
BATADV_CNT_DAT_PUT_RX, BATADV_CNT_DAT_PUT_RX,
/**
* @BATADV_CNT_DAT_CACHED_REPLY_TX: transmitted dat cache reply traffic
* packet counter
*/
BATADV_CNT_DAT_CACHED_REPLY_TX, BATADV_CNT_DAT_CACHED_REPLY_TX,
#endif #endif
#ifdef CONFIG_BATMAN_ADV_NC #ifdef CONFIG_BATMAN_ADV_NC
/**
* @BATADV_CNT_NC_CODE: transmitted nc-combined traffic packet counter
*/
BATADV_CNT_NC_CODE, BATADV_CNT_NC_CODE,
/**
* @BATADV_CNT_NC_CODE_BYTES: transmitted nc-combined traffic bytes
* counter
*/
BATADV_CNT_NC_CODE_BYTES, BATADV_CNT_NC_CODE_BYTES,
/**
* @BATADV_CNT_NC_RECODE: transmitted nc-recombined traffic packet
* counter
*/
BATADV_CNT_NC_RECODE, BATADV_CNT_NC_RECODE,
/**
* @BATADV_CNT_NC_RECODE_BYTES: transmitted nc-recombined traffic bytes
* counter
*/
BATADV_CNT_NC_RECODE_BYTES, BATADV_CNT_NC_RECODE_BYTES,
/**
* @BATADV_CNT_NC_BUFFER: counter for packets buffered for later nc
* decoding
*/
BATADV_CNT_NC_BUFFER, BATADV_CNT_NC_BUFFER,
/**
* @BATADV_CNT_NC_DECODE: received and nc-decoded traffic packet counter
*/
BATADV_CNT_NC_DECODE, BATADV_CNT_NC_DECODE,
/**
* @BATADV_CNT_NC_DECODE_BYTES: received and nc-decoded traffic bytes
* counter
*/
BATADV_CNT_NC_DECODE_BYTES, BATADV_CNT_NC_DECODE_BYTES,
/**
* @BATADV_CNT_NC_DECODE_FAILED: received and decode-failed traffic
* packet counter
*/
BATADV_CNT_NC_DECODE_FAILED, BATADV_CNT_NC_DECODE_FAILED,
/**
* @BATADV_CNT_NC_SNIFFED: counter for nc-decoded packets received in
* promisc mode.
*/
BATADV_CNT_NC_SNIFFED, BATADV_CNT_NC_SNIFFED,
#endif #endif
/** @BATADV_CNT_NUM: number of traffic counters */
BATADV_CNT_NUM, BATADV_CNT_NUM,
}; };
/** /**
* struct batadv_priv_tt - per mesh interface translation table data * struct batadv_priv_tt - per mesh interface translation table data
* @vn: translation table version number
* @ogm_append_cnt: counter of number of OGMs containing the local tt diff
* @local_changes: changes registered in an originator interval
* @changes_list: tracks tt local changes within an originator interval
* @local_hash: local translation table hash table
* @global_hash: global translation table hash table
* @req_list: list of pending & unanswered tt_requests
* @roam_list: list of the last roaming events of each client limiting the
* number of roaming events to avoid route flapping
* @changes_list_lock: lock protecting changes_list
* @req_list_lock: lock protecting req_list
* @roam_list_lock: lock protecting roam_list
* @last_changeset: last tt changeset this host has generated
* @last_changeset_len: length of last tt changeset this host has generated
* @last_changeset_lock: lock protecting last_changeset & last_changeset_len
* @commit_lock: prevents from executing a local TT commit while reading the
* local table. The local TT commit is made up by two operations (data
* structure update and metdata -CRC/TTVN- recalculation) and they have to be
* executed atomically in order to avoid another thread to read the
* table/metadata between those.
* @work: work queue callback item for translation table purging
*/ */
struct batadv_priv_tt { struct batadv_priv_tt {
/** @vn: translation table version number */
atomic_t vn; atomic_t vn;
/**
* @ogm_append_cnt: counter of number of OGMs containing the local tt
* diff
*/
atomic_t ogm_append_cnt; atomic_t ogm_append_cnt;
/** @local_changes: changes registered in an originator interval */
atomic_t local_changes; atomic_t local_changes;
/**
* @changes_list: tracks tt local changes within an originator interval
*/
struct list_head changes_list; struct list_head changes_list;
/** @local_hash: local translation table hash table */
struct batadv_hashtable *local_hash; struct batadv_hashtable *local_hash;
/** @global_hash: global translation table hash table */
struct batadv_hashtable *global_hash; struct batadv_hashtable *global_hash;
/** @req_list: list of pending & unanswered tt_requests */
struct hlist_head req_list; struct hlist_head req_list;
/**
* @roam_list: list of the last roaming events of each client limiting
* the number of roaming events to avoid route flapping
*/
struct list_head roam_list; struct list_head roam_list;
spinlock_t changes_list_lock; /* protects changes */
spinlock_t req_list_lock; /* protects req_list */ /** @changes_list_lock: lock protecting changes_list */
spinlock_t roam_list_lock; /* protects roam_list */ spinlock_t changes_list_lock;
/** @req_list_lock: lock protecting req_list */
spinlock_t req_list_lock;
/** @roam_list_lock: lock protecting roam_list */
spinlock_t roam_list_lock;
/** @last_changeset: last tt changeset this host has generated */
unsigned char *last_changeset; unsigned char *last_changeset;
/**
* @last_changeset_len: length of last tt changeset this host has
* generated
*/
s16 last_changeset_len; s16 last_changeset_len;
/* protects last_changeset & last_changeset_len */
/**
* @last_changeset_lock: lock protecting last_changeset &
* last_changeset_len
*/
spinlock_t last_changeset_lock; spinlock_t last_changeset_lock;
/* prevents from executing a commit while reading the table */
/**
* @commit_lock: prevents from executing a local TT commit while reading
* the local table. The local TT commit is made up by two operations
* (data structure update and metdata -CRC/TTVN- recalculation) and
* they have to be executed atomically in order to avoid another thread
* to read the table/metadata between those.
*/
spinlock_t commit_lock; spinlock_t commit_lock;
/** @work: work queue callback item for translation table purging */
struct delayed_work work; struct delayed_work work;
}; };
...@@ -675,31 +1004,57 @@ struct batadv_priv_tt { ...@@ -675,31 +1004,57 @@ struct batadv_priv_tt {
/** /**
* 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
* @claim_hash: hash table containing mesh nodes this host has claimed
* @backbone_hash: hash table containing all detected backbone gateways
* @loopdetect_addr: MAC address used for own loopdetection frames
* @loopdetect_lasttime: time when the loopdetection frames were sent
* @loopdetect_next: how many periods to wait for the next loopdetect process
* @bcast_duplist: recently received broadcast packets array (for broadcast
* duplicate suppression)
* @bcast_duplist_curr: index of last broadcast packet added to bcast_duplist
* @bcast_duplist_lock: lock protecting bcast_duplist & bcast_duplist_curr
* @claim_dest: local claim data (e.g. claim group)
* @work: work queue callback item for cleanups & bla announcements
*/ */
struct batadv_priv_bla { struct batadv_priv_bla {
/** @num_requests: number of bla requests in flight */
atomic_t num_requests; atomic_t num_requests;
/**
* @claim_hash: hash table containing mesh nodes this host has claimed
*/
struct batadv_hashtable *claim_hash; struct batadv_hashtable *claim_hash;
/**
* @backbone_hash: hash table containing all detected backbone gateways
*/
struct batadv_hashtable *backbone_hash; struct batadv_hashtable *backbone_hash;
/** @loopdetect_addr: MAC address used for own loopdetection frames */
u8 loopdetect_addr[ETH_ALEN]; u8 loopdetect_addr[ETH_ALEN];
/**
* @loopdetect_lasttime: time when the loopdetection frames were sent
*/
unsigned long loopdetect_lasttime; unsigned long loopdetect_lasttime;
/**
* @loopdetect_next: how many periods to wait for the next loopdetect
* process
*/
atomic_t loopdetect_next; atomic_t loopdetect_next;
/**
* @bcast_duplist: recently received broadcast packets array (for
* broadcast duplicate suppression)
*/
struct batadv_bcast_duplist_entry bcast_duplist[BATADV_DUPLIST_SIZE]; struct batadv_bcast_duplist_entry bcast_duplist[BATADV_DUPLIST_SIZE];
/**
* @bcast_duplist_curr: index of last broadcast packet added to
* bcast_duplist
*/
int bcast_duplist_curr; int bcast_duplist_curr;
/* protects bcast_duplist & bcast_duplist_curr */
/**
* @bcast_duplist_lock: lock protecting bcast_duplist &
* bcast_duplist_curr
*/
spinlock_t bcast_duplist_lock; spinlock_t bcast_duplist_lock;
/** @claim_dest: local claim data (e.g. claim group) */
struct batadv_bla_claim_dst claim_dest; struct batadv_bla_claim_dst claim_dest;
/** @work: work queue callback item for cleanups & bla announcements */
struct delayed_work work; struct delayed_work work;
}; };
#endif #endif
...@@ -708,68 +1063,94 @@ struct batadv_priv_bla { ...@@ -708,68 +1063,94 @@ struct batadv_priv_bla {
/** /**
* 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_start: index of next character to read
* @log_end: index of next character to write
* @lock: lock protecting log_buff, log_start & log_end
* @queue_wait: log reader's wait queue
*/ */
struct batadv_priv_debug_log { struct batadv_priv_debug_log {
/** @log_buff: buffer holding the logs (ring bufer) */
char log_buff[BATADV_LOG_BUF_LEN]; char log_buff[BATADV_LOG_BUF_LEN];
/** @log_start: index of next character to read */
unsigned long log_start; unsigned long log_start;
/** @log_end: index of next character to write */
unsigned long log_end; unsigned long log_end;
spinlock_t lock; /* protects log_buff, log_start and log_end */
/** @lock: lock protecting log_buff, log_start & log_end */
spinlock_t lock;
/** @queue_wait: log reader's wait queue */
wait_queue_head_t queue_wait; wait_queue_head_t queue_wait;
}; };
#endif #endif
/** /**
* struct batadv_priv_gw - per mesh interface gateway data * struct batadv_priv_gw - per mesh interface gateway data
* @gateway_list: list of available gateway nodes
* @list_lock: lock protecting gateway_list & curr_gw
* @curr_gw: pointer to currently selected gateway node
* @mode: gateway operation: off, client or server (see batadv_gw_modes)
* @sel_class: gateway selection class (applies if gw_mode client)
* @bandwidth_down: advertised uplink download bandwidth (if gw_mode server)
* @bandwidth_up: advertised uplink upload bandwidth (if gw_mode server)
* @reselect: bool indicating a gateway re-selection is in progress
*/ */
struct batadv_priv_gw { struct batadv_priv_gw {
/** @gateway_list: list of available gateway nodes */
struct hlist_head gateway_list; struct hlist_head gateway_list;
spinlock_t list_lock; /* protects gateway_list & curr_gw */
struct batadv_gw_node __rcu *curr_gw; /* rcu protected pointer */ /** @list_lock: lock protecting gateway_list & curr_gw */
spinlock_t list_lock;
/** @curr_gw: pointer to currently selected gateway node */
struct batadv_gw_node __rcu *curr_gw;
/**
* @mode: gateway operation: off, client or server (see batadv_gw_modes)
*/
atomic_t mode; atomic_t mode;
/** @sel_class: gateway selection class (applies if gw_mode client) */
atomic_t sel_class; atomic_t sel_class;
/**
* @bandwidth_down: advertised uplink download bandwidth (if gw_mode
* server)
*/
atomic_t bandwidth_down; atomic_t bandwidth_down;
/**
* @bandwidth_up: advertised uplink upload bandwidth (if gw_mode server)
*/
atomic_t bandwidth_up; atomic_t bandwidth_up;
/** @reselect: bool indicating a gateway re-selection is in progress */
atomic_t reselect; atomic_t reselect;
}; };
/** /**
* struct batadv_priv_tvlv - per mesh interface tvlv data * struct batadv_priv_tvlv - per mesh interface tvlv data
* @container_list: list of registered tvlv containers to be sent with each OGM
* @handler_list: list of the various tvlv content handlers
* @container_list_lock: protects tvlv container list access
* @handler_list_lock: protects handler list access
*/ */
struct batadv_priv_tvlv { struct batadv_priv_tvlv {
/**
* @container_list: list of registered tvlv containers to be sent with
* each OGM
*/
struct hlist_head container_list; struct hlist_head container_list;
/** @handler_list: list of the various tvlv content handlers */
struct hlist_head handler_list; struct hlist_head handler_list;
spinlock_t container_list_lock; /* protects container_list */
spinlock_t handler_list_lock; /* protects handler_list */ /** @container_list_lock: protects tvlv container list access */
spinlock_t container_list_lock;
/** @handler_list_lock: protects handler list access */
spinlock_t handler_list_lock;
}; };
#ifdef CONFIG_BATMAN_ADV_DAT #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
* @hash: hashtable representing the local ARP cache
* @work: work queue callback item for cache purging
*/ */
struct batadv_priv_dat { struct batadv_priv_dat {
/** @addr: node DAT address */
batadv_dat_addr_t addr; batadv_dat_addr_t addr;
/** @hash: hashtable representing the local ARP cache */
struct batadv_hashtable *hash; struct batadv_hashtable *hash;
/** @work: work queue callback item for cache purging */
struct delayed_work work; struct delayed_work work;
}; };
#endif #endif
...@@ -777,375 +1158,582 @@ struct batadv_priv_dat { ...@@ -777,375 +1158,582 @@ struct batadv_priv_dat {
#ifdef CONFIG_BATMAN_ADV_MCAST #ifdef CONFIG_BATMAN_ADV_MCAST
/** /**
* struct batadv_mcast_querier_state - IGMP/MLD querier state when bridged * struct batadv_mcast_querier_state - IGMP/MLD querier state when bridged
* @exists: whether a querier exists in the mesh
* @shadowing: if a querier exists, whether it is potentially shadowing
* multicast listeners (i.e. querier is behind our own bridge segment)
*/ */
struct batadv_mcast_querier_state { struct batadv_mcast_querier_state {
/** @exists: whether a querier exists in the mesh */
bool exists; bool exists;
/**
* @shadowing: if a querier exists, whether it is potentially shadowing
* multicast listeners (i.e. querier is behind our own bridge segment)
*/
bool shadowing; bool shadowing;
}; };
/** /**
* struct batadv_priv_mcast - per mesh interface mcast data * struct batadv_priv_mcast - per mesh interface mcast data
* @mla_list: list of multicast addresses we are currently announcing via TT
* @want_all_unsnoopables_list: a list of orig_nodes wanting all unsnoopable
* multicast traffic
* @want_all_ipv4_list: a list of orig_nodes wanting all IPv4 multicast traffic
* @want_all_ipv6_list: a list of orig_nodes wanting all IPv6 multicast traffic
* @querier_ipv4: the current state of an IGMP querier in the mesh
* @querier_ipv6: the current state of an MLD querier in the mesh
* @flags: the flags we have last sent in our mcast tvlv
* @enabled: whether the multicast tvlv is currently enabled
* @bridged: whether the soft interface has a bridge on top
* @num_disabled: number of nodes that have no mcast tvlv
* @num_want_all_unsnoopables: number of nodes wanting unsnoopable IP traffic
* @num_want_all_ipv4: counter for items in want_all_ipv4_list
* @num_want_all_ipv6: counter for items in want_all_ipv6_list
* @want_lists_lock: lock for protecting modifications to mcast want lists
* (traversals are rcu-locked)
* @work: work queue callback item for multicast TT and TVLV updates
*/ */
struct batadv_priv_mcast { struct batadv_priv_mcast {
/**
* @mla_list: list of multicast addresses we are currently announcing
* via TT
*/
struct hlist_head mla_list; /* see __batadv_mcast_mla_update() */ struct hlist_head mla_list; /* see __batadv_mcast_mla_update() */
/**
* @want_all_unsnoopables_list: a list of orig_nodes wanting all
* unsnoopable multicast traffic
*/
struct hlist_head want_all_unsnoopables_list; struct hlist_head want_all_unsnoopables_list;
/**
* @want_all_ipv4_list: a list of orig_nodes wanting all IPv4 multicast
* traffic
*/
struct hlist_head want_all_ipv4_list; struct hlist_head want_all_ipv4_list;
/**
* @want_all_ipv6_list: a list of orig_nodes wanting all IPv6 multicast
* traffic
*/
struct hlist_head want_all_ipv6_list; struct hlist_head want_all_ipv6_list;
/** @querier_ipv4: the current state of an IGMP querier in the mesh */
struct batadv_mcast_querier_state querier_ipv4; struct batadv_mcast_querier_state querier_ipv4;
/** @querier_ipv6: the current state of an MLD querier in the mesh */
struct batadv_mcast_querier_state querier_ipv6; struct batadv_mcast_querier_state querier_ipv6;
/** @flags: the flags we have last sent in our mcast tvlv */
u8 flags; u8 flags;
/** @enabled: whether the multicast tvlv is currently enabled */
bool enabled; bool enabled;
/** @bridged: whether the soft interface has a bridge on top */
bool bridged; bool bridged;
/** @num_disabled: number of nodes that have no mcast tvlv */
atomic_t num_disabled; atomic_t num_disabled;
/**
* @num_want_all_unsnoopables: number of nodes wanting unsnoopable IP
* traffic
*/
atomic_t num_want_all_unsnoopables; atomic_t num_want_all_unsnoopables;
/** @num_want_all_ipv4: counter for items in want_all_ipv4_list */
atomic_t num_want_all_ipv4; atomic_t num_want_all_ipv4;
/** @num_want_all_ipv6: counter for items in want_all_ipv6_list */
atomic_t num_want_all_ipv6; atomic_t num_want_all_ipv6;
/* protects want_all_{unsnoopables,ipv4,ipv6}_list */
/**
* @want_lists_lock: lock for protecting modifications to mcasts
* want_all_{unsnoopables,ipv4,ipv6}_list (traversals are rcu-locked)
*/
spinlock_t want_lists_lock; spinlock_t want_lists_lock;
/** @work: work queue callback item for multicast TT and TVLV updates */
struct delayed_work work; struct delayed_work work;
}; };
#endif #endif
/** /**
* struct batadv_priv_nc - per mesh interface network coding private data * struct batadv_priv_nc - per mesh interface network coding private data
* @work: work queue callback item for cleanup
* @debug_dir: dentry for nc subdir in batman-adv directory in debugfs
* @min_tq: only consider neighbors for encoding if neigh_tq > min_tq
* @max_fwd_delay: maximum packet forward delay to allow coding of packets
* @max_buffer_time: buffer time for sniffed packets used to decoding
* @timestamp_fwd_flush: timestamp of last forward packet queue flush
* @timestamp_sniffed_purge: timestamp of last sniffed packet queue purge
* @coding_hash: Hash table used to buffer skbs while waiting for another
* incoming skb to code it with. Skbs are added to the buffer just before being
* forwarded in routing.c
* @decoding_hash: Hash table used to buffer skbs that might be needed to decode
* a received coded skb. The buffer is used for 1) skbs arriving on the
* soft-interface; 2) skbs overheard on the hard-interface; and 3) skbs
* forwarded by batman-adv.
*/ */
struct batadv_priv_nc { struct batadv_priv_nc {
/** @work: work queue callback item for cleanup */
struct delayed_work work; struct delayed_work work;
/**
* @debug_dir: dentry for nc subdir in batman-adv directory in debugfs
*/
struct dentry *debug_dir; struct dentry *debug_dir;
/**
* @min_tq: only consider neighbors for encoding if neigh_tq > min_tq
*/
u8 min_tq; u8 min_tq;
/**
* @max_fwd_delay: maximum packet forward delay to allow coding of
* packets
*/
u32 max_fwd_delay; u32 max_fwd_delay;
/**
* @max_buffer_time: buffer time for sniffed packets used to decoding
*/
u32 max_buffer_time; u32 max_buffer_time;
/**
* @timestamp_fwd_flush: timestamp of last forward packet queue flush
*/
unsigned long timestamp_fwd_flush; unsigned long timestamp_fwd_flush;
/**
* @timestamp_sniffed_purge: timestamp of last sniffed packet queue
* purge
*/
unsigned long timestamp_sniffed_purge; unsigned long timestamp_sniffed_purge;
/**
* @coding_hash: Hash table used to buffer skbs while waiting for
* another incoming skb to code it with. Skbs are added to the buffer
* just before being forwarded in routing.c
*/
struct batadv_hashtable *coding_hash; struct batadv_hashtable *coding_hash;
/**
* @decoding_hash: Hash table used to buffer skbs that might be needed
* to decode a received coded skb. The buffer is used for 1) skbs
* arriving on the soft-interface; 2) skbs overheard on the
* hard-interface; and 3) skbs forwarded by batman-adv.
*/
struct batadv_hashtable *decoding_hash; struct batadv_hashtable *decoding_hash;
}; };
/** /**
* struct batadv_tp_unacked - unacked packet meta-information * struct batadv_tp_unacked - unacked packet meta-information
* @seqno: seqno of the unacked packet
* @len: length of the packet
* @list: list node for batadv_tp_vars::unacked_list
* *
* This struct is supposed to represent a buffer unacked packet. However, since * This struct is supposed to represent a buffer unacked packet. However, since
* the purpose of the TP meter is to count the traffic only, there is no need to * the purpose of the TP meter is to count the traffic only, there is no need to
* store the entire sk_buff, the starting offset and the length are enough * store the entire sk_buff, the starting offset and the length are enough
*/ */
struct batadv_tp_unacked { struct batadv_tp_unacked {
/** @seqno: seqno of the unacked packet */
u32 seqno; u32 seqno;
/** @len: length of the packet */
u16 len; u16 len;
/** @list: list node for &batadv_tp_vars.unacked_list */
struct list_head list; struct list_head list;
}; };
/** /**
* enum batadv_tp_meter_role - Modus in tp meter session * enum batadv_tp_meter_role - Modus in tp meter session
* @BATADV_TP_RECEIVER: Initialized as receiver
* @BATADV_TP_SENDER: Initialized as sender
*/ */
enum batadv_tp_meter_role { enum batadv_tp_meter_role {
/** @BATADV_TP_RECEIVER: Initialized as receiver */
BATADV_TP_RECEIVER, BATADV_TP_RECEIVER,
/** @BATADV_TP_SENDER: Initialized as sender */
BATADV_TP_SENDER BATADV_TP_SENDER
}; };
/** /**
* struct batadv_tp_vars - tp meter private variables per session * struct batadv_tp_vars - tp meter private variables per session
* @list: list node for bat_priv::tp_list
* @timer: timer for ack (receiver) and retry (sender)
* @bat_priv: pointer to the mesh object
* @start_time: start time in jiffies
* @other_end: mac address of remote
* @role: receiver/sender modi
* @sending: sending binary semaphore: 1 if sending, 0 is not
* @reason: reason for a stopped session
* @finish_work: work item for the finishing procedure
* @test_length: test length in milliseconds
* @session: TP session identifier
* @icmp_uid: local ICMP "socket" index
* @dec_cwnd: decimal part of the cwnd used during linear growth
* @cwnd: current size of the congestion window
* @cwnd_lock: lock do protect @cwnd & @dec_cwnd
* @ss_threshold: Slow Start threshold. Once cwnd exceeds this value the
* connection switches to the Congestion Avoidance state
* @last_acked: last acked byte
* @last_sent: last sent byte, not yet acked
* @tot_sent: amount of data sent/ACKed so far
* @dup_acks: duplicate ACKs counter
* @fast_recovery: true if in Fast Recovery mode
* @recover: last sent seqno when entering Fast Recovery
* @rto: sender timeout
* @srtt: smoothed RTT scaled by 2^3
* @rttvar: RTT variation scaled by 2^2
* @more_bytes: waiting queue anchor when waiting for more ack/retry timeout
* @prerandom_offset: offset inside the prerandom buffer
* @prerandom_lock: spinlock protecting access to prerandom_offset
* @last_recv: last in-order received packet
* @unacked_list: list of unacked packets (meta-info only)
* @unacked_lock: protect unacked_list
* @last_recv_time: time time (jiffies) a msg was received
* @refcount: number of context where the object is used
* @rcu: struct used for freeing in an RCU-safe manner
*/ */
struct batadv_tp_vars { struct batadv_tp_vars {
/** @list: list node for &bat_priv.tp_list */
struct hlist_node list; struct hlist_node list;
/** @timer: timer for ack (receiver) and retry (sender) */
struct timer_list timer; struct timer_list timer;
/** @bat_priv: pointer to the mesh object */
struct batadv_priv *bat_priv; struct batadv_priv *bat_priv;
/** @start_time: start time in jiffies */
unsigned long start_time; unsigned long start_time;
/** @other_end: mac address of remote */
u8 other_end[ETH_ALEN]; u8 other_end[ETH_ALEN];
/** @role: receiver/sender modi */
enum batadv_tp_meter_role role; enum batadv_tp_meter_role role;
/** @sending: sending binary semaphore: 1 if sending, 0 is not */
atomic_t sending; atomic_t sending;
/** @reason: reason for a stopped session */
enum batadv_tp_meter_reason reason; enum batadv_tp_meter_reason reason;
/** @finish_work: work item for the finishing procedure */
struct delayed_work finish_work; struct delayed_work finish_work;
/** @test_length: test length in milliseconds */
u32 test_length; u32 test_length;
/** @session: TP session identifier */
u8 session[2]; u8 session[2];
/** @icmp_uid: local ICMP "socket" index */
u8 icmp_uid; u8 icmp_uid;
/* sender variables */ /* sender variables */
/** @dec_cwnd: decimal part of the cwnd used during linear growth */
u16 dec_cwnd; u16 dec_cwnd;
/** @cwnd: current size of the congestion window */
u32 cwnd; u32 cwnd;
spinlock_t cwnd_lock; /* Protects cwnd & dec_cwnd */
/** @cwnd_lock: lock do protect @cwnd & @dec_cwnd */
spinlock_t cwnd_lock;
/**
* @ss_threshold: Slow Start threshold. Once cwnd exceeds this value the
* connection switches to the Congestion Avoidance state
*/
u32 ss_threshold; u32 ss_threshold;
/** @last_acked: last acked byte */
atomic_t last_acked; atomic_t last_acked;
/** @last_sent: last sent byte, not yet acked */
u32 last_sent; u32 last_sent;
/** @tot_sent: amount of data sent/ACKed so far */
atomic64_t tot_sent; atomic64_t tot_sent;
/** @dup_acks: duplicate ACKs counter */
atomic_t dup_acks; atomic_t dup_acks;
/** @fast_recovery: true if in Fast Recovery mode */
bool fast_recovery; bool fast_recovery;
/** @recover: last sent seqno when entering Fast Recovery */
u32 recover; u32 recover;
/** @rto: sender timeout */
u32 rto; u32 rto;
/** @srtt: smoothed RTT scaled by 2^3 */
u32 srtt; u32 srtt;
/** @rttvar: RTT variation scaled by 2^2 */
u32 rttvar; u32 rttvar;
/**
* @more_bytes: waiting queue anchor when waiting for more ack/retry
* timeout
*/
wait_queue_head_t more_bytes; wait_queue_head_t more_bytes;
/** @prerandom_offset: offset inside the prerandom buffer */
u32 prerandom_offset; u32 prerandom_offset;
spinlock_t prerandom_lock; /* Protects prerandom_offset */
/** @prerandom_lock: spinlock protecting access to prerandom_offset */
spinlock_t prerandom_lock;
/* receiver variables */ /* receiver variables */
/** @last_recv: last in-order received packet */
u32 last_recv; u32 last_recv;
/** @unacked_list: list of unacked packets (meta-info only) */
struct list_head unacked_list; struct list_head unacked_list;
spinlock_t unacked_lock; /* Protects unacked_list */
/** @unacked_lock: protect unacked_list */
spinlock_t unacked_lock;
/** @last_recv_time: time time (jiffies) a msg was received */
unsigned long last_recv_time; unsigned long last_recv_time;
/** @refcount: number of context where the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
/** /**
* struct batadv_softif_vlan - per VLAN attributes set * struct batadv_softif_vlan - per VLAN attributes set
* @bat_priv: pointer to the mesh object
* @vid: VLAN identifier
* @kobj: kobject for sysfs vlan subdirectory
* @ap_isolation: AP isolation state
* @tt: TT private attributes (VLAN specific)
* @list: list node for bat_priv::softif_vlan_list
* @refcount: number of context where this object is currently in use
* @rcu: struct used for freeing in a RCU-safe manner
*/ */
struct batadv_softif_vlan { struct batadv_softif_vlan {
/** @bat_priv: pointer to the mesh object */
struct batadv_priv *bat_priv; struct batadv_priv *bat_priv;
/** @vid: VLAN identifier */
unsigned short vid; unsigned short vid;
/** @kobj: kobject for sysfs vlan subdirectory */
struct kobject *kobj; struct kobject *kobj;
/** @ap_isolation: AP isolation state */
atomic_t ap_isolation; /* boolean */ atomic_t ap_isolation; /* boolean */
/** @tt: TT private attributes (VLAN specific) */
struct batadv_vlan_tt tt; struct batadv_vlan_tt tt;
/** @list: list node for &bat_priv.softif_vlan_list */
struct hlist_node list; struct hlist_node list;
/**
* @refcount: number of context where this object is currently in use
*/
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in a RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
/** /**
* struct batadv_priv_bat_v - B.A.T.M.A.N. V per soft-interface private data * struct batadv_priv_bat_v - B.A.T.M.A.N. V per soft-interface private data
* @ogm_buff: buffer holding the OGM packet
* @ogm_buff_len: length of the OGM packet buffer
* @ogm_seqno: OGM sequence number - used to identify each OGM
* @ogm_wq: workqueue used to schedule OGM transmissions
*/ */
struct batadv_priv_bat_v { struct batadv_priv_bat_v {
/** @ogm_buff: buffer holding the OGM packet */
unsigned char *ogm_buff; unsigned char *ogm_buff;
/** @ogm_buff_len: length of the OGM packet buffer */
int ogm_buff_len; int ogm_buff_len;
/** @ogm_seqno: OGM sequence number - used to identify each OGM */
atomic_t ogm_seqno; atomic_t ogm_seqno;
/** @ogm_wq: workqueue used to schedule OGM transmissions */
struct delayed_work ogm_wq; struct delayed_work ogm_wq;
}; };
/** /**
* struct batadv_priv - per mesh interface data * struct batadv_priv - per mesh interface data
* @mesh_state: current status of the mesh (inactive/active/deactivating)
* @soft_iface: net device which holds this struct as private data
* @bat_counters: mesh internal traffic statistic counters (see batadv_counters)
* @aggregated_ogms: bool indicating whether OGM aggregation is enabled
* @bonding: bool indicating whether traffic bonding is enabled
* @fragmentation: bool indicating whether traffic fragmentation is enabled
* @packet_size_max: max packet size that can be transmitted via
* multiple fragmented skbs or a single frame if fragmentation is disabled
* @frag_seqno: incremental counter to identify chains of egress fragments
* @bridge_loop_avoidance: bool indicating whether bridge loop avoidance is
* enabled
* @distributed_arp_table: bool indicating whether distributed ARP table is
* enabled
* @multicast_mode: Enable or disable multicast optimizations on this node's
* sender/originating side
* @orig_interval: OGM broadcast interval in milliseconds
* @hop_penalty: penalty which will be applied to an OGM's tq-field on every hop
* @log_level: configured log level (see batadv_dbg_level)
* @isolation_mark: the skb->mark value used to match packets for AP isolation
* @isolation_mark_mask: bitmask identifying the bits in skb->mark to be used
* for the isolation mark
* @bcast_seqno: last sent broadcast packet sequence number
* @bcast_queue_left: number of remaining buffered broadcast packet slots
* @batman_queue_left: number of remaining OGM packet slots
* @num_ifaces: number of interfaces assigned to this mesh interface
* @mesh_obj: kobject for sysfs mesh subdirectory
* @debug_dir: dentry for debugfs batman-adv subdirectory
* @forw_bat_list: list of aggregated OGMs that will be forwarded
* @forw_bcast_list: list of broadcast packets that will be rebroadcasted
* @tp_list: list of tp sessions
* @tp_num: number of currently active tp sessions
* @orig_hash: hash table containing mesh participants (orig nodes)
* @forw_bat_list_lock: lock protecting forw_bat_list
* @forw_bcast_list_lock: lock protecting forw_bcast_list
* @tp_list_lock: spinlock protecting @tp_list
* @orig_work: work queue callback item for orig node purging
* @primary_if: one of the hard-interfaces assigned to this mesh interface
* becomes the primary interface
* @algo_ops: routing algorithm used by this mesh interface
* @softif_vlan_list: a list of softif_vlan structs, one per VLAN created on top
* of the mesh interface represented by this object
* @softif_vlan_list_lock: lock protecting softif_vlan_list
* @bla: bridge loope avoidance data
* @debug_log: holding debug logging relevant data
* @gw: gateway data
* @tt: translation table data
* @tvlv: type-version-length-value data
* @dat: distributed arp table data
* @mcast: multicast data
* @network_coding: bool indicating whether network coding is enabled
* @nc: network coding data
* @bat_v: B.A.T.M.A.N. V per soft-interface private data
*/ */
struct batadv_priv { struct batadv_priv {
/**
* @mesh_state: current status of the mesh
* (inactive/active/deactivating)
*/
atomic_t mesh_state; atomic_t mesh_state;
/** @soft_iface: net device which holds this struct as private data */
struct net_device *soft_iface; struct net_device *soft_iface;
/**
* @bat_counters: mesh internal traffic statistic counters (see
* batadv_counters)
*/
u64 __percpu *bat_counters; /* Per cpu counters */ u64 __percpu *bat_counters; /* Per cpu counters */
/**
* @aggregated_ogms: bool indicating whether OGM aggregation is enabled
*/
atomic_t aggregated_ogms; atomic_t aggregated_ogms;
/** @bonding: bool indicating whether traffic bonding is enabled */
atomic_t bonding; atomic_t bonding;
/**
* @fragmentation: bool indicating whether traffic fragmentation is
* enabled
*/
atomic_t fragmentation; atomic_t fragmentation;
/**
* @packet_size_max: max packet size that can be transmitted via
* multiple fragmented skbs or a single frame if fragmentation is
* disabled
*/
atomic_t packet_size_max; atomic_t packet_size_max;
/**
* @frag_seqno: incremental counter to identify chains of egress
* fragments
*/
atomic_t frag_seqno; atomic_t frag_seqno;
#ifdef CONFIG_BATMAN_ADV_BLA #ifdef CONFIG_BATMAN_ADV_BLA
/**
* @bridge_loop_avoidance: bool indicating whether bridge loop
* avoidance is enabled
*/
atomic_t bridge_loop_avoidance; atomic_t bridge_loop_avoidance;
#endif #endif
#ifdef CONFIG_BATMAN_ADV_DAT #ifdef CONFIG_BATMAN_ADV_DAT
/**
* @distributed_arp_table: bool indicating whether distributed ARP table
* is enabled
*/
atomic_t distributed_arp_table; atomic_t distributed_arp_table;
#endif #endif
#ifdef CONFIG_BATMAN_ADV_MCAST #ifdef CONFIG_BATMAN_ADV_MCAST
/**
* @multicast_mode: Enable or disable multicast optimizations on this
* node's sender/originating side
*/
atomic_t multicast_mode; atomic_t multicast_mode;
#endif #endif
/** @orig_interval: OGM broadcast interval in milliseconds */
atomic_t orig_interval; atomic_t orig_interval;
/**
* @hop_penalty: penalty which will be applied to an OGM's tq-field on
* every hop
*/
atomic_t hop_penalty; atomic_t hop_penalty;
#ifdef CONFIG_BATMAN_ADV_DEBUG #ifdef CONFIG_BATMAN_ADV_DEBUG
/** @log_level: configured log level (see batadv_dbg_level) */
atomic_t log_level; atomic_t log_level;
#endif #endif
/**
* @isolation_mark: the skb->mark value used to match packets for AP
* isolation
*/
u32 isolation_mark; u32 isolation_mark;
/**
* @isolation_mark_mask: bitmask identifying the bits in skb->mark to be
* used for the isolation mark
*/
u32 isolation_mark_mask; u32 isolation_mark_mask;
/** @bcast_seqno: last sent broadcast packet sequence number */
atomic_t bcast_seqno; atomic_t bcast_seqno;
/**
* @bcast_queue_left: number of remaining buffered broadcast packet
* slots
*/
atomic_t bcast_queue_left; atomic_t bcast_queue_left;
/** @batman_queue_left: number of remaining OGM packet slots */
atomic_t batman_queue_left; atomic_t batman_queue_left;
/** @num_ifaces: number of interfaces assigned to this mesh interface */
char num_ifaces; char num_ifaces;
/** @mesh_obj: kobject for sysfs mesh subdirectory */
struct kobject *mesh_obj; struct kobject *mesh_obj;
/** @debug_dir: dentry for debugfs batman-adv subdirectory */
struct dentry *debug_dir; struct dentry *debug_dir;
/** @forw_bat_list: list of aggregated OGMs that will be forwarded */
struct hlist_head forw_bat_list; struct hlist_head forw_bat_list;
/**
* @forw_bcast_list: list of broadcast packets that will be
* rebroadcasted
*/
struct hlist_head forw_bcast_list; struct hlist_head forw_bcast_list;
/** @tp_list: list of tp sessions */
struct hlist_head tp_list; struct hlist_head tp_list;
/** @tp_num: number of currently active tp sessions */
struct batadv_hashtable *orig_hash; struct batadv_hashtable *orig_hash;
spinlock_t forw_bat_list_lock; /* protects forw_bat_list */
spinlock_t forw_bcast_list_lock; /* protects forw_bcast_list */ /** @orig_hash: hash table containing mesh participants (orig nodes) */
spinlock_t tp_list_lock; /* protects tp_list */ spinlock_t forw_bat_list_lock;
/** @forw_bat_list_lock: lock protecting forw_bat_list */
spinlock_t forw_bcast_list_lock;
/** @forw_bcast_list_lock: lock protecting forw_bcast_list */
spinlock_t tp_list_lock;
/** @tp_list_lock: spinlock protecting @tp_list */
atomic_t tp_num; atomic_t tp_num;
/** @orig_work: work queue callback item for orig node purging */
struct delayed_work orig_work; struct delayed_work orig_work;
/**
* @primary_if: one of the hard-interfaces assigned to this mesh
* interface becomes the primary interface
*/
struct batadv_hard_iface __rcu *primary_if; /* rcu protected pointer */ struct batadv_hard_iface __rcu *primary_if; /* rcu protected pointer */
/** @algo_ops: routing algorithm used by this mesh interface */
struct batadv_algo_ops *algo_ops; struct batadv_algo_ops *algo_ops;
/**
* @softif_vlan_list: a list of softif_vlan structs, one per VLAN
* created on top of the mesh interface represented by this object
*/
struct hlist_head softif_vlan_list; struct hlist_head softif_vlan_list;
spinlock_t softif_vlan_list_lock; /* protects softif_vlan_list */
/** @softif_vlan_list_lock: lock protecting softif_vlan_list */
spinlock_t softif_vlan_list_lock;
#ifdef CONFIG_BATMAN_ADV_BLA #ifdef CONFIG_BATMAN_ADV_BLA
/** @bla: bridge loope avoidance data */
struct batadv_priv_bla bla; struct batadv_priv_bla bla;
#endif #endif
#ifdef CONFIG_BATMAN_ADV_DEBUG #ifdef CONFIG_BATMAN_ADV_DEBUG
/** @debug_log: holding debug logging relevant data */
struct batadv_priv_debug_log *debug_log; struct batadv_priv_debug_log *debug_log;
#endif #endif
/** @gw: gateway data */
struct batadv_priv_gw gw; struct batadv_priv_gw gw;
/** @tt: translation table data */
struct batadv_priv_tt tt; struct batadv_priv_tt tt;
/** @tvlv: type-version-length-value data */
struct batadv_priv_tvlv tvlv; struct batadv_priv_tvlv tvlv;
#ifdef CONFIG_BATMAN_ADV_DAT #ifdef CONFIG_BATMAN_ADV_DAT
/** @dat: distributed arp table data */
struct batadv_priv_dat dat; struct batadv_priv_dat dat;
#endif #endif
#ifdef CONFIG_BATMAN_ADV_MCAST #ifdef CONFIG_BATMAN_ADV_MCAST
/** @mcast: multicast data */
struct batadv_priv_mcast mcast; struct batadv_priv_mcast mcast;
#endif #endif
#ifdef CONFIG_BATMAN_ADV_NC #ifdef CONFIG_BATMAN_ADV_NC
/**
* @network_coding: bool indicating whether network coding is enabled
*/
atomic_t network_coding; atomic_t network_coding;
/** @nc: network coding data */
struct batadv_priv_nc nc; struct batadv_priv_nc nc;
#endif /* CONFIG_BATMAN_ADV_NC */ #endif /* CONFIG_BATMAN_ADV_NC */
#ifdef CONFIG_BATMAN_ADV_BATMAN_V #ifdef CONFIG_BATMAN_ADV_BATMAN_V
/** @bat_v: B.A.T.M.A.N. V per soft-interface private data */
struct batadv_priv_bat_v bat_v; struct batadv_priv_bat_v bat_v;
#endif #endif
}; };
/** /**
* struct batadv_socket_client - layer2 icmp socket client data * struct batadv_socket_client - layer2 icmp socket client data
* @queue_list: packet queue for packets destined for this socket client
* @queue_len: number of packets in the packet queue (queue_list)
* @index: socket client's index in the batadv_socket_client_hash
* @lock: lock protecting queue_list, queue_len & index
* @queue_wait: socket client's wait queue
* @bat_priv: pointer to soft_iface this client belongs to
*/ */
struct batadv_socket_client { struct batadv_socket_client {
/**
* @queue_list: packet queue for packets destined for this socket client
*/
struct list_head queue_list; struct list_head queue_list;
/** @queue_len: number of packets in the packet queue (queue_list) */
unsigned int queue_len; unsigned int queue_len;
/** @index: socket client's index in the batadv_socket_client_hash */
unsigned char index; unsigned char index;
spinlock_t lock; /* protects queue_list, queue_len & index */
/** @lock: lock protecting queue_list, queue_len & index */
spinlock_t lock;
/** @queue_wait: socket client's wait queue */
wait_queue_head_t queue_wait; wait_queue_head_t queue_wait;
/** @bat_priv: pointer to soft_iface this client belongs to */
struct batadv_priv *bat_priv; struct batadv_priv *bat_priv;
}; };
/** /**
* struct batadv_socket_packet - layer2 icmp packet for socket client * struct batadv_socket_packet - layer2 icmp packet for socket client
* @list: list node for batadv_socket_client::queue_list
* @icmp_len: size of the layer2 icmp packet
* @icmp_packet: layer2 icmp packet
*/ */
struct batadv_socket_packet { struct batadv_socket_packet {
/** @list: list node for &batadv_socket_client.queue_list */
struct list_head list; struct list_head list;
/** @icmp_len: size of the layer2 icmp packet */
size_t icmp_len; size_t icmp_len;
/** @icmp_packet: layer2 icmp packet */
u8 icmp_packet[BATADV_ICMP_MAX_PACKET_SIZE]; u8 icmp_packet[BATADV_ICMP_MAX_PACKET_SIZE];
}; };
...@@ -1153,312 +1741,432 @@ struct batadv_socket_packet { ...@@ -1153,312 +1741,432 @@ struct batadv_socket_packet {
/** /**
* 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)
* @vid: vlan id this gateway was detected on
* @hash_entry: hlist node for batadv_priv_bla::backbone_hash
* @bat_priv: pointer to soft_iface this backbone gateway belongs to
* @lasttime: last time we heard of this backbone gw
* @wait_periods: grace time for bridge forward delays and bla group forming at
* bootup phase - no bcast traffic is formwared until it has elapsed
* @request_sent: if this bool is set to true we are out of sync with this
* backbone gateway - no bcast traffic is formwared until the situation was
* resolved
* @crc: crc16 checksum over all claims
* @crc_lock: lock protecting crc
* @report_work: work struct for reporting detected loops
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner
*/ */
struct batadv_bla_backbone_gw { struct batadv_bla_backbone_gw {
/**
* @orig: originator address of backbone node (mac address of primary
* iface)
*/
u8 orig[ETH_ALEN]; u8 orig[ETH_ALEN];
/** @vid: vlan id this gateway was detected on */
unsigned short vid; unsigned short vid;
/** @hash_entry: hlist node for &batadv_priv_bla.backbone_hash */
struct hlist_node hash_entry; struct hlist_node hash_entry;
/** @bat_priv: pointer to soft_iface this backbone gateway belongs to */
struct batadv_priv *bat_priv; struct batadv_priv *bat_priv;
/** @lasttime: last time we heard of this backbone gw */
unsigned long lasttime; unsigned long lasttime;
/**
* @wait_periods: grace time for bridge forward delays and bla group
* forming at bootup phase - no bcast traffic is formwared until it has
* elapsed
*/
atomic_t wait_periods; atomic_t wait_periods;
/**
* @request_sent: if this bool is set to true we are out of sync with
* this backbone gateway - no bcast traffic is formwared until the
* situation was resolved
*/
atomic_t request_sent; atomic_t request_sent;
/** @crc: crc16 checksum over all claims */
u16 crc; u16 crc;
spinlock_t crc_lock; /* protects crc */
/** @crc_lock: lock protecting crc */
spinlock_t crc_lock;
/** @report_work: work struct for reporting detected loops */
struct work_struct report_work; struct work_struct report_work;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
/** /**
* 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
* @vid: vlan id this client was detected on
* @backbone_gw: pointer to backbone gw claiming this client
* @backbone_lock: lock protecting backbone_gw pointer
* @lasttime: last time we heard of claim (locals only)
* @hash_entry: hlist node for batadv_priv_bla::claim_hash
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner
*/ */
struct batadv_bla_claim { struct batadv_bla_claim {
/** @addr: mac address of claimed non-mesh client */
u8 addr[ETH_ALEN]; u8 addr[ETH_ALEN];
/** @vid: vlan id this client was detected on */
unsigned short vid; unsigned short vid;
/** @backbone_gw: pointer to backbone gw claiming this client */
struct batadv_bla_backbone_gw *backbone_gw; struct batadv_bla_backbone_gw *backbone_gw;
spinlock_t backbone_lock; /* protects backbone_gw */
/** @backbone_lock: lock protecting backbone_gw pointer */
spinlock_t backbone_lock;
/** @lasttime: last time we heard of claim (locals only) */
unsigned long lasttime; unsigned long lasttime;
/** @hash_entry: hlist node for &batadv_priv_bla.claim_hash */
struct hlist_node hash_entry; struct hlist_node hash_entry;
/** @refcount: number of contexts the object is used */
struct rcu_head rcu; struct rcu_head rcu;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct kref refcount; struct kref refcount;
}; };
#endif #endif
/** /**
* struct batadv_tt_common_entry - tt local & tt global common data * struct batadv_tt_common_entry - tt local & tt global common data
* @addr: mac address of non-mesh client
* @vid: VLAN identifier
* @hash_entry: hlist node for batadv_priv_tt::local_hash or for
* batadv_priv_tt::global_hash
* @flags: various state handling flags (see batadv_tt_client_flags)
* @added_at: timestamp used for purging stale tt common entries
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner
*/ */
struct batadv_tt_common_entry { struct batadv_tt_common_entry {
/** @addr: mac address of non-mesh client */
u8 addr[ETH_ALEN]; u8 addr[ETH_ALEN];
/** @vid: VLAN identifier */
unsigned short vid; unsigned short vid;
/**
* @hash_entry: hlist node for &batadv_priv_tt.local_hash or for
* &batadv_priv_tt.global_hash
*/
struct hlist_node hash_entry; struct hlist_node hash_entry;
/** @flags: various state handling flags (see batadv_tt_client_flags) */
u16 flags; u16 flags;
/** @added_at: timestamp used for purging stale tt common entries */
unsigned long added_at; unsigned long added_at;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
/** /**
* struct batadv_tt_local_entry - translation table local entry data * struct batadv_tt_local_entry - translation table local entry data
* @common: general translation table data
* @last_seen: timestamp used for purging stale tt local entries
* @vlan: soft-interface vlan of the entry
*/ */
struct batadv_tt_local_entry { struct batadv_tt_local_entry {
/** @common: general translation table data */
struct batadv_tt_common_entry common; struct batadv_tt_common_entry common;
/** @last_seen: timestamp used for purging stale tt local entries */
unsigned long last_seen; unsigned long last_seen;
/** @vlan: soft-interface vlan of the entry */
struct batadv_softif_vlan *vlan; struct batadv_softif_vlan *vlan;
}; };
/** /**
* struct batadv_tt_global_entry - translation table global entry data * struct batadv_tt_global_entry - translation table global entry data
* @common: general translation table data
* @orig_list: list of orig nodes announcing this non-mesh client
* @orig_list_count: number of items in the orig_list
* @list_lock: lock protecting orig_list
* @roam_at: time at which TT_GLOBAL_ROAM was set
*/ */
struct batadv_tt_global_entry { struct batadv_tt_global_entry {
/** @common: general translation table data */
struct batadv_tt_common_entry common; struct batadv_tt_common_entry common;
/** @orig_list: list of orig nodes announcing this non-mesh client */
struct hlist_head orig_list; struct hlist_head orig_list;
/** @orig_list_count: number of items in the orig_list */
atomic_t orig_list_count; atomic_t orig_list_count;
spinlock_t list_lock; /* protects orig_list */
/** @list_lock: lock protecting orig_list */
spinlock_t list_lock;
/** @roam_at: time at which TT_GLOBAL_ROAM was set */
unsigned long roam_at; unsigned long roam_at;
}; };
/** /**
* struct batadv_tt_orig_list_entry - orig node announcing a non-mesh client * struct batadv_tt_orig_list_entry - orig node announcing a non-mesh client
* @orig_node: pointer to orig node announcing this non-mesh client
* @ttvn: translation table version number which added the non-mesh client
* @flags: per orig entry TT sync flags
* @list: list node for batadv_tt_global_entry::orig_list
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner
*/ */
struct batadv_tt_orig_list_entry { struct batadv_tt_orig_list_entry {
/** @orig_node: pointer to orig node announcing this non-mesh client */
struct batadv_orig_node *orig_node; struct batadv_orig_node *orig_node;
/**
* @ttvn: translation table version number which added the non-mesh
* client
*/
u8 ttvn; u8 ttvn;
/** @flags: per orig entry TT sync flags */
u8 flags; u8 flags;
/** @list: list node for &batadv_tt_global_entry.orig_list */
struct hlist_node list; struct hlist_node list;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
/** /**
* struct batadv_tt_change_node - structure for tt changes occurred * struct batadv_tt_change_node - structure for tt changes occurred
* @list: list node for batadv_priv_tt::changes_list
* @change: holds the actual translation table diff data
*/ */
struct batadv_tt_change_node { struct batadv_tt_change_node {
/** @list: list node for &batadv_priv_tt.changes_list */
struct list_head list; struct list_head list;
/** @change: holds the actual translation table diff data */
struct batadv_tvlv_tt_change change; struct batadv_tvlv_tt_change change;
}; };
/** /**
* struct batadv_tt_req_node - data to keep track of the tt requests in flight * struct batadv_tt_req_node - data to keep track of the tt requests in flight
* @addr: mac address address of the originator this request was sent to
* @issued_at: timestamp used for purging stale tt requests
* @refcount: number of contexts the object is used by
* @list: list node for batadv_priv_tt::req_list
*/ */
struct batadv_tt_req_node { struct batadv_tt_req_node {
/**
* @addr: mac address address of the originator this request was sent to
*/
u8 addr[ETH_ALEN]; u8 addr[ETH_ALEN];
/** @issued_at: timestamp used for purging stale tt requests */
unsigned long issued_at; unsigned long issued_at;
/** @refcount: number of contexts the object is used by */
struct kref refcount; struct kref refcount;
/** @list: list node for &batadv_priv_tt.req_list */
struct hlist_node list; struct hlist_node list;
}; };
/** /**
* struct batadv_tt_roam_node - roaming client data * struct batadv_tt_roam_node - roaming client data
* @addr: mac address of the client in the roaming phase
* @counter: number of allowed roaming events per client within a single
* OGM interval (changes are committed with each OGM)
* @first_time: timestamp used for purging stale roaming node entries
* @list: list node for batadv_priv_tt::roam_list
*/ */
struct batadv_tt_roam_node { struct batadv_tt_roam_node {
/** @addr: mac address of the client in the roaming phase */
u8 addr[ETH_ALEN]; u8 addr[ETH_ALEN];
/**
* @counter: number of allowed roaming events per client within a single
* OGM interval (changes are committed with each OGM)
*/
atomic_t counter; atomic_t counter;
/**
* @first_time: timestamp used for purging stale roaming node entries
*/
unsigned long first_time; unsigned long first_time;
/** @list: list node for &batadv_priv_tt.roam_list */
struct list_head list; struct list_head list;
}; };
/** /**
* struct batadv_nc_node - network coding node * struct batadv_nc_node - network coding node
* @list: next and prev pointer for the list handling
* @addr: the node's mac address
* @refcount: number of contexts the object is used by
* @rcu: struct used for freeing in an RCU-safe manner
* @orig_node: pointer to corresponding orig node struct
* @last_seen: timestamp of last ogm received from this node
*/ */
struct batadv_nc_node { struct batadv_nc_node {
/** @list: next and prev pointer for the list handling */
struct list_head list; struct list_head list;
/** @addr: the node's mac address */
u8 addr[ETH_ALEN]; u8 addr[ETH_ALEN];
/** @refcount: number of contexts the object is used by */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
/** @orig_node: pointer to corresponding orig node struct */
struct batadv_orig_node *orig_node; struct batadv_orig_node *orig_node;
/** @last_seen: timestamp of last ogm received from this node */
unsigned long last_seen; unsigned long last_seen;
}; };
/** /**
* struct batadv_nc_path - network coding path * struct batadv_nc_path - network coding path
* @hash_entry: next and prev pointer for the list handling
* @rcu: struct used for freeing in an RCU-safe manner
* @refcount: number of contexts the object is used by
* @packet_list: list of buffered packets for this path
* @packet_list_lock: access lock for packet list
* @next_hop: next hop (destination) of path
* @prev_hop: previous hop (source) of path
* @last_valid: timestamp for last validation of path
*/ */
struct batadv_nc_path { struct batadv_nc_path {
/** @hash_entry: next and prev pointer for the list handling */
struct hlist_node hash_entry; struct hlist_node hash_entry;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
/** @refcount: number of contexts the object is used by */
struct kref refcount; struct kref refcount;
/** @packet_list: list of buffered packets for this path */
struct list_head packet_list; struct list_head packet_list;
spinlock_t packet_list_lock; /* Protects packet_list */
/** @packet_list_lock: access lock for packet list */
spinlock_t packet_list_lock;
/** @next_hop: next hop (destination) of path */
u8 next_hop[ETH_ALEN]; u8 next_hop[ETH_ALEN];
/** @prev_hop: previous hop (source) of path */
u8 prev_hop[ETH_ALEN]; u8 prev_hop[ETH_ALEN];
/** @last_valid: timestamp for last validation of path */
unsigned long last_valid; unsigned long last_valid;
}; };
/** /**
* struct batadv_nc_packet - network coding packet used when coding and * struct batadv_nc_packet - network coding packet used when coding and
* decoding packets * decoding packets
* @list: next and prev pointer for the list handling
* @packet_id: crc32 checksum of skb data
* @timestamp: field containing the info when the packet was added to path
* @neigh_node: pointer to original next hop neighbor of skb
* @skb: skb which can be encoded or used for decoding
* @nc_path: pointer to path this nc packet is attached to
*/ */
struct batadv_nc_packet { struct batadv_nc_packet {
/** @list: next and prev pointer for the list handling */
struct list_head list; struct list_head list;
/** @packet_id: crc32 checksum of skb data */
__be32 packet_id; __be32 packet_id;
/**
* @timestamp: field containing the info when the packet was added to
* path
*/
unsigned long timestamp; unsigned long timestamp;
/** @neigh_node: pointer to original next hop neighbor of skb */
struct batadv_neigh_node *neigh_node; struct batadv_neigh_node *neigh_node;
/** @skb: skb which can be encoded or used for decoding */
struct sk_buff *skb; struct sk_buff *skb;
/** @nc_path: pointer to path this nc packet is attached to */
struct batadv_nc_path *nc_path; struct batadv_nc_path *nc_path;
}; };
/** /**
* struct batadv_skb_cb - control buffer structure used to store private data * struct batadv_skb_cb - control buffer structure used to store private data
* relevant to batman-adv in the skb->cb buffer in skbs. * relevant to batman-adv in the skb->cb buffer in skbs.
* @decoded: Marks a skb as decoded, which is checked when searching for coding
* opportunities in network-coding.c
* @num_bcasts: Counter for broadcast packet retransmissions
*/ */
struct batadv_skb_cb { struct batadv_skb_cb {
/**
* @decoded: Marks a skb as decoded, which is checked when searching for
* coding opportunities in network-coding.c
*/
bool decoded; bool decoded;
/** @num_bcasts: Counter for broadcast packet retransmissions */
unsigned int num_bcasts; unsigned int num_bcasts;
}; };
/** /**
* struct batadv_forw_packet - structure for bcast packets to be sent/forwarded * struct batadv_forw_packet - structure for bcast packets to be sent/forwarded
* @list: list node for batadv_priv::forw_{bat,bcast}_list
* @cleanup_list: list node for purging functions
* @send_time: execution time for delayed_work (packet sending)
* @own: bool for locally generated packets (local OGMs are re-scheduled after
* sending)
* @skb: bcast packet's skb buffer
* @packet_len: size of aggregated OGM packet inside the skb buffer
* @direct_link_flags: direct link flags for aggregated OGM packets
* @num_packets: counter for aggregated OGMv1 packets
* @delayed_work: work queue callback item for packet sending
* @if_incoming: pointer to incoming hard-iface or primary iface if
* locally generated packet
* @if_outgoing: packet where the packet should be sent to, or NULL if
* unspecified
* @queue_left: The queue (counter) this packet was applied to
*/ */
struct batadv_forw_packet { struct batadv_forw_packet {
/**
* @list: list node for &batadv_priv.forw.bcast_list and
* &batadv_priv.forw.bat_list
*/
struct hlist_node list; struct hlist_node list;
/** @cleanup_list: list node for purging functions */
struct hlist_node cleanup_list; struct hlist_node cleanup_list;
/** @send_time: execution time for delayed_work (packet sending) */
unsigned long send_time; unsigned long send_time;
/**
* @own: bool for locally generated packets (local OGMs are re-scheduled
* after sending)
*/
u8 own; u8 own;
/** @skb: bcast packet's skb buffer */
struct sk_buff *skb; struct sk_buff *skb;
/** @packet_len: size of aggregated OGM packet inside the skb buffer */
u16 packet_len; u16 packet_len;
/** @direct_link_flags: direct link flags for aggregated OGM packets */
u32 direct_link_flags; u32 direct_link_flags;
/** @num_packets: counter for aggregated OGMv1 packets */
u8 num_packets; u8 num_packets;
/** @delayed_work: work queue callback item for packet sending */
struct delayed_work delayed_work; struct delayed_work delayed_work;
/**
* @if_incoming: pointer to incoming hard-iface or primary iface if
* locally generated packet
*/
struct batadv_hard_iface *if_incoming; struct batadv_hard_iface *if_incoming;
/**
* @if_outgoing: packet where the packet should be sent to, or NULL if
* unspecified
*/
struct batadv_hard_iface *if_outgoing; struct batadv_hard_iface *if_outgoing;
/** @queue_left: The queue (counter) this packet was applied to */
atomic_t *queue_left; atomic_t *queue_left;
}; };
/** /**
* struct batadv_algo_iface_ops - mesh algorithm callbacks (interface specific) * struct batadv_algo_iface_ops - mesh algorithm callbacks (interface specific)
*/
struct batadv_algo_iface_ops {
/**
* @activate: start routing mechanisms when hard-interface is brought up * @activate: start routing mechanisms when hard-interface is brought up
* (optional) * (optional)
* @enable: init routing info when hard-interface is enabled
* @disable: de-init routing info when hard-interface is disabled
* @update_mac: (re-)init mac addresses of the protocol information
* belonging to this hard-interface
* @primary_set: called when primary interface is selected / changed
*/ */
struct batadv_algo_iface_ops {
void (*activate)(struct batadv_hard_iface *hard_iface); void (*activate)(struct batadv_hard_iface *hard_iface);
/** @enable: init routing info when hard-interface is enabled */
int (*enable)(struct batadv_hard_iface *hard_iface); int (*enable)(struct batadv_hard_iface *hard_iface);
/** @disable: de-init routing info when hard-interface is disabled */
void (*disable)(struct batadv_hard_iface *hard_iface); void (*disable)(struct batadv_hard_iface *hard_iface);
/**
* @update_mac: (re-)init mac addresses of the protocol information
* belonging to this hard-interface
*/
void (*update_mac)(struct batadv_hard_iface *hard_iface); void (*update_mac)(struct batadv_hard_iface *hard_iface);
/** @primary_set: called when primary interface is selected / changed */
void (*primary_set)(struct batadv_hard_iface *hard_iface); void (*primary_set)(struct batadv_hard_iface *hard_iface);
}; };
/** /**
* struct batadv_algo_neigh_ops - mesh algorithm callbacks (neighbour specific) * struct batadv_algo_neigh_ops - mesh algorithm callbacks (neighbour specific)
* @hardif_init: called on creation of single hop entry
* (optional)
* @cmp: compare the metrics of two neighbors for their respective outgoing
* interfaces
* @is_similar_or_better: check if neigh1 is equally similar or better than
* neigh2 for their respective outgoing interface from the metric prospective
* @print: print the single hop neighbor list (optional)
* @dump: dump neighbors to a netlink socket (optional)
*/ */
struct batadv_algo_neigh_ops { struct batadv_algo_neigh_ops {
/** @hardif_init: called on creation of single hop entry (optional) */
void (*hardif_init)(struct batadv_hardif_neigh_node *neigh); void (*hardif_init)(struct batadv_hardif_neigh_node *neigh);
/**
* @cmp: compare the metrics of two neighbors for their respective
* outgoing interfaces
*/
int (*cmp)(struct batadv_neigh_node *neigh1, int (*cmp)(struct batadv_neigh_node *neigh1,
struct batadv_hard_iface *if_outgoing1, struct batadv_hard_iface *if_outgoing1,
struct batadv_neigh_node *neigh2, struct batadv_neigh_node *neigh2,
struct batadv_hard_iface *if_outgoing2); struct batadv_hard_iface *if_outgoing2);
/**
* @is_similar_or_better: check if neigh1 is equally similar or better
* than neigh2 for their respective outgoing interface from the metric
* prospective
*/
bool (*is_similar_or_better)(struct batadv_neigh_node *neigh1, bool (*is_similar_or_better)(struct batadv_neigh_node *neigh1,
struct batadv_hard_iface *if_outgoing1, struct batadv_hard_iface *if_outgoing1,
struct batadv_neigh_node *neigh2, struct batadv_neigh_node *neigh2,
struct batadv_hard_iface *if_outgoing2); struct batadv_hard_iface *if_outgoing2);
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** @print: print the single hop neighbor list (optional) */
void (*print)(struct batadv_priv *priv, struct seq_file *seq); void (*print)(struct batadv_priv *priv, struct seq_file *seq);
#endif #endif
/** @dump: dump neighbors to a netlink socket (optional) */
void (*dump)(struct sk_buff *msg, struct netlink_callback *cb, void (*dump)(struct sk_buff *msg, struct netlink_callback *cb,
struct batadv_priv *priv, struct batadv_priv *priv,
struct batadv_hard_iface *hard_iface); struct batadv_hard_iface *hard_iface);
...@@ -1466,24 +2174,36 @@ struct batadv_algo_neigh_ops { ...@@ -1466,24 +2174,36 @@ struct batadv_algo_neigh_ops {
/** /**
* struct batadv_algo_orig_ops - mesh algorithm callbacks (originator specific) * struct batadv_algo_orig_ops - mesh algorithm callbacks (originator specific)
* @free: free the resources allocated by the routing algorithm for an orig_node
* object (optional)
* @add_if: ask the routing algorithm to apply the needed changes to the
* orig_node due to a new hard-interface being added into the mesh (optional)
* @del_if: ask the routing algorithm to apply the needed changes to the
* orig_node due to an hard-interface being removed from the mesh (optional)
* @print: print the originator table (optional)
* @dump: dump originators to a netlink socket (optional)
*/ */
struct batadv_algo_orig_ops { struct batadv_algo_orig_ops {
/**
* @free: free the resources allocated by the routing algorithm for an
* orig_node object (optional)
*/
void (*free)(struct batadv_orig_node *orig_node); void (*free)(struct batadv_orig_node *orig_node);
/**
* @add_if: ask the routing algorithm to apply the needed changes to the
* orig_node due to a new hard-interface being added into the mesh
* (optional)
*/
int (*add_if)(struct batadv_orig_node *orig_node, int max_if_num); int (*add_if)(struct batadv_orig_node *orig_node, int max_if_num);
/**
* @del_if: ask the routing algorithm to apply the needed changes to the
* orig_node due to an hard-interface being removed from the mesh
* (optional)
*/
int (*del_if)(struct batadv_orig_node *orig_node, int max_if_num, int (*del_if)(struct batadv_orig_node *orig_node, int max_if_num,
int del_if_num); int del_if_num);
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** @print: print the originator table (optional) */
void (*print)(struct batadv_priv *priv, struct seq_file *seq, void (*print)(struct batadv_priv *priv, struct seq_file *seq,
struct batadv_hard_iface *hard_iface); struct batadv_hard_iface *hard_iface);
#endif #endif
/** @dump: dump originators to a netlink socket (optional) */
void (*dump)(struct sk_buff *msg, struct netlink_callback *cb, void (*dump)(struct sk_buff *msg, struct netlink_callback *cb,
struct batadv_priv *priv, struct batadv_priv *priv,
struct batadv_hard_iface *hard_iface); struct batadv_hard_iface *hard_iface);
...@@ -1491,158 +2211,213 @@ struct batadv_algo_orig_ops { ...@@ -1491,158 +2211,213 @@ struct batadv_algo_orig_ops {
/** /**
* struct batadv_algo_gw_ops - mesh algorithm callbacks (GW specific) * struct batadv_algo_gw_ops - mesh algorithm callbacks (GW specific)
* @init_sel_class: initialize GW selection class (optional)
* @store_sel_class: parse and stores a new GW selection class (optional)
* @show_sel_class: prints the current GW selection class (optional)
* @get_best_gw_node: select the best GW from the list of available nodes
* (optional)
* @is_eligible: check if a newly discovered GW is a potential candidate for
* the election as best GW (optional)
* @print: print the gateway table (optional)
* @dump: dump gateways to a netlink socket (optional)
*/ */
struct batadv_algo_gw_ops { struct batadv_algo_gw_ops {
/** @init_sel_class: initialize GW selection class (optional) */
void (*init_sel_class)(struct batadv_priv *bat_priv); void (*init_sel_class)(struct batadv_priv *bat_priv);
/**
* @store_sel_class: parse and stores a new GW selection class
* (optional)
*/
ssize_t (*store_sel_class)(struct batadv_priv *bat_priv, char *buff, ssize_t (*store_sel_class)(struct batadv_priv *bat_priv, char *buff,
size_t count); size_t count);
/** @show_sel_class: prints the current GW selection class (optional) */
ssize_t (*show_sel_class)(struct batadv_priv *bat_priv, char *buff); ssize_t (*show_sel_class)(struct batadv_priv *bat_priv, char *buff);
/**
* @get_best_gw_node: select the best GW from the list of available
* nodes (optional)
*/
struct batadv_gw_node *(*get_best_gw_node) struct batadv_gw_node *(*get_best_gw_node)
(struct batadv_priv *bat_priv); (struct batadv_priv *bat_priv);
/**
* @is_eligible: check if a newly discovered GW is a potential candidate
* for the election as best GW (optional)
*/
bool (*is_eligible)(struct batadv_priv *bat_priv, bool (*is_eligible)(struct batadv_priv *bat_priv,
struct batadv_orig_node *curr_gw_orig, struct batadv_orig_node *curr_gw_orig,
struct batadv_orig_node *orig_node); struct batadv_orig_node *orig_node);
#ifdef CONFIG_BATMAN_ADV_DEBUGFS #ifdef CONFIG_BATMAN_ADV_DEBUGFS
/** @print: print the gateway table (optional) */
void (*print)(struct batadv_priv *bat_priv, struct seq_file *seq); void (*print)(struct batadv_priv *bat_priv, struct seq_file *seq);
#endif #endif
/** @dump: dump gateways to a netlink socket (optional) */
void (*dump)(struct sk_buff *msg, struct netlink_callback *cb, void (*dump)(struct sk_buff *msg, struct netlink_callback *cb,
struct batadv_priv *priv); struct batadv_priv *priv);
}; };
/** /**
* struct batadv_algo_ops - mesh algorithm callbacks * struct batadv_algo_ops - mesh algorithm callbacks
* @list: list node for the batadv_algo_list
* @name: name of the algorithm
* @iface: callbacks related to interface handling
* @neigh: callbacks related to neighbors handling
* @orig: callbacks related to originators handling
* @gw: callbacks related to GW mode
*/ */
struct batadv_algo_ops { struct batadv_algo_ops {
/** @list: list node for the batadv_algo_list */
struct hlist_node list; struct hlist_node list;
/** @name: name of the algorithm */
char *name; char *name;
/** @iface: callbacks related to interface handling */
struct batadv_algo_iface_ops iface; struct batadv_algo_iface_ops iface;
/** @neigh: callbacks related to neighbors handling */
struct batadv_algo_neigh_ops neigh; struct batadv_algo_neigh_ops neigh;
/** @orig: callbacks related to originators handling */
struct batadv_algo_orig_ops orig; struct batadv_algo_orig_ops orig;
/** @gw: callbacks related to GW mode */
struct batadv_algo_gw_ops gw; struct batadv_algo_gw_ops gw;
}; };
/** /**
* struct batadv_dat_entry - it is a single entry of batman-adv ARP backend. It * struct batadv_dat_entry - it is a single entry of batman-adv ARP backend. It
* is used to stored ARP entries needed for the global DAT cache * is used to stored ARP entries needed for the global DAT cache
* @ip: the IPv4 corresponding to this DAT/ARP entry
* @mac_addr: the MAC address associated to the stored IPv4
* @vid: the vlan ID associated to this entry
* @last_update: time in jiffies when this entry was refreshed last time
* @hash_entry: hlist node for batadv_priv_dat::hash
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner
*/ */
struct batadv_dat_entry { struct batadv_dat_entry {
/** @ip: the IPv4 corresponding to this DAT/ARP entry */
__be32 ip; __be32 ip;
/** @mac_addr: the MAC address associated to the stored IPv4 */
u8 mac_addr[ETH_ALEN]; u8 mac_addr[ETH_ALEN];
/** @vid: the vlan ID associated to this entry */
unsigned short vid; unsigned short vid;
/**
* @last_update: time in jiffies when this entry was refreshed last time
*/
unsigned long last_update; unsigned long last_update;
/** @hash_entry: hlist node for &batadv_priv_dat.hash */
struct hlist_node hash_entry; struct hlist_node hash_entry;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
/** /**
* struct batadv_hw_addr - a list entry for a MAC address * struct batadv_hw_addr - a list entry for a MAC address
* @list: list node for the linking of entries
* @addr: the MAC address of this list entry
*/ */
struct batadv_hw_addr { struct batadv_hw_addr {
/** @list: list node for the linking of entries */
struct hlist_node list; struct hlist_node list;
/** @addr: the MAC address of this list entry */
unsigned char addr[ETH_ALEN]; unsigned char addr[ETH_ALEN];
}; };
/** /**
* struct batadv_dat_candidate - candidate destination for DAT operations * struct batadv_dat_candidate - candidate destination for DAT operations
* @type: the type of the selected candidate. It can one of the following: */
struct batadv_dat_candidate {
/**
* @type: the type of the selected candidate. It can one of the
* following:
* - BATADV_DAT_CANDIDATE_NOT_FOUND * - BATADV_DAT_CANDIDATE_NOT_FOUND
* - BATADV_DAT_CANDIDATE_ORIG * - BATADV_DAT_CANDIDATE_ORIG
* @orig_node: if type is BATADV_DAT_CANDIDATE_ORIG this field points to the
* corresponding originator node structure
*/ */
struct batadv_dat_candidate {
int type; int type;
/**
* @orig_node: if type is BATADV_DAT_CANDIDATE_ORIG this field points to
* the corresponding originator node structure
*/
struct batadv_orig_node *orig_node; struct batadv_orig_node *orig_node;
}; };
/** /**
* 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
* @tvlv_hdr: tvlv header information needed to construct the tvlv
* @refcount: number of contexts the object is used
*/ */
struct batadv_tvlv_container { struct batadv_tvlv_container {
/** @list: hlist node for &batadv_priv_tvlv.container_list */
struct hlist_node list; struct hlist_node list;
/** @tvlv_hdr: tvlv header information needed to construct the tvlv */
struct batadv_tvlv_hdr tvlv_hdr; struct batadv_tvlv_hdr tvlv_hdr;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
}; };
/** /**
* struct batadv_tvlv_handler - handler for specific tvlv type and version * struct batadv_tvlv_handler - handler for specific tvlv type and version
* @list: hlist node for batadv_priv_tvlv::handler_list
* @ogm_handler: handler callback which is given the tvlv payload to process on
* incoming OGM packets
* @unicast_handler: handler callback which is given the tvlv payload to process
* on incoming unicast tvlv packets
* @type: tvlv type this handler feels responsible for
* @version: tvlv version this handler feels responsible for
* @flags: tvlv handler flags
* @refcount: number of contexts the object is used
* @rcu: struct used for freeing in an RCU-safe manner
*/ */
struct batadv_tvlv_handler { struct batadv_tvlv_handler {
/** @list: hlist node for &batadv_priv_tvlv.handler_list */
struct hlist_node list; struct hlist_node list;
/**
* @ogm_handler: handler callback which is given the tvlv payload to
* process on incoming OGM packets
*/
void (*ogm_handler)(struct batadv_priv *bat_priv, void (*ogm_handler)(struct batadv_priv *bat_priv,
struct batadv_orig_node *orig, struct batadv_orig_node *orig,
u8 flags, void *tvlv_value, u16 tvlv_value_len); u8 flags, void *tvlv_value, u16 tvlv_value_len);
/**
* @unicast_handler: handler callback which is given the tvlv payload to
* process on incoming unicast tvlv packets
*/
int (*unicast_handler)(struct batadv_priv *bat_priv, int (*unicast_handler)(struct batadv_priv *bat_priv,
u8 *src, u8 *dst, u8 *src, u8 *dst,
void *tvlv_value, u16 tvlv_value_len); void *tvlv_value, u16 tvlv_value_len);
/** @type: tvlv type this handler feels responsible for */
u8 type; u8 type;
/** @version: tvlv version this handler feels responsible for */
u8 version; u8 version;
/** @flags: tvlv handler flags */
u8 flags; u8 flags;
/** @refcount: number of contexts the object is used */
struct kref refcount; struct kref refcount;
/** @rcu: struct used for freeing in an RCU-safe manner */
struct rcu_head rcu; struct rcu_head rcu;
}; };
/** /**
* enum batadv_tvlv_handler_flags - tvlv handler flags definitions * enum batadv_tvlv_handler_flags - tvlv handler flags definitions
* @BATADV_TVLV_HANDLER_OGM_CIFNOTFND: tvlv ogm processing function will call
* this handler even if its type was not found (with no data)
* @BATADV_TVLV_HANDLER_OGM_CALLED: interval tvlv handling flag - the API marks
* a handler as being called, so it won't be called if the
* BATADV_TVLV_HANDLER_OGM_CIFNOTFND flag was set
*/ */
enum batadv_tvlv_handler_flags { enum batadv_tvlv_handler_flags {
/**
* @BATADV_TVLV_HANDLER_OGM_CIFNOTFND: tvlv ogm processing function
* will call this handler even if its type was not found (with no data)
*/
BATADV_TVLV_HANDLER_OGM_CIFNOTFND = BIT(1), BATADV_TVLV_HANDLER_OGM_CIFNOTFND = BIT(1),
/**
* @BATADV_TVLV_HANDLER_OGM_CALLED: interval tvlv handling flag - the
* API marks a handler as being called, so it won't be called if the
* BATADV_TVLV_HANDLER_OGM_CIFNOTFND flag was set
*/
BATADV_TVLV_HANDLER_OGM_CALLED = BIT(2), BATADV_TVLV_HANDLER_OGM_CALLED = BIT(2),
}; };
/** /**
* struct batadv_store_mesh_work - Work queue item to detach add/del interface * struct batadv_store_mesh_work - Work queue item to detach add/del interface
* from sysfs locks * from sysfs locks
* @net_dev: netdevice to add/remove to/from batman-adv soft-interface
* @soft_iface_name: name of soft-interface to modify
* @work: work queue item
*/ */
struct batadv_store_mesh_work { struct batadv_store_mesh_work {
/**
* @net_dev: netdevice to add/remove to/from batman-adv soft-interface
*/
struct net_device *net_dev; struct net_device *net_dev;
/** @soft_iface_name: name of soft-interface to modify */
char soft_iface_name[IFNAMSIZ]; char soft_iface_name[IFNAMSIZ];
/** @work: work queue item */
struct work_struct work; struct work_struct work;
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册