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.common.api.clustering.EntityOwnershipState;
13 import org.opendaylight.netvirt.openstack.netvirt.api.Constants;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
16 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
17 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
18 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
19 import org.osgi.framework.BundleContext;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
24 * @author Sam Hague (shague@redhat.com)
26 public class NetvirtProvider implements BindingAwareProvider, AutoCloseable {
27 private static final Logger LOG = LoggerFactory.getLogger(NetvirtProvider.class);
28 private BundleContext bundleContext = null;
29 private static DataBroker dataBroker = null;
30 private ConfigActivator activator;
31 private static EntityOwnershipService entityOwnershipService;
32 private static final Entity ownerInstanceEntity = new Entity(
33 Constants.NETVIRT_OWNER_ENTITY_TYPE, Constants.NETVIRT_OWNER_ENTITY_TYPE);
34 private boolean conntrackEnabled = false;
35 private boolean intBridgeGenMac;
37 public NetvirtProvider(BundleContext bundleContext, EntityOwnershipService eos) {
38 LOG.info("NetvirtProvider: bundleContext: {}", bundleContext);
39 this.bundleContext = bundleContext;
40 entityOwnershipService = eos;
43 public static boolean isMasterProviderInstance() {
44 if (entityOwnershipService != null) {
45 Optional<EntityOwnershipState> state = entityOwnershipService.getOwnershipState(ownerInstanceEntity);
46 return state.isPresent() && state.get().isOwner();
51 public static boolean isMasterElected(){
52 if (entityOwnershipService != null) {
53 Optional<EntityOwnershipState> state = entityOwnershipService.getOwnershipState(ownerInstanceEntity);
54 return state.isPresent() && state.get().hasOwner();
60 public void close() throws Exception {
61 LOG.info("NetvirtProvider closed");
62 activator.stop(bundleContext);
66 public void onSessionInitiated(ProviderContext providerContext) {
67 dataBroker = providerContext.getSALService(DataBroker.class);
68 LOG.info("NetvirtProvider: onSessionInitiated dataBroker: {}", dataBroker);
69 LOG.info("NetvirtProvider: onSessionInitiated isConntrackEnabled: {}", this.conntrackEnabled);
70 this.activator = new ConfigActivator(providerContext);
71 activator.setConntrackEnabled(this.conntrackEnabled);
72 activator.setIntBridgeGenMac(this.intBridgeGenMac);
74 activator.start(bundleContext);
75 } catch (Exception e) {
76 LOG.warn("Failed to start Netvirt: ", e);
80 public boolean isConntrackEnabled() {
81 return conntrackEnabled;
84 public void setConntrackEnabled(boolean conntackEnabled) {
85 this.conntrackEnabled = conntackEnabled;
88 public boolean getIntBridgeGenMac() {
89 return intBridgeGenMac;
92 public void setIntBridgeGenMac(boolean intBridgeGenMac) {
93 this.intBridgeGenMac = intBridgeGenMac;