summaryrefslogtreecommitdiff
path: root/src/sp_network_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sp_network_utils.c')
-rw-r--r--src/sp_network_utils.c27
1 files changed, 27 insertions, 0 deletions
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) {
121 121
122 return 0; 122 return 0;
123} 123}
124
125bool /* success */ get_ip_str(char *dst, size_t dst_len, sp_cidr *cidr) {
126 size_t ipstr_len = 0;
127 void *ip = NULL;
128 switch (cidr->ip_version) {
129 case AF_INET:
130 ipstr_len = INET_ADDRSTRLEN;
131 ip = &cidr->ip.ipv4;
132 break;
133 case AF_INET6:
134 ipstr_len = INET6_ADDRSTRLEN;
135 ip = &cidr->ip.ipv6;
136 break;
137 default:
138 return false;
139 }
140
141 if (dst_len < ipstr_len + 1 + 3 + 1) {
142 return false;
143 }
144 if (!inet_ntop(cidr->ip_version, ip, dst, ipstr_len)) {
145 return false;
146 }
147 ipstr_len = strlen(dst);
148 snprintf(dst + ipstr_len, dst_len - ipstr_len, "/%d", cidr->mask);
149 return true;
150} \ No newline at end of file