da02d2be8b9bce8a6f490963d5992f4e266f65ca
[netvirt.git] / openstack / net-virt / src / main / java / org / opendaylight / netvirt / openstack / netvirt / NetvirtProvider.java
1 /*
2  * Copyright (c) 2015 Red Hat, Inc. and others. All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.netvirt.openstack.netvirt;
10
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;
22
23 /**
24  * @author Sam Hague (shague@redhat.com)
25  */
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;
36
37     public NetvirtProvider(BundleContext bundleContext, EntityOwnershipService eos) {
38         LOG.info("NetvirtProvider: bundleContext: {}", bundleContext);
39         this.bundleContext = bundleContext;
40         entityOwnershipService = eos;
41     }
42
43     public static boolean isMasterProviderInstance() {
44         if (entityOwnershipService != null) {
45             Optional<EntityOwnershipState> state = entityOwnershipService.getOwnershipState(ownerInstanceEntity);
46             return state.isPresent() && state.get().isOwner();
47         }
48         return false;
49     }
50
51     public static boolean isMasterElected(){
52         if (entityOwnershipService != null) {
53             Optional<EntityOwnershipState> state = entityOwnershipService.getOwnershipState(ownerInstanceEntity);
54             return state.isPresent() && state.get().hasOwner();
55         }
56         return false;
57     }
58
59     @Override
60     public void close() throws Exception {
61         LOG.info("NetvirtProvider closed");
62         activator.stop(bundleContext);
63     }
64
65     @Override
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);
73         try {
74             activator.start(bundleContext);
75         } catch (Exception e) {
76             LOG.warn("Failed to start Netvirt: ", e);
77         }
78     }
79
80     public boolean isConntrackEnabled() {
81         return conntrackEnabled;
82     }
83
84     public void setConntrackEnabled(boolean conntackEnabled) {
85         this.conntrackEnabled = conntackEnabled;
86     }
87
88     public boolean getIntBridgeGenMac() {
89         return intBridgeGenMac;
90     }
91
92     public void setIntBridgeGenMac(boolean intBridgeGenMac) {
93         this.intBridgeGenMac = intBridgeGenMac;
94     }
95 }