2 * Copyright (c) 2015 Red Hat, Inc. and others. All rights reserved.
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
9 package org.opendaylight.netvirt.openstack.netvirt;
11 import com.google.common.base.Optional;
12 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
13 import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
14 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
15 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipState;
16 import org.opendaylight.netvirt.openstack.netvirt.api.Constants;
17 import org.osgi.framework.BundleContext;
18 import org.osgi.framework.FrameworkUtil;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
23 * @author Sam Hague (shague@redhat.com)
25 public class NetvirtProvider implements AutoCloseable {
26 private static final Logger LOG = LoggerFactory.getLogger(NetvirtProvider.class);
27 private final BundleContext bundleContext;
28 private final DataBroker dataBroker;
29 private ConfigActivator activator;
30 private static EntityOwnershipService entityOwnershipService;
31 private static final Entity ownerInstanceEntity = new Entity(
32 Constants.NETVIRT_OWNER_ENTITY_TYPE, Constants.NETVIRT_OWNER_ENTITY_TYPE);
33 private boolean conntrackEnabled;
34 private boolean intBridgeGenMac;
36 public NetvirtProvider(final DataBroker dataBroker,
37 final EntityOwnershipService eos,
38 final boolean conntrackEnabled,
39 final boolean intBridgeGenMac) {
40 LOG.info("NetvirtProvider started");
41 this.dataBroker = dataBroker;
42 NetvirtProvider.entityOwnershipService = eos;
43 this.conntrackEnabled = conntrackEnabled;
44 this.intBridgeGenMac = intBridgeGenMac;
45 this.bundleContext = FrameworkUtil.getBundle(NetvirtProvider.class).getBundleContext();
48 public static boolean isMasterProviderInstance() {
49 if (entityOwnershipService != null) {
50 Optional<EntityOwnershipState> state = entityOwnershipService.getOwnershipState(ownerInstanceEntity);
51 return state.isPresent() && state.get().isOwner();
56 public static boolean isMasterElected(){
57 if (entityOwnershipService != null) {
58 Optional<EntityOwnershipState> state = entityOwnershipService.getOwnershipState(ownerInstanceEntity);
59 return state.isPresent() && state.get().hasOwner();
65 public void close() throws Exception {
66 LOG.info("NetvirtProvider closed");
67 if (activator != null) {
68 activator.stop(bundleContext);
73 LOG.info("NetvirtProvider: onSessionInitiated dataBroker: {}", dataBroker);
74 LOG.info("NetvirtProvider: onSessionInitiated isConntrackEnabled: {}", this.conntrackEnabled);
75 this.activator = new ConfigActivator(dataBroker);
76 activator.setConntrackEnabled(this.conntrackEnabled);
77 activator.setIntBridgeGenMac(this.intBridgeGenMac);
79 activator.start(bundleContext);
80 } catch (Exception e) {
81 LOG.warn("Failed to start Netvirt: ", e);
85 public boolean isConntrackEnabled() {
86 return conntrackEnabled;
89 public void setConntrackEnabled(boolean conntackEnabled) {
90 this.conntrackEnabled = conntackEnabled;
93 public boolean getIntBridgeGenMac() {
94 return intBridgeGenMac;
97 public void setIntBridgeGenMac(boolean intBridgeGenMac) {
98 this.intBridgeGenMac = intBridgeGenMac;