gnunet-vpn-packet.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. #ifndef _GNTUN_PACKET_H_
  2. #define _GNTUN_PACKET_H_
  3. #include "platform.h"
  4. #include "gnunet_common.h"
  5. // Headers
  6. struct pkt_tun {
  7. unsigned flags:16 GNUNET_PACKED;
  8. unsigned type:16 GNUNET_PACKED;
  9. };
  10. struct ip6_hdr {
  11. unsigned tclass_h:4 GNUNET_PACKED;
  12. unsigned version:4 GNUNET_PACKED;
  13. unsigned tclass_l:4 GNUNET_PACKED;
  14. unsigned flowlbl:20 GNUNET_PACKED;
  15. unsigned paylgth:16 GNUNET_PACKED;
  16. unsigned nxthdr:8 GNUNET_PACKED;
  17. unsigned hoplmt:8 GNUNET_PACKED;
  18. unsigned char sadr[16];
  19. unsigned char dadr[16];
  20. };
  21. struct ip_hdr {
  22. unsigned hdr_lngth:4 GNUNET_PACKED;
  23. unsigned version:4 GNUNET_PACKED;
  24. unsigned diff_serv:8 GNUNET_PACKED;
  25. unsigned tot_lngth:16 GNUNET_PACKED;
  26. unsigned ident:16 GNUNET_PACKED;
  27. unsigned flags:3 GNUNET_PACKED;
  28. unsigned frag_off:13 GNUNET_PACKED;
  29. unsigned ttl:8 GNUNET_PACKED;
  30. unsigned proto:8 GNUNET_PACKED;
  31. unsigned chks:16 GNUNET_PACKED;
  32. unsigned sadr:32 GNUNET_PACKED;
  33. unsigned dadr:32 GNUNET_PACKED;
  34. };
  35. #define TCP_FLAG_SYN 2
  36. struct tcp_pkt {
  37. unsigned spt:16 GNUNET_PACKED;
  38. unsigned dpt:16 GNUNET_PACKED;
  39. unsigned seq:32 GNUNET_PACKED;
  40. unsigned ack:32 GNUNET_PACKED;
  41. unsigned off:4 GNUNET_PACKED;
  42. unsigned rsv:4 GNUNET_PACKED;
  43. unsigned flg:8 GNUNET_PACKED;
  44. unsigned wsz:16 GNUNET_PACKED;
  45. unsigned crc:16 GNUNET_PACKED;
  46. unsigned urg:16 GNUNET_PACKED;
  47. };
  48. struct udp_pkt {
  49. unsigned spt:16 GNUNET_PACKED;
  50. unsigned dpt:16 GNUNET_PACKED;
  51. unsigned len:16 GNUNET_PACKED;
  52. unsigned crc:16 GNUNET_PACKED;
  53. };
  54. struct icmp_hdr {
  55. unsigned type:8 GNUNET_PACKED;
  56. unsigned code:8 GNUNET_PACKED;
  57. unsigned chks:16 GNUNET_PACKED;
  58. };
  59. // DNS-Stuff
  60. struct dns_static {
  61. uint16_t id GNUNET_PACKED;
  62. unsigned rd:1 GNUNET_PACKED; // recursion desired (client -> server)
  63. unsigned tc:1 GNUNET_PACKED; // message is truncated
  64. unsigned aa:1 GNUNET_PACKED; // authoritative answer
  65. unsigned op:4 GNUNET_PACKED; // query:0, inverse q.:1, status: 2
  66. unsigned qr:1 GNUNET_PACKED; // query:0, response:1
  67. unsigned rcode:4 GNUNET_PACKED; // 0 No error
  68. // 1 Format error
  69. // 2 Server failure
  70. // 3 Name Error
  71. // 4 Not Implemented
  72. // 5 Refused
  73. unsigned z:3 GNUNET_PACKED; // reserved
  74. unsigned ra:1 GNUNET_PACKED; // recursion available (server -> client)
  75. uint16_t qdcount GNUNET_PACKED; // number of questions
  76. uint16_t ancount GNUNET_PACKED; // number of answers
  77. uint16_t nscount GNUNET_PACKED; // number of authority-records
  78. uint16_t arcount GNUNET_PACKED; // number of additional records
  79. };
  80. struct dns_pkt {
  81. struct dns_static s;
  82. unsigned char data[1];
  83. };
  84. struct dns_pkt_parsed {
  85. struct dns_static s;
  86. struct dns_query** queries;
  87. struct dns_record** answers;
  88. struct dns_record** nameservers;
  89. struct dns_record** additional;
  90. };
  91. struct dns_query_line {
  92. unsigned short type;
  93. unsigned short class;
  94. };
  95. struct dns_query {
  96. char* name;
  97. unsigned char namelen;
  98. unsigned short qtype;
  99. unsigned short qclass;
  100. };
  101. struct dns_record_line {
  102. unsigned short type;
  103. unsigned short class;
  104. unsigned int ttl;
  105. unsigned short data_len;
  106. unsigned char data;
  107. };
  108. struct dns_record {
  109. char* name;
  110. unsigned char namelen;
  111. unsigned short type;
  112. unsigned short class;
  113. unsigned int ttl;
  114. unsigned short data_len;
  115. unsigned char* data;
  116. };
  117. struct udp_dns {
  118. struct udp_pkt udp_hdr;
  119. struct dns_pkt data;
  120. };
  121. // Complete Packets
  122. struct tun_pkt {
  123. struct GNUNET_MessageHeader shdr;
  124. struct pkt_tun tun;
  125. };
  126. struct ip6_pkt {
  127. struct GNUNET_MessageHeader shdr;
  128. struct pkt_tun tun;
  129. struct ip6_hdr ip6_hdr;
  130. unsigned char data[1];
  131. };
  132. struct ip6_tcp {
  133. struct GNUNET_MessageHeader shdr;
  134. struct pkt_tun tun;
  135. struct ip6_hdr ip6_hdr;
  136. struct tcp_pkt tcp_hdr;
  137. unsigned char data[1];
  138. };
  139. struct ip6_icmp {
  140. struct GNUNET_MessageHeader shdr;
  141. struct pkt_tun tun;
  142. struct ip6_hdr ip6_hdr;
  143. struct icmp_hdr icmp_hdr;
  144. };
  145. struct ip6_udp {
  146. struct GNUNET_MessageHeader shdr;
  147. struct pkt_tun tun;
  148. struct ip6_hdr ip6_hdr;
  149. struct udp_pkt udp_hdr;
  150. unsigned char data[1];
  151. };
  152. struct ip6_udp_dns {
  153. struct GNUNET_MessageHeader shdr;
  154. struct pkt_tun tun;
  155. struct ip6_hdr ip6_hdr;
  156. struct udp_dns udp_dns;
  157. };
  158. struct ip_pkt {
  159. struct GNUNET_MessageHeader shdr;
  160. struct pkt_tun tun;
  161. struct ip_hdr ip_hdr;
  162. unsigned char data[1];
  163. };
  164. struct ip_udp {
  165. struct GNUNET_MessageHeader shdr;
  166. struct pkt_tun tun;
  167. struct ip_hdr ip_hdr;
  168. struct udp_pkt udp_hdr;
  169. unsigned char data[1];
  170. };
  171. struct ip_udp_dns {
  172. struct GNUNET_MessageHeader shdr;
  173. struct pkt_tun tun;
  174. struct ip_hdr ip_hdr;
  175. struct udp_dns udp_dns;
  176. };
  177. struct ip_tcp {
  178. struct GNUNET_MessageHeader shdr;
  179. struct pkt_tun tun;
  180. struct ip_hdr ip_hdr;
  181. struct tcp_pkt tcp_hdr;
  182. unsigned char data[1];
  183. };
  184. struct ip_icmp {
  185. struct GNUNET_MessageHeader shdr;
  186. struct pkt_tun tun;
  187. struct ip_hdr ip_hdr;
  188. struct icmp_hdr icmp_hdr;
  189. };
  190. #endif