5 package org.opendaylight.controller.protocol_plugin.packetcable.internal;
7 import java.net.InetAddress;
8 import java.net.UnknownHostException;
9 import java.util.ArrayList;
10 import java.util.Date;
11 import java.util.Dictionary;
12 import java.util.HashMap;
13 import java.util.HashSet;
14 import java.util.List;
17 import java.util.concurrent.ConcurrentHashMap;
18 import java.util.concurrent.ConcurrentMap;
19 import java.util.concurrent.CopyOnWriteArraySet;
21 import org.apache.felix.dm.Component;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24 import org.opendaylight.controller.sal.core.Actions;
25 import org.opendaylight.controller.sal.core.Bandwidth;
26 import org.opendaylight.controller.sal.core.Buffers;
27 import org.opendaylight.controller.sal.core.Capabilities;
28 import org.opendaylight.controller.sal.core.Capabilities.CapabilitiesType;
29 import org.opendaylight.controller.sal.core.ConstructionException;
30 import org.opendaylight.controller.sal.core.Node;
31 import org.opendaylight.controller.sal.core.NodeConnector;
32 import org.opendaylight.controller.sal.core.Property;
33 import org.opendaylight.controller.sal.core.State;
34 import org.opendaylight.controller.sal.core.Tables;
35 import org.opendaylight.controller.sal.core.TimeStamp;
36 import org.opendaylight.controller.sal.core.UpdateType;
37 import org.opendaylight.controller.sal.inventory.IPluginInInventoryService;
38 import org.opendaylight.controller.sal.inventory.IPluginOutInventoryService;
39 import org.opendaylight.controller.sal.utils.NodeCreator;
40 import org.opendaylight.controller.sal.utils.NodeConnectorCreator;
43 * PC Implementation for IPluginInReadService used by SAL
47 public class InventoryService implements IPluginInInventoryService {
48 private static final Logger logger = LoggerFactory
49 .getLogger(InventoryService.class);
51 private ConcurrentMap<Node, Map<String, Property>> nodeProps; // properties
57 private ConcurrentMap<NodeConnector, Map<String, Property>> nodeConnectorProps; // properties
64 private final Set<IPluginOutInventoryService> pluginOutInventoryServices =
65 new CopyOnWriteArraySet<IPluginOutInventoryService>();
67 public void setPluginOutInventoryServices(IPluginOutInventoryService service) {
68 logger.trace("Got a service set request {}", service);
69 if (this.pluginOutInventoryServices != null) {
70 this.pluginOutInventoryServices.add(service);
74 public void unsetPluginOutInventoryServices(IPluginOutInventoryService service) {
75 logger.trace("Got a service UNset request");
76 if (this.pluginOutInventoryServices != null) {
77 this.pluginOutInventoryServices.remove(service);
82 * Function called by the dependency manager when all the required
83 * dependencies are satisfied
87 nodeProps = new ConcurrentHashMap<Node, Map<String, Property>>();
88 nodeConnectorProps = new ConcurrentHashMap<NodeConnector, Map<String, Property>>();
89 Node.NodeIDType.registerIDType("PC", Integer.class);
90 NodeConnector.NodeConnectorIDType.registerIDType("PC", Integer.class, "PC");
93 setupNodeConnectorProps();
96 private void setupNodeConnectorProps() {
97 Map<String, Property> ncPropMap = new HashMap<String, Property>();
98 Capabilities cap = new Capabilities(CapabilitiesType.FLOW_STATS_CAPABILITY.getValue());
99 ncPropMap.put(Capabilities.CapabilitiesPropName, cap);
100 Bandwidth bw = new Bandwidth(Bandwidth.BW1Gbps);
101 ncPropMap.put(Bandwidth.BandwidthPropName, bw);
102 State st = new State(State.EDGE_UP);
103 ncPropMap.put(State.StatePropName, st);
105 // setup property map for all node connectors
109 node = new Node("PC", new Integer(0xCAFE));
110 nc = new NodeConnector("PC", 0xCAFE, node);
111 } catch (ConstructionException e) {
115 nodeConnectorProps.put(nc, ncPropMap);
119 node = new Node("PC", 3366);
120 nc = new NodeConnector("PC", 12, node);
121 } catch (ConstructionException e) {
125 nodeConnectorProps.put(nc, ncPropMap);
128 node = new Node("PC", 4477);
129 nc = new NodeConnector("PC", 34, node);
130 } catch (ConstructionException e) {
134 nodeConnectorProps.put(nc, ncPropMap);
138 private void setupNodeProps() {
139 Map<String, Property> propMap = new HashMap<String, Property>();
141 Tables t = new Tables((byte) 1);
142 propMap.put(Tables.TablesPropName, t);
143 Capabilities c = new Capabilities((int) 3);
144 propMap.put(Capabilities.CapabilitiesPropName, c);
145 Actions a = new Actions((int) 2);
146 propMap.put(Actions.ActionsPropName, a);
147 Buffers b = new Buffers((int) 1);
148 propMap.put(Buffers.BuffersPropName, b);
149 Long connectedSinceTime = 100000L;
150 TimeStamp timeStamp = new TimeStamp(connectedSinceTime, "connectedSince");
151 propMap.put(TimeStamp.TimeStampPropName, timeStamp);
153 // setup property map for all nodes
156 node = new Node("PC", new Integer(0xCAFE));
157 } catch (ConstructionException e) {
161 nodeProps.put(node, propMap);
164 node = new Node("PC", 3366);
165 } catch (ConstructionException e) {
168 nodeProps.put(node, propMap);
171 node = new Node("PC", 4477);
172 } catch (ConstructionException e) {
175 nodeProps.put(node, propMap);
181 * Function called by the dependency manager when at least one dependency
182 * become unsatisfied or when the component is shutting down because for
183 * example bundle is being stopped.
190 * Function called by dependency manager after "init ()" is called and after
191 * the services provided by the class are registered in the service registry
198 * Method called when the plugin has exposed it's services, this will be
199 * used to publish the updates so connection manager can think the
200 * connection is local
203 // update sal and discovery
204 for (IPluginOutInventoryService service : pluginOutInventoryServices) {
205 for (Node node : nodeProps.keySet()) {
206 Set<Property> props = new HashSet<Property>(nodeProps.get(node).values());
207 service.updateNode(node, UpdateType.ADDED, props);
208 logger.trace("Adding Node {} with props {}", node, props);
210 for (NodeConnector nc : nodeConnectorProps.keySet()) {
211 Set<Property> props = new HashSet<Property>(nodeConnectorProps.get(nc).values());
212 service.updateNodeConnector(nc, UpdateType.ADDED, props);
213 logger.trace("Adding NodeConnectors {} with props {}", nc, props);
219 * Function called by the dependency manager before the services exported by
220 * the component are unregistered, this will be followed by a "destroy ()"
225 pluginOutInventoryServices.clear();
229 * Retrieve nodes from openflow
232 public ConcurrentMap<Node, Map<String, Property>> getNodeProps() {
237 * Retrieve nodeConnectors from openflow
240 public ConcurrentMap<NodeConnector, Map<String, Property>> getNodeConnectorProps(
242 return nodeConnectorProps;
246 public Set<Node> getConfiguredNotConnectedNodes() {
247 // TODO Auto-generated method stub