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