- update default values, eliminate obsolete ones
[oweals/gnunet.git] / src / vpn / vpn.h
1 /*
2      This file is part of GNUnet.
3      (C) 2012 Christian Grothoff
4
5      GNUnet is free software; you can redistribute it and/or modify
6      it under the terms of the GNU General Public License as published
7      by the Free Software Foundation; either version 3, or (at your
8      option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      General Public License for more details.
14
15      You should have received a copy of the GNU General Public License
16      along with GNUnet; see the file COPYING.  If not, write to the
17      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18      Boston, MA 02111-1307, USA.
19 */
20
21 /**
22  * @file vpn/vpn.h
23  * @brief IPC messages between VPN library and VPN service
24  * @author Christian Grothoff
25  */
26 #ifndef VPN_H
27 #define VPN_H
28
29 #include "gnunet_util_lib.h"
30
31 GNUNET_NETWORK_STRUCT_BEGIN
32
33 /**
34  * Message send by the VPN client to the VPN service requesting
35  * the setup of a redirection from some IP via an exit node to
36  * some global Internet address.
37  */
38 struct RedirectToIpRequestMessage
39 {
40   /**
41    * Type is #GNUNET_MESSAGE_TYPE_VPN_CLIENT_REDIRECT_TO_IP
42    */
43   struct GNUNET_MessageHeader header;
44
45   /**
46    * Always zero.
47    */
48   uint32_t reserved GNUNET_PACKED;
49
50   /**
51    * How long should the redirection be maintained at most?
52    */
53   struct GNUNET_TIME_AbsoluteNBO expiration_time;
54
55   /**
56    * Address family desired for the result (AF_INET or AF_INET6 or AF_UNSPEC, in nbo)
57    */
58   int32_t result_af GNUNET_PACKED;
59
60   /**
61    * Address family used for the destination address (AF_INET or AF_INET6, in nbo)
62    */
63   int32_t addr_af GNUNET_PACKED;
64
65   /**
66    * Unique ID to match a future response to this request.
67    * Picked by the client.
68    */
69   uint64_t request_id GNUNET_PACKED;
70
71   /* followed by destination address ('struct in_addr' or 'struct in6_addr') */
72
73 };
74
75
76 /**
77  * Message send by the VPN client to the VPN service requesting
78  * the setup of a redirection from some IP to a service running
79  * at a particular peer.
80  */
81 struct RedirectToServiceRequestMessage
82 {
83   /**
84    * Type is #GNUNET_MESSAGE_TYPE_VPN_CLIENT_REDIRECT_TO_SERVICE
85    */
86   struct GNUNET_MessageHeader header;
87
88   /**
89    * Always zero.
90    */
91   uint32_t reserved GNUNET_PACKED;
92
93   /**
94    * How long should the redirection be maintained at most?
95    */
96   struct GNUNET_TIME_AbsoluteNBO expiration_time;
97
98   /**
99    * Desired protocol (IPPROTO_UDP or IPPROTO_TCP)
100    */
101   int32_t protocol GNUNET_PACKED;
102
103   /**
104    * Address family desired for the result (AF_INET or AF_INET6 or AF_UNSPEC, in nbo)
105    */
106   int32_t result_af GNUNET_PACKED;
107
108   /**
109    * Target peer offering the service.
110    */
111   struct GNUNET_PeerIdentity target;
112
113   /**
114    * Service descriptor identifying the service.
115    */
116   struct GNUNET_HashCode service_descriptor;
117
118   /**
119    * Unique ID to match a future response to this request.
120    * Picked by the client.
121    */
122   uint64_t request_id GNUNET_PACKED;
123
124 };
125
126
127 /**
128  * Response from the VPN service to a VPN client informing about
129  * the IP that was assigned for the requested redirection.
130  */
131 struct RedirectToIpResponseMessage
132 {
133
134   /**
135    * Type is #GNUNET_MESSAGE_TYPE_VPN_CLIENT_USE_IP
136    */
137   struct GNUNET_MessageHeader header;
138
139   /**
140    * Address family of the allocated address that follows; will match
141    * "result_af" from the request, of be "AF_UNSPEC" on errors.
142    */
143   int32_t result_af GNUNET_PACKED;
144
145   /**
146    * Unique ID to match the response to a request.
147    */
148   uint64_t request_id GNUNET_PACKED;
149
150   /* followed by destination address ('struct in_addr' or 'struct in6_addr') */
151
152 };
153
154 GNUNET_NETWORK_STRUCT_END
155
156
157 #endif