[Openvpn-devel,2/5] pool: restyle ipv4/ipv6 members to improve readability

Message ID 20180605090421.9746-3-a@unstable.cc
State Accepted
Headers show
Series
  • Allow IPv6-only tunnels
Related show

Commit Message

Antonio Quartulli June 5, 2018, 9:04 a.m.
From: Antonio Quartulli <antonio@openvpn.net>

(This is only code refactoring)

IPv4 and IPv6 members are all part of the same flat hierarchy
in the pool data structure, without a proper name convention.

Create 2 sub-structures to properly saperate IPv4 from IPv6
relate members. This should make the structure more organized
and also slightly improve code readability.

Signed-off-by: Antonio Quartulli <antonio@openvpn.net>
---
 src/openvpn/pool.c | 72 +++++++++++++++++++++++-----------------------
 src/openvpn/pool.h | 16 +++++++----
 2 files changed, 46 insertions(+), 42 deletions(-)

Comments

Gert Doering June 5, 2018, 7:27 p.m. | #1
Acked-by: Gert Doering <gert@greenie.muc.de>

While not strictly necessary, it makes the code somewhat easier to
follow ("this is only about IPv4, which does not interest me right now").

Stared-at-code, and tested (t_client + t_server) :-)

Your patch has been applied to the master branch (with some minor grammar
fixes to the commit message).

commit 5d2cd1222e06291021cf5e793f585d5f1485ae9b
Author: Antonio Quartulli
Date:   Tue Jun 5 17:04:18 2018 +0800

     pool: restyle ipv4/ipv6 members to improve readability

     Signed-off-by: Antonio Quartulli <antonio@openvpn.net>
     Acked-by: Gert Doering <gert@greenie.muc.de>
     Message-Id: <20180605090421.9746-3-a@unstable.cc>
     URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg16944.html
     Signed-off-by: Gert Doering <gert@greenie.muc.de>


--
kind regards,

Gert Doering


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

Patch

diff --git a/src/openvpn/pool.c b/src/openvpn/pool.c
index da28bc06..26eb0ebd 100644
--- a/src/openvpn/pool.c
+++ b/src/openvpn/pool.c
@@ -66,7 +66,7 @@  ifconfig_pool_find(struct ifconfig_pool *pool, const char *common_name)
     int previous_usage = -1;
     int new_usage = -1;
 
-    for (i = 0; i < pool->size; ++i)
+    for (i = 0; i < pool->ipv4.size; ++i)
     {
         struct ifconfig_pool_entry *ipe = &pool->list[i];
         if (!ipe->in_use)
@@ -158,19 +158,19 @@  ifconfig_pool_init(int type, in_addr_t start, in_addr_t end,
     ASSERT(start <= end && end - start < IFCONFIG_POOL_MAX);
     ALLOC_OBJ_CLEAR(pool, struct ifconfig_pool);
 
-    pool->type = type;
+    pool->ipv4.type = type;
     pool->duplicate_cn = duplicate_cn;
 
-    switch (type)
+    switch (pool->ipv4.type)
     {
         case IFCONFIG_POOL_30NET:
-            pool->base = start & ~3;
-            pool->size = (((end | 3) + 1) - pool->base) >> 2;
+            pool->ipv4.base = start & ~3;
+            pool->ipv4.size = (((end | 3) + 1) - pool->ipv4.base) >> 2;
             break;
 
         case IFCONFIG_POOL_INDIV:
-            pool->base = start;
-            pool->size = end - start + 1;
+            pool->ipv4.base = start;
+            pool->ipv4.size = end - start + 1;
             break;
 
         default:
@@ -178,30 +178,30 @@  ifconfig_pool_init(int type, in_addr_t start, in_addr_t end,
     }
 
     /* IPv6 pools are always "INDIV" type */
-    pool->ipv6 = ipv6_pool;
+    pool->ipv6.enabled = ipv6_pool;
 
-    if (pool->ipv6)
+    if (pool->ipv6.enabled)
     {
-        pool->base_ipv6 = ipv6_base;
-        pool->size_ipv6 = ipv6_netbits>96 ? ( 1<<(128-ipv6_netbits) )
+        pool->ipv6.base = ipv6_base;
+        pool->ipv6.size = ipv6_netbits > 96 ? (1 << (128 - ipv6_netbits))
                           : IFCONFIG_POOL_MAX;
 
         msg( D_IFCONFIG_POOL, "IFCONFIG POOL IPv6: (IPv4) size=%d, size_ipv6=%d, netbits=%d, base_ipv6=%s",
-             pool->size, pool->size_ipv6, ipv6_netbits,
-             print_in6_addr( pool->base_ipv6, 0, &gc ));
+             pool->ipv4.size, pool->ipv6.size, ipv6_netbits,
+             print_in6_addr(pool->ipv6.base, 0, &gc));
 
         /* the current code is very simple and assumes that the IPv6
          * pool is at least as big as the IPv4 pool, and we don't need
          * to do separate math etc. for IPv6
          */
-        ASSERT( pool->size < pool->size_ipv6 );
+        ASSERT(pool->ipv4.size < pool->ipv6.size);
     }
 
-    ALLOC_ARRAY_CLEAR(pool->list, struct ifconfig_pool_entry, pool->size);
+    ALLOC_ARRAY_CLEAR(pool->list, struct ifconfig_pool_entry, pool->ipv4.size);
 
     msg(D_IFCONFIG_POOL, "IFCONFIG POOL: base=%s size=%d, ipv6=%d",
-        print_in_addr_t(pool->base, 0, &gc),
-        pool->size, pool->ipv6 );
+        print_in_addr_t(pool->ipv4.base, 0, &gc),
+        pool->ipv4.size, pool->ipv6.enabled);
 
     gc_free(&gc);
     return pool;
@@ -213,7 +213,7 @@  ifconfig_pool_free(struct ifconfig_pool *pool)
     if (pool)
     {
         int i;
-        for (i = 0; i < pool->size; ++i)
+        for (i = 0; i < pool->ipv4.size; ++i)
         {
             ifconfig_pool_entry_free(&pool->list[i], true);
         }
@@ -239,11 +239,11 @@  ifconfig_pool_acquire(struct ifconfig_pool *pool, in_addr_t *local, in_addr_t *r
             ipe->common_name = string_alloc(common_name, NULL);
         }
 
-        switch (pool->type)
+        switch (pool->ipv4.type)
         {
             case IFCONFIG_POOL_30NET:
             {
-                in_addr_t b = pool->base + (i << 2);
+                in_addr_t b = pool->ipv4.base + (i << 2);
                 *local = b + 1;
                 *remote = b + 2;
                 break;
@@ -251,7 +251,7 @@  ifconfig_pool_acquire(struct ifconfig_pool *pool, in_addr_t *local, in_addr_t *r
 
             case IFCONFIG_POOL_INDIV:
             {
-                in_addr_t b = pool->base + i;
+                in_addr_t b = pool->ipv4.base + i;
                 *local = 0;
                 *remote = b;
                 break;
@@ -262,9 +262,9 @@  ifconfig_pool_acquire(struct ifconfig_pool *pool, in_addr_t *local, in_addr_t *r
         }
 
         /* IPv6 pools are always INDIV (--linear) */
-        if (pool->ipv6 && remote_ipv6)
+        if (pool->ipv6.enabled && remote_ipv6)
         {
-            *remote_ipv6 = add_in6_addr( pool->base_ipv6, i );
+            *remote_ipv6 = add_in6_addr(pool->ipv6.base, i);
         }
     }
     return i;
@@ -274,7 +274,7 @@  bool
 ifconfig_pool_release(struct ifconfig_pool *pool, ifconfig_pool_handle hand, const bool hard)
 {
     bool ret = false;
-    if (pool && hand >= 0 && hand < pool->size)
+    if (pool && hand >= 0 && hand < pool->ipv4.size)
     {
         ifconfig_pool_entry_free(&pool->list[hand], hard);
         ret = true;
@@ -291,17 +291,17 @@  ifconfig_pool_ip_base_to_handle(const struct ifconfig_pool *pool, const in_addr_
 {
     ifconfig_pool_handle ret = -1;
 
-    switch (pool->type)
+    switch (pool->ipv4.type)
     {
         case IFCONFIG_POOL_30NET:
         {
-            ret = (addr - pool->base) >> 2;
+            ret = (addr - pool->ipv4.base) >> 2;
             break;
         }
 
         case IFCONFIG_POOL_INDIV:
         {
-            ret = (addr - pool->base);
+            ret = (addr - pool->ipv4.base);
             break;
         }
 
@@ -309,7 +309,7 @@  ifconfig_pool_ip_base_to_handle(const struct ifconfig_pool *pool, const in_addr_
             ASSERT(0);
     }
 
-    if (ret < 0 || ret >= pool->size)
+    if (ret < 0 || ret >= pool->ipv4.size)
     {
         ret = -1;
     }
@@ -322,19 +322,19 @@  ifconfig_pool_handle_to_ip_base(const struct ifconfig_pool *pool, ifconfig_pool_
 {
     in_addr_t ret = 0;
 
-    if (hand >= 0 && hand < pool->size)
+    if (hand >= 0 && hand < pool->ipv4.size)
     {
-        switch (pool->type)
+        switch (pool->ipv4.type)
         {
             case IFCONFIG_POOL_30NET:
             {
-                ret = pool->base + (hand << 2);
+                ret = pool->ipv4.base + (hand << 2);
                 break;
             }
 
             case IFCONFIG_POOL_INDIV:
             {
-                ret = pool->base + hand;
+                ret = pool->ipv4.base + hand;
                 break;
             }
 
@@ -352,9 +352,9 @@  ifconfig_pool_handle_to_ipv6_base(const struct ifconfig_pool *pool, ifconfig_poo
     struct in6_addr ret = in6addr_any;
 
     /* IPv6 pools are always INDIV (--linear) */
-    if (hand >= 0 && hand < pool->size_ipv6)
+    if (hand >= 0 && hand < pool->ipv6.size)
     {
-        ret = add_in6_addr( pool->base_ipv6, hand );
+        ret = add_in6_addr( pool->ipv6.base, hand );
     }
     return ret;
 }
@@ -382,13 +382,13 @@  ifconfig_pool_list(const struct ifconfig_pool *pool, struct status_output *out)
         struct gc_arena gc = gc_new();
         int i;
 
-        for (i = 0; i < pool->size; ++i)
+        for (i = 0; i < pool->ipv4.size; ++i)
         {
             const struct ifconfig_pool_entry *e = &pool->list[i];
             if (e->common_name)
             {
                 const in_addr_t ip = ifconfig_pool_handle_to_ip_base(pool, i);
-                if (pool->ipv6)
+                if (pool->ipv6.enabled)
                 {
                     struct in6_addr ip6 = ifconfig_pool_handle_to_ipv6_base(pool, i);
                     status_printf(out, "%s,%s,%s",
diff --git a/src/openvpn/pool.h b/src/openvpn/pool.h
index 6de28ac5..544d4180 100644
--- a/src/openvpn/pool.h
+++ b/src/openvpn/pool.h
@@ -47,13 +47,17 @@  struct ifconfig_pool_entry
 
 struct ifconfig_pool
 {
-    in_addr_t base;
-    int size;
-    int type;
     bool duplicate_cn;
-    bool ipv6;
-    struct in6_addr base_ipv6;
-    unsigned int size_ipv6;
+    struct {
+        int type;
+        in_addr_t base;
+        int size;
+    } ipv4;
+    struct {
+        bool enabled;
+        struct in6_addr base;
+        unsigned int size;
+    } ipv6;
     struct ifconfig_pool_entry *list;
 };