Blame view

net/batman-adv/main.h 10.2 KB
ac79cbb96   Sven Eckelmann   batman-adv: updat...
1
  /* Copyright (C) 2007-2017  B.A.T.M.A.N. contributors:
c6c8fea29   Sven Eckelmann   net: Add batman-a...
2
3
4
5
6
7
8
9
10
11
12
13
14
   *
   * 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
ebf38fb7a   Antonio Quartulli   batman-adv: remov...
15
   * along with this program; if not, see <http://www.gnu.org/licenses/>.
c6c8fea29   Sven Eckelmann   net: Add batman-a...
16
17
18
19
   */
  
  #ifndef _NET_BATMAN_ADV_MAIN_H_
  #define _NET_BATMAN_ADV_MAIN_H_
bc58eeef7   Marek Lindner   batman-adv: updat...
20
  #define BATADV_DRIVER_AUTHOR "Marek Lindner <mareklindner@neomailbox.ch>, " \
c679ff8fb   Simon Wunderlich   batman-adv: updat...
21
  			     "Simon Wunderlich <sw@simonwunderlich.de>"
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
22
23
  #define BATADV_DRIVER_DESC   "B.A.T.M.A.N. advanced"
  #define BATADV_DRIVER_DEVICE "batman-adv"
c6c8fea29   Sven Eckelmann   net: Add batman-a...
24

42d0b044b   Sven Eckelmann   batman-adv: Prefi...
25
  #ifndef BATADV_SOURCE_VERSION
a311abdff   Simon Wunderlich   batman-adv: Start...
26
  #define BATADV_SOURCE_VERSION "2017.3"
44c4349a2   Sven Eckelmann   batman-adv: Repla...
27
  #endif
c6c8fea29   Sven Eckelmann   net: Add batman-a...
28
29
  
  /* B.A.T.M.A.N. parameters */
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
30
  #define BATADV_TQ_MAX_VALUE 255
0da003594   Antonio Quartulli   batman-adv: OGMv2...
31
  #define BATADV_THROUGHPUT_MAX_VALUE 0xFFFFFFFF
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
32
  #define BATADV_JITTER 20
c6c8fea29   Sven Eckelmann   net: Add batman-a...
33

9cfc7bd60   Sven Eckelmann   batman-adv: Refor...
34
  /* Time To Live of broadcast messages */
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
35
  #define BATADV_TTL 50
6e215fd8e   Sven Eckelmann   batman-adv: Remov...
36

81f026835   Simon Wunderlich   batman-adv: add s...
37
38
  /* maximum sequence number age of broadcast messages */
  #define BATADV_BCAST_MAX_AGE 64
6e215fd8e   Sven Eckelmann   batman-adv: Remov...
39
  /* purge originators after time in seconds if no valid packet comes in
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
40
   * -> TODO: check influence on BATADV_TQ_LOCAL_WINDOW_SIZE
9cfc7bd60   Sven Eckelmann   batman-adv: Refor...
41
   */
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
42
  #define BATADV_PURGE_TIMEOUT 200000 /* 200 seconds */
7cf4d520f   Antonio Quartulli   batman-adv: reduc...
43
  #define BATADV_TT_LOCAL_TIMEOUT 600000 /* in milliseconds */
a51fb9b2a   Antonio Quartulli   batman-adv: fix t...
44
  #define BATADV_TT_CLIENT_ROAM_TIMEOUT 600000 /* in milliseconds */
30cfd02b6   Antonio Quartulli   batman-adv: detec...
45
  #define BATADV_TT_CLIENT_TEMP_TIMEOUT 600000 /* in milliseconds */
724144420   Antonio Quartulli   batman-adv: a del...
46
47
  #define BATADV_TT_WORK_PERIOD 5000 /* 5 seconds */
  #define BATADV_ORIG_WORK_PERIOD 1000 /* 1 second */
cbebd363b   Linus Lüssing   batman-adv: Use o...
48
  #define BATADV_MCAST_WORK_PERIOD 500 /* 0.5 seconds */
fc1f86936   Marek Lindner   batman-adv: check...
49
  #define BATADV_DAT_ENTRY_TIMEOUT (5 * 60000) /* 5 mins in milliseconds */
015758d00   Antonio Quartulli   batman-adv: corre...
50
  /* sliding packet range of received originator messages in sequence numbers
9cfc7bd60   Sven Eckelmann   batman-adv: Refor...
51
52
   * (should be a multiple of our word size)
   */
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
53
  #define BATADV_TQ_LOCAL_WINDOW_SIZE 64
a51fb9b2a   Antonio Quartulli   batman-adv: fix t...
54
  /* milliseconds we have to keep pending tt_req */
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
55
  #define BATADV_TT_REQUEST_TIMEOUT 3000
a73105b8d   Antonio Quartulli   batman-adv: impro...
56

42d0b044b   Sven Eckelmann   batman-adv: Prefi...
57
58
59
60
  #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
c6c8fea29   Sven Eckelmann   net: Add batman-a...
61

162bd64c2   Linus Luessing   batman-adv: ELP -...
62
  /* B.A.T.M.A.N. V */
c833484e5   Antonio Quartulli   batman-adv: ELP -...
63
  #define BATADV_THROUGHPUT_DEFAULT_VALUE 10 /* 1 Mbps */
8d2d499e0   Antonio Quartulli   batman-adv: ELP -...
64
65
66
  #define BATADV_ELP_PROBES_PER_NODE 2
  #define BATADV_ELP_MIN_PROBE_SIZE 200 /* bytes */
  #define BATADV_ELP_PROBE_MAX_TX_DIFF 100 /* milliseconds */
162bd64c2   Linus Luessing   batman-adv: ELP -...
67
  #define BATADV_ELP_MAX_AGE 64
9323158ef   Antonio Quartulli   batman-adv: OGMv2...
68
69
  #define BATADV_OGM_MAX_ORIGDIFF 5
  #define BATADV_OGM_MAX_AGE 64
162bd64c2   Linus Luessing   batman-adv: ELP -...
70

42d0b044b   Sven Eckelmann   batman-adv: Prefi...
71
72
  /* number of OGMs sent with the last tt diff */
  #define BATADV_TT_OGM_APPEND_MAX 3
a73105b8d   Antonio Quartulli   batman-adv: impro...
73

9cfc7bd60   Sven Eckelmann   batman-adv: Refor...
74
  /* Time in which a client can roam at most ROAMING_MAX_COUNT times in
a51fb9b2a   Antonio Quartulli   batman-adv: fix t...
75
   * milliseconds
9cfc7bd60   Sven Eckelmann   batman-adv: Refor...
76
   */
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
77
78
  #define BATADV_ROAMING_MAX_TIME 20000
  #define BATADV_ROAMING_MAX_COUNT 5
cc47f66e6   Antonio Quartulli   batman-adv: impro...
79

42d0b044b   Sven Eckelmann   batman-adv: Prefi...
80
  #define BATADV_NO_FLAGS 0
ecbd53210   Marek Lindner   batman-adv: use N...
81

42d0b044b   Sven Eckelmann   batman-adv: Prefi...
82
  #define BATADV_NULL_IFINDEX 0 /* dummy ifindex used to avoid iface checks */
bc2790808   Antonio Quartulli   batman-adv: detec...
83

9464d0718   Antonio Quartulli   batman-adv: mark ...
84
  #define BATADV_NO_MARK 0
89652331c   Simon Wunderlich   batman-adv: split...
85
86
87
88
89
  /* 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)
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
90
  #define BATADV_NUM_WORDS BITS_TO_LONGS(BATADV_TQ_LOCAL_WINDOW_SIZE)
c6c8fea29   Sven Eckelmann   net: Add batman-a...
91

42d0b044b   Sven Eckelmann   batman-adv: Prefi...
92
  #define BATADV_LOG_BUF_LEN 8192	  /* has to be a power of 2 */
c6c8fea29   Sven Eckelmann   net: Add batman-a...
93

caf65bfcc   Matthias Schiffer   batman-adv: send ...
94
95
96
97
  /* 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
33a3bb4a3   Antonio Quartulli   batman-adv: throu...
98
99
  /* length of the single packet used by the TP meter */
  #define BATADV_TP_PACKET_LEN ETH_DATA_LEN
c384ea3ec   Antonio Quartulli   batman-adv: Distr...
100
101
  /* msecs after which an ARP_REQUEST is sent in broadcast as fallback */
  #define ARP_REQ_DELAY 250
785ea1144   Antonio Quartulli   batman-adv: Distr...
102
103
  /* numbers of originator to contact for any PUT/GET DHT operation */
  #define BATADV_DAT_CANDIDATES_NUM 3
a0e287750   Martin Hundebøll   batman-adv: kerne...
104
105
  /* 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
c43c981e5   Antonio Quartulli   batman-adv: add b...
106
107
   */
  #define BATADV_TQ_SIMILARITY_THRESHOLD 50
6e215fd8e   Sven Eckelmann   batman-adv: Remov...
108
  /* should not be bigger than 512 bytes or change the size of
9cfc7bd60   Sven Eckelmann   batman-adv: Refor...
109
110
   * forw_packet->direct_link_flags
   */
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
111
112
  #define BATADV_MAX_AGGREGATION_BYTES 512
  #define BATADV_MAX_AGGREGATION_MS 100
c6c8fea29   Sven Eckelmann   net: Add batman-a...
113

42d0b044b   Sven Eckelmann   batman-adv: Prefi...
114
  #define BATADV_BLA_PERIOD_LENGTH	10000	/* 10 seconds */
e1544f3c8   Simon Wunderlich   batman-adv: incre...
115
  #define BATADV_BLA_BACKBONE_TIMEOUT	(BATADV_BLA_PERIOD_LENGTH * 6)
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
116
  #define BATADV_BLA_CLAIM_TIMEOUT	(BATADV_BLA_PERIOD_LENGTH * 10)
28709878b   Simon Wunderlich   batman-adv: wait ...
117
  #define BATADV_BLA_WAIT_PERIODS		3
cd9c7bfbb   Simon Wunderlich   batman-adv: add d...
118
119
  #define BATADV_BLA_LOOPDETECT_PERIODS	6
  #define BATADV_BLA_LOOPDETECT_TIMEOUT	3000	/* 3 seconds */
fe2da6ff2   Simon Wunderlich   batman-adv: add b...
120

42d0b044b   Sven Eckelmann   batman-adv: Prefi...
121
122
  #define BATADV_DUPLIST_SIZE		16
  #define BATADV_DUPLIST_TIMEOUT		500	/* 500 ms */
6e215fd8e   Sven Eckelmann   batman-adv: Remov...
123
  /* don't reset again within 30 seconds */
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
124
125
  #define BATADV_RESET_PROTECTION_MS 30000
  #define BATADV_EXPECTED_SEQNO_RANGE	65536
c6c8fea29   Sven Eckelmann   net: Add batman-a...
126

d56b1705e   Martin Hundebøll   batman-adv: netwo...
127
  #define BATADV_NC_NODE_TIMEOUT 10000 /* Milliseconds */
33a3bb4a3   Antonio Quartulli   batman-adv: throu...
128
129
130
131
  /**
   * BATADV_TP_MAX_NUM - maximum number of simultaneously active tp sessions
   */
  #define BATADV_TP_MAX_NUM 5
39c75a51e   Sven Eckelmann   batman-adv: Prefi...
132
133
134
135
  enum batadv_mesh_state {
  	BATADV_MESH_INACTIVE,
  	BATADV_MESH_ACTIVE,
  	BATADV_MESH_DEACTIVATING,
e8958dbf0   Sven Eckelmann   batman-adv: Use e...
136
  };
c6c8fea29   Sven Eckelmann   net: Add batman-a...
137

42d0b044b   Sven Eckelmann   batman-adv: Prefi...
138
139
  #define BATADV_BCAST_QUEUE_LEN		256
  #define BATADV_BATMAN_QUEUE_LEN	256
c6c8fea29   Sven Eckelmann   net: Add batman-a...
140

39c75a51e   Sven Eckelmann   batman-adv: Prefi...
141
142
143
144
  enum batadv_uev_action {
  	BATADV_UEV_ADD = 0,
  	BATADV_UEV_DEL,
  	BATADV_UEV_CHANGE,
cd9c7bfbb   Simon Wunderlich   batman-adv: add d...
145
  	BATADV_UEV_LOOPDETECT,
c6bda689c   Antonio Quartulli   batman-adv: add w...
146
  };
39c75a51e   Sven Eckelmann   batman-adv: Prefi...
147
148
  enum batadv_uev_type {
  	BATADV_UEV_GW = 0,
cd9c7bfbb   Simon Wunderlich   batman-adv: add d...
149
  	BATADV_UEV_BLA,
c6bda689c   Antonio Quartulli   batman-adv: add w...
150
  };
42d0b044b   Sven Eckelmann   batman-adv: Prefi...
151
  #define BATADV_GW_THRESHOLD	50
43676ab59   Antonio Quartulli   batman-adv: impro...
152

610bfc6bc   Martin Hundebøll   batman-adv: Recei...
153
154
155
156
157
  /* 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 */
8ea026b16   Matthias Schiffer   batman-adv: decre...
158
  #define BATADV_FRAG_MAX_FRAG_SIZE 1280
610bfc6bc   Martin Hundebøll   batman-adv: Recei...
159
160
  /* Time to keep fragments while waiting for rest of the fragments */
  #define BATADV_FRAG_TIMEOUT 10000
785ea1144   Antonio Quartulli   batman-adv: Distr...
161
162
  #define BATADV_DAT_CANDIDATE_NOT_FOUND	0
  #define BATADV_DAT_CANDIDATE_ORIG	1
21a1236bc   Sven Eckelmann   batman-adv: Don't...
163
  /* Debug Messages */
c6c8fea29   Sven Eckelmann   net: Add batman-a...
164
165
166
  #ifdef pr_fmt
  #undef pr_fmt
  #endif
6e215fd8e   Sven Eckelmann   batman-adv: Remov...
167
168
  /* Append 'batman-adv: ' before kernel messages */
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
c6c8fea29   Sven Eckelmann   net: Add batman-a...
169

21a1236bc   Sven Eckelmann   batman-adv: Don't...
170
  /* Kernel headers */
c6c8fea29   Sven Eckelmann   net: Add batman-a...
171

1e2c2a4fe   Sven Eckelmann   batman-adv: Add r...
172
173
  #include <linux/bitops.h> /* for packet.h */
  #include <linux/compiler.h>
1e2c2a4fe   Sven Eckelmann   batman-adv: Add r...
174
175
  #include <linux/etherdevice.h>
  #include <linux/if_ether.h> /* for packet.h */
fcafa5e74   Sven Eckelmann   batman-adv: Keep ...
176
177
  #include <linux/if_vlan.h>
  #include <linux/jiffies.h>
fcafa5e74   Sven Eckelmann   batman-adv: Keep ...
178
  #include <linux/percpu.h>
1e2c2a4fe   Sven Eckelmann   batman-adv: Add r...
179
  #include <linux/types.h>
160527890   Antonio Quartulli   batman-adv: print...
180

f7a2bd654   Sven Eckelmann   batman-adv: Conve...
181
  #include "packet.h"
c6c8fea29   Sven Eckelmann   net: Add batman-a...
182
  #include "types.h"
ba412080f   Sven Eckelmann   batman-adv: Conso...
183
184
  struct net_device;
  struct packet_type;
1e2c2a4fe   Sven Eckelmann   batman-adv: Add r...
185
186
  struct seq_file;
  struct sk_buff;
f7a2bd654   Sven Eckelmann   batman-adv: Conve...
187
188
189
190
191
192
193
194
195
196
197
198
199
  /**
   * batadv_print_vid - return printable version of vid information
   * @vid: the VLAN identifier
   *
   * Return: -1 when no VLAN is used, VLAN id otherwise
   */
  static inline int batadv_print_vid(unsigned short vid)
  {
  	if (vid & BATADV_VLAN_HAS_TAG)
  		return (int)(vid & VLAN_VID_MASK);
  	else
  		return -1;
  }
eb2deb6b3   Antonio Quartulli   batman-adv: chang...
200

3193e8fdf   Sven Eckelmann   batman-adv: Prefi...
201
202
203
204
205
206
207
  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);
6b5e971a2   Sven Eckelmann   batman-adv: Repla...
208
  bool batadv_is_my_mac(struct batadv_priv *bat_priv, const u8 *addr);
30da63a6a   Marek Lindner   batman-adv: conso...
209
210
  struct batadv_hard_iface *
  batadv_seq_print_text_primary_if_get(struct seq_file *seq);
411d6ed93   Marek Lindner   batman-adv: consi...
211
  int batadv_max_header_len(void);
c54f38c9a   Simon Wunderlich   batman-adv: set s...
212
  void batadv_skb_set_priority(struct sk_buff *skb, int offset);
3193e8fdf   Sven Eckelmann   batman-adv: Prefi...
213
214
215
  int batadv_batman_skb_recv(struct sk_buff *skb, struct net_device *dev,
  			   struct packet_type *ptype,
  			   struct net_device *orig_dev);
56303d34a   Sven Eckelmann   batman-adv: Prefi...
216
  int
6b5e971a2   Sven Eckelmann   batman-adv: Repla...
217
  batadv_recv_handler_register(u8 packet_type,
56303d34a   Sven Eckelmann   batman-adv: Prefi...
218
219
  			     int (*recv_handler)(struct sk_buff *,
  						 struct batadv_hard_iface *));
6b5e971a2   Sven Eckelmann   batman-adv: Repla...
220
  void batadv_recv_handler_unregister(u8 packet_type);
95a066d82   Sven Eckelmann   batman-adv: Add f...
221
  __be32 batadv_skb_crc32(struct sk_buff *skb, u8 *payload_ptr);
c6c8fea29   Sven Eckelmann   net: Add batman-a...
222

0aca86cd9   Antonio Quartulli   batman-adv: add k...
223
  /**
62fe710f6   Sven Eckelmann   batman-adv: Fix k...
224
   * batadv_compare_eth - Compare two not u16 aligned Ethernet addresses
7afcbbef6   Sven Eckelmann   batman-adv: Fix k...
225
226
   * @data1: Pointer to a six-byte array containing the Ethernet address
   * @data2: Pointer other six-byte array containing the Ethernet address
39901e716   Marek Lindner   batman-adv: separ...
227
   *
c3923b7a3   Joe Perches   batman: Remove re...
228
   * note: can't use ether_addr_equal() as it requires aligned memory
62fe710f6   Sven Eckelmann   batman-adv: Fix k...
229
   *
4b426b108   Sven Eckelmann   batman-adv: Use b...
230
   * Return: true if they are the same ethernet addr
39901e716   Marek Lindner   batman-adv: separ...
231
   */
f2d5cf2ad   Markus Pargmann   batman-adv: main,...
232
  static inline bool batadv_compare_eth(const void *data1, const void *data2)
39901e716   Marek Lindner   batman-adv: separ...
233
  {
d9cd4fe5e   Joe Perches   batadv: Slight op...
234
  	return ether_addr_equal_unaligned(data1, data2);
39901e716   Marek Lindner   batman-adv: separ...
235
  }
2c53040f0   Ben Hutchings   net: Fix (nearly-...
236
  /**
6d030de89   Antonio Quartulli   batman-adv: fix w...
237
238
   * batadv_has_timed_out - compares current time (jiffies) and timestamp +
   *  timeout
a04ccd597   Martin Hundebøll   batman-adv: Move ...
239
240
241
   * @timestamp:		base value to compare with (in jiffies)
   * @timeout:		added to base value before comparing (in milliseconds)
   *
62fe710f6   Sven Eckelmann   batman-adv: Fix k...
242
   * Return: true if current time is after timestamp + timeout
a04ccd597   Martin Hundebøll   batman-adv: Move ...
243
   */
1eda58bfc   Sven Eckelmann   batman-adv: Prefi...
244
245
  static inline bool batadv_has_timed_out(unsigned long timestamp,
  					unsigned int timeout)
a04ccd597   Martin Hundebøll   batman-adv: Move ...
246
247
248
  {
  	return time_is_before_jiffies(timestamp + msecs_to_jiffies(timeout));
  }
747e4221a   Sven Eckelmann   batman-adv: Add c...
249

3e34819e0   Sven Eckelmann   batman-adv: Prefi...
250
  #define batadv_atomic_dec_not_zero(v)	atomic_add_unless((v), -1, 0)
5f657ec0d   Antonio Quartulli   batman-adv: Move ...
251

f5d33d377   Antonio Quartulli   batman-adv: move ...
252
  /* Returns the smallest signed integer in two's complement with the sizeof x */
3e34819e0   Sven Eckelmann   batman-adv: Prefi...
253
  #define batadv_smallest_signed_int(x) (1u << (7u + 8u * (sizeof(x) - 1u)))
f5d33d377   Antonio Quartulli   batman-adv: move ...
254
255
256
257
258
  
  /* 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.
6b5e971a2   Sven Eckelmann   batman-adv: Repla...
259
   * This means that for a u8 with the maximum value 255, it would think:
f5d33d377   Antonio Quartulli   batman-adv: move ...
260
261
262
   *  - 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,
9cfc7bd60   Sven Eckelmann   batman-adv: Refor...
263
264
   *  - after adding more than 127 to the starting value - it is a successor
   */
9687a31c8   Antonio Quartulli   batman-adv: check...
265
266
267
268
  #define batadv_seq_before(x, y) ({typeof(x)_d1 = (x); \
  				 typeof(y)_d2 = (y); \
  				 typeof(x)_dummy = (_d1 - _d2); \
  				 (void)(&_d1 == &_d2); \
3e34819e0   Sven Eckelmann   batman-adv: Prefi...
269
270
  				 _dummy > batadv_smallest_signed_int(_dummy); })
  #define batadv_seq_after(x, y) batadv_seq_before(y, x)
f5d33d377   Antonio Quartulli   batman-adv: move ...
271

f8214865a   Martin Hundebøll   batman-adv: Add g...
272
  /* Stop preemption on local cpu while incrementing the counter */
56303d34a   Sven Eckelmann   batman-adv: Prefi...
273
  static inline void batadv_add_counter(struct batadv_priv *bat_priv, size_t idx,
f8214865a   Martin Hundebøll   batman-adv: Add g...
274
275
  				      size_t count)
  {
569174433   Shan Wei   batman-adv: use p...
276
  	this_cpu_add(bat_priv->bat_counters[idx], count);
f8214865a   Martin Hundebøll   batman-adv: Add g...
277
278
279
  }
  
  #define batadv_inc_counter(b, i) batadv_add_counter(b, i, 1)
3c12de9a5   Martin Hundebøll   batman-adv: netwo...
280
281
282
283
284
  /* 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]))
c018ad3de   Antonio Quartulli   batman-adv: add t...
285
  unsigned short batadv_get_vid(struct sk_buff *skb, size_t header_len);
eceb22ae0   Antonio Quartulli   batman-adv: creat...
286
  bool batadv_vlan_ap_isola_get(struct batadv_priv *bat_priv, unsigned short vid);
ef2615774   Marek Lindner   batman-adv: tvlv ...
287

c6c8fea29   Sven Eckelmann   net: Add batman-a...
288
  #endif /* _NET_BATMAN_ADV_MAIN_H_ */