import org.apache.felix.dm.Component;
import org.opendaylight.controller.hosttracker.IDeviceService;
import org.opendaylight.controller.hosttracker.IfIptoHost;
+import org.opendaylight.controller.hosttracker.IfNewHostNotify;
import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
import org.opendaylight.controller.sal.packet.IDataPacketService;
import org.opendaylight.controller.sal.packet.IListenDataPacket;
.setCallbacks("setDataPacketService",
"unsetDataPacketService").setRequired(true));
+ c.add(createContainerServiceDependency(containerName)
+ .setService(IfNewHostNotify.class)
+ .setCallbacks("setNewHostNotify",
+ "unsetNewHostNotify").setRequired(false));
+
// c.add(createContainerServiceDependency(containerName).setService(
// IClusterContainerServices.class).setCallbacks(
// "setClusterContainerService",
.setService(ITopologyManager.class)
.setCallbacks("setTopologyManager", "unsetTopologyManager")
.setRequired(false));
-
- c.add(createContainerServiceDependency(containerName)
- .setService(IDataPacketService.class)
- .setCallbacks("setDataPacketService",
- "unsetDataPacketService").setRequired(true));
}
}
public HostNodeConnector toHostNodeConnector() {
Integer[] ipv4s = this.getIPv4Addresses();
try {
+ Entity e = this.entities[this.entities.length-1];
+ NodeConnector n = null;
+ if(e!=null)
+ n = e.getPort();
InetAddress ip = InetAddress.getByName(ipv4s[ipv4s.length - 1]
.toString());
byte[] macAddr = macLongToByte(this.getMACAddress());
- HostNodeConnector nc = new HostNodeConnector(macAddr, ip, null,
+ HostNodeConnector nc = new HostNodeConnector(macAddr, ip, n,
(short) 0);
return nc;
} catch (Exception e) {
import org.opendaylight.controller.hosttracker.IEntityClassListener;
import org.opendaylight.controller.hosttracker.IEntityClassifierService;
import org.opendaylight.controller.hosttracker.IfIptoHost;
+import org.opendaylight.controller.hosttracker.IfNewHostNotify;
import org.opendaylight.controller.hosttracker.SwitchPort;
import org.opendaylight.controller.hosttracker.hostAware.HostNodeConnector;
import org.opendaylight.controller.sal.core.Edge;
*/
protected ListenerDispatcher<String, IDeviceListener> deviceListeners;
+ /**
+ * Using the IfNewHostNotify to notify listeners of host changes.
+ */
+ private Set<IfNewHostNotify> newHostNotify = Collections.synchronizedSet(new HashSet<IfNewHostNotify>());
/**
* A device update event to be dispatched
*/
// Dependency injection
// ********************
+ void setNewHostNotify(IfNewHostNotify obj){
+ this.newHostNotify.add(obj);
+ }
+
+ void unsetNewHostNotify(IfNewHostNotify obj){
+ this.newHostNotify.remove(obj);
+ }
+
void setDataPacketService(IDataPacketService s) {
this.dataPacketService = s;
}
if (inPkt == null) {
return PacketResult.IGNORED;
}
- try {
- throw new Exception("Sample");
- } catch (Exception e) {
- logger.error("Sample stack trace", e);
- }
+// try {
+// throw new Exception("Sample");
+// } catch (Exception e) {
+// logger.error("Sample stack trace", e);
+// }
Packet formattedPak = this.dataPacketService.decodeDataPacket(inPkt);
Ethernet eth;
protected void notifyListeners(List<IDeviceListener> listeners,
DeviceUpdate update) {
- if (listeners == null) {
+ if (listeners == null && newHostNotify.isEmpty()) {
return;
}
+ /**
+ * TODO: IfNewHostNotify is needed for current controller API.
+ * Adding logic so that existing apps (like SimpleForwardingManager)
+ * work. IDeviceListener adds additional methods and uses IListener's
+ * callback ordering. The two interfaces need to be merged.
+ */
+
+ for (IfNewHostNotify notify : newHostNotify){
+ switch (update.change) {
+ case ADD:
+ notify.notifyHTClient(update.device.toHostNodeConnector());
+ break;
+ }
+ }
+
+ /**
+ * TODO: Remove this section as IDeviceListener functionality gets
+ * merged with IfNewHostNotify
+ */
for (IDeviceListener listener : listeners) {
switch (update.change) {
case ADD: