diff options
Diffstat (limited to 'net/batman-adv/packet.h')
-rw-r--r-- | net/batman-adv/packet.h | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/net/batman-adv/packet.h b/net/batman-adv/packet.h new file mode 100644 index 000000000000..b49fdf70a6d5 --- /dev/null +++ b/net/batman-adv/packet.h | |||
@@ -0,0 +1,136 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: | ||
3 | * | ||
4 | * Marek Lindner, Simon Wunderlich | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of version 2 of the GNU General Public | ||
8 | * License as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, but | ||
11 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | * General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | ||
18 | * 02110-1301, USA | ||
19 | * | ||
20 | */ | ||
21 | |||
22 | #ifndef _NET_BATMAN_ADV_PACKET_H_ | ||
23 | #define _NET_BATMAN_ADV_PACKET_H_ | ||
24 | |||
25 | #define ETH_P_BATMAN 0x4305 /* unofficial/not registered Ethertype */ | ||
26 | |||
27 | #define BAT_PACKET 0x01 | ||
28 | #define BAT_ICMP 0x02 | ||
29 | #define BAT_UNICAST 0x03 | ||
30 | #define BAT_BCAST 0x04 | ||
31 | #define BAT_VIS 0x05 | ||
32 | #define BAT_UNICAST_FRAG 0x06 | ||
33 | |||
34 | /* this file is included by batctl which needs these defines */ | ||
35 | #define COMPAT_VERSION 12 | ||
36 | #define DIRECTLINK 0x40 | ||
37 | #define VIS_SERVER 0x20 | ||
38 | #define PRIMARIES_FIRST_HOP 0x10 | ||
39 | |||
40 | /* ICMP message types */ | ||
41 | #define ECHO_REPLY 0 | ||
42 | #define DESTINATION_UNREACHABLE 3 | ||
43 | #define ECHO_REQUEST 8 | ||
44 | #define TTL_EXCEEDED 11 | ||
45 | #define PARAMETER_PROBLEM 12 | ||
46 | |||
47 | /* vis defines */ | ||
48 | #define VIS_TYPE_SERVER_SYNC 0 | ||
49 | #define VIS_TYPE_CLIENT_UPDATE 1 | ||
50 | |||
51 | /* fragmentation defines */ | ||
52 | #define UNI_FRAG_HEAD 0x01 | ||
53 | |||
54 | struct batman_packet { | ||
55 | uint8_t packet_type; | ||
56 | uint8_t version; /* batman version field */ | ||
57 | uint8_t flags; /* 0x40: DIRECTLINK flag, 0x20 VIS_SERVER flag... */ | ||
58 | uint8_t tq; | ||
59 | uint32_t seqno; | ||
60 | uint8_t orig[6]; | ||
61 | uint8_t prev_sender[6]; | ||
62 | uint8_t ttl; | ||
63 | uint8_t num_hna; | ||
64 | uint8_t gw_flags; /* flags related to gateway class */ | ||
65 | uint8_t align; | ||
66 | } __attribute__((packed)); | ||
67 | |||
68 | #define BAT_PACKET_LEN sizeof(struct batman_packet) | ||
69 | |||
70 | struct icmp_packet { | ||
71 | uint8_t packet_type; | ||
72 | uint8_t version; /* batman version field */ | ||
73 | uint8_t msg_type; /* see ICMP message types above */ | ||
74 | uint8_t ttl; | ||
75 | uint8_t dst[6]; | ||
76 | uint8_t orig[6]; | ||
77 | uint16_t seqno; | ||
78 | uint8_t uid; | ||
79 | } __attribute__((packed)); | ||
80 | |||
81 | #define BAT_RR_LEN 16 | ||
82 | |||
83 | /* icmp_packet_rr must start with all fields from imcp_packet | ||
84 | * as this is assumed by code that handles ICMP packets */ | ||
85 | struct icmp_packet_rr { | ||
86 | uint8_t packet_type; | ||
87 | uint8_t version; /* batman version field */ | ||
88 | uint8_t msg_type; /* see ICMP message types above */ | ||
89 | uint8_t ttl; | ||
90 | uint8_t dst[6]; | ||
91 | uint8_t orig[6]; | ||
92 | uint16_t seqno; | ||
93 | uint8_t uid; | ||
94 | uint8_t rr_cur; | ||
95 | uint8_t rr[BAT_RR_LEN][ETH_ALEN]; | ||
96 | } __attribute__((packed)); | ||
97 | |||
98 | struct unicast_packet { | ||
99 | uint8_t packet_type; | ||
100 | uint8_t version; /* batman version field */ | ||
101 | uint8_t dest[6]; | ||
102 | uint8_t ttl; | ||
103 | } __attribute__((packed)); | ||
104 | |||
105 | struct unicast_frag_packet { | ||
106 | uint8_t packet_type; | ||
107 | uint8_t version; /* batman version field */ | ||
108 | uint8_t dest[6]; | ||
109 | uint8_t ttl; | ||
110 | uint8_t flags; | ||
111 | uint8_t orig[6]; | ||
112 | uint16_t seqno; | ||
113 | } __attribute__((packed)); | ||
114 | |||
115 | struct bcast_packet { | ||
116 | uint8_t packet_type; | ||
117 | uint8_t version; /* batman version field */ | ||
118 | uint8_t orig[6]; | ||
119 | uint8_t ttl; | ||
120 | uint32_t seqno; | ||
121 | } __attribute__((packed)); | ||
122 | |||
123 | struct vis_packet { | ||
124 | uint8_t packet_type; | ||
125 | uint8_t version; /* batman version field */ | ||
126 | uint8_t vis_type; /* which type of vis-participant sent this? */ | ||
127 | uint8_t entries; /* number of entries behind this struct */ | ||
128 | uint32_t seqno; /* sequence number */ | ||
129 | uint8_t ttl; /* TTL */ | ||
130 | uint8_t vis_orig[6]; /* originator that informs about its | ||
131 | * neighbors */ | ||
132 | uint8_t target_orig[6]; /* who should receive this packet */ | ||
133 | uint8_t sender_orig[6]; /* who sent or rebroadcasted this packet */ | ||
134 | } __attribute__((packed)); | ||
135 | |||
136 | #endif /* _NET_BATMAN_ADV_PACKET_H_ */ | ||