From cf3a29feb5887344b6633ead1b4b6d5657a15a4b Mon Sep 17 00:00:00 2001 From: Patrick Simianer Date: Sun, 15 Jun 2014 03:24:33 +0200 Subject: old stuff: algorithms --- algorithms/ip.c | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 algorithms/ip.c (limited to 'algorithms/ip.c') diff --git a/algorithms/ip.c b/algorithms/ip.c new file mode 100644 index 0000000..6db600f --- /dev/null +++ b/algorithms/ip.c @@ -0,0 +1,131 @@ +#include + +#define IPSTRLEN 20 + + +int +ip_str_to_ip_tuple(char ip_str[], int ip_tuple[]) +{ + int retval; + + if (4!=(retval=sscanf(ip_str, "%d.%d.%d.%d", + &ip_tuple[0], &ip_tuple[1], &ip_tuple[2], &ip_tuple[3]))) { + fprintf(stderr, "Error: sscanf failed, retval was: %d\n", retval); + return retval; + } + + return 0; +} + +int +ip_tuple_to_ip_str(int ip_tuple[], char ip_str[], int ip_str_size) +{ + int retval; + + if (IPSTRLEN<(retval=snprintf(ip_str, ip_str_size, "%d.%d.%d.%d", + ip_tuple[3], ip_tuple[2], ip_tuple[1], ip_tuple[0]))) { + return retval; + } + + return 0; +} + +unsigned long +ip_tuple_to_addr(int ip_tuple[]) +{ + unsigned long result=0; + + for (int i = 0; i < 4; i += 1) { + result = result<<8; + result = ip_tuple[i]|result; + } + + return result; +} + +int +addr_to_ip_tuple(unsigned long addr, int ip_tuple[]) +{ + for (int i = 0; i < 4; i += 1) { + ip_tuple[i] = (addr>>i*8)&255; + } + + return 0; +} + +unsigned long +compute_netmask_for_size(int net_size) +{ + unsigned long netmask = 0xffffffff; + + netmask = netmask<