blob: 84b7f4433839440abee59e98269cd8e1924a5103 [file] [log] [blame]
tome06f8552014-08-26 16:58:42 -07001package org.onlab.onos.provider.of.link.impl;
2
alshabibc4901cd2014-09-05 16:50:40 -07003import static org.slf4j.LoggerFactory.getLogger;
4
tome06f8552014-08-26 16:58:42 -07005import org.apache.felix.scr.annotations.Activate;
6import org.apache.felix.scr.annotations.Component;
7import org.apache.felix.scr.annotations.Deactivate;
8import org.apache.felix.scr.annotations.Reference;
9import org.apache.felix.scr.annotations.ReferenceCardinality;
10import org.onlab.onos.net.link.LinkProvider;
tom96dfcab2014-08-28 09:26:03 -070011import org.onlab.onos.net.link.LinkProviderRegistry;
tome06f8552014-08-26 16:58:42 -070012import org.onlab.onos.net.link.LinkProviderService;
13import org.onlab.onos.net.provider.AbstractProvider;
14import org.onlab.onos.net.provider.ProviderId;
alshabib289652c2014-09-07 19:09:28 -070015import org.onlab.onos.of.controller.Dpid;
tom5f38b3a2014-08-27 23:50:54 -070016import org.onlab.onos.of.controller.OpenFlowController;
alshabib289652c2014-09-07 19:09:28 -070017import org.onlab.onos.of.controller.OpenFlowSwitchListener;
alshabibc4901cd2014-09-05 16:50:40 -070018import org.onlab.onos.of.controller.PacketContext;
19import org.onlab.onos.of.controller.PacketListener;
alshabib289652c2014-09-07 19:09:28 -070020import org.projectfloodlight.openflow.protocol.OFPortStatus;
tome06f8552014-08-26 16:58:42 -070021import org.slf4j.Logger;
tom5f38b3a2014-08-27 23:50:54 -070022
tome06f8552014-08-26 16:58:42 -070023/**
tomb1260e42014-08-26 18:39:57 -070024 * Provider which uses an OpenFlow controller to detect network
tome06f8552014-08-26 16:58:42 -070025 * infrastructure links.
26 */
tomb1260e42014-08-26 18:39:57 -070027@Component(immediate = true)
tome06f8552014-08-26 16:58:42 -070028public class OpenFlowLinkProvider extends AbstractProvider implements LinkProvider {
29
tom5f38b3a2014-08-27 23:50:54 -070030 private final Logger log = getLogger(getClass());
tome06f8552014-08-26 16:58:42 -070031
32 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
tom96dfcab2014-08-28 09:26:03 -070033 protected LinkProviderRegistry providerRegistry;
tome06f8552014-08-26 16:58:42 -070034
tom5f38b3a2014-08-27 23:50:54 -070035 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
36 protected OpenFlowController controller;
tome06f8552014-08-26 16:58:42 -070037
tom5f38b3a2014-08-27 23:50:54 -070038 private LinkProviderService providerService;
tome06f8552014-08-26 16:58:42 -070039
alshabib289652c2014-09-07 19:09:28 -070040 private final InternalLinkProvider listener = new InternalLinkProvider();
alshabibc4901cd2014-09-05 16:50:40 -070041
tome06f8552014-08-26 16:58:42 -070042 /**
43 * Creates an OpenFlow link provider.
44 */
45 public OpenFlowLinkProvider() {
46 super(new ProviderId("org.onlab.onos.provider.of.link"));
47 }
48
49 @Activate
50 public void activate() {
tom96dfcab2014-08-28 09:26:03 -070051 providerService = providerRegistry.register(this);
alshabib289652c2014-09-07 19:09:28 -070052 controller.addListener(listener);
alshabibc4901cd2014-09-05 16:50:40 -070053 controller.addPacketListener(0, listener);
tome06f8552014-08-26 16:58:42 -070054 log.info("Started");
55 }
56
57 @Deactivate
58 public void deactivate() {
tom96dfcab2014-08-28 09:26:03 -070059 providerRegistry.unregister(this);
alshabib289652c2014-09-07 19:09:28 -070060 controller.removeListener(listener);
alshabibc4901cd2014-09-05 16:50:40 -070061 controller.removePacketListener(listener);
tome06f8552014-08-26 16:58:42 -070062 providerService = null;
63 log.info("Stopped");
64 }
65
alshabibc4901cd2014-09-05 16:50:40 -070066
alshabib289652c2014-09-07 19:09:28 -070067 private class InternalLinkProvider implements PacketListener, OpenFlowSwitchListener {
alshabibc4901cd2014-09-05 16:50:40 -070068
69 @Override
70 public void handlePacket(PacketContext pktCtx) {
71
72 }
73
alshabib289652c2014-09-07 19:09:28 -070074 @Override
75 public void switchAdded(Dpid dpid) {
76 // TODO Auto-generated method stub
77
78 }
79
80 @Override
81 public void switchRemoved(Dpid dpid) {
82 // TODO Auto-generated method stub
83
84 }
85
86 @Override
87 public void portChanged(Dpid dpid, OFPortStatus status) {
88 // TODO Auto-generated method stub
89
90 }
91
alshabibc4901cd2014-09-05 16:50:40 -070092 }
93
tome06f8552014-08-26 16:58:42 -070094}