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<