renamed VLAN, IP, and MACAddress classes

Change-Id: Ib4df413db1f3d9ee96213fc487519536d7993c5b
diff --git a/utils/misc/src/main/java/org/onlab/packet/IpAddress.java b/utils/misc/src/main/java/org/onlab/packet/IpAddress.java
new file mode 100644
index 0000000..c664a3a
--- /dev/null
+++ b/utils/misc/src/main/java/org/onlab/packet/IpAddress.java
@@ -0,0 +1,132 @@
+package org.onlab.packet;
+
+import java.util.Arrays;
+
+/**
+ * A class representing an IPv4 address.
+ */
+public class IpAddress {
+
+    //IP Versions
+    public enum Version { INET, INET6 };
+
+    //lengths of address, in bytes
+    public static final int INET_LEN = 4;
+    public static final int INET6_LEN = 16;
+
+    protected Version version;
+    //does it make more sense to have a integral address?
+    protected byte[] octets;
+
+    protected IpAddress(Version ver, byte[] octets) {
+        this.version = ver;
+        this.octets = Arrays.copyOf(octets, INET_LEN);
+    }
+
+    /**
+     * Converts a byte array into an IP address.
+     *
+     * @param address a byte array
+     * @return an IP address
+     */
+    public static IpAddress valueOf(byte [] address) {
+        return new IpAddress(Version.INET, address);
+    }
+
+    /**
+     * Converts an integer into an IPv4 address.
+     *
+     * @param address an integer representing an IP value
+     * @return an IP address
+     */
+    public static IpAddress valueOf(int address) {
+        byte [] bytes = new byte [INET_LEN];
+        for (int i = 0; i < INET_LEN; i++) {
+            bytes[i] = (byte) ((address >> (INET_LEN - (i + 1)) * 8) & 0xff);
+        }
+
+        return new IpAddress(Version.INET, bytes);
+    }
+
+    /**
+     * Converts a string in dotted-decimal notation (x.x.x.x) into
+     * an IPv4 address.
+     *
+     * @param address a string representing an IP address, e.g. "10.0.0.1"
+     * @return an IP address
+     */
+    public static IpAddress valueOf(String address) {
+        final String [] parts = address.split("\\.");
+        if (parts.length != INET_LEN) {
+            throw new IllegalArgumentException("Malformed IP address string; "
+                    + "Addres must have four decimal values separated by dots (.)");
+        }
+        final byte [] bytes = new byte[INET_LEN];
+        for (int i = 0; i < INET_LEN; i++) {
+            bytes[i] = Byte.parseByte(parts[i], 10);
+        }
+        return new IpAddress(Version.INET, bytes);
+    }
+
+    /**
+     * Returns the IP version of this address.
+     *
+     * @return the version
+     */
+    public Version version() {
+        return this.version;
+    }
+
+    /**
+     * Returns the IP address as a byte array.
+     *
+     * @return a byte array
+     */
+    public byte [] toOctets() {
+        return Arrays.copyOf(this.octets, INET_LEN);
+    }
+
+    /**
+     * Returns the integral value of this IP address.
+     *
+     * @return the IP address's value as an integer
+     */
+    public int toInt() {
+        int address = 0;
+        for (int i = 0; i < INET_LEN; i++) {
+            address |= octets[i] << ((INET_LEN - (i + 1)) * 8);
+        }
+        return address;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder builder = new StringBuilder();
+        for (final byte b : this.octets) {
+            if (builder.length() > 0) {
+                builder.append(".");
+            }
+            builder.append(String.format("%d", b));
+        }
+        return builder.toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return Arrays.hashCode(octets);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+
+        if (obj instanceof IpAddress) {
+            IpAddress other = (IpAddress) obj;
+
+            if (this.version.equals(other.version)
+                    && (Arrays.equals(this.octets, other.octets))) {
+                return true;
+            }
+        }
+        return false;
+    }
+}