aboutsummaryrefslogtreecommitdiff
path: root/src/vpn/gnunet-vpn-packet.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vpn/gnunet-vpn-packet.h')
-rw-r--r--src/vpn/gnunet-vpn-packet.h411
1 files changed, 218 insertions, 193 deletions
diff --git a/src/vpn/gnunet-vpn-packet.h b/src/vpn/gnunet-vpn-packet.h
index 91c6eb9c1..47fa69847 100644
--- a/src/vpn/gnunet-vpn-packet.h
+++ b/src/vpn/gnunet-vpn-packet.h
@@ -5,221 +5,246 @@
5#include "gnunet_common.h" 5#include "gnunet_common.h"
6 6
7// Headers 7// Headers
8struct pkt_tun { 8struct pkt_tun
9 unsigned flags:16 GNUNET_PACKED; 9{
10 unsigned type:16 GNUNET_PACKED; 10 unsigned flags:16 GNUNET_PACKED;
11 unsigned type:16 GNUNET_PACKED;
11}; 12};
12 13
13struct ip6_hdr { 14struct ip6_hdr
14 unsigned tclass_h:4 GNUNET_PACKED; 15{
15 unsigned version:4 GNUNET_PACKED; 16 unsigned tclass_h:4 GNUNET_PACKED;
16 unsigned tclass_l:4 GNUNET_PACKED; 17 unsigned version:4 GNUNET_PACKED;
17 unsigned flowlbl:20 GNUNET_PACKED; 18 unsigned tclass_l:4 GNUNET_PACKED;
18 unsigned paylgth:16 GNUNET_PACKED; 19 unsigned flowlbl:20 GNUNET_PACKED;
19 unsigned nxthdr:8 GNUNET_PACKED; 20 unsigned paylgth:16 GNUNET_PACKED;
20 unsigned hoplmt:8 GNUNET_PACKED; 21 unsigned nxthdr:8 GNUNET_PACKED;
21 unsigned char sadr[16]; 22 unsigned hoplmt:8 GNUNET_PACKED;
22 unsigned char dadr[16]; 23 unsigned char sadr[16];
24 unsigned char dadr[16];
23}; 25};
24 26
25struct ip_hdr { 27struct ip_hdr
26 unsigned hdr_lngth:4 GNUNET_PACKED; 28{
27 unsigned version:4 GNUNET_PACKED; 29 unsigned hdr_lngth:4 GNUNET_PACKED;
30 unsigned version:4 GNUNET_PACKED;
28 31
29 unsigned diff_serv:8 GNUNET_PACKED; 32 unsigned diff_serv:8 GNUNET_PACKED;
30 unsigned tot_lngth:16 GNUNET_PACKED; 33 unsigned tot_lngth:16 GNUNET_PACKED;
31 34
32 unsigned ident:16 GNUNET_PACKED; 35 unsigned ident:16 GNUNET_PACKED;
33 unsigned flags:3 GNUNET_PACKED; 36 unsigned flags:3 GNUNET_PACKED;
34 unsigned frag_off:13 GNUNET_PACKED; 37 unsigned frag_off:13 GNUNET_PACKED;
35 38
36 unsigned ttl:8 GNUNET_PACKED; 39 unsigned ttl:8 GNUNET_PACKED;
37 unsigned proto:8 GNUNET_PACKED; 40 unsigned proto:8 GNUNET_PACKED;
38 unsigned chks:16 GNUNET_PACKED; 41 unsigned chks:16 GNUNET_PACKED;
39 42
40 unsigned sadr:32 GNUNET_PACKED; 43 unsigned sadr:32 GNUNET_PACKED;
41 unsigned dadr:32 GNUNET_PACKED; 44 unsigned dadr:32 GNUNET_PACKED;
42}; 45};
43 46
44#define TCP_FLAG_SYN 2 47#define TCP_FLAG_SYN 2
45 48
46struct tcp_pkt { 49struct tcp_pkt
47 unsigned spt:16 GNUNET_PACKED; 50{
48 unsigned dpt:16 GNUNET_PACKED; 51 unsigned spt:16 GNUNET_PACKED;
49 unsigned seq:32 GNUNET_PACKED; 52 unsigned dpt:16 GNUNET_PACKED;
50 unsigned ack:32 GNUNET_PACKED; 53 unsigned seq:32 GNUNET_PACKED;
51 unsigned off:4 GNUNET_PACKED; 54 unsigned ack:32 GNUNET_PACKED;
52 unsigned rsv:4 GNUNET_PACKED; 55 unsigned off:4 GNUNET_PACKED;
53 unsigned flg:8 GNUNET_PACKED; 56 unsigned rsv:4 GNUNET_PACKED;
54 unsigned wsz:16 GNUNET_PACKED; 57 unsigned flg:8 GNUNET_PACKED;
55 unsigned crc:16 GNUNET_PACKED; 58 unsigned wsz:16 GNUNET_PACKED;
56 unsigned urg:16 GNUNET_PACKED; 59 unsigned crc:16 GNUNET_PACKED;
60 unsigned urg:16 GNUNET_PACKED;
57}; 61};
58 62
59struct udp_pkt { 63struct udp_pkt
60 unsigned spt:16 GNUNET_PACKED; 64{
61 unsigned dpt:16 GNUNET_PACKED; 65 unsigned spt:16 GNUNET_PACKED;
62 unsigned len:16 GNUNET_PACKED; 66 unsigned dpt:16 GNUNET_PACKED;
63 unsigned crc:16 GNUNET_PACKED; 67 unsigned len:16 GNUNET_PACKED;
68 unsigned crc:16 GNUNET_PACKED;
64}; 69};
65 70
66struct icmp_hdr { 71struct icmp_hdr
67 unsigned type:8 GNUNET_PACKED; 72{
68 unsigned code:8 GNUNET_PACKED; 73 unsigned type:8 GNUNET_PACKED;
69 unsigned chks:16 GNUNET_PACKED; 74 unsigned code:8 GNUNET_PACKED;
75 unsigned chks:16 GNUNET_PACKED;
70}; 76};
71 77
72// DNS-Stuff 78// DNS-Stuff
73struct dns_static { 79struct dns_static
74 uint16_t id GNUNET_PACKED; 80{
75 81 uint16_t id GNUNET_PACKED;
76 unsigned rd:1 GNUNET_PACKED; // recursion desired (client -> server) 82
77 unsigned tc:1 GNUNET_PACKED; // message is truncated 83 unsigned rd:1 GNUNET_PACKED; // recursion desired (client -> server)
78 unsigned aa:1 GNUNET_PACKED; // authoritative answer 84 unsigned tc:1 GNUNET_PACKED; // message is truncated
79 unsigned op:4 GNUNET_PACKED; // query:0, inverse q.:1, status: 2 85 unsigned aa:1 GNUNET_PACKED; // authoritative answer
80 unsigned qr:1 GNUNET_PACKED; // query:0, response:1 86 unsigned op:4 GNUNET_PACKED; // query:0, inverse q.:1, status: 2
81 87 unsigned qr:1 GNUNET_PACKED; // query:0, response:1
82 unsigned rcode:4 GNUNET_PACKED; // 0 No error 88
83 // 1 Format error 89 unsigned rcode:4 GNUNET_PACKED; // 0 No error
84 // 2 Server failure 90 // 1 Format error
85 // 3 Name Error 91 // 2 Server failure
86 // 4 Not Implemented 92 // 3 Name Error
87 // 5 Refused 93 // 4 Not Implemented
88 unsigned z:3 GNUNET_PACKED; // reserved 94 // 5 Refused
89 unsigned ra:1 GNUNET_PACKED; // recursion available (server -> client) 95 unsigned z:3 GNUNET_PACKED; // reserved
90 96 unsigned ra:1 GNUNET_PACKED; // recursion available (server -> client)
91 uint16_t qdcount GNUNET_PACKED; // number of questions 97
92 uint16_t ancount GNUNET_PACKED; // number of answers 98 uint16_t qdcount GNUNET_PACKED; // number of questions
93 uint16_t nscount GNUNET_PACKED; // number of authority-records 99 uint16_t ancount GNUNET_PACKED; // number of answers
94 uint16_t arcount GNUNET_PACKED; // number of additional records 100 uint16_t nscount GNUNET_PACKED; // number of authority-records
95}; 101 uint16_t arcount GNUNET_PACKED; // number of additional records
96 102};
97struct dns_pkt { 103
98 struct dns_static s; 104struct dns_pkt
99 unsigned char data[1]; 105{
100}; 106 struct dns_static s;
101 107 unsigned char data[1];
102struct dns_pkt_parsed { 108};
103 struct dns_static s; 109
104 struct dns_query** queries; 110struct dns_pkt_parsed
105 struct dns_record** answers; 111{
106 struct dns_record** nameservers; 112 struct dns_static s;
107 struct dns_record** additional; 113 struct dns_query **queries;
108}; 114 struct dns_record **answers;
109 115 struct dns_record **nameservers;
110struct dns_query_line { 116 struct dns_record **additional;
111 unsigned short type; 117};
112 unsigned short class; 118
113}; 119struct dns_query_line
114 120{
115struct dns_query { 121 unsigned short type;
116 char* name; 122 unsigned short class;
117 unsigned char namelen; 123};
118 unsigned short qtype; 124
119 unsigned short qclass; 125struct dns_query
120}; 126{
121 127 char *name;
122struct dns_record_line { 128 unsigned char namelen;
123 unsigned short type; 129 unsigned short qtype;
124 unsigned short class; 130 unsigned short qclass;
125 unsigned int ttl; 131};
126 unsigned short data_len; 132
127 unsigned char data; 133struct dns_record_line
128}; 134{
129 135 unsigned short type;
130struct dns_record { 136 unsigned short class;
131 char* name; 137 unsigned int ttl;
132 unsigned char namelen; 138 unsigned short data_len;
133 unsigned short type; 139 unsigned char data;
134 unsigned short class; 140};
135 unsigned int ttl; 141
136 unsigned short data_len; 142struct dns_record
137 unsigned char* data; 143{
138}; 144 char *name;
139 145 unsigned char namelen;
140struct udp_dns { 146 unsigned short type;
141 struct udp_pkt udp_hdr; 147 unsigned short class;
142 struct dns_pkt data; 148 unsigned int ttl;
149 unsigned short data_len;
150 unsigned char *data;
151};
152
153struct udp_dns
154{
155 struct udp_pkt udp_hdr;
156 struct dns_pkt data;
143}; 157};
144 158
145// Complete Packets 159// Complete Packets
146struct tun_pkt { 160struct tun_pkt
147 struct GNUNET_MessageHeader shdr; 161{
148 struct pkt_tun tun; 162 struct GNUNET_MessageHeader shdr;
149}; 163 struct pkt_tun tun;
150 164};
151struct ip6_pkt { 165
152 struct GNUNET_MessageHeader shdr; 166struct ip6_pkt
153 struct pkt_tun tun; 167{
154 struct ip6_hdr ip6_hdr; 168 struct GNUNET_MessageHeader shdr;
155 unsigned char data[1]; 169 struct pkt_tun tun;
156}; 170 struct ip6_hdr ip6_hdr;
157 171 unsigned char data[1];
158struct ip6_tcp { 172};
159 struct GNUNET_MessageHeader shdr; 173
160 struct pkt_tun tun; 174struct ip6_tcp
161 struct ip6_hdr ip6_hdr; 175{
162 struct tcp_pkt tcp_hdr; 176 struct GNUNET_MessageHeader shdr;
163 unsigned char data[1]; 177 struct pkt_tun tun;
164}; 178 struct ip6_hdr ip6_hdr;
165 179 struct tcp_pkt tcp_hdr;
166struct ip6_icmp { 180 unsigned char data[1];
167 struct GNUNET_MessageHeader shdr; 181};
168 struct pkt_tun tun; 182
169 struct ip6_hdr ip6_hdr; 183struct ip6_icmp
170 struct icmp_hdr icmp_hdr; 184{
171}; 185 struct GNUNET_MessageHeader shdr;
172 186 struct pkt_tun tun;
173struct ip6_udp { 187 struct ip6_hdr ip6_hdr;
174 struct GNUNET_MessageHeader shdr; 188 struct icmp_hdr icmp_hdr;
175 struct pkt_tun tun; 189};
176 struct ip6_hdr ip6_hdr; 190
177 struct udp_pkt udp_hdr; 191struct ip6_udp
178 unsigned char data[1]; 192{
179}; 193 struct GNUNET_MessageHeader shdr;
180 194 struct pkt_tun tun;
181struct ip6_udp_dns { 195 struct ip6_hdr ip6_hdr;
182 struct GNUNET_MessageHeader shdr; 196 struct udp_pkt udp_hdr;
183 struct pkt_tun tun; 197 unsigned char data[1];
184 struct ip6_hdr ip6_hdr; 198};
185 struct udp_dns udp_dns; 199
186}; 200struct ip6_udp_dns
187 201{
188struct ip_pkt { 202 struct GNUNET_MessageHeader shdr;
189 struct GNUNET_MessageHeader shdr; 203 struct pkt_tun tun;
190 struct pkt_tun tun; 204 struct ip6_hdr ip6_hdr;
191 struct ip_hdr ip_hdr; 205 struct udp_dns udp_dns;
192 unsigned char data[1]; 206};
193}; 207
194 208struct ip_pkt
195struct ip_udp { 209{
196 struct GNUNET_MessageHeader shdr; 210 struct GNUNET_MessageHeader shdr;
197 struct pkt_tun tun; 211 struct pkt_tun tun;
198 struct ip_hdr ip_hdr; 212 struct ip_hdr ip_hdr;
199 struct udp_pkt udp_hdr; 213 unsigned char data[1];
200 unsigned char data[1]; 214};
201}; 215
202 216struct ip_udp
203struct ip_udp_dns { 217{
204 struct GNUNET_MessageHeader shdr; 218 struct GNUNET_MessageHeader shdr;
205 struct pkt_tun tun; 219 struct pkt_tun tun;
206 struct ip_hdr ip_hdr; 220 struct ip_hdr ip_hdr;
207 struct udp_dns udp_dns; 221 struct udp_pkt udp_hdr;
208}; 222 unsigned char data[1];
209 223};
210struct ip_tcp { 224
211 struct GNUNET_MessageHeader shdr; 225struct ip_udp_dns
212 struct pkt_tun tun; 226{
213 struct ip_hdr ip_hdr; 227 struct GNUNET_MessageHeader shdr;
214 struct tcp_pkt tcp_hdr; 228 struct pkt_tun tun;
215 unsigned char data[1]; 229 struct ip_hdr ip_hdr;
216}; 230 struct udp_dns udp_dns;
217 231};
218struct ip_icmp { 232
219 struct GNUNET_MessageHeader shdr; 233struct ip_tcp
220 struct pkt_tun tun; 234{
221 struct ip_hdr ip_hdr; 235 struct GNUNET_MessageHeader shdr;
222 struct icmp_hdr icmp_hdr; 236 struct pkt_tun tun;
237 struct ip_hdr ip_hdr;
238 struct tcp_pkt tcp_hdr;
239 unsigned char data[1];
240};
241
242struct ip_icmp
243{
244 struct GNUNET_MessageHeader shdr;
245 struct pkt_tun tun;
246 struct ip_hdr ip_hdr;
247 struct icmp_hdr icmp_hdr;
223}; 248};
224 249
225#endif 250#endif