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