2 * Copyright (C) 2013 Red Hat, Inc.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 * Authors : Madhu Venugopal, Brent Salisbury
10 package org.opendaylight.ovsdb.neutron.provider;
14 import org.opendaylight.controller.networkconfig.neutron.NeutronNetwork;
15 import org.opendaylight.controller.sal.core.Node;
16 import org.opendaylight.controller.sal.utils.ServiceHelper;
17 import org.opendaylight.controller.sal.utils.Status;
18 import org.opendaylight.ovsdb.lib.table.Bridge;
19 import org.opendaylight.ovsdb.lib.table.Interface;
20 import org.opendaylight.ovsdb.lib.table.internal.Table;
21 import org.opendaylight.ovsdb.plugin.OVSDBConfigService;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
25 public abstract class ProviderNetworkManager {
26 static final Logger logger = LoggerFactory.getLogger(ProviderNetworkManager.class);
27 private static ProviderNetworkManager provider;
28 protected static final int LLDP_PRIORITY = 1000;
29 protected static final int NORMAL_PRIORITY = 0;
30 protected static final String OPENFLOW_10 = "1.0";
31 protected static final String OPENFLOW_13 = "1.3";
33 public static ProviderNetworkManager getManager() {
34 if (provider != null) return provider;
35 String ofVersion = System.getProperty("ovsdb.of.version", OPENFLOW_10);
38 provider = new OF13ProviderManager();
42 provider = new OF10ProviderManager();
48 protected String getInternalBridgeUUID (Node node, String bridgeName) {
50 OVSDBConfigService ovsdbTable = (OVSDBConfigService)ServiceHelper.getGlobalInstance(OVSDBConfigService.class, this);
51 Map<String, Table<?>> bridgeTable = ovsdbTable.getRows(node, Bridge.NAME.getName());
52 if (bridgeTable == null) return null;
53 for (String key : bridgeTable.keySet()) {
54 Bridge bridge = (Bridge)bridgeTable.get(key);
55 if (bridge.getName().equals(bridgeName)) return key;
57 } catch (Exception e) {
58 logger.error("Error getting Bridge Identifier for {} / {}", node, bridgeName, e);
63 public abstract boolean hasPerTenantTunneling();
64 public abstract Status handleInterfaceUpdate(String tunnelType, String tunnelKey);
65 public abstract Status handleInterfaceUpdate(NeutronNetwork network, Node source, Interface intf);
66 public abstract Status handleInterfaceDelete(String tunnelType, NeutronNetwork network, Node source, Interface intf, boolean isLastInstanceOnNode);
68 * Initialize the Flow rules given the OVSDB node.
69 * This method provides a set of common functionalities to initialize the Flow rules of an OVSDB node
70 * that are Openflow Version specific. Hence we have this method in addition to the following
71 * Openflow Node specific initialization method.
73 public abstract void initializeFlowRules(Node node);
76 * Initialize the Flow rules given the Openflow node
78 public abstract void initializeOFFlowRules(Node openflowNode);