Added IPv4-Packet-Structure
[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 version:4 GNUNET_PACKED;
26         unsigned hdr_lngth:4 GNUNET_PACKED;
27         unsigned diff_serv:8 GNUNET_PACKED;
28         unsigned tot_lngth:16 GNUNET_PACKED;
29
30         unsigned ident:16 GNUNET_PACKED;
31         unsigned flags:3 GNUNET_PACKED;
32         unsigned frag_off:13 GNUNET_PACKED;
33
34         unsigned ttl:8 GNUNET_PACKED;
35         unsigned proto:8 GNUNET_PACKED;
36         unsigned chks:16 GNUNET_PACKED;
37
38         unsigned sadr:32 GNUNET_PACKED;
39         unsigned dadr:32 GNUNET_PACKED;
40 };
41
42 struct tcp_pkt {
43         unsigned spt:16 GNUNET_PACKED;
44         unsigned dpt:16 GNUNET_PACKED;
45         unsigned seq:32 GNUNET_PACKED;
46         unsigned ack:32 GNUNET_PACKED;
47         unsigned off:4 GNUNET_PACKED;
48         unsigned rsv:4 GNUNET_PACKED;
49         unsigned flg:8 GNUNET_PACKED;
50         unsigned wsz:16 GNUNET_PACKED;
51         unsigned crc:16 GNUNET_PACKED;
52         unsigned urg:16 GNUNET_PACKED;
53 };
54
55 struct udp_pkt {
56         unsigned spt:16 GNUNET_PACKED;
57         unsigned dpt:16 GNUNET_PACKED;
58         unsigned len:16 GNUNET_PACKED;
59         unsigned crc:16 GNUNET_PACKED;
60 };
61
62 // DNS-Stuff
63 struct dns_pkt {
64         unsigned short id GNUNET_PACKED;
65
66         unsigned rd:1 GNUNET_PACKED; // recursion desired (client -> server)
67         unsigned tc:1 GNUNET_PACKED; // message is truncated
68         unsigned aa:1 GNUNET_PACKED; // authoritative answer
69         unsigned op:4 GNUNET_PACKED; // query:0, inverse q.:1, status: 2
70         unsigned qr:1 GNUNET_PACKED; // query:0, response:1
71
72         unsigned rcode:4 GNUNET_PACKED; // 0 No error
73                           // 1 Format error
74                           // 2 Server failure
75                           // 3 Name Error
76                           // 4 Not Implemented
77                           // 5 Refused
78         unsigned z:3 GNUNET_PACKED;  // reserved
79         unsigned ra:1 GNUNET_PACKED; // recursion available (server -> client)
80
81         unsigned short qdcount GNUNET_PACKED; // number of questions
82         unsigned short ancount GNUNET_PACKED; // number of answers
83         unsigned short nscount GNUNET_PACKED; // number of authority-records
84         unsigned short arcount GNUNET_PACKED; // number of additional records
85         unsigned char data[1];
86 };
87
88 struct dns_query {
89         unsigned char* name;
90         unsigned short qtype;
91         unsigned short qclass;
92 };
93
94 struct dns_record {
95         unsigned char* name;
96         unsigned short type;
97         unsigned short class;
98         unsigned int ttl;
99         unsigned short data_len;
100         unsigned char* data;
101 };
102
103 // Complete Packets
104 struct ip6_pkt {
105         struct GNUNET_MessageHeader shdr;
106         struct pkt_tun tun;
107         struct ip6_hdr ip6_hdr;
108         unsigned char data[1];
109 };
110
111 struct ip6_tcp {
112         struct GNUNET_MessageHeader shdr;
113         struct pkt_tun tun;
114         struct ip6_hdr ip6_hdr;
115         struct tcp_pkt tcp_hdr;
116         unsigned char data[1];
117 };
118
119 struct ip6_udp {
120         struct GNUNET_MessageHeader shdr;
121         struct pkt_tun tun;
122         struct ip6_hdr ip6_hdr;
123         struct udp_pkt udp_hdr;
124         unsigned char data[1];
125 };
126
127 struct ip6_udp_dns {
128         struct GNUNET_MessageHeader shdr;
129         struct pkt_tun tun;
130         struct ip6_hdr ip6_hdr;
131         struct udp_pkt udp_hdr;
132         struct dns_pkt data;
133 };
134
135 struct ip_pkt {
136         struct GNUNET_MessageHeader shdr;
137         struct pkt_tun tun;
138         struct ip_hdr ip_hdr;
139         unsigned char data[1];
140 };
141
142 struct ip_udp {
143         struct GNUNET_MessageHeader shdr;
144         struct pkt_tun tun;
145         struct ip_hdr ip_hdr;
146         struct udp_pkt udp_hdr;
147         unsigned char data[1];
148 };
149
150 struct ip_udp_dns {
151         struct GNUNET_MessageHeader shdr;
152         struct pkt_tun tun;
153         struct ip_hdr ip_hdr;
154         struct udp_pkt udp_hdr;
155         struct dns_pkt data;
156 };
157 #endif