Bläddra i källkod

misc: ipaddr.h: add address formatting functions

ambrop7 13 år sedan
förälder
incheckning
74f0bd9e15
1 ändrade filer med 28 tillägg och 1 borttagningar
  1. 28 1
      misc/ipaddr.h

+ 28 - 1
misc/ipaddr.h

@@ -34,7 +34,7 @@
 #ifndef BADVPN_MISC_IPADDR_H
 #define BADVPN_MISC_IPADDR_H
 
-#include <stdint.h>
+#include <inttypes.h>
 #include <string.h>
 #include <stdlib.h>
 
@@ -59,6 +59,11 @@ static uint32_t ipaddr_ipv4_mask_from_prefix (int prefix);
 static int ipaddr_ipv4_prefix_from_mask (uint32_t mask, int *out_prefix);
 static int ipaddr_ipv4_addrs_in_network (uint32_t addr1, uint32_t addr2, int netprefix);
 
+#define IPADDR_PRINT_MAX 19
+
+static void ipaddr_print_addr (uint32_t addr, char *out);
+static void ipaddr_print_ifaddr (struct ipv4_ifaddr ifaddr, char *out);
+
 int ipaddr_parse_ipv4_addr_bin (const char *name, size_t name_len, uint32_t *out_addr)
 {
     for (size_t i = 0; ; i++) {
@@ -188,4 +193,26 @@ int ipaddr_ipv4_addrs_in_network (uint32_t addr1, uint32_t addr2, int netprefix)
     return !!((addr1 & mask) == (addr2 & mask));
 }
 
+void ipaddr_print_addr (uint32_t addr, char *out)
+{
+    ASSERT(out)
+    
+    uint8_t *b = (uint8_t *)&addr;
+    
+    sprintf(out, "%"PRIu8".%"PRIu8".%"PRIu8".%"PRIu8,
+            b[0], b[1], b[2], b[3]);
+}
+
+void ipaddr_print_ifaddr (struct ipv4_ifaddr ifaddr, char *out)
+{
+    ASSERT(ifaddr.prefix >= 0)
+    ASSERT(ifaddr.prefix <= 32)
+    ASSERT(out)
+    
+    uint8_t *b = (uint8_t *)&ifaddr.addr;
+    
+    sprintf(out, "%"PRIu8".%"PRIu8".%"PRIu8".%"PRIu8"/%d",
+            b[0], b[1], b[2], b[3], ifaddr.prefix);
+}
+
 #endif