X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openstack%2Fnet-virt%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fovsdb%2Fopenstack%2Fnetvirt%2FNetworkHandler.java;h=cbd4d80162cebf28503ebbb81710494aa603baf2;hb=0ac404938f61fa11746e322a7e1c06a948db42c6;hp=02913f0ffefd66f1a7a49b3ae233839e57215f27;hpb=083d8f21bd51f2ccf4b2731a0206a757b5dc8a12;p=ovsdb.git diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/NetworkHandler.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/NetworkHandler.java index 02913f0ff..cbd4d8016 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/NetworkHandler.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/NetworkHandler.java @@ -1,62 +1,50 @@ /* - * Copyright (C) 2013 Red Hat, Inc. + * Copyright (c) 2013, 2015 Red Hat, Inc. 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, * and is available at http://www.eclipse.org/legal/epl-v10.html - * - * Authors : Madhu Venugopal, Brent Salisbury, Hsin-Yi Shen */ + package org.opendaylight.ovsdb.openstack.netvirt; -import org.opendaylight.neutron.spi.INeutronNetworkAware; -import org.opendaylight.neutron.spi.INeutronNetworkCRUD; -import org.opendaylight.neutron.spi.NeutronNetwork; -import org.opendaylight.ovsdb.lib.notation.Row; -import org.opendaylight.ovsdb.lib.notation.UUID; +import java.net.HttpURLConnection; +import java.util.List; + +import org.opendaylight.ovsdb.openstack.netvirt.translator.NeutronNetwork; +import org.opendaylight.ovsdb.openstack.netvirt.translator.crud.INeutronNetworkCRUD; +import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.INeutronNetworkAware; 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.EventDispatcher; +import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager; +import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound; import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager; import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter; -import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService; -import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService; -//import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener; -import org.opendaylight.ovsdb.schema.openvswitch.Interface; -import org.opendaylight.ovsdb.schema.openvswitch.Port; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; +import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.osgi.framework.ServiceReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.net.HttpURLConnection; -import java.util.List; -import java.util.concurrent.ConcurrentMap; - /** * Handle requests for Neutron Network. */ -public class NetworkHandler extends AbstractHandler - implements INeutronNetworkAware { - +public class NetworkHandler extends AbstractHandler implements INeutronNetworkAware, ConfigInterface { + private static final Logger LOG = LoggerFactory.getLogger(NetworkHandler.class); public static final String NETWORK_TYPE_VXLAN = "vxlan"; public static final String NETWORK_TYPE_GRE = "gre"; public static final String NETWORK_TYPE_VLAN = "vlan"; - /** - * Logger instance. - */ - static final Logger logger = LoggerFactory.getLogger(NetworkHandler.class); - // The implementation for each of these services is resolved by the OSGi Service Manager private volatile TenantNetworkManager tenantNetworkManager; private volatile BridgeConfigurationManager bridgeConfigurationManager; - //private volatile ConfigurationService configurationService; - private volatile OvsdbConfigurationService ovsdbConfigurationService; - private volatile OvsdbConnectionService connectionService; + private volatile NodeCacheManager nodeCacheManager; private volatile INeutronNetworkCRUD neutronNetworkCache; - //private volatile OvsdbInventoryListener ovsdbInventoryListener; private volatile NeutronL3Adapter neutronL3Adapter; + private volatile Southbound southbound; /** * Invoked when a network creation is requested @@ -67,8 +55,8 @@ public class NetworkHandler extends AbstractHandler */ @Override public int canCreateNetwork(NeutronNetwork network) { - if (network.isShared()) { - logger.error(" Network shared attribute not supported "); + if (network.isShared() && !network.getRouterExternal()) { + LOG.error("Shared attribute is only supported on external networks"); return HttpURLConnection.HTTP_NOT_ACCEPTABLE; } @@ -101,8 +89,8 @@ public class NetworkHandler extends AbstractHandler @Override public int canUpdateNetwork(NeutronNetwork delta, NeutronNetwork original) { - if (delta.isShared()) { - logger.error(" Network shared attribute not supported "); + if (delta.isShared() && !delta.getRouterExternal()) { + LOG.error("Shared attribute is only supported on external networks"); return HttpURLConnection.HTTP_NOT_ACCEPTABLE; } @@ -151,46 +139,24 @@ public class NetworkHandler extends AbstractHandler if (neutronNetworkCache != null) { networks = neutronNetworkCache.getAllNetworks(); if (networks.isEmpty()) { - logger.trace("neutronNetworkDeleted: last tenant network, delete tunnel ports..."); - List nodes = connectionService.getNodes(); + LOG.trace("neutronNetworkDeleted: last tenant network, delete tunnel ports..."); + List nodes = nodeCacheManager.getNodes(); for (Node node : nodes) { List phyIfName = bridgeConfigurationManager.getAllPhysicalInterfaceNames(node); try { - ConcurrentMap ports = - this.ovsdbConfigurationService.getRows(node, - ovsdbConfigurationService.getTableName(node, Port.class)); - if (ports != null) { - for (Row portRow : ports.values()) { - Port port = ovsdbConfigurationService.getTypedRow(node, Port.class, portRow); - for (UUID interfaceUuid : port.getInterfacesColumn().getData()) { - Row ifaceRow = ovsdbConfigurationService - .getRow(node, - ovsdbConfigurationService.getTableName(node, Interface.class), - interfaceUuid.toString()); - 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 {}", iface.getName()); - ovsdbConfigurationService.deleteRow(node, - ovsdbConfigurationService.getTableName(node, Port.class), - port.getUuid().toString()); - break; - } 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; - } - } + List ports = southbound.getTerminationPointsOfBridge(node); + for (OvsdbTerminationPointAugmentation port : ports) { + if (southbound.isTunnel(port)) { + LOG.trace("Delete tunnel interface {}", port.getName()); + southbound.deleteTerminationPoint(node, port.getName()); + } else if (!phyIfName.isEmpty() && phyIfName.contains(port.getName())) { + LOG.trace("Delete physical interface {}", port.getName()); + southbound.deleteTerminationPoint(node, port.getName()); } } } catch (Exception e) { - logger.error("Exception during handlingNeutron network delete", e); + LOG.error("Exception during handlingNeutron network delete", e); } } } @@ -207,7 +173,7 @@ public class NetworkHandler extends AbstractHandler @Override public void processEvent(AbstractEvent abstractEvent) { if (!(abstractEvent instanceof NorthboundEvent)) { - logger.error("Unable to process abstract event " + abstractEvent); + LOG.error("Unable to process abstract event {}", abstractEvent); return; } NorthboundEvent ev = (NorthboundEvent) abstractEvent; @@ -222,9 +188,32 @@ public class NetworkHandler extends AbstractHandler doNeutronNetworkDeleted(ev.getNeutronNetwork()); break; default: - logger.warn("Unable to process event action " + ev.getAction()); + LOG.warn("Unable to process event action {}", ev.getAction()); break; } } + @Override + public void setDependencies(ServiceReference serviceReference) { + tenantNetworkManager = + (TenantNetworkManager) ServiceHelper.getGlobalInstance(TenantNetworkManager.class, this); + bridgeConfigurationManager = + (BridgeConfigurationManager) ServiceHelper.getGlobalInstance(BridgeConfigurationManager.class, this); + nodeCacheManager = + (NodeCacheManager) ServiceHelper.getGlobalInstance(NodeCacheManager.class, this); + neutronL3Adapter = + (NeutronL3Adapter) ServiceHelper.getGlobalInstance(NeutronL3Adapter.class, this); + southbound = + (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this); + eventDispatcher = + (EventDispatcher) ServiceHelper.getGlobalInstance(EventDispatcher.class, this); + eventDispatcher.eventHandlerAdded(serviceReference, this); + } + + @Override + public void setDependencies(Object impl) { + if (impl instanceof INeutronNetworkCRUD) { + neutronNetworkCache = (INeutronNetworkCRUD)impl; + } + } }