mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-07 13:53:24 +00:00
ef26157747
The goal is to provide the infrastructure for sending, receiving and parsing information 'containers' while preserving backward compatibility. TVLV (based on the commonly known Type Length Value technique) was chosen as the format for those containers. Even if a node does not know the tvlv type of a certain container it can simply skip the current container and proceed with the next. Past experience has shown features evolve over time, so a 'version' field was added right from the start to allow differentiating between feature variants - hence the name: T(ype) V(ersion) L(ength) V(alue). This patch introduces the basic TVLV infrastructure: * register / unregister tvlv containers to be sent with each OGM (on primary interfaces only) * register / unregister callback handlers to be called upon finding the corresponding tvlv type in a tvlv buffer * unicast tvlv send / receive API calls Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Spyros Gasteratos <morfeas3000@gmail.com> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
61 lines
2.5 KiB
C
61 lines
2.5 KiB
C
/* Copyright (C) 2007-2013 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, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
* 02110-1301, USA
|
|
*/
|
|
|
|
#ifndef _NET_BATMAN_ADV_ROUTING_H_
|
|
#define _NET_BATMAN_ADV_ROUTING_H_
|
|
|
|
bool batadv_check_management_packet(struct sk_buff *skb,
|
|
struct batadv_hard_iface *hard_iface,
|
|
int header_len);
|
|
void batadv_update_route(struct batadv_priv *bat_priv,
|
|
struct batadv_orig_node *orig_node,
|
|
struct batadv_neigh_node *neigh_node);
|
|
int batadv_recv_icmp_packet(struct sk_buff *skb,
|
|
struct batadv_hard_iface *recv_if);
|
|
int batadv_recv_unicast_packet(struct sk_buff *skb,
|
|
struct batadv_hard_iface *recv_if);
|
|
int batadv_recv_ucast_frag_packet(struct sk_buff *skb,
|
|
struct batadv_hard_iface *recv_if);
|
|
int batadv_recv_bcast_packet(struct sk_buff *skb,
|
|
struct batadv_hard_iface *recv_if);
|
|
int batadv_recv_vis_packet(struct sk_buff *skb,
|
|
struct batadv_hard_iface *recv_if);
|
|
int batadv_recv_tt_query(struct sk_buff *skb,
|
|
struct batadv_hard_iface *recv_if);
|
|
int batadv_recv_roam_adv(struct sk_buff *skb,
|
|
struct batadv_hard_iface *recv_if);
|
|
int batadv_recv_unicast_tvlv(struct sk_buff *skb,
|
|
struct batadv_hard_iface *recv_if);
|
|
struct batadv_neigh_node *
|
|
batadv_find_router(struct batadv_priv *bat_priv,
|
|
struct batadv_orig_node *orig_node,
|
|
const struct batadv_hard_iface *recv_if);
|
|
void batadv_bonding_candidate_del(struct batadv_orig_node *orig_node,
|
|
struct batadv_neigh_node *neigh_node);
|
|
void batadv_bonding_candidate_add(struct batadv_orig_node *orig_node,
|
|
struct batadv_neigh_node *neigh_node);
|
|
void batadv_bonding_save_primary(const struct batadv_orig_node *orig_node,
|
|
struct batadv_orig_node *orig_neigh_node,
|
|
const struct batadv_ogm_packet
|
|
*batman_ogm_packet);
|
|
int batadv_window_protected(struct batadv_priv *bat_priv, int32_t seq_num_diff,
|
|
unsigned long *last_reset);
|
|
|
|
#endif /* _NET_BATMAN_ADV_ROUTING_H_ */
|