diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/intf/InterfaceService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/intf/InterfaceService.java
index f959a5c..4de235f 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/intf/InterfaceService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/intf/InterfaceService.java
@@ -79,4 +79,13 @@
      * @return interface
      */
     Interface getMatchingInterface(IpAddress ip);
+
+    /**
+     * Returns all interfaces that have an address that is in the same
+     * subnet as the given IP address.
+     *
+     * @param ip IP address to find matching subnet interface for
+     * @return a set of interfaces
+     */
+    Set<Interface> getMatchingInterfaces(IpAddress ip);
 }
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/intf/InterfaceServiceAdapter.java b/incubator/api/src/test/java/org/onosproject/incubator/net/intf/InterfaceServiceAdapter.java
index bc91019..8768b1f 100644
--- a/incubator/api/src/test/java/org/onosproject/incubator/net/intf/InterfaceServiceAdapter.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/intf/InterfaceServiceAdapter.java
@@ -57,6 +57,11 @@
     }
 
     @Override
+    public Set<Interface> getMatchingInterfaces(IpAddress ip) {
+        return null;
+    }
+
+    @Override
     public void addListener(InterfaceListener listener) {
 
     }
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/intf/impl/InterfaceManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/intf/impl/InterfaceManager.java
index 2b4ecbf..05ef6a7 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/intf/impl/InterfaceManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/intf/impl/InterfaceManager.java
@@ -42,10 +42,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import java.util.stream.Stream;
 
 import static java.util.stream.Collectors.collectingAndThen;
 import static java.util.stream.Collectors.toSet;
@@ -125,8 +127,8 @@
     public Set<Interface> getInterfacesByIp(IpAddress ip) {
         return interfaces.values()
                 .stream()
-                .flatMap(set -> set.stream())
-                .filter(intf -> intf.ipAddresses()
+                .flatMap(Collection::stream)
+                .filter(intf -> intf.ipAddressesList()
                         .stream()
                         .anyMatch(ia -> ia.ipAddress().equals(ip)))
                 .collect(collectingAndThen(toSet(), ImmutableSet::copyOf));
@@ -134,22 +136,28 @@
 
     @Override
     public Interface getMatchingInterface(IpAddress ip) {
-        Optional<Interface> match = interfaces.values()
-                .stream()
-                .flatMap(set -> set.stream())
-                .filter(intf -> intf.ipAddresses()
-                        .stream()
-                        .anyMatch(intfIp -> intfIp.subnetAddress().contains(ip)))
-                .findFirst();
+        return getMatchingInterfacesStream(ip).findFirst().orElse(null);
+    }
 
-        return match.orElse(null);
+    @Override
+    public Set<Interface> getMatchingInterfaces(IpAddress ip) {
+        return getMatchingInterfacesStream(ip).collect(toSet());
+    }
+
+    private Stream<Interface> getMatchingInterfacesStream(IpAddress ip) {
+        return interfaces.values()
+                .stream()
+                .flatMap(Collection::stream)
+                .filter(intf -> intf.ipAddressesList()
+                        .stream()
+                        .anyMatch(intfIp -> intfIp.subnetAddress().contains(ip)));
     }
 
     @Override
     public Set<Interface> getInterfacesByVlan(VlanId vlan) {
         return interfaces.values()
                 .stream()
-                .flatMap(set -> set.stream())
+                .flatMap(Collection::stream)
                 .filter(intf -> intf.vlan().equals(vlan))
                 .collect(collectingAndThen(toSet(), ImmutableSet::copyOf));
     }
