2014-01-04 18:04:25 +01:00
/* Copyright (C) 2007-2014 B.A.T.M.A.N. contributors:
2010-12-13 11:19:28 +00: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 20:40:48 +01:00
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
2010-12-13 11:19:28 +00:00
*/
# ifndef _NET_BATMAN_ADV_SEND_H_
# define _NET_BATMAN_ADV_SEND_H_
2012-06-05 22:31:31 +02:00
int batadv_send_skb_packet ( struct sk_buff * skb ,
struct batadv_hard_iface * hard_iface ,
2012-05-12 02:09:37 +02:00
const uint8_t * dst_addr ) ;
2013-04-20 13:54:39 +02: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-05 22:31:31 +02: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 02:09:37 +02:00
const struct sk_buff * skb ,
unsigned long delay ) ;
void batadv_send_outstanding_bat_ogm_packet ( struct work_struct * work ) ;
2012-06-05 22:31:31 +02:00
void
batadv_purge_outstanding_packets ( struct batadv_priv * bat_priv ,
const struct batadv_hard_iface * hard_iface ) ;
2013-05-23 16:53:01 +02: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 17:47:52 +01: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 10:40:00 +02:00
int batadv_send_skb_via_tt_generic ( struct batadv_priv * bat_priv ,
struct sk_buff * skb , int packet_type ,
2013-11-05 19:31:08 +01:00
int packet_subtype , uint8_t * dst_hint ,
unsigned short vid ) ;
2013-07-03 10:40:00 +02:00
int batadv_send_skb_via_gw ( struct batadv_priv * bat_priv , struct sk_buff * skb ,
unsigned short vid ) ;
2013-05-23 16:53:01 +02:00
/**
2013-07-03 10:40:00 +02:00
* batadv_send_skb_via_tt - send an skb via TT lookup
2013-05-23 16:53:01 +02:00
* @ bat_priv : the bat priv with all the soft interface information
* @ skb : the payload to send
2014-02-15 11:58:01 +01:00
* @ dst_hint : can be used to override the destination contained in the skb
2013-06-04 12:11:39 +02:00
* @ vid : the vid to be used to search the translation table
2013-05-23 16:53:01 +02:00
*
2013-07-03 10:40:00 +02: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 16:53:01 +02:00
*/
2013-07-03 10:40:00 +02:00
static inline int batadv_send_skb_via_tt ( struct batadv_priv * bat_priv ,
2013-11-05 19:31:08 +01:00
struct sk_buff * skb , uint8_t * dst_hint ,
2013-07-03 10:40:00 +02:00
unsigned short vid )
2013-05-23 16:53:01 +02:00
{
2013-07-03 10:40:00 +02:00
return batadv_send_skb_via_tt_generic ( bat_priv , skb , BATADV_UNICAST , 0 ,
2013-11-05 19:31:08 +01:00
dst_hint , vid ) ;
2013-05-23 16:53:01 +02:00
}
/**
2013-07-03 10:40:00 +02:00
* batadv_send_skb_via_tt_4addr - send an skb via TT lookup
2013-05-23 16:53:01 +02: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 11:58:01 +01:00
* @ dst_hint : can be used to override the destination contained in the skb
2013-06-04 12:11:39 +02:00
* @ vid : the vid to be used to search the translation table
2013-05-23 16:53:01 +02:00
*
2013-07-03 10:40:00 +02: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 16:53:01 +02:00
*/
2013-07-03 10:40:00 +02: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 19:31:08 +01:00
uint8_t * dst_hint ,
2013-07-03 10:40:00 +02:00
unsigned short vid )
2013-05-23 16:53:01 +02:00
{
2013-07-03 10:40:00 +02:00
return batadv_send_skb_via_tt_generic ( bat_priv , skb ,
BATADV_UNICAST_4ADDR ,
2013-11-05 19:31:08 +01:00
packet_subtype , dst_hint , vid ) ;
2013-05-23 16:53:01 +02:00
}
2010-12-13 11:19:28 +00:00
# endif /* _NET_BATMAN_ADV_SEND_H_ */