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