updateports functional
diff --git a/net/api/src/main/java/org/onlab/onos/net/PortNumber.java b/net/api/src/main/java/org/onlab/onos/net/PortNumber.java
index 45ee9ee..d5fc5f2 100644
--- a/net/api/src/main/java/org/onlab/onos/net/PortNumber.java
+++ b/net/api/src/main/java/org/onlab/onos/net/PortNumber.java
@@ -1,10 +1,8 @@
 package org.onlab.onos.net;
 
-import com.google.common.primitives.UnsignedLongs;
-
 import java.util.Objects;
 
-import static com.google.common.base.Preconditions.checkArgument;
+import com.google.common.primitives.UnsignedLongs;
 
 /**
  * Representation of a port number.
@@ -17,9 +15,6 @@
 
     // Public creation is prohibited
     private PortNumber(long number) {
-        checkArgument(number >= 0 && number < MAX_NUMBER,
-                      "Port number %d is outside the supported range [0, %d)",
-                      number, MAX_NUMBER);
         this.number = number;
     }
 
diff --git a/net/api/src/test/java/org/onlab/onos/net/PortNumberTest.java b/net/api/src/test/java/org/onlab/onos/net/PortNumberTest.java
index fced985..528ad09 100644
--- a/net/api/src/test/java/org/onlab/onos/net/PortNumberTest.java
+++ b/net/api/src/test/java/org/onlab/onos/net/PortNumberTest.java
@@ -1,21 +1,23 @@
 package org.onlab.onos.net;
 
-import com.google.common.testing.EqualsTester;
-import org.junit.Test;
-
 import static org.junit.Assert.assertEquals;
 import static org.onlab.onos.net.PortNumber.portNumber;
 
+import org.junit.Test;
+
+import com.google.common.testing.EqualsTester;
+
 /**
  * Test of the port number.
  */
 public class PortNumberTest extends ElementIdTest {
 
+    @Override
     @Test
     public void basics() {
         new EqualsTester()
-                .addEqualityGroup(portNumber(123),
-                                  portNumber("123"))
+        .addEqualityGroup(portNumber(123),
+                portNumber("123"))
                 .addEqualityGroup(portNumber(321))
                 .testEquals();
     }
@@ -25,13 +27,5 @@
         assertEquals("incorrect long value", 12345, portNumber(12345).toLong());
     }
 
-    @Test(expected = IllegalArgumentException.class)
-    public void negative() {
-        portNumber(-1);
-    }
 
-    @Test(expected = IllegalArgumentException.class)
-    public void tooBig() {
-        portNumber((2L * Integer.MAX_VALUE) + 2);
-    }
 }
diff --git a/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplOVS10.java b/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplOVS10.java
index 0a311f3..b9ee4c9 100644
--- a/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplOVS10.java
+++ b/of/ctl/src/main/java/org/onlab/onos/of/drivers/impl/OFSwitchImplOVS10.java
@@ -1,11 +1,13 @@
 package org.onlab.onos.of.drivers.impl;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.onlab.onos.of.controller.Dpid;
 import org.onlab.onos.of.controller.driver.AbstractOpenFlowSwitch;
 import org.projectfloodlight.openflow.protocol.OFDescStatsReply;
 import org.projectfloodlight.openflow.protocol.OFMessage;
+import org.projectfloodlight.openflow.protocol.OFPortDesc;
 
 /**
  * OFDescriptionStatistics Vendor (Manufacturer Desc.): Nicira, Inc. Make
@@ -56,4 +58,11 @@
     public void write(List<OFMessage> msgs) {
         channel.write(msgs);
     }
+
+    @Override
+    public List<OFPortDesc> getPorts() {
+        return Collections.unmodifiableList(features.getPorts());
+    }
+
+
 }
diff --git a/providers/of/device/src/main/java/org/onlab/onos/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/of/device/src/main/java/org/onlab/onos/provider/of/device/impl/OpenFlowDeviceProvider.java
index 71219b7..1740f4b 100644
--- a/providers/of/device/src/main/java/org/onlab/onos/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ b/providers/of/device/src/main/java/org/onlab/onos/provider/of/device/impl/OpenFlowDeviceProvider.java
@@ -30,7 +30,9 @@
 import org.onlab.onos.of.controller.OpenFlowSwitch;
 import org.onlab.onos.of.controller.OpenFlowSwitchListener;
 import org.onlab.onos.of.controller.RoleState;
+import org.projectfloodlight.openflow.protocol.OFPortConfig;
 import org.projectfloodlight.openflow.protocol.OFPortDesc;
+import org.projectfloodlight.openflow.protocol.OFPortState;
 import org.slf4j.Logger;
 
 /**
@@ -50,7 +52,7 @@
 
     private DeviceProviderService providerService;
 
-    private OpenFlowSwitchListener listener = new InternalDeviceProvider();
+    private final OpenFlowSwitchListener listener = new InternalDeviceProvider();
 
     /**
      * Creates an OpenFlow device provider.
@@ -119,17 +121,6 @@
             providerService.updatePorts(deviceId(uri), buildPortDescriptions(sw.getPorts()));
         }
 
-        private List<PortDescription> buildPortDescriptions(
-                List<OFPortDesc> ports) {
-            List<PortDescription> portDescs = new ArrayList<PortDescription>();
-            for (OFPortDesc port : ports) {
-                PortNumber portNo = PortNumber.portNumber(port.getPortNo().getPortNumber());
-
-                portDescs.add(new DefaultPortDescription(portNo,
-                        port.getState()));
-            }
-        }
-
         @Override
         public void switchRemoved(Dpid dpid) {
             if (providerService == null) {
@@ -149,6 +140,21 @@
             return uri;
         }
 
+        private List<PortDescription> buildPortDescriptions(
+                List<OFPortDesc> ports) {
+            final List<PortDescription> portDescs = new ArrayList<PortDescription>();
+            PortNumber portNo;
+            boolean enabled;
+            for (OFPortDesc port : ports) {
+                portNo = PortNumber.portNumber(port.getPortNo().getPortNumber());
+                enabled = !port.getState().contains(OFPortState.LINK_DOWN) &&
+                        !port.getConfig().contains(OFPortConfig.PORT_DOWN);
+                portDescs.add(new DefaultPortDescription(portNo,
+                        enabled));
+            }
+            return portDescs;
+        }
+
     }
 
 }