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