-building IPv4 TCP reply messages for TUN
[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 #include "gnunet_dnsparser_lib.h"
7
8 GNUNET_NETWORK_STRUCT_BEGIN
9
10 // Headers
11 struct pkt_tun
12 {
13   unsigned flags:16 GNUNET_PACKED;
14   unsigned type:16 GNUNET_PACKED;
15 };
16
17 struct ip6_hdr
18 {
19   unsigned tclass_h:4 GNUNET_PACKED;
20   unsigned version:4 GNUNET_PACKED;
21   unsigned tclass_l:4 GNUNET_PACKED;
22   unsigned flowlbl:20 GNUNET_PACKED;
23   unsigned paylgth:16 GNUNET_PACKED;
24   unsigned nxthdr:8 GNUNET_PACKED;
25   unsigned hoplmt:8 GNUNET_PACKED;
26   struct in6_addr sadr;
27   struct in6_addr dadr;
28 };
29
30 struct ip_hdr
31 {
32   unsigned hdr_lngth:4 GNUNET_PACKED;
33   unsigned version:4 GNUNET_PACKED;
34
35   unsigned diff_serv:8 GNUNET_PACKED;
36   unsigned tot_lngth:16 GNUNET_PACKED;
37
38   unsigned ident:16 GNUNET_PACKED;
39   unsigned flags:3 GNUNET_PACKED;
40   unsigned frag_off:13 GNUNET_PACKED;
41
42   unsigned ttl:8 GNUNET_PACKED;
43   unsigned proto:8 GNUNET_PACKED;
44   unsigned chks:16 GNUNET_PACKED;
45
46   struct in_addr sadr GNUNET_PACKED;
47   struct in_addr dadr GNUNET_PACKED;
48 };
49
50 #define TCP_FLAG_SYN 2
51
52 struct tcp_pkt
53 {
54   unsigned spt:16 GNUNET_PACKED;
55   unsigned dpt:16 GNUNET_PACKED;
56   unsigned seq:32 GNUNET_PACKED;
57   unsigned ack:32 GNUNET_PACKED;
58   unsigned off:4 GNUNET_PACKED;
59   unsigned rsv:4 GNUNET_PACKED;
60   unsigned flg:8 GNUNET_PACKED;
61   unsigned wsz:16 GNUNET_PACKED;
62   unsigned crc:16 GNUNET_PACKED;
63   unsigned urg:16 GNUNET_PACKED;
64 };
65
66 struct udp_pkt
67 {
68   unsigned spt:16 GNUNET_PACKED;
69   unsigned dpt:16 GNUNET_PACKED;
70   unsigned len:16 GNUNET_PACKED;
71   unsigned crc:16 GNUNET_PACKED;
72 };
73
74 struct icmp_hdr
75 {
76   unsigned type:8 GNUNET_PACKED;
77   unsigned code:8 GNUNET_PACKED;
78   unsigned chks:16 GNUNET_PACKED;
79 };
80 GNUNET_NETWORK_STRUCT_END
81
82
83 struct udp_dns
84 {
85   struct udp_pkt udp_hdr;
86   struct dns_pkt data;
87 };
88
89 GNUNET_NETWORK_STRUCT_BEGIN
90
91 // Complete Packets
92 struct tun_pkt
93 {
94   struct GNUNET_MessageHeader shdr;
95   struct pkt_tun tun;
96 };
97
98 struct ip6_pkt
99 {
100   struct GNUNET_MessageHeader shdr;
101   struct pkt_tun tun;
102   struct ip6_hdr ip6_hdr;
103   unsigned char data[1];
104 };
105
106 struct ip6_tcp
107 {
108   struct GNUNET_MessageHeader shdr;
109   struct pkt_tun tun;
110   struct ip6_hdr ip6_hdr;
111   struct tcp_pkt tcp_hdr;
112   unsigned char data[1];
113 };
114
115 struct ip6_icmp
116 {
117   struct GNUNET_MessageHeader shdr;
118   struct pkt_tun tun;
119   struct ip6_hdr ip6_hdr;
120   struct icmp_hdr icmp_hdr;
121 };
122
123 struct ip6_udp
124 {
125   struct GNUNET_MessageHeader shdr;
126   struct pkt_tun tun;
127   struct ip6_hdr ip6_hdr;
128   struct udp_pkt udp_hdr;
129   unsigned char data[1];
130 };
131
132 struct ip6_udp_dns
133 {
134   struct GNUNET_MessageHeader shdr;
135   struct pkt_tun tun;
136   struct ip6_hdr ip6_hdr;
137   struct udp_dns udp_dns;
138 };
139
140 struct ip_pkt
141 {
142   struct GNUNET_MessageHeader shdr;
143   struct pkt_tun tun;
144   struct ip_hdr ip_hdr;
145   unsigned char data[1];
146 };
147
148 struct ip_udp
149 {
150   struct GNUNET_MessageHeader shdr;
151   struct pkt_tun tun;
152   struct ip_hdr ip_hdr;
153   struct udp_pkt udp_hdr;
154   unsigned char data[1];
155 };
156
157 struct ip_udp_dns
158 {
159   struct GNUNET_MessageHeader shdr;
160   struct pkt_tun tun;
161   struct ip_hdr ip_hdr;
162   struct udp_dns udp_dns;
163 };
164
165 struct ip_tcp
166 {
167   struct GNUNET_MessageHeader shdr;
168   struct pkt_tun tun;
169   struct ip_hdr ip_hdr;
170   struct tcp_pkt tcp_hdr;
171   unsigned char data[1];
172 };
173
174 struct ip_icmp
175 {
176   struct GNUNET_MessageHeader shdr;
177   struct pkt_tun tun;
178   struct ip_hdr ip_hdr;
179   struct icmp_hdr icmp_hdr;
180 };
181 GNUNET_NETWORK_STRUCT_END
182
183 #endif