2015-04-23 14:16:35 +03:00
/* Copyright (C) 2007-2015 B.A.T.M.A.N. contributors:
2010-12-13 14:19:28 +03:00
*
* 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
2013-11-03 23:40:48 +04:00
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
2010-12-13 14:19:28 +03:00
*/
# ifndef _NET_BATMAN_ADV_SEND_H_
# define _NET_BATMAN_ADV_SEND_H_
2015-04-17 20:40:28 +03:00
# include "main.h"
# include <linux/compiler.h>
# include <linux/types.h>
# include "packet.h"
struct batadv_hard_iface ;
struct batadv_orig_node ;
struct batadv_priv ;
struct sk_buff ;
struct work_struct ;
2012-06-06 00:31:31 +04:00
int batadv_send_skb_packet ( struct sk_buff * skb ,
struct batadv_hard_iface * hard_iface ,
2012-05-12 04:09:37 +04:00
const uint8_t * dst_addr ) ;
2013-04-20 15:54:39 +04:00
int batadv_send_skb_to_orig ( struct sk_buff * skb ,
struct batadv_orig_node * orig_node ,
struct batadv_hard_iface * recv_if ) ;
2012-06-06 00:31:31 +04:00
void batadv_schedule_bat_ogm ( struct batadv_hard_iface * hard_iface ) ;
int batadv_add_bcast_packet_to_list ( struct batadv_priv * bat_priv ,
2012-05-12 04:09:37 +04:00
const struct sk_buff * skb ,
unsigned long delay ) ;
void batadv_send_outstanding_bat_ogm_packet ( struct work_struct * work ) ;
2012-06-06 00:31:31 +04:00
void
batadv_purge_outstanding_packets ( struct batadv_priv * bat_priv ,
const struct batadv_hard_iface * hard_iface ) ;
2013-05-23 18:53:01 +04:00
bool batadv_send_skb_prepare_unicast_4addr ( struct batadv_priv * bat_priv ,
struct sk_buff * skb ,
struct batadv_orig_node * orig_node ,
int packet_subtype ) ;
2014-02-15 20:47:52 +04:00
int batadv_send_skb_unicast ( struct batadv_priv * bat_priv ,
struct sk_buff * skb , int packet_type ,
int packet_subtype ,
struct batadv_orig_node * orig_node ,
unsigned short vid ) ;
2013-07-03 12:40:00 +04:00
int batadv_send_skb_via_tt_generic ( struct batadv_priv * bat_priv ,
struct sk_buff * skb , int packet_type ,
2013-11-05 22:31:08 +04:00
int packet_subtype , uint8_t * dst_hint ,
unsigned short vid ) ;
2013-07-03 12:40:00 +04:00
int batadv_send_skb_via_gw ( struct batadv_priv * bat_priv , struct sk_buff * skb ,
unsigned short vid ) ;
2013-05-23 18:53:01 +04:00
/**
2013-07-03 12:40:00 +04:00
* batadv_send_skb_via_tt - send an skb via TT lookup
2013-05-23 18:53:01 +04:00
* @ bat_priv : the bat priv with all the soft interface information
* @ skb : the payload to send
2014-02-15 14:58:01 +04:00
* @ dst_hint : can be used to override the destination contained in the skb
2013-06-04 14:11:39 +04:00
* @ vid : the vid to be used to search the translation table
2013-05-23 18:53:01 +04:00
*
2013-07-03 12:40:00 +04:00
* Look up the recipient node for the destination address in the ethernet
* header via the translation table . Wrap the given skb into a batman - adv
* unicast header . Then send this frame to the according destination node .
*
* Returns NET_XMIT_DROP in case of error or NET_XMIT_SUCCESS otherwise .
2013-05-23 18:53:01 +04:00
*/
2013-07-03 12:40:00 +04:00
static inline int batadv_send_skb_via_tt ( struct batadv_priv * bat_priv ,
2013-11-05 22:31:08 +04:00
struct sk_buff * skb , uint8_t * dst_hint ,
2013-07-03 12:40:00 +04:00
unsigned short vid )
2013-05-23 18:53:01 +04:00
{
2013-07-03 12:40:00 +04:00
return batadv_send_skb_via_tt_generic ( bat_priv , skb , BATADV_UNICAST , 0 ,
2013-11-05 22:31:08 +04:00
dst_hint , vid ) ;
2013-05-23 18:53:01 +04:00
}
/**
2013-07-03 12:40:00 +04:00
* batadv_send_skb_via_tt_4addr - send an skb via TT lookup
2013-05-23 18:53:01 +04:00
* @ bat_priv : the bat priv with all the soft interface information
* @ skb : the payload to send
* @ packet_subtype : the unicast 4 addr packet subtype to use
2014-02-15 14:58:01 +04:00
* @ dst_hint : can be used to override the destination contained in the skb
2013-06-04 14:11:39 +04:00
* @ vid : the vid to be used to search the translation table
2013-05-23 18:53:01 +04:00
*
2013-07-03 12:40:00 +04:00
* Look up the recipient node for the destination address in the ethernet
* header via the translation table . Wrap the given skb into a batman - adv
* unicast - 4 addr header . Then send this frame to the according destination
* node .
*
* Returns NET_XMIT_DROP in case of error or NET_XMIT_SUCCESS otherwise .
2013-05-23 18:53:01 +04:00
*/
2013-07-03 12:40:00 +04:00
static inline int batadv_send_skb_via_tt_4addr ( struct batadv_priv * bat_priv ,
struct sk_buff * skb ,
int packet_subtype ,
2013-11-05 22:31:08 +04:00
uint8_t * dst_hint ,
2013-07-03 12:40:00 +04:00
unsigned short vid )
2013-05-23 18:53:01 +04:00
{
2013-07-03 12:40:00 +04:00
return batadv_send_skb_via_tt_generic ( bat_priv , skb ,
BATADV_UNICAST_4ADDR ,
2013-11-05 22:31:08 +04:00
packet_subtype , dst_hint , vid ) ;
2013-05-23 18:53:01 +04:00
}
2010-12-13 14:19:28 +03:00
# endif /* _NET_BATMAN_ADV_SEND_H_ */