package org.opendaylight.ovsdb.openstack.netvirt.impl;
import com.google.common.collect.Sets;
-import java.net.InetAddress;
-import java.util.List;
+
import java.util.Set;
-import org.apache.felix.dm.Component;
+
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
-import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryService;
import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryListener;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronFloatingIPChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronNetworkChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronPortChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronRouterChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronSubnetChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronLoadBalancerPoolChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronLoadBalancerPoolMemberChangeListener;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
/**
- * MdsalConsumerImpl is the implementation for {@link OvsdbInventoryService}
+ * OvsdbInventoryServiceImpl is the implementation for {@link OvsdbInventoryService}
*
* @author Sam Hague (shague@redhat.com)
*/
-public class OvsdbInventoryServiceImpl implements BindingAwareConsumer, OvsdbInventoryService {
+public class OvsdbInventoryServiceImpl implements ConfigInterface, OvsdbInventoryService {
private static final Logger LOG = LoggerFactory.getLogger(OvsdbInventoryServiceImpl.class);
private static DataBroker dataBroker = null;
-
- private static Set<OvsdbInventoryListener> mdsalConsumerListeners = Sets.newCopyOnWriteArraySet();
+ private static Set<OvsdbInventoryListener> ovsdbInventoryListeners = Sets.newCopyOnWriteArraySet();
private OvsdbDataChangeListener ovsdbDataChangeListener = null;
private static MdsalUtils mdsalUtils = null;
- private volatile BindingAwareBroker broker; // dependency injection
- private ConsumerContext consumerContext = null;
-
- void init(Component c) {
- LOG.info(">>>>> init OvsdbInventoryServiceImpl");
- LOG.info(">>>>> Netvirt Provider Registered with MD-SAL");
- broker.registerConsumer(this, c.getDependencyManager().getBundleContext());
- }
- void start() {
- LOG.info(">>>>> start OvsdbInventoryServiceImpl");
- }
-
- void destroy() {
- // Now lets close MDSAL session
- if (this.consumerContext != null) {
- //this.consumerContext.close();
- this.dataBroker = null;
- this.consumerContext = null;
- }
- }
- @Override
- public void onSessionInitialized (ConsumerContext consumerContext) {
- this.consumerContext = consumerContext;
- dataBroker = consumerContext.getSALService(DataBroker.class);
- LOG.info("netvirt MdsalConsumer initialized");
+ public OvsdbInventoryServiceImpl(ProviderContext providerContext) {
+ dataBroker = providerContext.getSALService(DataBroker.class);
+ LOG.info("OvsdbInventoryServiceImpl initialized");
ovsdbDataChangeListener = new OvsdbDataChangeListener(dataBroker);
mdsalUtils = new MdsalUtils(dataBroker);
}
- //@Override
- public static DataBroker getDataBroker () {
- return dataBroker;
- }
-
- private void listenerAdded(OvsdbInventoryListener listener) {
- mdsalConsumerListeners.add(listener);
+ @Override
+ public void listenerAdded(OvsdbInventoryListener listener) {
+ ovsdbInventoryListeners.add(listener);
LOG.info("listenerAdded: {}", listener);
}
- private void listenerRemoved(OvsdbInventoryListener listener) {
- mdsalConsumerListeners.remove(listener);
+ @Override
+ public void listenerRemoved(OvsdbInventoryListener listener) {
+ ovsdbInventoryListeners.remove(listener);
LOG.info("listenerRemoved: {}", listener);
}
- public InetAddress getTunnelEndPoint(Node node) {
- return null;
+ @Override
+ public void providersReady() {
+ ovsdbDataChangeListener.start();
+ initializeNeutronModelsDataChangeListeners(dataBroker);
+ initializeNetvirtTopology();
}
- public String getNodeUUID(Node node) {
- return null;
+ public static Set<OvsdbInventoryListener> getOvsdbInventoryListeners() {
+ return ovsdbInventoryListeners;
}
@Override
- public String getBridgeUUID(String bridgeName) {
- return null;
+ public void setDependencies(ServiceReference serviceReference) {}
+
+ @Override
+ public void setDependencies(Object impl) {}
+
+ private void initializeNetvirtTopology() {
+ final TopologyId topologyId = new TopologyId(new Uri(Constants.NETVIRT_TOPOLOGY_ID));
+ InstanceIdentifier<Topology> path =
+ InstanceIdentifier.create(NetworkTopology.class).child(Topology.class, new TopologyKey(topologyId));
+ TopologyBuilder tpb = new TopologyBuilder();
+ tpb.setTopologyId(topologyId);
+ if (! mdsalUtils.put(LogicalDatastoreType.OPERATIONAL, path, tpb.build())) {
+ LOG.error("Error initializing netvirt topology");
+ }
}
- public static Set<OvsdbInventoryListener> getMdsalConsumerListeners () {
- return mdsalConsumerListeners;
+ private void initializeNeutronModelsDataChangeListeners(
+ DataBroker db) {
+ new NeutronNetworkChangeListener(db);
+ new NeutronSubnetChangeListener(db);
+ new NeutronPortChangeListener(db);
+ new NeutronRouterChangeListener(db);
+ new NeutronFloatingIPChangeListener(db);
+ new NeutronLoadBalancerPoolChangeListener(db);
+ new NeutronLoadBalancerPoolMemberChangeListener(db);
}
+
}