aboutsummaryrefslogtreecommitdiff
path: root/src/vpn/vpn.h
blob: 1f47724efb4e470a992254721a3a4a7a98bfc785 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*
     This file is part of GNUnet.
     Copyright (C) 2012 Christian Grothoff

     GNUnet is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 3, or (at your
     option) any later version.

     GNUnet is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with GNUnet; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     Boston, MA 02110-1301, USA.
*/

/**
 * @file vpn/vpn.h
 * @brief IPC messages between VPN library and VPN service
 * @author Christian Grothoff
 */
#ifndef VPN_H
#define VPN_H

#include "gnunet_util_lib.h"

GNUNET_NETWORK_STRUCT_BEGIN

/**
 * Message send by the VPN client to the VPN service requesting
 * the setup of a redirection from some IP via an exit node to
 * some global Internet address.
 */
struct RedirectToIpRequestMessage
{
  /**
   * Type is #GNUNET_MESSAGE_TYPE_VPN_CLIENT_REDIRECT_TO_IP
   */
  struct GNUNET_MessageHeader header;

  /**
   * Always zero.
   */
  uint32_t reserved GNUNET_PACKED;

  /**
   * How long should the redirection be maintained at most?
   */
  struct GNUNET_TIME_AbsoluteNBO expiration_time;

  /**
   * Address family desired for the result (AF_INET or AF_INET6 or AF_UNSPEC, in nbo)
   */
  int32_t result_af GNUNET_PACKED;

  /**
   * Address family used for the destination address (AF_INET or AF_INET6, in nbo)
   */
  int32_t addr_af GNUNET_PACKED;

  /**
   * Unique ID to match a future response to this request.
   * Picked by the client.
   */
  uint64_t request_id GNUNET_PACKED;

  /* followed by destination address ('struct in_addr' or 'struct in6_addr') */

};


/**
 * Message send by the VPN client to the VPN service requesting
 * the setup of a redirection from some IP to a service running
 * at a particular peer.
 */
struct RedirectToServiceRequestMessage
{
  /**
   * Type is #GNUNET_MESSAGE_TYPE_VPN_CLIENT_REDIRECT_TO_SERVICE
   */
  struct GNUNET_MessageHeader header;

  /**
   * Always zero.
   */
  uint32_t reserved GNUNET_PACKED;

  /**
   * How long should the redirection be maintained at most?
   */
  struct GNUNET_TIME_AbsoluteNBO expiration_time;

  /**
   * Desired protocol (IPPROTO_UDP or IPPROTO_TCP)
   */
  int32_t protocol GNUNET_PACKED;

  /**
   * Address family desired for the result (AF_INET or AF_INET6 or AF_UNSPEC, in nbo)
   */
  int32_t result_af GNUNET_PACKED;

  /**
   * Target peer offering the service.
   */
  struct GNUNET_PeerIdentity target;

  /**
   * Service descriptor identifying the service.
   */
  struct GNUNET_HashCode service_descriptor;

  /**
   * Unique ID to match a future response to this request.
   * Picked by the client.
   */
  uint64_t request_id GNUNET_PACKED;

};


/**
 * Response from the VPN service to a VPN client informing about
 * the IP that was assigned for the requested redirection.
 */
struct RedirectToIpResponseMessage
{

  /**
   * Type is #GNUNET_MESSAGE_TYPE_VPN_CLIENT_USE_IP
   */
  struct GNUNET_MessageHeader header;

  /**
   * Address family of the allocated address that follows; will match
   * "result_af" from the request, of be "AF_UNSPEC" on errors.
   */
  int32_t result_af GNUNET_PACKED;

  /**
   * Unique ID to match the response to a request.
   */
  uint64_t request_id GNUNET_PACKED;

  /* followed by destination address ('struct in_addr' or 'struct in6_addr') */

};

GNUNET_NETWORK_STRUCT_END


#endif