blob: 597784887ad7f26727bb9359356c7472260682b1 [file] [log] [blame]
tomb5a46e62014-08-26 14:20:00 -07001package org.onlab.onos.provider.of.device.impl;
2
3import org.apache.felix.scr.annotations.Activate;
4import org.apache.felix.scr.annotations.Component;
5import org.apache.felix.scr.annotations.Deactivate;
6import org.apache.felix.scr.annotations.Reference;
7import org.apache.felix.scr.annotations.ReferenceCardinality;
tomab21e7c2014-08-26 15:23:08 -07008import org.onlab.onos.net.Device;
9import org.onlab.onos.net.MastershipRole;
10import org.onlab.onos.net.device.DeviceProvider;
tomb5a46e62014-08-26 14:20:00 -070011import org.onlab.onos.net.device.DeviceProviderBroker;
tomab21e7c2014-08-26 15:23:08 -070012import org.onlab.onos.net.device.DeviceProviderService;
13import org.onlab.onos.net.provider.AbstractProvider;
14import org.onlab.onos.net.provider.ProviderId;
tom5f38b3a2014-08-27 23:50:54 -070015import org.onlab.onos.of.controller.OpenFlowController;
tomb5a46e62014-08-26 14:20:00 -070016import org.slf4j.Logger;
tom5f38b3a2014-08-27 23:50:54 -070017
18import static org.slf4j.LoggerFactory.getLogger;
tomb5a46e62014-08-26 14:20:00 -070019
20/**
tomb1260e42014-08-26 18:39:57 -070021 * Provider which uses an OpenFlow controller to detect network
tome06f8552014-08-26 16:58:42 -070022 * infrastructure devices.
tomb5a46e62014-08-26 14:20:00 -070023 */
tomb1260e42014-08-26 18:39:57 -070024@Component(immediate = true)
tomab21e7c2014-08-26 15:23:08 -070025public class OpenFlowDeviceProvider extends AbstractProvider implements DeviceProvider {
tomb5a46e62014-08-26 14:20:00 -070026
tom5f38b3a2014-08-27 23:50:54 -070027 private final Logger log = getLogger(getClass());
tomb5a46e62014-08-26 14:20:00 -070028
29 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
tomab21e7c2014-08-26 15:23:08 -070030 protected DeviceProviderBroker providerBroker;
31
tom5f38b3a2014-08-27 23:50:54 -070032 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
33 protected OpenFlowController controller;
34
tomab21e7c2014-08-26 15:23:08 -070035 private DeviceProviderService providerService;
tomb5a46e62014-08-26 14:20:00 -070036
tomab21e7c2014-08-26 15:23:08 -070037 /**
38 * Creates an OpenFlow device provider.
39 */
40 public OpenFlowDeviceProvider() {
41 super(new ProviderId("org.onlab.onos.provider.of.device"));
42 }
43
tomb5a46e62014-08-26 14:20:00 -070044 @Activate
45 public void activate() {
tomab21e7c2014-08-26 15:23:08 -070046 providerService = providerBroker.register(this);
tomb5a46e62014-08-26 14:20:00 -070047 log.info("Started");
48 }
49
50 @Deactivate
51 public void deactivate() {
tomab21e7c2014-08-26 15:23:08 -070052 providerBroker.unregister(this);
53 providerService = null;
tomb5a46e62014-08-26 14:20:00 -070054 log.info("Stopped");
55 }
56
tomab21e7c2014-08-26 15:23:08 -070057 @Override
58 public void triggerProbe(Device device) {
tome06f8552014-08-26 16:58:42 -070059 log.info("Triggering probe on device {}", device.id());
tomab21e7c2014-08-26 15:23:08 -070060 }
61
62 @Override
63 public void roleChanged(Device device, MastershipRole newRole) {
tomb1260e42014-08-26 18:39:57 -070064 log.info("Accepting mastership role change for device {}", device.id());
tomab21e7c2014-08-26 15:23:08 -070065 }
66
tomb5a46e62014-08-26 14:20:00 -070067}