Work toward Issue #215 and Issue #216:
 * Implemented the top-level API to support matching conditions and
   actions for flows.
 * Added Json serializer/deserializer for MACAddress.
diff --git a/src/main/java/net/floodlightcontroller/util/Port.java b/src/main/java/net/floodlightcontroller/util/Port.java
index 19bbf8f..41f0d55 100644
--- a/src/main/java/net/floodlightcontroller/util/Port.java
+++ b/src/main/java/net/floodlightcontroller/util/Port.java
@@ -5,7 +5,69 @@
 /**
  * The class representing a network port of a switch.
  */
+
 public class Port {
+    /**
+     * Special port values.
+     *
+     * Those values are taken as-is from the OpenFlow-v1.0.0 specification
+     * (pp 18-19).
+     */
+    public enum PortValues {
+	/* Maximum number of physical switch ports. */
+	PORT_MAX		((short)0xff00),
+
+	/* Fake output "ports". */
+
+	/* Send the packet out the input port. This
+	   virtual port must be explicitly used
+	   in order to send back out of the input
+	   port. */
+	PORT_IN_PORT		((short)0xfff8),
+
+	/* Perform actions in flow table.
+	   NB: This can only be the destination
+	   port for packet-out messages. */
+	PORT_TABLE		((short)0xfff9),
+
+	/* Process with normal L2/L3 switching. */
+	PORT_NORMAL		((short)0xfffa),
+
+	/* All physical ports except input port and
+	   those disabled by STP. */
+	PORT_FLOOD		((short)0xfffb),
+
+	/* All physical ports except input port. */
+	PORT_ALL		((short)0xfffc),
+
+	/* Send to controller. */
+	PORT_CONTROLLER		((short)0xfffd),
+
+	/* Local openflow "port". */
+	PORT_LOCAL		((short)0xfffe),
+
+	/* Not associated with a physical port. */
+	PORT_NONE		((short)0xffff);
+
+	private final short value;	// The value
+
+	/**
+	 * Constructor for a given value.
+	 *
+	 * @param value the value to use for the initialization.
+	 */
+	private PortValues(short value) {
+	    this.value = value;
+	}
+
+	/**
+	 * Get the value as a short integer.
+	 *
+	 * @return the value as a short integer.
+	 */
+	private short value() { return this.value; }
+    }
+
     private short value;
 
     /**
@@ -25,7 +87,7 @@
     }
 
     /**
-     * Constructor from a long value.
+     * Constructor from a short integer value.
      *
      * @param value the value to use.
      */
@@ -34,6 +96,15 @@
     }
 
     /**
+     * Constructor from a PortValues enum value.
+     *
+     * @param value the value to use.
+     */
+    public Port(PortValues value) {
+	this.value = value.value();
+    }
+
+    /**
      * Get the value of the port.
      *
      * @return the value of the port.