aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-08-12 12:55:48 +0200
committerHarald Welte <laforge@gnumonks.org>2017-08-12 22:53:59 +0200
commit27c7b2f94118e6a0a15ebeeb142e7c7cb7c21e55 (patch)
treeb23abcc0ff44cd04e12e2b7d63740906fff10a02
parent1e904b05bbe0d5277bb8c374edd21d8ac65a0708 (diff)
lib/in46_addr: Add 'struct in46_prefix' to represent addr + prefix
-rw-r--r--lib/in46_addr.c7
-rw-r--r--lib/in46_addr.h6
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/in46_addr.c b/lib/in46_addr.c
index 4e7cbcd..6864c64 100644
--- a/lib/in46_addr.c
+++ b/lib/in46_addr.c
@@ -79,6 +79,13 @@ const char *in46a_ntoa(const struct in46_addr *in46)
return addrstr_buf;
}
+const char *in46p_ntoa(const struct in46_prefix *in46p)
+{
+ static char addrstr_buf[256];
+ snprintf(addrstr_buf, sizeof(addrstr_buf), "%s/%u", in46a_ntoa(&in46p->addr), in46p->prefixlen);
+ return addrstr_buf;
+}
+
/*! Determine if two in46_addr are equal or not
* \returns 1 in case they are equal; 0 otherwise */
int in46a_equal(const struct in46_addr *a, const struct in46_addr *b)
diff --git a/lib/in46_addr.h b/lib/in46_addr.h
index 1614c1d..ce2df14 100644
--- a/lib/in46_addr.h
+++ b/lib/in46_addr.h
@@ -14,10 +14,16 @@ struct in46_addr {
};
};
+struct in46_prefix {
+ struct in46_addr addr;
+ uint8_t prefixlen;
+};
+
extern int in46a_to_af(const struct in46_addr *in);
extern int in46a_to_sas(struct sockaddr_storage *out, const struct in46_addr *in);
extern const char *in46a_ntop(const struct in46_addr *in, char *dst, socklen_t dst_size);
extern const char *in46a_ntoa(const struct in46_addr *in46);
+extern const char *in46p_ntoa(const struct in46_prefix *in46p);
extern int in46a_equal(const struct in46_addr *a, const struct in46_addr *b);
extern int in46a_prefix_equal(const struct in46_addr *a, const struct in46_addr *b);
extern int in46a_within_mask(const struct in46_addr *addr, const struct in46_addr *net, size_t prefixlen);