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