From dece0e45b7f66cc51bcbe590240eab3f82da900c Mon Sep 17 00:00:00 2001 From: Ben Fuhrmannek Date: Sat, 5 Feb 2022 12:17:42 +0100 Subject: convert cidr to string --- src/sp_network_utils.c | 27 +++++++++++++++++++++++++++ src/sp_network_utils.h | 1 + 2 files changed, 28 insertions(+) (limited to 'src') diff --git a/src/sp_network_utils.c b/src/sp_network_utils.c index 0a26254..943c418 100644 --- a/src/sp_network_utils.c +++ b/src/sp_network_utils.c @@ -121,3 +121,30 @@ int get_ip_and_cidr(char *ip, sp_cidr *cidr) { return 0; } + +bool /* success */ get_ip_str(char *dst, size_t dst_len, sp_cidr *cidr) { + size_t ipstr_len = 0; + void *ip = NULL; + switch (cidr->ip_version) { + case AF_INET: + ipstr_len = INET_ADDRSTRLEN; + ip = &cidr->ip.ipv4; + break; + case AF_INET6: + ipstr_len = INET6_ADDRSTRLEN; + ip = &cidr->ip.ipv6; + break; + default: + return false; + } + + if (dst_len < ipstr_len + 1 + 3 + 1) { + return false; + } + if (!inet_ntop(cidr->ip_version, ip, dst, ipstr_len)) { + return false; + } + ipstr_len = strlen(dst); + snprintf(dst + ipstr_len, dst_len - ipstr_len, "/%d", cidr->mask); + return true; +} \ No newline at end of file diff --git a/src/sp_network_utils.h b/src/sp_network_utils.h index 2c1062a..69789a6 100644 --- a/src/sp_network_utils.h +++ b/src/sp_network_utils.h @@ -3,5 +3,6 @@ int get_ip_and_cidr(char *, sp_cidr *); bool cidr_match(const char *, const sp_cidr *); +bool /* success */ get_ip_str(char *dst, size_t dst_len, sp_cidr *cidr); #endif /*SP_NETWORK_UTILS_H*/ -- cgit v1.3