2016-01-01 02:01:03 +03:00
/* Copyright (C) 2007-2016 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_MAIN_H_
# define _NET_BATMAN_ADV_MAIN_H_
2013-10-12 18:10:03 +04:00
# define BATADV_DRIVER_AUTHOR "Marek Lindner <mareklindner@neomailbox.ch>, " \
2013-10-11 01:59:10 +04:00
" Simon Wunderlich <sw@simonwunderlich.de> "
2012-06-04 00:19:17 +04:00
# define BATADV_DRIVER_DESC "B.A.T.M.A.N. advanced"
# define BATADV_DRIVER_DEVICE "batman-adv"
2010-12-13 14:19:28 +03:00
2012-06-04 00:19:17 +04:00
# ifndef BATADV_SOURCE_VERSION
2016-10-17 15:08:36 +03:00
# define BATADV_SOURCE_VERSION "2016.5"
2011-07-05 12:42:51 +04:00
# endif
2010-12-13 14:19:28 +03:00
/* B.A.T.M.A.N. parameters */
2012-06-04 00:19:17 +04:00
# define BATADV_TQ_MAX_VALUE 255
2016-01-16 11:40:12 +03:00
# define BATADV_THROUGHPUT_MAX_VALUE 0xFFFFFFFF
2012-06-04 00:19:17 +04:00
# define BATADV_JITTER 20
2010-12-13 14:19:28 +03:00
2012-05-12 04:09:43 +04:00
/* Time To Live of broadcast messages */
2012-06-04 00:19:17 +04:00
# define BATADV_TTL 50
2011-05-08 14:45:45 +04:00
2015-11-23 21:57:22 +03:00
/* maximum sequence number age of broadcast messages */
# define BATADV_BCAST_MAX_AGE 64
2011-05-08 14:45:45 +04:00
/* purge originators after time in seconds if no valid packet comes in
2012-06-04 00:19:17 +04:00
* - > TODO : check influence on BATADV_TQ_LOCAL_WINDOW_SIZE
2012-05-12 04:09:43 +04:00
*/
2012-06-04 00:19:17 +04:00
# define BATADV_PURGE_TIMEOUT 200000 /* 200 seconds */
2012-11-09 01:16:15 +04:00
# define BATADV_TT_LOCAL_TIMEOUT 600000 /* in milliseconds */
2012-07-01 21:07:31 +04:00
# define BATADV_TT_CLIENT_ROAM_TIMEOUT 600000 /* in milliseconds */
2012-07-06 01:38:29 +04:00
# define BATADV_TT_CLIENT_TEMP_TIMEOUT 600000 /* in milliseconds */
2012-12-25 16:14:37 +04:00
# define BATADV_TT_WORK_PERIOD 5000 /* 5 seconds */
# define BATADV_ORIG_WORK_PERIOD 1000 /* 1 second */
2016-08-06 23:23:16 +03:00
# define BATADV_MCAST_WORK_PERIOD 500 /* 0.5 seconds */
2015-02-18 17:19:20 +03:00
# define BATADV_DAT_ENTRY_TIMEOUT (5 * 60000) /* 5 mins in milliseconds */
2011-07-09 19:52:13 +04:00
/* sliding packet range of received originator messages in sequence numbers
2012-05-12 04:09:43 +04:00
* ( should be a multiple of our word size )
*/
2012-06-04 00:19:17 +04:00
# define BATADV_TQ_LOCAL_WINDOW_SIZE 64
2012-07-01 21:07:31 +04:00
/* milliseconds we have to keep pending tt_req */
2012-06-04 00:19:17 +04:00
# define BATADV_TT_REQUEST_TIMEOUT 3000
2011-04-27 16:27:44 +04:00
2012-06-04 00:19:17 +04:00
# define BATADV_TQ_GLOBAL_WINDOW_SIZE 5
# define BATADV_TQ_LOCAL_BIDRECT_SEND_MINIMUM 1
# define BATADV_TQ_LOCAL_BIDRECT_RECV_MINIMUM 1
# define BATADV_TQ_TOTAL_BIDRECT_LIMIT 1
2010-12-13 14:19:28 +03:00
2016-01-16 11:40:10 +03:00
/* B.A.T.M.A.N. V */
2015-11-10 20:50:51 +03:00
# define BATADV_THROUGHPUT_DEFAULT_VALUE 10 /* 1 Mbps */
2015-11-10 20:51:22 +03:00
# define BATADV_ELP_PROBES_PER_NODE 2
# define BATADV_ELP_MIN_PROBE_SIZE 200 /* bytes */
# define BATADV_ELP_PROBE_MAX_TX_DIFF 100 /* milliseconds */
2016-01-16 11:40:10 +03:00
# define BATADV_ELP_MAX_AGE 64
2016-01-16 11:40:13 +03:00
# define BATADV_OGM_MAX_ORIGDIFF 5
# define BATADV_OGM_MAX_AGE 64
2016-01-16 11:40:10 +03:00
2012-06-04 00:19:17 +04:00
/* number of OGMs sent with the last tt diff */
# define BATADV_TT_OGM_APPEND_MAX 3
2011-04-27 16:27:44 +04:00
2012-05-12 04:09:43 +04:00
/* Time in which a client can roam at most ROAMING_MAX_COUNT times in
2012-07-01 21:07:31 +04:00
* milliseconds
2012-05-12 04:09:43 +04:00
*/
2012-06-04 00:19:17 +04:00
# define BATADV_ROAMING_MAX_TIME 20000
# define BATADV_ROAMING_MAX_COUNT 5
2011-04-27 16:27:57 +04:00
2012-06-04 00:19:17 +04:00
# define BATADV_NO_FLAGS 0
2011-06-09 19:13:09 +04:00
2012-06-04 00:19:17 +04:00
# define BATADV_NULL_IFINDEX 0 /* dummy ifindex used to avoid iface checks */
2011-07-07 17:35:35 +04:00
2013-11-16 15:03:48 +04:00
# define BATADV_NO_MARK 0
2013-11-13 22:14:46 +04:00
/* default interface for multi interface operation. The default interface is
* used for communication which originated locally ( i . e . is not forwarded )
* or where special forwarding is not desired / necessary .
*/
# define BATADV_IF_DEFAULT ((struct batadv_hard_iface *)NULL)
2012-06-04 00:19:17 +04:00
# define BATADV_NUM_WORDS BITS_TO_LONGS(BATADV_TQ_LOCAL_WINDOW_SIZE)
2010-12-13 14:19:28 +03:00
2012-06-04 00:19:17 +04:00
# define BATADV_LOG_BUF_LEN 8192 /* has to be a power of 2 */
2010-12-13 14:19:28 +03:00
2013-03-10 02:14:23 +04:00
/* number of packets to send for broadcasts on different interface types */
# define BATADV_NUM_BCASTS_DEFAULT 1
# define BATADV_NUM_BCASTS_WIRELESS 3
# define BATADV_NUM_BCASTS_MAX 3
2016-05-05 14:09:43 +03:00
/* length of the single packet used by the TP meter */
# define BATADV_TP_PACKET_LEN ETH_DATA_LEN
2011-06-26 05:37:18 +04:00
/* msecs after which an ARP_REQUEST is sent in broadcast as fallback */
# define ARP_REQ_DELAY 250
2011-11-23 14:35:44 +04:00
/* numbers of originator to contact for any PUT/GET DHT operation */
# define BATADV_DAT_CANDIDATES_NUM 3
2014-07-15 11:41:08 +04:00
/* BATADV_TQ_SIMILARITY_THRESHOLD - TQ points that a secondary metric can differ
* at most from the primary one in order to be still considered acceptable
2013-09-02 14:15:05 +04:00
*/
# define BATADV_TQ_SIMILARITY_THRESHOLD 50
2011-05-08 14:45:45 +04:00
/* should not be bigger than 512 bytes or change the size of
2012-05-12 04:09:43 +04:00
* forw_packet - > direct_link_flags
*/
2012-06-04 00:19:17 +04:00
# define BATADV_MAX_AGGREGATION_BYTES 512
# define BATADV_MAX_AGGREGATION_MS 100
2010-12-13 14:19:28 +03:00
2012-06-04 00:19:17 +04:00
# define BATADV_BLA_PERIOD_LENGTH 10000 /* 10 seconds */
2015-11-09 18:20:53 +03:00
# define BATADV_BLA_BACKBONE_TIMEOUT (BATADV_BLA_PERIOD_LENGTH * 6)
2012-06-04 00:19:17 +04:00
# define BATADV_BLA_CLAIM_TIMEOUT (BATADV_BLA_PERIOD_LENGTH * 10)
2012-09-13 20:18:46 +04:00
# define BATADV_BLA_WAIT_PERIODS 3
2016-03-12 12:49:33 +03:00
# define BATADV_BLA_LOOPDETECT_PERIODS 6
# define BATADV_BLA_LOOPDETECT_TIMEOUT 3000 /* 3 seconds */
2012-01-22 23:00:24 +04:00
2012-06-04 00:19:17 +04:00
# define BATADV_DUPLIST_SIZE 16
# define BATADV_DUPLIST_TIMEOUT 500 /* 500 ms */
2011-05-08 14:45:45 +04:00
/* don't reset again within 30 seconds */
2012-06-04 00:19:17 +04:00
# define BATADV_RESET_PROTECTION_MS 30000
# define BATADV_EXPECTED_SEQNO_RANGE 65536
2010-12-13 14:19:28 +03:00
2013-01-25 14:12:39 +04:00
# define BATADV_NC_NODE_TIMEOUT 10000 /* Milliseconds */
2016-05-05 14:09:43 +03:00
/**
* BATADV_TP_MAX_NUM - maximum number of simultaneously active tp sessions
*/
# define BATADV_TP_MAX_NUM 5
2012-06-04 00:19:22 +04:00
enum batadv_mesh_state {
BATADV_MESH_INACTIVE ,
BATADV_MESH_ACTIVE ,
BATADV_MESH_DEACTIVATING ,
2011-06-04 13:26:00 +04:00
} ;
2010-12-13 14:19:28 +03:00
2012-06-04 00:19:17 +04:00
# define BATADV_BCAST_QUEUE_LEN 256
# define BATADV_BATMAN_QUEUE_LEN 256
2010-12-13 14:19:28 +03:00
2012-06-04 00:19:22 +04:00
enum batadv_uev_action {
BATADV_UEV_ADD = 0 ,
BATADV_UEV_DEL ,
BATADV_UEV_CHANGE ,
2016-03-12 12:49:33 +03:00
BATADV_UEV_LOOPDETECT ,
2011-04-26 20:26:01 +04:00
} ;
2012-06-04 00:19:22 +04:00
enum batadv_uev_type {
BATADV_UEV_GW = 0 ,
2016-03-12 12:49:33 +03:00
BATADV_UEV_BLA ,
2011-04-26 20:26:01 +04:00
} ;
2012-06-04 00:19:17 +04:00
# define BATADV_GW_THRESHOLD 50
2011-04-26 23:31:45 +04:00
2013-05-23 18:53:02 +04:00
/* Number of fragment chains for each orig_node */
# define BATADV_FRAG_BUFFER_COUNT 8
/* Maximum number of fragments for one packet */
# define BATADV_FRAG_MAX_FRAGMENTS 16
/* Maxumim size of each fragment */
# define BATADV_FRAG_MAX_FRAG_SIZE 1400
/* Time to keep fragments while waiting for rest of the fragments */
# define BATADV_FRAG_TIMEOUT 10000
2011-11-23 14:35:44 +04:00
# define BATADV_DAT_CANDIDATE_NOT_FOUND 0
# define BATADV_DAT_CANDIDATE_ORIG 1
2012-03-07 12:07:46 +04:00
/* Debug Messages */
2010-12-13 14:19:28 +03:00
# ifdef pr_fmt
# undef pr_fmt
# endif
2011-05-08 14:45:45 +04:00
/* Append 'batman-adv: ' before kernel messages */
# define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
2010-12-13 14:19:28 +03:00
2012-03-07 12:07:46 +04:00
/* Kernel headers */
2010-12-13 14:19:28 +03:00
2015-04-17 20:40:28 +03:00
# include <linux/bitops.h> /* for packet.h */
# include <linux/compiler.h>
# include <linux/etherdevice.h>
# include <linux/if_ether.h> /* for packet.h */
2016-05-15 12:07:42 +03:00
# include <linux/if_vlan.h>
# include <linux/jiffies.h>
# include <linux/percpu.h>
2015-04-17 20:40:28 +03:00
# include <linux/types.h>
2013-06-04 14:11:41 +04:00
2010-12-13 14:19:28 +03:00
# include "types.h"
2016-05-16 00:48:31 +03:00
struct net_device ;
struct packet_type ;
2015-04-17 20:40:28 +03:00
struct seq_file ;
struct sk_buff ;
2016-09-21 10:23:50 +03:00
# define BATADV_PRINT_VID(vid) (((vid) & BATADV_VLAN_HAS_TAG) ? \
( int ) ( ( vid ) & VLAN_VID_MASK ) : - 1 )
2013-04-19 20:07:00 +04:00
2012-05-12 04:09:42 +04:00
extern struct list_head batadv_hardif_list ;
extern unsigned char batadv_broadcast_addr [ ] ;
extern struct workqueue_struct * batadv_event_workqueue ;
int batadv_mesh_init ( struct net_device * soft_iface ) ;
void batadv_mesh_free ( struct net_device * soft_iface ) ;
2015-05-26 19:34:26 +03:00
bool batadv_is_my_mac ( struct batadv_priv * bat_priv , const u8 * addr ) ;
2012-08-03 19:15:46 +04:00
struct batadv_hard_iface *
batadv_seq_print_text_primary_if_get ( struct seq_file * seq ) ;
2013-05-08 09:31:59 +04:00
int batadv_max_header_len ( void ) ;
2013-07-29 19:56:44 +04:00
void batadv_skb_set_priority ( struct sk_buff * skb , int offset ) ;
2012-05-12 04:09:42 +04:00
int batadv_batman_skb_recv ( struct sk_buff * skb , struct net_device * dev ,
struct packet_type * ptype ,
struct net_device * orig_dev ) ;
2012-06-06 00:31:31 +04:00
int
2015-05-26 19:34:26 +03:00
batadv_recv_handler_register ( u8 packet_type ,
2012-06-06 00:31:31 +04:00
int ( * recv_handler ) ( struct sk_buff * ,
struct batadv_hard_iface * ) ) ;
2015-05-26 19:34:26 +03:00
void batadv_recv_handler_unregister ( u8 packet_type ) ;
2012-10-17 23:10:39 +04:00
__be32 batadv_skb_crc32 ( struct sk_buff * skb , u8 * payload_ptr ) ;
2010-12-13 14:19:28 +03:00
2015-09-15 20:00:48 +03:00
/**
* batadv_compare_eth - Compare two not u16 aligned Ethernet addresses
2015-10-31 14:29:29 +03:00
* @ data1 : Pointer to a six - byte array containing the Ethernet address
* @ data2 : Pointer other six - byte array containing the Ethernet address
2011-02-18 15:28:08 +03:00
*
2013-09-02 02:45:08 +04:00
* note : can ' t use ether_addr_equal ( ) as it requires aligned memory
2015-09-15 20:00:48 +03:00
*
2016-02-22 23:02:39 +03:00
* Return : true if they are the same ethernet addr
2011-02-18 15:28:08 +03:00
*/
2014-12-26 14:41:39 +03:00
static inline bool batadv_compare_eth ( const void * data1 , const void * data2 )
2011-02-18 15:28:08 +03:00
{
2013-12-07 02:39:46 +04:00
return ether_addr_equal_unaligned ( data1 , data2 ) ;
2011-02-18 15:28:08 +03:00
}
2012-07-10 14:55:09 +04:00
/**
2016-03-11 18:36:19 +03:00
* batadv_has_timed_out - compares current time ( jiffies ) and timestamp +
* timeout
2011-12-08 16:32:41 +04:00
* @ timestamp : base value to compare with ( in jiffies )
* @ timeout : added to base value before comparing ( in milliseconds )
*
2015-09-15 20:00:48 +03:00
* Return : true if current time is after timestamp + timeout
2011-12-08 16:32:41 +04:00
*/
2012-05-12 15:48:58 +04:00
static inline bool batadv_has_timed_out ( unsigned long timestamp ,
unsigned int timeout )
2011-12-08 16:32:41 +04:00
{
return time_is_before_jiffies ( timestamp + msecs_to_jiffies ( timeout ) ) ;
}
2011-05-15 01:14:50 +04:00
2012-05-16 22:23:22 +04:00
# define batadv_atomic_dec_not_zero(v) atomic_add_unless((v), -1, 0)
2011-04-20 11:52:56 +04:00
2011-05-18 11:20:50 +04:00
/* Returns the smallest signed integer in two's complement with the sizeof x */
2012-05-16 22:23:22 +04:00
# define batadv_smallest_signed_int(x) (1u << (7u + 8u * (sizeof(x) - 1u)))
2011-05-18 11:20:50 +04:00
/* Checks if a sequence number x is a predecessor/successor of y.
* they handle overflows / underflows and can correctly check for a
* predecessor / successor unless the variable sequence number has grown by
* more then 2 * * ( bitwidth ( x ) - 1 ) - 1.
2015-05-26 19:34:26 +03:00
* This means that for a u8 with the maximum value 255 , it would think :
2011-05-18 11:20:50 +04:00
* - 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 ,
2012-05-12 04:09:43 +04:00
* - after adding more than 127 to the starting value - it is a successor
*/
2014-09-01 16:37:26 +04:00
# define batadv_seq_before(x, y) ({typeof(x)_d1 = (x); \
typeof ( y ) _d2 = ( y ) ; \
typeof ( x ) _dummy = ( _d1 - _d2 ) ; \
( void ) ( & _d1 = = & _d2 ) ; \
2012-05-16 22:23:22 +04:00
_dummy > batadv_smallest_signed_int ( _dummy ) ; } )
# define batadv_seq_after(x, y) batadv_seq_before(y, x)
2011-05-18 11:20:50 +04:00
2012-04-20 19:02:45 +04:00
/* Stop preemption on local cpu while incrementing the counter */
2012-06-06 00:31:31 +04:00
static inline void batadv_add_counter ( struct batadv_priv * bat_priv , size_t idx ,
2012-04-20 19:02:45 +04:00
size_t count )
{
2012-11-13 05:53:26 +04:00
this_cpu_add ( bat_priv - > bat_counters [ idx ] , count ) ;
2012-04-20 19:02:45 +04:00
}
# define batadv_inc_counter(b, i) batadv_add_counter(b, i, 1)
2013-01-25 14:12:41 +04:00
/* 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 .
* The macro is inspired by the similar macro TCP_SKB_CB ( ) in tcp . h .
*/
# define BATADV_SKB_CB(__skb) ((struct batadv_skb_cb *)&((__skb)->cb[0]))
2013-06-04 14:11:39 +04:00
unsigned short batadv_get_vid ( struct sk_buff * skb , size_t header_len ) ;
2013-11-16 15:03:51 +04:00
bool batadv_vlan_ap_isola_get ( struct batadv_priv * bat_priv , unsigned short vid ) ;
2013-04-23 17:39:57 +04:00
2010-12-13 14:19:28 +03:00
# endif /* _NET_BATMAN_ADV_MAIN_H_ */