Add support for openflow node callbacks
[ovsdb.git] / openstack / net-virt-providers / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / providers / openflow13 / MdsalConsumerImpl.java
1 /*
2  * Copyright (C) 2013 Red Hat, Inc.
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  * Authors : Madhu Venugopal
9  */
10
11 package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13;
12
13 import org.apache.felix.dm.Component;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
16 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
17 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
18 import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer;
19 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
20 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
21 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
22 import org.osgi.framework.BundleContext;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25 public class MdsalConsumerImpl implements BindingAwareConsumer, MdsalConsumer, BindingAwareProvider {
26
27     private BundleContext ctx = null;
28     private volatile BindingAwareBroker broker;
29     private ConsumerContext consumerContext = null;
30     private DataBroker dataBroker;
31     private NotificationProviderService notificationService;
32     private FlowCapableNodeDataChangeListener flowCapableNodeChangeListener;
33
34     static final Logger logger = LoggerFactory.getLogger(MdsalConsumerImpl.class);
35
36     void init(Component c) {
37         this.ctx = c.getDependencyManager().getBundleContext();
38         logger.info("Open vSwitch OpenFlow 1.3 Neutron Networking Provider Registered with MD-SAL");
39         broker.registerConsumer(this, this.ctx);
40         broker.registerProvider(this, this.ctx);
41     }
42
43     void destroy() {
44         // Now lets close MDSAL session
45         if (this.consumerContext != null) {
46             //this.consumerContext.close();
47             this.dataBroker = null;
48             this.consumerContext = null;
49         }
50     }
51
52     void start() {
53     }
54
55     void stop() {
56     }
57
58     @Override
59     public void onSessionInitialized(ConsumerContext session) {
60         this.consumerContext = session;
61         dataBroker = session.getSALService(DataBroker.class);
62         logger.info("OVSDB Neutron Session Initialized with CONSUMER CONTEXT {}", session.toString());
63         //flowCapableNodeChangeListener = new FlowCapableNodeDataChangeListener(dataBroker);
64     }
65
66     @Override
67     public ConsumerContext getConsumerContext() {
68         return consumerContext;
69     }
70     @Override
71     public DataBroker getDataBroker() {
72         return dataBroker;
73     }
74     @Override
75     public NotificationProviderService getNotificationService() {
76         return notificationService;
77     }
78
79     @Override
80     public void onSessionInitiated(ProviderContext session) {
81         notificationService = session.getSALService(NotificationProviderService.class);
82     }
83
84     @Override
85     public void notifyFlowCapableNodeCreateEvent(String openFlowId, Action action) {
86         if (flowCapableNodeChangeListener != null) {
87             flowCapableNodeChangeListener.notifyFlowCapableNodeEvent(openFlowId, action);
88         }
89     }
90 }