*/
package org.opendaylight.ovsdb.openstack.netvirt;
-import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
-import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
-import org.opendaylight.controller.networkconfig.neutron.NeutronNetwork;
+import org.opendaylight.neutron.spi.INeutronNetworkAware;
+import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
+import org.opendaylight.neutron.spi.NeutronNetwork;
import org.opendaylight.controller.sal.core.Node;
import org.opendaylight.ovsdb.lib.notation.Row;
import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
-import org.opendaylight.ovsdb.plugin.IConnectionServiceInternal;
-import org.opendaylight.ovsdb.plugin.OvsdbConfigService;
-import org.opendaylight.ovsdb.plugin.OvsdbInventoryListener;
+import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
+import org.opendaylight.ovsdb.compatibility.plugin.api.OvsdbConfigurationService;
+import org.opendaylight.ovsdb.compatibility.plugin.api.OvsdbConnectionService;
+import org.opendaylight.ovsdb.compatibility.plugin.api.OvsdbInventoryListener;
import org.opendaylight.ovsdb.schema.openvswitch.Interface;
import org.opendaylight.ovsdb.schema.openvswitch.Port;
private volatile TenantNetworkManager tenantNetworkManager;
private volatile BridgeConfigurationManager bridgeConfigurationManager;
private volatile ConfigurationService configurationService;
- private volatile OvsdbConfigService ovsdbConfigService;
- private volatile IConnectionServiceInternal connectionService;
+ private volatile OvsdbConfigurationService ovsdbConfigurationService;
+ private volatile OvsdbConnectionService connectionService;
private volatile INeutronNetworkCRUD neutronNetworkCache;
- private volatile OvsdbInventoryListener inventoryListener;
+ private volatile OvsdbInventoryListener ovsdbInventoryListener;
+ private volatile NeutronL3Adapter neutronL3Adapter;
/**
* Invoked when a network creation is requested
return;
}
+ enqueueEvent(new NorthboundEvent(network, Action.ADD));
+ }
+ private void doNeutronNetworkCreated(NeutronNetwork network) {
+ neutronL3Adapter.handleNeutronNetworkEvent(network, Action.ADD);
}
/**
*/
@Override
public void neutronNetworkUpdated(NeutronNetwork network) {
- logger.trace("neutronNetworkUpdated: network: {}", network);
- return;
+ enqueueEvent(new NorthboundEvent(network, Action.UPDATE));
+ }
+ private void doNeutronNetworkUpdated(NeutronNetwork network) {
+ neutronL3Adapter.handleNeutronNetworkEvent(network, Action.UPDATE);
}
/**
*/
@Override
public void neutronNetworkDeleted(NeutronNetwork network) {
+ enqueueEvent(new NorthboundEvent(network, Action.DELETE));
+ }
+ private void doNeutronNetworkDeleted(NeutronNetwork network) {
+ neutronL3Adapter.handleNeutronNetworkEvent(network, Action.DELETE);
int result = canDeleteNetwork(network);
logger.trace("canDeleteNetwork: network: {}", network);
List<String> phyIfName = bridgeConfigurationManager.getAllPhysicalInterfaceNames(node);
try {
ConcurrentMap<String, Row> ports =
- this.ovsdbConfigService.getRows(node,
- ovsdbConfigService.getTableName(node, Port.class));
+ this.ovsdbConfigurationService.getRows(node,
+ ovsdbConfigurationService.getTableName(node, Port.class));
if (ports != null) {
for (Row portRow : ports.values()) {
- Port port = ovsdbConfigService.getTypedRow(node, Port.class, portRow);
+ Port port = ovsdbConfigurationService.getTypedRow(node, Port.class, portRow);
for (UUID interfaceUuid : port.getInterfacesColumn().getData()) {
- Interface interfaceRow = (Interface) ovsdbConfigService
+ Row ifaceRow = ovsdbConfigurationService
.getRow(node,
- ovsdbConfigService.getTableName(node, Interface.class),
+ ovsdbConfigurationService.getTableName(node, Interface.class),
interfaceUuid.toString());
-
- String interfaceType = interfaceRow.getTypeColumn().getData();
+ Interface iface = ovsdbConfigurationService.getTypedRow(node, Interface.class, ifaceRow);
+ String interfaceType = iface.getTypeColumn().getData();
if (interfaceType.equalsIgnoreCase(NetworkHandler.NETWORK_TYPE_VXLAN)
|| interfaceType.equalsIgnoreCase(
NetworkHandler.NETWORK_TYPE_GRE)) {
/* delete tunnel ports on this node */
- logger.trace("Delete tunnel interface {}", interfaceRow);
- ovsdbConfigService.deleteRow(node,
- ovsdbConfigService.getTableName(node, Port.class),
+ logger.trace("Delete tunnel interface {}", iface.getName());
+ ovsdbConfigurationService.deleteRow(node,
+ ovsdbConfigurationService.getTableName(node, Port.class),
port.getUuid().toString());
break;
- } else if (!phyIfName.isEmpty() && phyIfName.contains(interfaceRow.getName())) {
- logger.trace("Delete physical interface {}", interfaceRow);
- ovsdbConfigService.deleteRow(node,
- ovsdbConfigService.getTableName(node, Port.class),
+ } else if (!phyIfName.isEmpty() && phyIfName.contains(iface.getName())) {
+ logger.trace("Delete physical interface {}", iface.getName());
+ ovsdbConfigurationService.deleteRow(node,
+ ovsdbConfigurationService.getTableName(node, Port.class),
port.getUuid().toString());
break;
}
}
}
} catch (Exception e) {
- logger.error("Exception during handlingNeutron network delete");
+ logger.error("Exception during handlingNeutron network delete", e);
}
}
}
}
tenantNetworkManager.networkDeleted(network.getID());
}
+
+ /**
+ * Process the event.
+ *
+ * @param abstractEvent the {@link org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent} event to be handled.
+ * @see org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher
+ */
+ @Override
+ public void processEvent(AbstractEvent abstractEvent) {
+ if (!(abstractEvent instanceof NorthboundEvent)) {
+ logger.error("Unable to process abstract event " + abstractEvent);
+ return;
+ }
+ NorthboundEvent ev = (NorthboundEvent) abstractEvent;
+ switch (ev.getAction()) {
+ case ADD:
+ doNeutronNetworkCreated(ev.getNeutronNetwork());
+ break;
+ case UPDATE:
+ doNeutronNetworkUpdated(ev.getNeutronNetwork());
+ break;
+ case DELETE:
+ doNeutronNetworkDeleted(ev.getNeutronNetwork());
+ break;
+ default:
+ logger.warn("Unable to process event action " + ev.getAction());
+ break;
+ }
+ }
+
}