initial implementation of IP allocator, only using memory storage
diff --git a/ip-allocator/ip.go b/ip-allocator/ip.go
new file mode 100644
index 0000000..29e3500
--- /dev/null
+++ b/ip-allocator/ip.go
@@ -0,0 +1,32 @@
+package main
+
+import (
+	"fmt"
+	"strconv"
+	"strings"
+)
+
+type IPv4 uint32
+
+func ParseIP(dot string) (IPv4, error) {
+	var ip IPv4 = 0
+	o := strings.Split(dot, ".")
+	for i := 0; i < 4; i += 1 {
+		b, _ := strconv.Atoi(o[i])
+		ip = ip | (IPv4(byte(b)) << (uint(3-i) * 8))
+	}
+	return ip, nil
+}
+
+func (ip IPv4) Next() (IPv4, error) {
+	return ip + 1, nil
+}
+
+func (ip IPv4) String() string {
+	b := []byte{0, 0, 0, 0}
+	for i := 0; i < 4; i += 1 {
+		m := IPv4(255) << uint((3-i)*8)
+		b[i] = byte(((ip & m) >> uint((3-i)*8)))
+	}
+	return fmt.Sprintf("%d.%d.%d.%d", b[0], b[1], b[2], b[3])
+}