diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
commit | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch) | |
tree | a8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /net/batman-adv/packet.h | |
parent | 406089d01562f1e2bf9f089fd7637009ebaad589 (diff) |
Patched in Tegra support.
Diffstat (limited to 'net/batman-adv/packet.h')
-rw-r--r-- | net/batman-adv/packet.h | 287 |
1 files changed, 112 insertions, 175 deletions
diff --git a/net/batman-adv/packet.h b/net/batman-adv/packet.h index cb6405bf755..b76b4be10b9 100644 --- a/net/batman-adv/packet.h +++ b/net/batman-adv/packet.h | |||
@@ -1,4 +1,5 @@ | |||
1 | /* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors: | 1 | /* |
2 | * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors: | ||
2 | * | 3 | * |
3 | * Marek Lindner, Simon Wunderlich | 4 | * Marek Lindner, Simon Wunderlich |
4 | * | 5 | * |
@@ -15,238 +16,174 @@ | |||
15 | * along with this program; if not, write to the Free Software | 16 | * along with this program; if not, write to the Free Software |
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
17 | * 02110-1301, USA | 18 | * 02110-1301, USA |
19 | * | ||
18 | */ | 20 | */ |
19 | 21 | ||
20 | #ifndef _NET_BATMAN_ADV_PACKET_H_ | 22 | #ifndef _NET_BATMAN_ADV_PACKET_H_ |
21 | #define _NET_BATMAN_ADV_PACKET_H_ | 23 | #define _NET_BATMAN_ADV_PACKET_H_ |
22 | 24 | ||
23 | enum batadv_packettype { | 25 | #define ETH_P_BATMAN 0x4305 /* unofficial/not registered Ethertype */ |
24 | BATADV_IV_OGM = 0x01, | ||
25 | BATADV_ICMP = 0x02, | ||
26 | BATADV_UNICAST = 0x03, | ||
27 | BATADV_BCAST = 0x04, | ||
28 | BATADV_VIS = 0x05, | ||
29 | BATADV_UNICAST_FRAG = 0x06, | ||
30 | BATADV_TT_QUERY = 0x07, | ||
31 | BATADV_ROAM_ADV = 0x08, | ||
32 | BATADV_UNICAST_4ADDR = 0x09, | ||
33 | }; | ||
34 | 26 | ||
35 | /** | 27 | enum bat_packettype { |
36 | * enum batadv_subtype - packet subtype for unicast4addr | 28 | BAT_PACKET = 0x01, |
37 | * @BATADV_P_DATA: user payload | 29 | BAT_ICMP = 0x02, |
38 | * @BATADV_P_DAT_DHT_GET: DHT request message | 30 | BAT_UNICAST = 0x03, |
39 | * @BATADV_P_DAT_DHT_PUT: DHT store message | 31 | BAT_BCAST = 0x04, |
40 | * @BATADV_P_DAT_CACHE_REPLY: ARP reply generated by DAT | 32 | BAT_VIS = 0x05, |
41 | */ | 33 | BAT_UNICAST_FRAG = 0x06, |
42 | enum batadv_subtype { | 34 | BAT_TT_QUERY = 0x07, |
43 | BATADV_P_DATA = 0x01, | 35 | BAT_ROAM_ADV = 0x08 |
44 | BATADV_P_DAT_DHT_GET = 0x02, | ||
45 | BATADV_P_DAT_DHT_PUT = 0x03, | ||
46 | BATADV_P_DAT_CACHE_REPLY = 0x04, | ||
47 | }; | 36 | }; |
48 | 37 | ||
49 | /* this file is included by batctl which needs these defines */ | 38 | /* this file is included by batctl which needs these defines */ |
50 | #define BATADV_COMPAT_VERSION 14 | 39 | #define COMPAT_VERSION 14 |
51 | 40 | ||
52 | enum batadv_iv_flags { | 41 | enum batman_flags { |
53 | BATADV_NOT_BEST_NEXT_HOP = BIT(3), | 42 | PRIMARIES_FIRST_HOP = 1 << 4, |
54 | BATADV_PRIMARIES_FIRST_HOP = BIT(4), | 43 | VIS_SERVER = 1 << 5, |
55 | BATADV_VIS_SERVER = BIT(5), | 44 | DIRECTLINK = 1 << 6 |
56 | BATADV_DIRECTLINK = BIT(6), | ||
57 | }; | 45 | }; |
58 | 46 | ||
59 | /* ICMP message types */ | 47 | /* ICMP message types */ |
60 | enum batadv_icmp_packettype { | 48 | enum icmp_packettype { |
61 | BATADV_ECHO_REPLY = 0, | 49 | ECHO_REPLY = 0, |
62 | BATADV_DESTINATION_UNREACHABLE = 3, | 50 | DESTINATION_UNREACHABLE = 3, |
63 | BATADV_ECHO_REQUEST = 8, | 51 | ECHO_REQUEST = 8, |
64 | BATADV_TTL_EXCEEDED = 11, | 52 | TTL_EXCEEDED = 11, |
65 | BATADV_PARAMETER_PROBLEM = 12, | 53 | PARAMETER_PROBLEM = 12 |
66 | }; | 54 | }; |
67 | 55 | ||
68 | /* vis defines */ | 56 | /* vis defines */ |
69 | enum batadv_vis_packettype { | 57 | enum vis_packettype { |
70 | BATADV_VIS_TYPE_SERVER_SYNC = 0, | 58 | VIS_TYPE_SERVER_SYNC = 0, |
71 | BATADV_VIS_TYPE_CLIENT_UPDATE = 1, | 59 | VIS_TYPE_CLIENT_UPDATE = 1 |
72 | }; | 60 | }; |
73 | 61 | ||
74 | /* fragmentation defines */ | 62 | /* fragmentation defines */ |
75 | enum batadv_unicast_frag_flags { | 63 | enum unicast_frag_flags { |
76 | BATADV_UNI_FRAG_HEAD = BIT(0), | 64 | UNI_FRAG_HEAD = 1 << 0, |
77 | BATADV_UNI_FRAG_LARGETAIL = BIT(1), | 65 | UNI_FRAG_LARGETAIL = 1 << 1 |
78 | }; | 66 | }; |
79 | 67 | ||
80 | /* TT_QUERY subtypes */ | 68 | /* TT_QUERY subtypes */ |
81 | #define BATADV_TT_QUERY_TYPE_MASK 0x3 | 69 | #define TT_QUERY_TYPE_MASK 0x3 |
82 | 70 | ||
83 | enum batadv_tt_query_packettype { | 71 | enum tt_query_packettype { |
84 | BATADV_TT_REQUEST = 0, | 72 | TT_REQUEST = 0, |
85 | BATADV_TT_RESPONSE = 1, | 73 | TT_RESPONSE = 1 |
86 | }; | 74 | }; |
87 | 75 | ||
88 | /* TT_QUERY flags */ | 76 | /* TT_QUERY flags */ |
89 | enum batadv_tt_query_flags { | 77 | enum tt_query_flags { |
90 | BATADV_TT_FULL_TABLE = BIT(2), | 78 | TT_FULL_TABLE = 1 << 2 |
91 | }; | 79 | }; |
92 | 80 | ||
93 | /* BATADV_TT_CLIENT flags. | 81 | /* TT_CLIENT flags. |
94 | * Flags from BIT(0) to BIT(7) are sent on the wire, while flags from BIT(8) to | 82 | * Flags from 1 to 1 << 7 are sent on the wire, while flags from 1 << 8 to |
95 | * BIT(15) are used for local computation only | 83 | * 1 << 15 are used for local computation only */ |
96 | */ | 84 | enum tt_client_flags { |
97 | enum batadv_tt_client_flags { | 85 | TT_CLIENT_DEL = 1 << 0, |
98 | BATADV_TT_CLIENT_DEL = BIT(0), | 86 | TT_CLIENT_ROAM = 1 << 1, |
99 | BATADV_TT_CLIENT_ROAM = BIT(1), | 87 | TT_CLIENT_NOPURGE = 1 << 8, |
100 | BATADV_TT_CLIENT_WIFI = BIT(2), | 88 | TT_CLIENT_NEW = 1 << 9, |
101 | BATADV_TT_CLIENT_TEMP = BIT(3), | 89 | TT_CLIENT_PENDING = 1 << 10 |
102 | BATADV_TT_CLIENT_NOPURGE = BIT(8), | ||
103 | BATADV_TT_CLIENT_NEW = BIT(9), | ||
104 | BATADV_TT_CLIENT_PENDING = BIT(10), | ||
105 | }; | 90 | }; |
106 | 91 | ||
107 | /* claim frame types for the bridge loop avoidance */ | 92 | struct batman_packet { |
108 | enum batadv_bla_claimframe { | ||
109 | BATADV_CLAIM_TYPE_CLAIM = 0x00, | ||
110 | BATADV_CLAIM_TYPE_UNCLAIM = 0x01, | ||
111 | BATADV_CLAIM_TYPE_ANNOUNCE = 0x02, | ||
112 | BATADV_CLAIM_TYPE_REQUEST = 0x03, | ||
113 | }; | ||
114 | |||
115 | /* the destination hardware field in the ARP frame is used to | ||
116 | * transport the claim type and the group id | ||
117 | */ | ||
118 | struct batadv_bla_claim_dst { | ||
119 | uint8_t magic[3]; /* FF:43:05 */ | ||
120 | uint8_t type; /* bla_claimframe */ | ||
121 | __be16 group; /* group id */ | ||
122 | }; | ||
123 | |||
124 | struct batadv_header { | ||
125 | uint8_t packet_type; | 93 | uint8_t packet_type; |
126 | uint8_t version; /* batman version field */ | 94 | uint8_t version; /* batman version field */ |
127 | uint8_t ttl; | 95 | uint8_t ttl; |
128 | /* the parent struct has to add a byte after the header to make | ||
129 | * everything 4 bytes aligned again | ||
130 | */ | ||
131 | }; | ||
132 | |||
133 | struct batadv_ogm_packet { | ||
134 | struct batadv_header header; | ||
135 | uint8_t flags; /* 0x40: DIRECTLINK flag, 0x20 VIS_SERVER flag... */ | 96 | uint8_t flags; /* 0x40: DIRECTLINK flag, 0x20 VIS_SERVER flag... */ |
136 | __be32 seqno; | 97 | uint32_t seqno; |
137 | uint8_t orig[ETH_ALEN]; | 98 | uint8_t orig[6]; |
138 | uint8_t prev_sender[ETH_ALEN]; | 99 | uint8_t prev_sender[6]; |
139 | uint8_t gw_flags; /* flags related to gateway class */ | 100 | uint8_t gw_flags; /* flags related to gateway class */ |
140 | uint8_t tq; | 101 | uint8_t tq; |
141 | uint8_t tt_num_changes; | 102 | uint8_t tt_num_changes; |
142 | uint8_t ttvn; /* translation table version number */ | 103 | uint8_t ttvn; /* translation table version number */ |
143 | __be16 tt_crc; | 104 | uint16_t tt_crc; |
144 | } __packed; | 105 | } __packed; |
145 | 106 | ||
146 | #define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet) | 107 | #define BAT_PACKET_LEN sizeof(struct batman_packet) |
147 | 108 | ||
148 | struct batadv_icmp_packet { | 109 | struct icmp_packet { |
149 | struct batadv_header header; | 110 | uint8_t packet_type; |
111 | uint8_t version; /* batman version field */ | ||
112 | uint8_t ttl; | ||
150 | uint8_t msg_type; /* see ICMP message types above */ | 113 | uint8_t msg_type; /* see ICMP message types above */ |
151 | uint8_t dst[ETH_ALEN]; | 114 | uint8_t dst[6]; |
152 | uint8_t orig[ETH_ALEN]; | 115 | uint8_t orig[6]; |
153 | __be16 seqno; | 116 | uint16_t seqno; |
154 | uint8_t uid; | 117 | uint8_t uid; |
155 | uint8_t reserved; | 118 | uint8_t reserved; |
156 | }; | 119 | } __packed; |
157 | 120 | ||
158 | #define BATADV_RR_LEN 16 | 121 | #define BAT_RR_LEN 16 |
159 | 122 | ||
160 | /* icmp_packet_rr must start with all fields from imcp_packet | 123 | /* icmp_packet_rr must start with all fields from imcp_packet |
161 | * as this is assumed by code that handles ICMP packets | 124 | * as this is assumed by code that handles ICMP packets */ |
162 | */ | 125 | struct icmp_packet_rr { |
163 | struct batadv_icmp_packet_rr { | 126 | uint8_t packet_type; |
164 | struct batadv_header header; | 127 | uint8_t version; /* batman version field */ |
128 | uint8_t ttl; | ||
165 | uint8_t msg_type; /* see ICMP message types above */ | 129 | uint8_t msg_type; /* see ICMP message types above */ |
166 | uint8_t dst[ETH_ALEN]; | 130 | uint8_t dst[6]; |
167 | uint8_t orig[ETH_ALEN]; | 131 | uint8_t orig[6]; |
168 | __be16 seqno; | 132 | uint16_t seqno; |
169 | uint8_t uid; | 133 | uint8_t uid; |
170 | uint8_t rr_cur; | 134 | uint8_t rr_cur; |
171 | uint8_t rr[BATADV_RR_LEN][ETH_ALEN]; | 135 | uint8_t rr[BAT_RR_LEN][ETH_ALEN]; |
172 | }; | 136 | } __packed; |
173 | |||
174 | /* All packet headers in front of an ethernet header have to be completely | ||
175 | * divisible by 2 but not by 4 to make the payload after the ethernet | ||
176 | * header again 4 bytes boundary aligned. | ||
177 | * | ||
178 | * A packing of 2 is necessary to avoid extra padding at the end of the struct | ||
179 | * caused by a structure member which is larger than two bytes. Otherwise | ||
180 | * the structure would not fulfill the previously mentioned rule to avoid the | ||
181 | * misalignment of the payload after the ethernet header. It may also lead to | ||
182 | * leakage of information when the padding it not initialized before sending. | ||
183 | */ | ||
184 | #pragma pack(2) | ||
185 | 137 | ||
186 | struct batadv_unicast_packet { | 138 | struct unicast_packet { |
187 | struct batadv_header header; | 139 | uint8_t packet_type; |
140 | uint8_t version; /* batman version field */ | ||
141 | uint8_t ttl; | ||
188 | uint8_t ttvn; /* destination translation table version number */ | 142 | uint8_t ttvn; /* destination translation table version number */ |
189 | uint8_t dest[ETH_ALEN]; | 143 | uint8_t dest[6]; |
190 | /* "4 bytes boundary + 2 bytes" long to make the payload after the | 144 | } __packed; |
191 | * following ethernet header again 4 bytes boundary aligned | ||
192 | */ | ||
193 | }; | ||
194 | |||
195 | /** | ||
196 | * struct batadv_unicast_4addr_packet - extended unicast packet | ||
197 | * @u: common unicast packet header | ||
198 | * @src: address of the source | ||
199 | * @subtype: packet subtype | ||
200 | */ | ||
201 | struct batadv_unicast_4addr_packet { | ||
202 | struct batadv_unicast_packet u; | ||
203 | uint8_t src[ETH_ALEN]; | ||
204 | uint8_t subtype; | ||
205 | uint8_t reserved; | ||
206 | /* "4 bytes boundary + 2 bytes" long to make the payload after the | ||
207 | * following ethernet header again 4 bytes boundary aligned | ||
208 | */ | ||
209 | }; | ||
210 | 145 | ||
211 | struct batadv_unicast_frag_packet { | 146 | struct unicast_frag_packet { |
212 | struct batadv_header header; | 147 | uint8_t packet_type; |
148 | uint8_t version; /* batman version field */ | ||
149 | uint8_t ttl; | ||
213 | uint8_t ttvn; /* destination translation table version number */ | 150 | uint8_t ttvn; /* destination translation table version number */ |
214 | uint8_t dest[ETH_ALEN]; | 151 | uint8_t dest[6]; |
215 | uint8_t flags; | 152 | uint8_t flags; |
216 | uint8_t align; | 153 | uint8_t align; |
217 | uint8_t orig[ETH_ALEN]; | 154 | uint8_t orig[6]; |
218 | __be16 seqno; | 155 | uint16_t seqno; |
219 | } __packed; | 156 | } __packed; |
220 | 157 | ||
221 | struct batadv_bcast_packet { | 158 | struct bcast_packet { |
222 | struct batadv_header header; | 159 | uint8_t packet_type; |
160 | uint8_t version; /* batman version field */ | ||
161 | uint8_t ttl; | ||
223 | uint8_t reserved; | 162 | uint8_t reserved; |
224 | __be32 seqno; | 163 | uint32_t seqno; |
225 | uint8_t orig[ETH_ALEN]; | 164 | uint8_t orig[6]; |
226 | /* "4 bytes boundary + 2 bytes" long to make the payload after the | 165 | } __packed; |
227 | * following ethernet header again 4 bytes boundary aligned | ||
228 | */ | ||
229 | }; | ||
230 | |||
231 | #pragma pack() | ||
232 | 166 | ||
233 | struct batadv_vis_packet { | 167 | struct vis_packet { |
234 | struct batadv_header header; | 168 | uint8_t packet_type; |
169 | uint8_t version; /* batman version field */ | ||
170 | uint8_t ttl; /* TTL */ | ||
235 | uint8_t vis_type; /* which type of vis-participant sent this? */ | 171 | uint8_t vis_type; /* which type of vis-participant sent this? */ |
236 | __be32 seqno; /* sequence number */ | 172 | uint32_t seqno; /* sequence number */ |
237 | uint8_t entries; /* number of entries behind this struct */ | 173 | uint8_t entries; /* number of entries behind this struct */ |
238 | uint8_t reserved; | 174 | uint8_t reserved; |
239 | uint8_t vis_orig[ETH_ALEN]; /* originator reporting its neighbors */ | 175 | uint8_t vis_orig[6]; /* originator that announces its neighbors */ |
240 | uint8_t target_orig[ETH_ALEN]; /* who should receive this packet */ | 176 | uint8_t target_orig[6]; /* who should receive this packet */ |
241 | uint8_t sender_orig[ETH_ALEN]; /* who sent or forwarded this packet */ | 177 | uint8_t sender_orig[6]; /* who sent or rebroadcasted this packet */ |
242 | }; | 178 | } __packed; |
243 | 179 | ||
244 | struct batadv_tt_query_packet { | 180 | struct tt_query_packet { |
245 | struct batadv_header header; | 181 | uint8_t packet_type; |
182 | uint8_t version; /* batman version field */ | ||
183 | uint8_t ttl; | ||
246 | /* the flag field is a combination of: | 184 | /* the flag field is a combination of: |
247 | * - TT_REQUEST or TT_RESPONSE | 185 | * - TT_REQUEST or TT_RESPONSE |
248 | * - TT_FULL_TABLE | 186 | * - TT_FULL_TABLE */ |
249 | */ | ||
250 | uint8_t flags; | 187 | uint8_t flags; |
251 | uint8_t dst[ETH_ALEN]; | 188 | uint8_t dst[ETH_ALEN]; |
252 | uint8_t src[ETH_ALEN]; | 189 | uint8_t src[ETH_ALEN]; |
@@ -254,26 +191,26 @@ struct batadv_tt_query_packet { | |||
254 | * if TT_REQUEST: ttvn that triggered the | 191 | * if TT_REQUEST: ttvn that triggered the |
255 | * request | 192 | * request |
256 | * if TT_RESPONSE: new ttvn for the src | 193 | * if TT_RESPONSE: new ttvn for the src |
257 | * orig_node | 194 | * orig_node */ |
258 | */ | ||
259 | uint8_t ttvn; | 195 | uint8_t ttvn; |
260 | /* tt_data field is: | 196 | /* tt_data field is: |
261 | * if TT_REQUEST: crc associated with the | 197 | * if TT_REQUEST: crc associated with the |
262 | * ttvn | 198 | * ttvn |
263 | * if TT_RESPONSE: table_size | 199 | * if TT_RESPONSE: table_size */ |
264 | */ | 200 | uint16_t tt_data; |
265 | __be16 tt_data; | ||
266 | } __packed; | 201 | } __packed; |
267 | 202 | ||
268 | struct batadv_roam_adv_packet { | 203 | struct roam_adv_packet { |
269 | struct batadv_header header; | 204 | uint8_t packet_type; |
205 | uint8_t version; | ||
206 | uint8_t ttl; | ||
270 | uint8_t reserved; | 207 | uint8_t reserved; |
271 | uint8_t dst[ETH_ALEN]; | 208 | uint8_t dst[ETH_ALEN]; |
272 | uint8_t src[ETH_ALEN]; | 209 | uint8_t src[ETH_ALEN]; |
273 | uint8_t client[ETH_ALEN]; | 210 | uint8_t client[ETH_ALEN]; |
274 | } __packed; | 211 | } __packed; |
275 | 212 | ||
276 | struct batadv_tt_change { | 213 | struct tt_change { |
277 | uint8_t flags; | 214 | uint8_t flags; |
278 | uint8_t addr[ETH_ALEN]; | 215 | uint8_t addr[ETH_ALEN]; |
279 | } __packed; | 216 | } __packed; |