OpenVPN
src
openvpn
networking.h
Go to the documentation of this file.
1
/*
2
* Generic interface to platform specific networking code
3
*
4
* Copyright (C) 2016-2024 Antonio Quartulli <a@unstable.cc>
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License version 2
8
* as published by the Free Software Foundation.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program (see the file COPYING included with this
17
* distribution); if not, write to the Free Software Foundation, Inc.,
18
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
*/
20
21
#ifndef NETWORKING_H_
22
#define NETWORKING_H_
23
24
#include "
syshead.h
"
25
26
#define IFACE_TYPE_LEN_MAX 64
27
28
struct
context
;
29
30
#ifdef ENABLE_SITNL
31
#include "
networking_sitnl.h
"
32
#elif ENABLE_IPROUTE
33
#include "
networking_iproute2.h
"
34
#elif defined(TARGET_FREEBSD)
35
typedef
void
*
openvpn_net_ctx_t
;
36
typedef
char
openvpn_net_iface_t
;
37
#else
/* ifdef ENABLE_SITNL */
38
/* define mock types to ensure code builds on any platform */
39
typedef
void
*
openvpn_net_ctx_t
;
40
typedef
void
*
openvpn_net_iface_t
;
41
#endif
/* ifdef ENABLE_SITNL */
42
43
/* Only the iproute2 backend implements these functions,
44
* the rest can rely on these stubs
45
*/
46
#if !defined(ENABLE_IPROUTE)
47
static
inline
int
48
net_ctx_init
(
struct
context
*c,
openvpn_net_ctx_t
*ctx)
49
{
50
(void)c;
51
(void)ctx;
52
53
return
0;
54
}
55
56
static
inline
void
57
net_ctx_reset
(
openvpn_net_ctx_t
*ctx)
58
{
59
(void)ctx;
60
}
61
62
static
inline
void
63
net_ctx_free
(
openvpn_net_ctx_t
*ctx)
64
{
65
(void)ctx;
66
}
67
#endif
/* !defined(ENABLE_IPROUTE) */
68
69
#if defined(ENABLE_SITNL) || defined(ENABLE_IPROUTE)
70
79
int
net_ctx_init
(
struct
context
*c,
openvpn_net_ctx_t
*ctx);
80
86
void
net_ctx_reset
(
openvpn_net_ctx_t
*ctx);
87
93
void
net_ctx_free
(
openvpn_net_ctx_t
*ctx);
94
105
int
net_iface_new(
openvpn_net_ctx_t
*ctx,
const
openvpn_net_iface_t
*
iface
,
106
const
char
*type,
void
*arg);
107
117
int
net_iface_type(
openvpn_net_ctx_t
*ctx,
const
char
*
iface
,
118
char
type[
IFACE_TYPE_LEN_MAX
]);
119
127
int
net_iface_del(
openvpn_net_ctx_t
*ctx,
const
openvpn_net_iface_t
*
iface
);
128
138
int
net_iface_up(
openvpn_net_ctx_t
*ctx,
const
openvpn_net_iface_t
*
iface
,
139
bool
up);
140
150
int
net_iface_mtu_set(
openvpn_net_ctx_t
*ctx,
151
const
openvpn_net_iface_t
*
iface
, uint32_t mtu);
152
162
int
net_addr_ll_set(
openvpn_net_ctx_t
*ctx,
const
openvpn_net_iface_t
*
iface
,
163
uint8_t *addr);
164
175
int
net_addr_v4_add(
openvpn_net_ctx_t
*ctx,
const
openvpn_net_iface_t
*
iface
,
176
const
in_addr_t *addr,
int
prefixlen);
177
189
int
net_addr_v6_add(
openvpn_net_ctx_t
*ctx,
const
openvpn_net_iface_t
*
iface
,
190
const
struct
in6_addr *addr,
int
prefixlen);
191
201
int
net_addr_v4_del(
openvpn_net_ctx_t
*ctx,
const
openvpn_net_iface_t
*
iface
,
202
const
in_addr_t *addr,
int
prefixlen);
203
213
int
net_addr_v6_del(
openvpn_net_ctx_t
*ctx,
const
openvpn_net_iface_t
*
iface
,
214
const
struct
in6_addr *addr,
int
prefixlen);
215
226
int
net_addr_ptp_v4_add(
openvpn_net_ctx_t
*ctx,
227
const
openvpn_net_iface_t
*
iface
,
228
const
in_addr_t *local,
const
in_addr_t *remote);
229
240
int
net_addr_ptp_v4_del(
openvpn_net_ctx_t
*ctx,
241
const
openvpn_net_iface_t
*
iface
,
242
const
in_addr_t *local,
const
in_addr_t *remote);
243
244
#endif
/* ENABLE_SITNL || ENABLE_IPROUTE */
245
246
#if defined(ENABLE_SITNL) || defined(ENABLE_IPROUTE) || defined(TARGET_FREEBSD)
247
261
int
net_route_v4_add(
openvpn_net_ctx_t
*ctx,
const
in_addr_t *dst,
262
int
prefixlen,
const
in_addr_t *gw,
263
const
openvpn_net_iface_t
*
iface
, uint32_t table,
264
int
metric);
265
280
int
net_route_v6_add(
openvpn_net_ctx_t
*ctx,
const
struct
in6_addr *dst,
281
int
prefixlen,
const
struct
in6_addr *gw,
282
const
openvpn_net_iface_t
*
iface
,
283
uint32_t table,
int
metric);
284
299
int
net_route_v4_del(
openvpn_net_ctx_t
*ctx,
const
in_addr_t *dst,
300
int
prefixlen,
const
in_addr_t *gw,
301
const
openvpn_net_iface_t
*
iface
, uint32_t table,
302
int
metric);
303
318
int
net_route_v6_del(
openvpn_net_ctx_t
*ctx,
const
struct
in6_addr *dst,
319
int
prefixlen,
const
struct
in6_addr *gw,
320
const
openvpn_net_iface_t
*
iface
,
321
uint32_t table,
int
metric);
322
323
#endif
/* ENABLE_SITNL || ENABLE_IPROUTE || TARGET_FREEBSD */
324
325
#if defined(ENABLE_SITNL) || defined(ENABLE_IPROUTE)
326
338
int
net_route_v4_best_gw(
openvpn_net_ctx_t
*ctx,
const
in_addr_t *dst,
339
in_addr_t *best_gw,
openvpn_net_iface_t
*best_iface);
340
352
int
net_route_v6_best_gw(
openvpn_net_ctx_t
*ctx,
const
struct
in6_addr *dst,
353
struct
in6_addr *best_gw,
354
openvpn_net_iface_t
*best_iface);
355
356
#endif
/* ENABLE_SITNL || ENABLE_IPROUTE */
357
358
#endif
/* NETWORKING_H_ */
IFACE_TYPE_LEN_MAX
#define IFACE_TYPE_LEN_MAX
Definition:
networking.h:26
context
Contains all state information for one tunnel.
Definition:
openvpn.h:476
openvpn_net_ctx_t
void * openvpn_net_ctx_t
Definition:
networking.h:28
net_ctx_init
static int net_ctx_init(struct context *c, openvpn_net_ctx_t *ctx)
Definition:
networking.h:48
networking_sitnl.h
net_ctx_reset
static void net_ctx_reset(openvpn_net_ctx_t *ctx)
Definition:
networking.h:57
iface
static char * iface
Definition:
test_networking.c:7
net_ctx_free
static void net_ctx_free(openvpn_net_ctx_t *ctx)
Definition:
networking.h:63
syshead.h
networking_iproute2.h
openvpn_net_iface_t
void * openvpn_net_iface_t
Definition:
networking.h:40
Generated by
1.8.17