diff --git a/src/main/java/net/onrc/onos/apps/sdnip/SdnIp.java b/src/main/java/net/onrc/onos/apps/sdnip/SdnIp.java
index cd1c2de..ed7a8ee 100644
--- a/src/main/java/net/onrc/onos/apps/sdnip/SdnIp.java
+++ b/src/main/java/net/onrc/onos/apps/sdnip/SdnIp.java
@@ -5,6 +5,7 @@
 import java.net.InetAddress;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -108,6 +109,7 @@
     private SwitchPort bgpdAttachmentPoint;
     private MACAddress bgpdMacAddress;
     private short vlan;
+    private Set<SwitchPort> externalNetworkSwitchPorts;
 
     private SetMultimap<InetAddress, RibUpdate> prefixesWaitingOnArp;
 
@@ -132,6 +134,8 @@
             interfaces = new HashMap<>();
             for (Interface intf : config.getInterfaces()) {
                 interfaces.put(intf.getName(), intf);
+                externalNetworkSwitchPorts.add(new SwitchPort(intf.getDpid(),
+                        intf.getPort()));
             }
             bgpPeers = new HashMap<>();
             for (BgpPeer peer : config.getPeers()) {
@@ -193,6 +197,7 @@
                 new DefaultByteArrayNodeFactory());
         interfaceRoutes = new ConcurrentInvertedRadixTree<>(
                 new DefaultByteArrayNodeFactory());
+        externalNetworkSwitchPorts = new HashSet<SwitchPort>();
 
         ribUpdates = new LinkedBlockingQueue<>();
 
@@ -906,4 +911,9 @@
         return vlan;
     }
 
+    @Override
+    public Set<SwitchPort> getExternalSwitchPorts() {
+        return Collections.unmodifiableSet(externalNetworkSwitchPorts);
+    }
+
 }
