/*
- * Copyright IBM Corporation, 2013. All rights reserved.
+ * Copyright (c) 2013, 2015 IBM Corporation and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
package org.opendaylight.neutron.transcriber;
import com.google.common.collect.ImmutableBiMap;
-
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
import org.opendaylight.neutron.spi.NeutronNetwork;
import org.opendaylight.neutron.spi.NeutronNetwork_Segment;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.ext.rev141002.NetworkL3Extension;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.ext.rev141002.NetworkL3ExtensionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.networks.attributes.Networks;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.networks.attributes.networks.Network;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.networks.attributes.networks.NetworkBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev141002.neutron.networks.network.Segments;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev141002.neutron.networks.network.SegmentsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.NetworkTypeBase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.NetworkTypeFlat;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.NetworkTypeGre;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.NetworkTypeVlan;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev141002.NetworkTypeVxlan;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev141002.NetworkProviderExtension;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev141002.NetworkProviderExtensionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.ext.rev150712.NetworkL3Extension;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.ext.rev150712.NetworkL3ExtensionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeFlat;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeGre;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVxlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.Networks;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtension;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtensionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.neutron.networks.network.Segments;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.neutron.networks.network.SegmentsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.qos.ext.rev160613.QosNetworkExtension;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.qos.ext.rev160613.QosNetworkExtensionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class NeutronNetworkInterface extends AbstractNeutronInterface<Network,NeutronNetwork> implements INeutronNetworkCRUD {
+public final class NeutronNetworkInterface extends AbstractNeutronInterface<Network, Networks, NeutronNetwork>
+ implements INeutronNetworkCRUD {
private static final Logger LOGGER = LoggerFactory.getLogger(NeutronNetworkInterface.class);
- private static final ImmutableBiMap<Class<? extends NetworkTypeBase>,String> NETWORK_MAP
- = new ImmutableBiMap.Builder<Class<? extends NetworkTypeBase>,String>()
- .put(NetworkTypeFlat.class,"flat")
- .put(NetworkTypeGre.class,"gre")
- .put(NetworkTypeVlan.class,"vlan")
- .put(NetworkTypeVxlan.class,"vxlan")
- .build();
+ private static final ImmutableBiMap<Class<? extends NetworkTypeBase>,
+ String> NETWORK_MAP = new ImmutableBiMap.Builder<Class<? extends NetworkTypeBase>, String>()
+ .put(NetworkTypeFlat.class, "flat").put(NetworkTypeGre.class, "gre")
+ .put(NetworkTypeVlan.class, "vlan").put(NetworkTypeVxlan.class, "vxlan").build();
- NeutronNetworkInterface(ProviderContext providerContext) {
- super(providerContext);
+ NeutronNetworkInterface(DataBroker db) {
+ super(NetworkBuilder.class, db);
}
// IfNBNetworkCRUD methods
-
- @Override
- public boolean networkExists(String uuid) {
- Network network = readMd(createInstanceIdentifier(toMd(uuid)));
- if (network == null) {
- return false;
- }
- return true;
- }
-
- @Override
- public NeutronNetwork getNetwork(String uuid) {
- Network network = readMd(createInstanceIdentifier(toMd(uuid)));
- if (network == null) {
- return null;
- }
- return fromMd(network);
- }
-
- @Override
- public List<NeutronNetwork> getAllNetworks() {
- Set<NeutronNetwork> allNetworks = new HashSet<NeutronNetwork>();
- Networks networks = readMd(createInstanceIdentifier());
- if (networks != null) {
- for (Network network: networks.getNetwork()) {
- allNetworks.add(fromMd(network));
- }
- }
- LOGGER.debug("Exiting getAllNetworks, Found {} OpenStackNetworks", allNetworks.size());
- List<NeutronNetwork> ans = new ArrayList<NeutronNetwork>();
- ans.addAll(allNetworks);
- return ans;
- }
-
- @Override
- public boolean addNetwork(NeutronNetwork input) {
- if (networkExists(input.getID())) {
- return false;
- }
- addMd(input);
- //TODO: add code to find INeutronNetworkAware services and call newtorkCreated on them
- return true;
- }
-
- @Override
- public boolean removeNetwork(String uuid) {
- if (!networkExists(uuid)) {
- return false;
- }
- removeMd(toMd(uuid));
- //TODO: add code to find INeutronNetworkAware services and call newtorkDeleted on them
- return true;
- }
-
- @Override
- public boolean updateNetwork(String uuid, NeutronNetwork delta) {
- if (!networkExists(uuid)) {
- return false;
- }
-/* note: because what we get is *not* a delta but (at this point) the updated
- * object, this is much simpler - just replace the value and update the mdsal
- * with it */
- updateMd(delta);
- return true;
- }
-
@Override
- public boolean networkInUse(String netUUID) {
- if (!networkExists(netUUID)) {
- return true;
- }
- return false;
+ protected List<Network> getDataObjectList(Networks networks) {
+ return networks.getNetwork();
}
protected NeutronNetwork fromMd(Network network) {
- NeutronNetwork result = new NeutronNetwork();
- result.setAdminStateUp(network.isAdminStateUp());
- result.setNetworkName(network.getName());
+ final NeutronNetwork result = new NeutronNetwork();
+ result.initDefaults();
+ fromMdAdminAttributes(network, result);
result.setShared(network.isShared());
- result.setStatus(network.getStatus());
- if (network.getSubnets() != null) {
- List<String> neutronSubnets = new ArrayList<String>();
- for( Uuid subnet : network.getSubnets()) {
- neutronSubnets.add(String.valueOf(subnet));
- }
- result.setSubnets(neutronSubnets);
- }
-// todo remove '-' chars as tenant id doesn't use them
- result.setTenantID(String.valueOf(network.getTenantId()));
- result.setID(String.valueOf(network.getUuid()));
- NetworkL3Extension l3Extension = network.getAugmentation(NetworkL3Extension.class);
+ final NetworkL3Extension l3Extension = network.getAugmentation(NetworkL3Extension.class);
result.setRouterExternal(l3Extension.isExternal());
- NetworkProviderExtension providerExtension = network.getAugmentation(NetworkProviderExtension.class);
+ final NetworkProviderExtension providerExtension = network.getAugmentation(NetworkProviderExtension.class);
result.setProviderPhysicalNetwork(providerExtension.getPhysicalNetwork());
result.setProviderSegmentationID(providerExtension.getSegmentationId());
result.setProviderNetworkType(NETWORK_MAP.get(providerExtension.getNetworkType()));
- List<NeutronNetwork_Segment> segments = new ArrayList<NeutronNetwork_Segment>();
+ final List<NeutronNetwork_Segment> segments = new ArrayList<NeutronNetwork_Segment>();
if (providerExtension.getSegments() != null) {
- for (Segments segment: providerExtension.getSegments()) {
- NeutronNetwork_Segment neutronSegment = new NeutronNetwork_Segment();
+ for (final Segments segment : providerExtension.getSegments()) {
+ final NeutronNetwork_Segment neutronSegment = new NeutronNetwork_Segment();
neutronSegment.setProviderPhysicalNetwork(segment.getPhysicalNetwork());
neutronSegment.setProviderSegmentationID(segment.getSegmentationId());
neutronSegment.setProviderNetworkType(NETWORK_MAP.get(segment.getNetworkType()));
segments.add(neutronSegment);
}
}
+ final QosNetworkExtension qos = network.getAugmentation(QosNetworkExtension.class);
+ if (qos != null && qos.getQosPolicyId() != null) {
+ result.setQosPolicyId(qos.getQosPolicyId().getValue());
+ }
result.setSegments(segments);
return result;
}
- protected Network toMd(NeutronNetwork network) {
-
- NetworkL3ExtensionBuilder l3ExtensionBuilder = new NetworkL3ExtensionBuilder();
+ private void fillExtensions(NetworkBuilder networkBuilder, NeutronNetwork network) {
+ final NetworkL3ExtensionBuilder l3ExtensionBuilder = new NetworkL3ExtensionBuilder();
if (network.getRouterExternal() != null) {
l3ExtensionBuilder.setExternal(network.getRouterExternal());
}
- NetworkProviderExtensionBuilder providerExtensionBuilder = new NetworkProviderExtensionBuilder();
+ final NetworkProviderExtensionBuilder providerExtensionBuilder = new NetworkProviderExtensionBuilder();
if (network.getProviderPhysicalNetwork() != null) {
providerExtensionBuilder.setPhysicalNetwork(network.getProviderPhysicalNetwork());
}
providerExtensionBuilder.setSegmentationId(network.getProviderSegmentationID());
}
if (network.getProviderNetworkType() != null) {
- ImmutableBiMap<String, Class<? extends NetworkTypeBase>> mapper =
- NETWORK_MAP.inverse();
- providerExtensionBuilder.setNetworkType((Class<? extends NetworkTypeBase>) mapper.get(network.getProviderNetworkType()));
+ final ImmutableBiMap<String, Class<? extends NetworkTypeBase>> mapper = NETWORK_MAP.inverse();
+ providerExtensionBuilder
+ .setNetworkType((Class<? extends NetworkTypeBase>) mapper.get(network.getProviderNetworkType()));
}
if (network.getSegments() != null) {
- List<Segments> segments = new ArrayList<Segments>();
+ final List<Segments> segments = new ArrayList<Segments>();
long count = 0;
- for( NeutronNetwork_Segment segment : network.getSegments()) {
+ for (final NeutronNetwork_Segment segment : network.getSegments()) {
count++;
- SegmentsBuilder segmentsBuilder = new SegmentsBuilder();
+ final SegmentsBuilder segmentsBuilder = new SegmentsBuilder();
if (segment.getProviderPhysicalNetwork() != null) {
segmentsBuilder.setPhysicalNetwork(segment.getProviderPhysicalNetwork());
}
segmentsBuilder.setSegmentationId(segment.getProviderSegmentationID());
}
if (segment.getProviderNetworkType() != null) {
- ImmutableBiMap<String, Class<? extends NetworkTypeBase>> mapper =
- NETWORK_MAP.inverse();
- segmentsBuilder.setNetworkType((Class<? extends NetworkTypeBase>) mapper.get(segment.getProviderNetworkType()));
+ final ImmutableBiMap<String, Class<? extends NetworkTypeBase>> mapper = NETWORK_MAP.inverse();
+ segmentsBuilder.setNetworkType(
+ (Class<? extends NetworkTypeBase>) mapper.get(segment.getProviderNetworkType()));
}
segmentsBuilder.setSegmentationIndex(Long.valueOf(count));
segments.add(segmentsBuilder.build());
if (network.getProviderSegmentationID() != null) {
providerExtensionBuilder.setSegmentationId(network.getProviderSegmentationID());
}
+ if (network.getQosPolicyId() != null) {
+ final QosNetworkExtensionBuilder qosExtensionBuilder = new QosNetworkExtensionBuilder();
+ qosExtensionBuilder.setQosPolicyId(toUuid(network.getQosPolicyId()));
+ networkBuilder.addAugmentation(QosNetworkExtension.class, qosExtensionBuilder.build());
+ }
+ networkBuilder.addAugmentation(NetworkL3Extension.class, l3ExtensionBuilder.build());
+ networkBuilder.addAugmentation(NetworkProviderExtension.class, providerExtensionBuilder.build());
+ }
- NetworkBuilder networkBuilder = new NetworkBuilder();
- networkBuilder.addAugmentation(NetworkL3Extension.class,
- l3ExtensionBuilder.build());
- networkBuilder.addAugmentation(NetworkProviderExtension.class,
- providerExtensionBuilder.build());
+ protected Network toMd(NeutronNetwork network) {
+ final NetworkBuilder networkBuilder = new NetworkBuilder();
+ toMdAdminAttributes(network, networkBuilder);
+ fillExtensions(networkBuilder, network);
- networkBuilder.setAdminStateUp(network.getAdminStateUp());
- if (network.getNetworkName() != null) {
- networkBuilder.setName(network.getNetworkName());
- }
if (network.getShared() != null) {
networkBuilder.setShared(network.getShared());
}
- if (network.getStatus() != null) {
- networkBuilder.setStatus(network.getStatus());
- }
- if (network.getSubnets() != null) {
- List<Uuid> subnets = new ArrayList<Uuid>();
- for( String subnet : network.getSubnets()) {
- subnets.add(toUuid(subnet));
- }
- networkBuilder.setSubnets(subnets);
- }
- if (network.getTenantID() != null) {
- networkBuilder.setTenantId(toUuid(network.getTenantID()));
- }
- if (network.getNetworkUUID() != null) {
- networkBuilder.setUuid(toUuid(network.getNetworkUUID()));
- } else {
- LOGGER.warn("Attempting to write neutron network without UUID");
- }
- return networkBuilder.build();
- }
-
- protected Network toMd(String uuid) {
- NetworkBuilder networkBuilder = new NetworkBuilder();
- networkBuilder.setUuid(toUuid(uuid));
return networkBuilder.build();
}
@Override
protected InstanceIdentifier<Network> createInstanceIdentifier(Network network) {
- return InstanceIdentifier.create(Neutron.class)
- .child(Networks.class)
- .child(Network.class,network.getKey());
- }
-
-//TODO: mark override
- protected InstanceIdentifier<Networks> createInstanceIdentifier() {
- return InstanceIdentifier.create(Neutron.class)
- .child(Networks.class);
- }
-
- public static void registerNewInterface(BundleContext context,
- ProviderContext providerContext,
- List<ServiceRegistration<?>> registrations) {
- NeutronNetworkInterface neutronNetworkInterface = new NeutronNetworkInterface(providerContext);
- ServiceRegistration<INeutronNetworkCRUD> neutronNetworkInterfaceRegistration = context.registerService(INeutronNetworkCRUD.class, neutronNetworkInterface, null);
- if(neutronNetworkInterfaceRegistration != null) {
- registrations.add(neutronNetworkInterfaceRegistration);
- }
+ return InstanceIdentifier.create(Neutron.class).child(Networks.class).child(Network.class, network.getKey());
}
}