Add blueprint wiring for openstack/net-virt
[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.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;
21
22 /**
23  * @author Sam Hague (shague@redhat.com)
24  */
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;
35
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();
46     }
47
48     public static boolean isMasterProviderInstance() {
49         if (entityOwnershipService != null) {
50             Optional<EntityOwnershipState> state = entityOwnershipService.getOwnershipState(ownerInstanceEntity);
51             return state.isPresent() && state.get().isOwner();
52         }
53         return false;
54     }
55
56     public static boolean isMasterElected(){
57         if (entityOwnershipService != null) {
58             Optional<EntityOwnershipState> state = entityOwnershipService.getOwnershipState(ownerInstanceEntity);
59             return state.isPresent() && state.get().hasOwner();
60         }
61         return false;
62     }
63
64     @Override
65     public void close() throws Exception {
66         LOG.info("NetvirtProvider closed");
67         if (activator != null) {
68             activator.stop(bundleContext);
69         }
70     }
71
72     public void start() {
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);
78         try {
79             activator.start(bundleContext);
80         } catch (Exception e) {
81             LOG.warn("Failed to start Netvirt: ", e);
82         }
83     }
84
85     public boolean isConntrackEnabled() {
86         return conntrackEnabled;
87     }
88
89     public void setConntrackEnabled(boolean conntackEnabled) {
90         this.conntrackEnabled = conntackEnabled;
91     }
92
93     public boolean getIntBridgeGenMac() {
94         return intBridgeGenMac;
95     }
96
97     public void setIntBridgeGenMac(boolean intBridgeGenMac) {
98         this.intBridgeGenMac = intBridgeGenMac;
99     }
100 }