aboutsummaryrefslogtreecommitdiffstats
path: root/lease.c
diff options
context:
space:
mode:
authorThomas Gschwantner <tharre3@gmail.com>2019-12-11 03:58:04 +0100
committerThomas Gschwantner <tharre3@gmail.com>2019-12-11 06:22:17 +0100
commitf10e95340d9b99942fc594b642c4afcd829beed9 (patch)
tree329d5e2a827e8f0a6ac9ac214c9a14e1d7dca3af /lease.c
parentPostpone freeing memory for leases until after updating allowedips (diff)
downloadwg-dynamic-f10e95340d9b99942fc594b642c4afcd829beed9.tar.xz
wg-dynamic-f10e95340d9b99942fc594b642c4afcd829beed9.zip
Change request_ip protocol
ipv4 and ipv6 keys have been combined into one common key, ip. To distinguish between multiple IPs in later versions ip=0.0.0.0/32 and ip=::/128 respectively now mean we want to be assigned a random address from the server. Releasing/not wanting an IP is now done by just not listing that IP, i.e. if we only wanted an (random) ipv4 address the request would look as follows: request_ip=1 ip=0.0.0.0/32
Diffstat (limited to 'lease.c')
-rw-r--r--lease.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/lease.c b/lease.c
index 3b94050..c6f13b3 100644
--- a/lease.c
+++ b/lease.c
@@ -194,8 +194,8 @@ struct wg_dynamic_lease *set_lease(wg_key pubkey, uint32_t leasetime,
const struct in_addr *ipv4,
const struct in6_addr *ipv6)
{
- bool delete_ipv4 = ipv4 && !ipv4->s_addr;
- bool delete_ipv6 = ipv6 && IN6_IS_ADDR_UNSPECIFIED(ipv6);
+ bool delete_ipv4 = !ipv4 || (ipv4 && !ipv4->s_addr);
+ bool delete_ipv6 = !ipv6 || (ipv6 && IN6_IS_ADDR_UNSPECIFIED(ipv6));
struct wg_dynamic_lease *lease;
struct timespec tp;
khiter_t k;
@@ -207,23 +207,19 @@ struct wg_dynamic_lease *set_lease(wg_key pubkey, uint32_t leasetime,
lease->lladdr = *lladdr;
}
- if (lease->ipv4.s_addr &&
- (delete_ipv4 ||
- (ipv4 && memcmp(&lease->ipv4, ipv4, sizeof(*ipv4))))) {
+ if (delete_ipv4 && lease->ipv4.s_addr) {
if (ipp_del_v4(&ipns, &lease->ipv4, 32))
die("ipp_del_v4()\n");
memset(&lease->ipv4, 0, sizeof(lease->ipv4));
}
- if (!IN6_IS_ADDR_UNSPECIFIED(&lease->ipv6) &&
- (delete_ipv6 ||
- (ipv6 && memcmp(&lease->ipv6, ipv6, sizeof(*ipv6))))) {
+ if (delete_ipv6 && !IN6_IS_ADDR_UNSPECIFIED(&lease->ipv6)) {
if (ipp_del_v6(&ipns, &lease->ipv6, 128))
die("ipp_del_v6()\n");
memset(&lease->ipv6, 0, sizeof(lease->ipv6));
}
- if (!ipv4) { /* Wants random IPv4 address? */
+ if (ipv4 && !ipv4->s_addr) {
if (!ipns.total_ipv4) {
debug("IPv4 pool empty\n");
memset(&lease->ipv4, 0, sizeof(lease->ipv4));
@@ -233,7 +229,7 @@ struct wg_dynamic_lease *set_lease(wg_key pubkey, uint32_t leasetime,
ipns.total_ipv4);
ipp_addnth_v4(&ipns, &lease->ipv4, index);
}
- } else if (ipv4->s_addr) {
+ } else if (ipv4) {
if (!memcmp(&lease->ipv4, ipv4, sizeof(*ipv4))) {
debug("extending(v4)\n");
} else {
@@ -245,7 +241,7 @@ struct wg_dynamic_lease *set_lease(wg_key pubkey, uint32_t leasetime,
}
}
- if (!ipv6) { /* Wants random IPv6 address? */
+ if (ipv6 && IN6_IS_ADDR_UNSPECIFIED(ipv6)) {
if (!ipns.totalh_ipv6 && !ipns.totall_ipv6) {
debug("IPv6 pool empty\n");
memset(&lease->ipv6, 0, sizeof(lease->ipv6));
@@ -264,7 +260,7 @@ struct wg_dynamic_lease *set_lease(wg_key pubkey, uint32_t leasetime,
index_l, ipns.totalh_ipv6, ipns.totall_ipv6);
ipp_addnth_v6(&ipns, &lease->ipv6, index_l, index_h);
}
- } else if (!IN6_IS_ADDR_UNSPECIFIED(ipv6)) {
+ } else if (ipv6) {
if (!memcmp(&lease->ipv6, ipv6, sizeof(*ipv6))) {
debug("extending(v6)\n");
} else {