2 * Copyright (c) 2011,2012 Big Switch Networks, Inc.
4 * Licensed under the Eclipse Public License, Version 1.0 (the
5 * "License"); you may not use this file except in compliance with the
6 * License. You may obtain a copy of the License at
8 * http://www.eclipse.org/legal/epl-v10.html
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13 * implied. See the License for the specific language governing
14 * permissions and limitations under the License.
16 * This file incorporates work covered by the following copyright and
19 * Originally created by David Erickson, Stanford University
21 * Licensed under the Apache License, Version 2.0 (the "License");
22 * you may not use this file except in compliance with the
23 * License. You may obtain a copy of the License at
25 * http://www.apache.org/licenses/LICENSE-2.0
27 * Unless required by applicable law or agreed to in writing,
28 * software distributed under the License is distributed on an "AS
29 * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
30 * express or implied. See the License for the specific language
31 * governing permissions and limitations under the License.
34 package org.opendaylight.controller.hosttracker;
36 import java.util.Collection;
37 import java.util.EnumSet;
38 import java.util.Iterator;
41 import org.opendaylight.controller.sal.core.NodeConnector;
44 * Device manager allows interacting with devices on the network. Note that
45 * under normal circumstances, {@link Device} objects should be retrieved from
46 * the {@link FloodlightContext} rather than from {@link IDeviceManager}.
48 public interface IDeviceService {
51 * Fields used in devices for indexes and querying
53 * @see IDeviceService#addIndex
56 MAC, IPV4, VLAN, SWITCHPORT
60 * Get the device with the given device key.
63 * the key to search for
64 * @return the device associated with the key, or null if no such device
65 * @see IDevice#getDeviceKey()
67 public IDevice getDevice(Long deviceKey);
70 * Search for a device exactly matching the provided device fields. This is
71 * the same lookup process that is used for packet_in processing and device
72 * learning. Thus, findDevice() can be used to match flow entries from
73 * switches to devices. Only the key fields as defined by the
74 * {@link IEntityClassifierService} will be important in this search. All
75 * key fields MUST be supplied.
77 * {@link queryDevices()} might be more appropriate!
82 * the VLAN. Null means no VLAN and is valid even if VLAN is a
88 * @return an {@link IDevice} or null if no device is found.
89 * @see IDeviceManager#setEntityClassifier(IEntityClassifierService)
90 * @throws IllegalArgumentException
91 * if not all key fields of the current
92 * {@link IEntityClassifierService} are specified.
94 public IDevice findDevice(long macAddress, Short vlan, Integer ipv4Address,
95 NodeConnector port) throws IllegalArgumentException;
98 * Get a destination device using entity fields that corresponds with the
99 * given source device. The source device is important since there could be
100 * ambiguity in the destination device without the attachment point
101 * information. Search for a device in a given entity class. This is the
102 * same as the lookup process for destination devices.
104 * Only the key fields as defined by the reference entity class will be
105 * important in this search. All key fields MUST be supplied.
108 * The entity class in which to perform the lookup.
110 * The MAC address for the destination
112 * the VLAN if available
114 * The IP address if available.
115 * @return an {@link IDevice} or null if no device is found.
116 * @see IDeviceService#findDevice(long, Short, Integer, Long, Integer)
117 * @throws IllegalArgumentException
118 * if not all key fields of the source's {@link IEntityClass}
121 public IDevice findClassDevice(IEntityClass entityClass, long macAddress,
122 Short vlan, Integer ipv4Address) throws IllegalArgumentException;
125 * Get an unmodifiable collection view over all devices currently known.
127 * @return the collection of all devices
129 public Collection<? extends IDevice> getAllDevices();
132 * Create an index over a set of fields. This allows efficient lookup of
133 * devices when querying using the indexed set of specified fields. The
134 * index must be registered before any device learning takes place, or it
135 * may be incomplete. It's OK if this is called multiple times with the same
136 * fields; only one index will be created for each unique set of fields.
139 * set to true if the index should be maintained for each entity
142 * the set of fields on which to index
144 public void addIndex(boolean perClass, EnumSet<DeviceField> keyFields);
147 * Find devices that match the provided query. Any fields that are null will
148 * not be included in the query. If there is an index for the query, then it
149 * will be performed efficiently using the index. Otherwise, there will be a
150 * full scan of the device list.
160 * @return an iterator over a set of devices matching the query
161 * @see IDeviceService#queryClassDevices(IEntityClass, Long, Short, Integer,
164 public Iterator<? extends IDevice> queryDevices(Long macAddress,
165 Short vlan, Integer ipv4Address, NodeConnector port);
168 * Find devices that match the provided query. Only the index for the
169 * specified class will be searched. Any fields that are null will not be
170 * included in the query. If there is an index for the query, then it will
171 * be performed efficiently using the index. Otherwise, there will be a full
172 * scan of the device list.
175 * The entity class in which to perform the query
184 * @return an iterator over a set of devices matching the query
185 * @see IDeviceService#queryClassDevices(Long, Short, Integer, Long,
188 public Iterator<? extends IDevice> queryClassDevices(
189 IEntityClass entityClass, Long macAddress, Short vlan,
190 Integer ipv4Address, NodeConnector port);
193 * Adds a listener to listen for IDeviceManagerServices notifications
196 * The listener that wants the notifications
198 * The type of the listener
200 public void addListener(IDeviceListener listener);
203 * Specify points in the network where attachment points are not to be
209 public void addSuppressAPs(NodeConnector port);
211 public void removeSuppressAPs(NodeConnector port);
213 public Set<SwitchPort> getSuppressAPs();