OpenVPN
pool.h
Go to the documentation of this file.
1/*
2 * OpenVPN -- An application to securely tunnel IP networks
3 * over a single TCP/UDP port, with support for SSL/TLS-based
4 * session authentication and key exchange,
5 * packet encryption, packet authentication, and
6 * packet compression.
7 *
8 * Copyright (C) 2002-2025 OpenVPN Inc <sales@openvpn.net>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2
12 * as published by the Free Software Foundation.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, see <https://www.gnu.org/licenses/>.
21 */
22
23#ifndef POOL_H
24#define POOL_H
25
26/*#define IFCONFIG_POOL_TEST*/
27
28#include "basic.h"
29#include "status.h"
30
31#define IFCONFIG_POOL_MAX 65536
32#define IFCONFIG_POOL_MIN_NETBITS 16
33
39
41{
42 bool in_use;
45 bool fixed;
46};
47
49{
51 struct
52 {
53 bool enabled;
55 in_addr_t base;
57 struct
58 {
59 bool enabled;
60 struct in6_addr base;
62 int size;
64};
65
67{
69 bool fixed;
70};
71
73
74struct ifconfig_pool *ifconfig_pool_init(const bool ipv4_pool, enum pool_type type, in_addr_t start,
75 in_addr_t end, const bool duplicate_cn,
76 const bool ipv6_pool, const struct in6_addr ipv6_base,
77 const int ipv6_netbits);
78
79void ifconfig_pool_free(struct ifconfig_pool *pool);
80
81bool ifconfig_pool_verify_range(const int msglevel, const in_addr_t start, const in_addr_t end);
82
83ifconfig_pool_handle ifconfig_pool_acquire(struct ifconfig_pool *pool, in_addr_t *local,
84 in_addr_t *remote, struct in6_addr *remote_ipv6,
85 const char *common_name);
86
87bool ifconfig_pool_release(struct ifconfig_pool *pool, ifconfig_pool_handle hand, const bool hard);
88
89struct ifconfig_pool_persist *ifconfig_pool_persist_init(const char *filename, int refresh_freq);
90
92
94
95void ifconfig_pool_read(struct ifconfig_pool_persist *persist, struct ifconfig_pool *pool);
96
97void ifconfig_pool_write(struct ifconfig_pool_persist *persist, const struct ifconfig_pool *pool);
98
99#ifdef IFCONFIG_POOL_TEST
100void ifconfig_pool_test(in_addr_t start, in_addr_t end);
101
102#endif
103
104#endif /* ifndef POOL_H */
ifconfig_pool_handle ifconfig_pool_acquire(struct ifconfig_pool *pool, in_addr_t *local, in_addr_t *remote, struct in6_addr *remote_ipv6, const char *common_name)
Definition pool.c:297
bool ifconfig_pool_verify_range(const int msglevel, const in_addr_t start, const in_addr_t end)
Definition pool.c:117
bool ifconfig_pool_release(struct ifconfig_pool *pool, ifconfig_pool_handle hand, const bool hard)
Definition pool.c:349
struct ifconfig_pool_persist * ifconfig_pool_persist_init(const char *filename, int refresh_freq)
Definition pool.c:538
void ifconfig_pool_write(struct ifconfig_pool_persist *persist, const struct ifconfig_pool *pool)
Definition pool.c:712
pool_type
Definition pool.h:35
@ IFCONFIG_POOL_30NET
Definition pool.h:36
@ IFCONFIG_POOL_INDIV
Definition pool.h:37
void ifconfig_pool_persist_close(struct ifconfig_pool_persist *persist)
Definition pool.c:560
bool ifconfig_pool_write_trigger(struct ifconfig_pool_persist *persist)
Definition pool.c:573
void ifconfig_pool_free(struct ifconfig_pool *pool)
Definition pool.c:281
void ifconfig_pool_read(struct ifconfig_pool_persist *persist, struct ifconfig_pool *pool)
Definition pool.c:586
struct ifconfig_pool * ifconfig_pool_init(const bool ipv4_pool, enum pool_type type, in_addr_t start, in_addr_t end, const bool duplicate_cn, const bool ipv6_pool, const struct in6_addr ipv6_base, const int ipv6_netbits)
Definition pool.c:140
int ifconfig_pool_handle
Definition pool.h:72
Definition pool.h:41
bool fixed
Definition pool.h:45
time_t last_release
Definition pool.h:44
bool in_use
Definition pool.h:42
char * common_name
Definition pool.h:43
struct status_output * file
Definition pool.h:68
struct ifconfig_pool_entry * list
Definition pool.h:63
bool duplicate_cn
Definition pool.h:50
in_addr_t base
Definition pool.h:55
struct ifconfig_pool::@22 ipv6
struct ifconfig_pool::@21 ipv4
int size
Definition pool.h:62
bool enabled
Definition pool.h:53
enum pool_type type
Definition pool.h:54