Fixes and documentation
[oweals/gnunet.git] / src / vpn / gnunet-vpn-packet.h
1 #ifndef _GNTUN_PACKET_H_
2 #define _GNTUN_PACKET_H_
3
4 #include "gnunet-vpn-helper-p.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 version:4 GNUNET_PACKED;
15         unsigned tclass:8 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 // DNS-Stuff
64 struct dns_static {
65         unsigned short id GNUNET_PACKED;
66
67         unsigned rd:1 GNUNET_PACKED; // recursion desired (client -> server)
68         unsigned tc:1 GNUNET_PACKED; // message is truncated
69         unsigned aa:1 GNUNET_PACKED; // authoritative answer
70         unsigned op:4 GNUNET_PACKED; // query:0, inverse q.:1, status: 2
71         unsigned qr:1 GNUNET_PACKED; // query:0, response:1
72
73         unsigned rcode:4 GNUNET_PACKED; // 0 No error
74                           // 1 Format error
75                           // 2 Server failure
76                           // 3 Name Error
77                           // 4 Not Implemented
78                           // 5 Refused
79         unsigned z:3 GNUNET_PACKED;  // reserved
80         unsigned ra:1 GNUNET_PACKED; // recursion available (server -> client)
81
82         unsigned short qdcount GNUNET_PACKED; // number of questions
83         unsigned short ancount GNUNET_PACKED; // number of answers
84         unsigned short nscount GNUNET_PACKED; // number of authority-records
85         unsigned short arcount GNUNET_PACKED; // number of additional records
86 };
87
88 struct dns_pkt {
89         struct dns_static s;
90         unsigned char data[1];
91 };
92
93 struct dns_pkt_parsed {
94         struct dns_static s;
95         struct dns_query** queries;
96         struct dns_record** answers;
97         struct dns_record** nameservers;
98         struct dns_record** additional;
99 };
100
101 struct dns_query_line {
102     unsigned short type;
103     unsigned short class;
104 };
105
106 struct dns_query {
107         char* name;
108         unsigned char namelen;
109         unsigned short qtype;
110         unsigned short qclass;
111 };
112
113 struct dns_record_line {
114     unsigned short type;
115     unsigned short class;
116     unsigned int ttl;
117     unsigned short data_len;
118     unsigned char data;
119 };
120
121 struct dns_record {
122         char* name;
123         unsigned char namelen;
124         unsigned short type;
125         unsigned short class;
126         unsigned int ttl;
127         unsigned short data_len;
128         unsigned char* data;
129 };
130
131 struct udp_dns {
132         struct udp_pkt udp_hdr;
133         struct dns_pkt data;
134 };
135
136 // Complete Packets
137 struct tun_pkt {
138         struct GNUNET_MessageHeader shdr;
139         struct pkt_tun tun;
140 };
141
142 struct ip6_pkt {
143         struct GNUNET_MessageHeader shdr;
144         struct pkt_tun tun;
145         struct ip6_hdr ip6_hdr;
146         unsigned char data[1];
147 };
148
149 struct ip6_tcp {
150         struct GNUNET_MessageHeader shdr;
151         struct pkt_tun tun;
152         struct ip6_hdr ip6_hdr;
153         struct tcp_pkt tcp_hdr;
154         unsigned char data[1];
155 };
156
157 struct ip6_udp {
158         struct GNUNET_MessageHeader shdr;
159         struct pkt_tun tun;
160         struct ip6_hdr ip6_hdr;
161         struct udp_pkt udp_hdr;
162         unsigned char data[1];
163 };
164
165 struct ip6_udp_dns {
166         struct GNUNET_MessageHeader shdr;
167         struct pkt_tun tun;
168         struct ip6_hdr ip6_hdr;
169         struct udp_dns udp_dns;
170 };
171
172 struct ip_pkt {
173         struct GNUNET_MessageHeader shdr;
174         struct pkt_tun tun;
175         struct ip_hdr ip_hdr;
176         unsigned char data[1];
177 };
178
179 struct ip_udp {
180         struct GNUNET_MessageHeader shdr;
181         struct pkt_tun tun;
182         struct ip_hdr ip_hdr;
183         struct udp_pkt udp_hdr;
184         unsigned char data[1];
185 };
186 struct ip_udp_dns {
187         struct GNUNET_MessageHeader shdr;
188         struct pkt_tun tun;
189         struct ip_hdr ip_hdr;
190         struct udp_dns udp_dns;
191 };
192
193 #endif