Fix: resolve the service not found exception caused by openstack4j
Change-Id: I33a5c7e6b91758a61662a77a1b347fd0239219eb
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
index fe5f483..e8747cc 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
@@ -17,6 +17,7 @@
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -26,6 +27,7 @@
import org.onlab.packet.ARP;
import org.onlab.packet.Ethernet;
import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
import org.onlab.util.KryoNamespace;
@@ -51,9 +53,11 @@
import org.onosproject.store.service.ConsistentMap;
import org.onosproject.store.service.Serializer;
import org.onosproject.store.service.StorageService;
+import org.openstack4j.model.common.IdEntity;
import org.openstack4j.model.network.ExternalGateway;
import org.openstack4j.model.network.IP;
import org.openstack4j.model.network.Network;
+import org.openstack4j.model.network.NetworkType;
import org.openstack4j.model.network.Port;
import org.openstack4j.model.network.Router;
import org.openstack4j.model.network.Subnet;
@@ -111,6 +115,8 @@
private static final String ERR_DUPLICATE = " already exists";
private static final String PORT_NAME_PREFIX_VM = "tap";
+ private static final int PREFIX_LENGTH = 32;
+
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected CoreService coreService;
@@ -356,6 +362,49 @@
}
@Override
+ public Set<IpPrefix> getFixedIpsByNetworkType(String type) {
+ if (type == null) {
+ return Sets.newHashSet();
+ }
+
+ Set<Network> networks = osNetworkStore.networks();
+ Set<String> networkIds = Sets.newConcurrentHashSet();
+
+ switch (type.toUpperCase()) {
+ case "FLAT" :
+ networkIds = networks.stream()
+ .filter(n -> n.getNetworkType() == NetworkType.FLAT)
+ .map(IdEntity::getId).collect(Collectors.toSet());
+ break;
+ case "VXLAN" :
+ networkIds = networks.stream()
+ .filter(n -> n.getNetworkType() == NetworkType.VXLAN)
+ .map(IdEntity::getId).collect(Collectors.toSet());
+ break;
+ case "VLAN" :
+ networkIds = networks.stream()
+ .filter(n -> n.getNetworkType() == NetworkType.VLAN)
+ .map(IdEntity::getId).collect(Collectors.toSet());
+ break;
+ default:
+ break;
+ }
+
+ Set<IP> ips = Sets.newConcurrentHashSet();
+ for (String networkId : networkIds) {
+ osNetworkStore.ports()
+ .stream()
+ .filter(p -> p.getNetworkId().equals(networkId))
+ .filter(p -> p.getFixedIps() != null)
+ .forEach(p -> ips.addAll(p.getFixedIps()));
+ }
+
+ return ips.stream().map(ip -> IpPrefix.valueOf(
+ IpAddress.valueOf(ip.getIpAddress()), PREFIX_LENGTH))
+ .collect(Collectors.toSet());
+ }
+
+ @Override
public ExternalPeerRouter externalPeerRouter(IpAddress ipAddress) {
if (externalPeerRouterMap.containsKey(ipAddress.toString())) {
return externalPeerRouterMap.get(ipAddress.toString()).value();