diff options
Diffstat (limited to 'net/batman-adv/packet.h')
-rw-r--r-- | net/batman-adv/packet.h | 142 |
1 files changed, 112 insertions, 30 deletions
diff --git a/net/batman-adv/packet.h b/net/batman-adv/packet.h index eda99650e9f..b76b4be10b9 100644 --- a/net/batman-adv/packet.h +++ b/net/batman-adv/packet.h | |||
@@ -24,46 +24,84 @@ | |||
24 | 24 | ||
25 | #define ETH_P_BATMAN 0x4305 /* unofficial/not registered Ethertype */ | 25 | #define ETH_P_BATMAN 0x4305 /* unofficial/not registered Ethertype */ |
26 | 26 | ||
27 | #define BAT_PACKET 0x01 | 27 | enum bat_packettype { |
28 | #define BAT_ICMP 0x02 | 28 | BAT_PACKET = 0x01, |
29 | #define BAT_UNICAST 0x03 | 29 | BAT_ICMP = 0x02, |
30 | #define BAT_BCAST 0x04 | 30 | BAT_UNICAST = 0x03, |
31 | #define BAT_VIS 0x05 | 31 | BAT_BCAST = 0x04, |
32 | #define BAT_UNICAST_FRAG 0x06 | 32 | BAT_VIS = 0x05, |
33 | BAT_UNICAST_FRAG = 0x06, | ||
34 | BAT_TT_QUERY = 0x07, | ||
35 | BAT_ROAM_ADV = 0x08 | ||
36 | }; | ||
33 | 37 | ||
34 | /* this file is included by batctl which needs these defines */ | 38 | /* this file is included by batctl which needs these defines */ |
35 | #define COMPAT_VERSION 12 | 39 | #define COMPAT_VERSION 14 |
36 | #define DIRECTLINK 0x40 | 40 | |
37 | #define VIS_SERVER 0x20 | 41 | enum batman_flags { |
38 | #define PRIMARIES_FIRST_HOP 0x10 | 42 | PRIMARIES_FIRST_HOP = 1 << 4, |
43 | VIS_SERVER = 1 << 5, | ||
44 | DIRECTLINK = 1 << 6 | ||
45 | }; | ||
39 | 46 | ||
40 | /* ICMP message types */ | 47 | /* ICMP message types */ |
41 | #define ECHO_REPLY 0 | 48 | enum icmp_packettype { |
42 | #define DESTINATION_UNREACHABLE 3 | 49 | ECHO_REPLY = 0, |
43 | #define ECHO_REQUEST 8 | 50 | DESTINATION_UNREACHABLE = 3, |
44 | #define TTL_EXCEEDED 11 | 51 | ECHO_REQUEST = 8, |
45 | #define PARAMETER_PROBLEM 12 | 52 | TTL_EXCEEDED = 11, |
53 | PARAMETER_PROBLEM = 12 | ||
54 | }; | ||
46 | 55 | ||
47 | /* vis defines */ | 56 | /* vis defines */ |
48 | #define VIS_TYPE_SERVER_SYNC 0 | 57 | enum vis_packettype { |
49 | #define VIS_TYPE_CLIENT_UPDATE 1 | 58 | VIS_TYPE_SERVER_SYNC = 0, |
59 | VIS_TYPE_CLIENT_UPDATE = 1 | ||
60 | }; | ||
50 | 61 | ||
51 | /* fragmentation defines */ | 62 | /* fragmentation defines */ |
52 | #define UNI_FRAG_HEAD 0x01 | 63 | enum unicast_frag_flags { |
53 | #define UNI_FRAG_LARGETAIL 0x02 | 64 | UNI_FRAG_HEAD = 1 << 0, |
65 | UNI_FRAG_LARGETAIL = 1 << 1 | ||
66 | }; | ||
67 | |||
68 | /* TT_QUERY subtypes */ | ||
69 | #define TT_QUERY_TYPE_MASK 0x3 | ||
70 | |||
71 | enum tt_query_packettype { | ||
72 | TT_REQUEST = 0, | ||
73 | TT_RESPONSE = 1 | ||
74 | }; | ||
75 | |||
76 | /* TT_QUERY flags */ | ||
77 | enum tt_query_flags { | ||
78 | TT_FULL_TABLE = 1 << 2 | ||
79 | }; | ||
80 | |||
81 | /* TT_CLIENT flags. | ||
82 | * Flags from 1 to 1 << 7 are sent on the wire, while flags from 1 << 8 to | ||
83 | * 1 << 15 are used for local computation only */ | ||
84 | enum tt_client_flags { | ||
85 | TT_CLIENT_DEL = 1 << 0, | ||
86 | TT_CLIENT_ROAM = 1 << 1, | ||
87 | TT_CLIENT_NOPURGE = 1 << 8, | ||
88 | TT_CLIENT_NEW = 1 << 9, | ||
89 | TT_CLIENT_PENDING = 1 << 10 | ||
90 | }; | ||
54 | 91 | ||
55 | struct batman_packet { | 92 | struct batman_packet { |
56 | uint8_t packet_type; | 93 | uint8_t packet_type; |
57 | uint8_t version; /* batman version field */ | 94 | uint8_t version; /* batman version field */ |
95 | uint8_t ttl; | ||
58 | uint8_t flags; /* 0x40: DIRECTLINK flag, 0x20 VIS_SERVER flag... */ | 96 | uint8_t flags; /* 0x40: DIRECTLINK flag, 0x20 VIS_SERVER flag... */ |
59 | uint8_t tq; | ||
60 | uint32_t seqno; | 97 | uint32_t seqno; |
61 | uint8_t orig[6]; | 98 | uint8_t orig[6]; |
62 | uint8_t prev_sender[6]; | 99 | uint8_t prev_sender[6]; |
63 | uint8_t ttl; | ||
64 | uint8_t num_tt; | ||
65 | uint8_t gw_flags; /* flags related to gateway class */ | 100 | uint8_t gw_flags; /* flags related to gateway class */ |
66 | uint8_t align; | 101 | uint8_t tq; |
102 | uint8_t tt_num_changes; | ||
103 | uint8_t ttvn; /* translation table version number */ | ||
104 | uint16_t tt_crc; | ||
67 | } __packed; | 105 | } __packed; |
68 | 106 | ||
69 | #define BAT_PACKET_LEN sizeof(struct batman_packet) | 107 | #define BAT_PACKET_LEN sizeof(struct batman_packet) |
@@ -71,12 +109,13 @@ struct batman_packet { | |||
71 | struct icmp_packet { | 109 | struct icmp_packet { |
72 | uint8_t packet_type; | 110 | uint8_t packet_type; |
73 | uint8_t version; /* batman version field */ | 111 | uint8_t version; /* batman version field */ |
74 | uint8_t msg_type; /* see ICMP message types above */ | ||
75 | uint8_t ttl; | 112 | uint8_t ttl; |
113 | uint8_t msg_type; /* see ICMP message types above */ | ||
76 | uint8_t dst[6]; | 114 | uint8_t dst[6]; |
77 | uint8_t orig[6]; | 115 | uint8_t orig[6]; |
78 | uint16_t seqno; | 116 | uint16_t seqno; |
79 | uint8_t uid; | 117 | uint8_t uid; |
118 | uint8_t reserved; | ||
80 | } __packed; | 119 | } __packed; |
81 | 120 | ||
82 | #define BAT_RR_LEN 16 | 121 | #define BAT_RR_LEN 16 |
@@ -86,8 +125,8 @@ struct icmp_packet { | |||
86 | struct icmp_packet_rr { | 125 | struct icmp_packet_rr { |
87 | uint8_t packet_type; | 126 | uint8_t packet_type; |
88 | uint8_t version; /* batman version field */ | 127 | uint8_t version; /* batman version field */ |
89 | uint8_t msg_type; /* see ICMP message types above */ | ||
90 | uint8_t ttl; | 128 | uint8_t ttl; |
129 | uint8_t msg_type; /* see ICMP message types above */ | ||
91 | uint8_t dst[6]; | 130 | uint8_t dst[6]; |
92 | uint8_t orig[6]; | 131 | uint8_t orig[6]; |
93 | uint16_t seqno; | 132 | uint16_t seqno; |
@@ -99,16 +138,19 @@ struct icmp_packet_rr { | |||
99 | struct unicast_packet { | 138 | struct unicast_packet { |
100 | uint8_t packet_type; | 139 | uint8_t packet_type; |
101 | uint8_t version; /* batman version field */ | 140 | uint8_t version; /* batman version field */ |
102 | uint8_t dest[6]; | ||
103 | uint8_t ttl; | 141 | uint8_t ttl; |
142 | uint8_t ttvn; /* destination translation table version number */ | ||
143 | uint8_t dest[6]; | ||
104 | } __packed; | 144 | } __packed; |
105 | 145 | ||
106 | struct unicast_frag_packet { | 146 | struct unicast_frag_packet { |
107 | uint8_t packet_type; | 147 | uint8_t packet_type; |
108 | uint8_t version; /* batman version field */ | 148 | uint8_t version; /* batman version field */ |
109 | uint8_t dest[6]; | ||
110 | uint8_t ttl; | 149 | uint8_t ttl; |
150 | uint8_t ttvn; /* destination translation table version number */ | ||
151 | uint8_t dest[6]; | ||
111 | uint8_t flags; | 152 | uint8_t flags; |
153 | uint8_t align; | ||
112 | uint8_t orig[6]; | 154 | uint8_t orig[6]; |
113 | uint16_t seqno; | 155 | uint16_t seqno; |
114 | } __packed; | 156 | } __packed; |
@@ -116,21 +158,61 @@ struct unicast_frag_packet { | |||
116 | struct bcast_packet { | 158 | struct bcast_packet { |
117 | uint8_t packet_type; | 159 | uint8_t packet_type; |
118 | uint8_t version; /* batman version field */ | 160 | uint8_t version; /* batman version field */ |
119 | uint8_t orig[6]; | ||
120 | uint8_t ttl; | 161 | uint8_t ttl; |
162 | uint8_t reserved; | ||
121 | uint32_t seqno; | 163 | uint32_t seqno; |
164 | uint8_t orig[6]; | ||
122 | } __packed; | 165 | } __packed; |
123 | 166 | ||
124 | struct vis_packet { | 167 | struct vis_packet { |
125 | uint8_t packet_type; | 168 | uint8_t packet_type; |
126 | uint8_t version; /* batman version field */ | 169 | uint8_t version; /* batman version field */ |
170 | uint8_t ttl; /* TTL */ | ||
127 | uint8_t vis_type; /* which type of vis-participant sent this? */ | 171 | uint8_t vis_type; /* which type of vis-participant sent this? */ |
128 | uint8_t entries; /* number of entries behind this struct */ | ||
129 | uint32_t seqno; /* sequence number */ | 172 | uint32_t seqno; /* sequence number */ |
130 | uint8_t ttl; /* TTL */ | 173 | uint8_t entries; /* number of entries behind this struct */ |
174 | uint8_t reserved; | ||
131 | uint8_t vis_orig[6]; /* originator that announces its neighbors */ | 175 | uint8_t vis_orig[6]; /* originator that announces its neighbors */ |
132 | uint8_t target_orig[6]; /* who should receive this packet */ | 176 | uint8_t target_orig[6]; /* who should receive this packet */ |
133 | uint8_t sender_orig[6]; /* who sent or rebroadcasted this packet */ | 177 | uint8_t sender_orig[6]; /* who sent or rebroadcasted this packet */ |
134 | } __packed; | 178 | } __packed; |
135 | 179 | ||
180 | struct tt_query_packet { | ||
181 | uint8_t packet_type; | ||
182 | uint8_t version; /* batman version field */ | ||
183 | uint8_t ttl; | ||
184 | /* the flag field is a combination of: | ||
185 | * - TT_REQUEST or TT_RESPONSE | ||
186 | * - TT_FULL_TABLE */ | ||
187 | uint8_t flags; | ||
188 | uint8_t dst[ETH_ALEN]; | ||
189 | uint8_t src[ETH_ALEN]; | ||
190 | /* the ttvn field is: | ||
191 | * if TT_REQUEST: ttvn that triggered the | ||
192 | * request | ||
193 | * if TT_RESPONSE: new ttvn for the src | ||
194 | * orig_node */ | ||
195 | uint8_t ttvn; | ||
196 | /* tt_data field is: | ||
197 | * if TT_REQUEST: crc associated with the | ||
198 | * ttvn | ||
199 | * if TT_RESPONSE: table_size */ | ||
200 | uint16_t tt_data; | ||
201 | } __packed; | ||
202 | |||
203 | struct roam_adv_packet { | ||
204 | uint8_t packet_type; | ||
205 | uint8_t version; | ||
206 | uint8_t ttl; | ||
207 | uint8_t reserved; | ||
208 | uint8_t dst[ETH_ALEN]; | ||
209 | uint8_t src[ETH_ALEN]; | ||
210 | uint8_t client[ETH_ALEN]; | ||
211 | } __packed; | ||
212 | |||
213 | struct tt_change { | ||
214 | uint8_t flags; | ||
215 | uint8_t addr[ETH_ALEN]; | ||
216 | } __packed; | ||
217 | |||
136 | #endif /* _NET_BATMAN_ADV_PACKET_H_ */ | 218 | #endif /* _NET_BATMAN_ADV_PACKET_H_ */ |