restart the helper when something goes wrong
[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
6 // Headers
7 struct pkt_tun {
8         unsigned flags:16;
9         unsigned type:16;
10 };
11
12 struct ip6_hdr {
13         unsigned version:4;
14         unsigned tclass:8;
15         unsigned flowlbl:20;
16         unsigned paylgth:16;
17         unsigned nxthdr:8;
18         unsigned hoplmt:8;
19         unsigned char sadr[16];
20         unsigned char dadr[16];
21 };
22
23 struct tcp_pkt {
24         unsigned spt:16;
25         unsigned dpt:16;
26         unsigned seq:32;
27         unsigned ack:32;
28         unsigned off:4;
29         unsigned rsv:4;
30         unsigned flg:8;
31         unsigned wsz:16;
32         unsigned crc:16;
33         unsigned urg:16;
34 };
35
36 struct udp_pkt {
37         unsigned spt:16;
38         unsigned dpt:16;
39         unsigned len:16;
40         unsigned crc:16;
41 };
42
43 // DNS-Stuff
44 struct dns_pkt {
45         unsigned short id;
46
47         unsigned rd:1; // recursion desired (client -> server)
48         unsigned tc:1; // message is truncated
49         unsigned aa:1; // authoritative answer
50         unsigned op:4; // query:0, inverse q.:1, status: 2
51         unsigned qr:1; // query:0, response:1
52
53         unsigned rcode:4; // 0 No error
54                           // 1 Format error
55                           // 2 Server failure
56                           // 3 Name Error
57                           // 4 Not Implemented
58                           // 5 Refused
59         unsigned z:3;  // reserved
60         unsigned ra:1; // recursion available (server -> client)
61
62         unsigned short qdcount; // number of questions
63         unsigned short ancount; // number of answers
64         unsigned short nscount; // number of authority-records
65         unsigned short arcount; // number of additional records
66         unsigned char data[1];
67 };
68
69 struct dns_query {
70         unsigned char* name;
71         unsigned short qtype;
72         unsigned short qclass;
73 };
74
75 struct dns_record {
76         unsigned char* name;
77         unsigned short type;
78         unsigned short class;
79         unsigned int ttl;
80         unsigned short data_len;
81         unsigned char* data;
82 };
83
84 // Complete Packets
85 struct ip6_pkt {
86         struct suid_packet_header shdr;
87         struct pkt_tun tun;
88         struct ip6_hdr ip6_hdr;
89         unsigned char data[1];
90 };
91
92 struct ip6_tcp {
93         struct suid_packet_header shdr;
94         struct pkt_tun tun;
95         struct ip6_hdr ip6_hdr;
96         struct tcp_pkt tcp_hdr;
97         unsigned char data[1];
98 };
99
100 struct ip6_udp {
101         struct suid_packet_header shdr;
102         struct pkt_tun tun;
103         struct ip6_hdr ip6_hdr;
104         struct udp_pkt udp_hdr;
105         unsigned char data[1];
106 };
107
108 struct ip6_udp_dns {
109         struct suid_packet_header shdr;
110         struct pkt_tun tun;
111         struct ip6_hdr ip6_hdr;
112         struct udp_pkt udp_hdr;
113         struct dns_pkt data;
114 };
115
116 #endif