blob: 1e95598cf109b4d99201e02bc85d9cd87afbd11a [file] [log] [blame]
tomcfde0622014-09-09 11:02:42 -07001package org.onlab.onos.net.trivial.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;
8import org.apache.felix.scr.annotations.Service;
9import org.onlab.graph.Graph;
10import org.onlab.onos.event.AbstractListenerRegistry;
11import org.onlab.onos.event.Event;
12import org.onlab.onos.event.EventDeliveryService;
13import org.onlab.onos.net.ConnectPoint;
14import org.onlab.onos.net.DeviceId;
15import org.onlab.onos.net.Path;
16import org.onlab.onos.net.provider.AbstractProviderRegistry;
17import org.onlab.onos.net.provider.AbstractProviderService;
18import org.onlab.onos.net.topology.LinkWeight;
19import org.onlab.onos.net.topology.TopoEdge;
20import org.onlab.onos.net.topology.TopoVertex;
21import org.onlab.onos.net.topology.Topology;
22import org.onlab.onos.net.topology.TopologyCluster;
23import org.onlab.onos.net.topology.TopologyDescription;
24import org.onlab.onos.net.topology.TopologyEvent;
25import org.onlab.onos.net.topology.TopologyListener;
26import org.onlab.onos.net.topology.TopologyProvider;
27import org.onlab.onos.net.topology.TopologyProviderRegistry;
28import org.onlab.onos.net.topology.TopologyProviderService;
29import org.onlab.onos.net.topology.TopologyService;
30import org.slf4j.Logger;
31
32import java.util.List;
33import java.util.Set;
34
35import static com.google.common.base.Preconditions.checkNotNull;
36import static org.slf4j.LoggerFactory.getLogger;
37
38/**
39 * Provides basic implementation of the topology SB & NB APIs.
40 */
41@Component(immediate = true)
42@Service
43public class SimpleTopologyManager
44 extends AbstractProviderRegistry<TopologyProvider, TopologyProviderService>
45 implements TopologyService, TopologyProviderRegistry {
46
47 public static final String TOPOLOGY_NULL = "Topology cannot be null";
48 private static final String DEVICE_ID_NULL = "Device ID cannot be null";
49 public static final String CONNECTION_POINT_NULL = "Connection point cannot be null";
50
51 private final Logger log = getLogger(getClass());
52
53 private final AbstractListenerRegistry<TopologyEvent, TopologyListener>
54 listenerRegistry = new AbstractListenerRegistry<>();
55
tom0efbb1d2014-09-09 11:54:28 -070056 private final SimpleTopologyStore store = new SimpleTopologyStore();
57
tomcfde0622014-09-09 11:02:42 -070058 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
59 private EventDeliveryService eventDispatcher;
60
61
62 @Activate
63 public void activate() {
64 eventDispatcher.addSink(TopologyEvent.class, listenerRegistry);
65 log.info("Started");
66 }
67
68 @Deactivate
69 public void deactivate() {
70 eventDispatcher.removeSink(TopologyEvent.class);
71 log.info("Stopped");
72 }
73
74 @Override
75 protected TopologyProviderService createProviderService(TopologyProvider provider) {
76 return new InternalTopologyProviderService(provider);
77 }
78
79 @Override
80 public Topology currentTopology() {
81 return null;
82 }
83
84 @Override
85 public Set<TopologyCluster> getClusters(Topology topology) {
86 checkNotNull(topology, TOPOLOGY_NULL);
87 return null;
88 }
89
90 @Override
91 public Graph<TopoVertex, TopoEdge> getGraph(Topology topology) {
92 checkNotNull(topology, TOPOLOGY_NULL);
93 return null;
94 }
95
96 @Override
97 public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst) {
98 checkNotNull(topology, TOPOLOGY_NULL);
99 checkNotNull(src, DEVICE_ID_NULL);
100 checkNotNull(dst, DEVICE_ID_NULL);
101 return null;
102 }
103
104 @Override
105 public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst, LinkWeight weight) {
106 checkNotNull(topology, TOPOLOGY_NULL);
107 checkNotNull(src, DEVICE_ID_NULL);
108 checkNotNull(dst, DEVICE_ID_NULL);
109 checkNotNull(weight, "Link weight cannot be null");
110 return null;
111 }
112
113 @Override
114 public boolean isInfrastructure(Topology topology, ConnectPoint connectPoint) {
115 checkNotNull(topology, TOPOLOGY_NULL);
116 checkNotNull(connectPoint, CONNECTION_POINT_NULL);
117 return false;
118 }
119
120 @Override
121 public boolean isInBroadcastTree(Topology topology, ConnectPoint connectPoint) {
122 checkNotNull(topology, TOPOLOGY_NULL);
123 checkNotNull(connectPoint, CONNECTION_POINT_NULL);
124 return false;
125 }
126
127 @Override
128 public void addListener(TopologyListener listener) {
129 listenerRegistry.addListener(listener);
130 }
131
132 @Override
133 public void removeListener(TopologyListener listener) {
134 listenerRegistry.removeListener(listener);
135 }
136
137 // Personalized host provider service issued to the supplied provider.
138 private class InternalTopologyProviderService
139 extends AbstractProviderService<TopologyProvider>
140 implements TopologyProviderService {
141
142 InternalTopologyProviderService(TopologyProvider provider) {
143 super(provider);
144 }
145
146 @Override
147 public void topologyChanged(TopologyDescription topoDescription,
148 List<Event> reasons) {
149 checkNotNull(topoDescription, "Topology description cannot be null");
150 log.info("Topology changed due to: {}",
151 reasons == null ? "initial compute" : reasons);
152 }
153 }
154
155}