X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fhosttracker_new%2Fimplementation%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fhosttracker%2Finternal%2FDeviceManagerImpl.java;h=0a6c2713dde0a2e6a0087f7d7c889e5d77668765;hb=b4d71d207d8c5e96a8b6dac8804a4a0de03812a8;hp=faf9416934f897dd77bafda31ea565d4c75742e7;hpb=756b3a862090ac60968d6ea33b516964e0f24a48;p=controller.git diff --git a/opendaylight/hosttracker_new/implementation/src/main/java/org/opendaylight/controller/hosttracker/internal/DeviceManagerImpl.java b/opendaylight/hosttracker_new/implementation/src/main/java/org/opendaylight/controller/hosttracker/internal/DeviceManagerImpl.java index faf9416934..0a6c2713dd 100755 --- a/opendaylight/hosttracker_new/implementation/src/main/java/org/opendaylight/controller/hosttracker/internal/DeviceManagerImpl.java +++ b/opendaylight/hosttracker_new/implementation/src/main/java/org/opendaylight/controller/hosttracker/internal/DeviceManagerImpl.java @@ -71,9 +71,14 @@ 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.ConstructionException; import org.opendaylight.controller.sal.core.Edge; +import org.opendaylight.controller.sal.core.Host; +import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.core.NodeConnector; import org.opendaylight.controller.sal.core.NodeConnector.NodeConnectorIDType; +import org.opendaylight.controller.sal.core.Tier; +import org.opendaylight.controller.sal.core.UpdateType; import org.opendaylight.controller.sal.packet.ARP; import org.opendaylight.controller.sal.packet.Ethernet; import org.opendaylight.controller.sal.packet.IDataPacketService; @@ -81,10 +86,13 @@ import org.opendaylight.controller.sal.packet.IListenDataPacket; import org.opendaylight.controller.sal.packet.Packet; import org.opendaylight.controller.sal.packet.PacketResult; import org.opendaylight.controller.sal.packet.RawPacket; +import org.opendaylight.controller.sal.packet.address.DataLinkAddress; +import org.opendaylight.controller.sal.packet.address.EthernetAddress; import org.opendaylight.controller.sal.topology.TopoEdgeUpdate; import org.opendaylight.controller.sal.utils.HexEncode; import org.opendaylight.controller.sal.utils.ListenerDispatcher; import org.opendaylight.controller.sal.utils.MultiIterator; +import org.opendaylight.controller.sal.utils.NetUtils; import org.opendaylight.controller.sal.utils.SingletonTask; import org.opendaylight.controller.sal.utils.Status; import org.opendaylight.controller.sal.utils.StatusCode; @@ -1461,6 +1469,45 @@ public class DeviceManagerImpl implements IDeviceService, IEntityClassListener, protected void notifyListeners(List listeners, DeviceUpdate update) { + // Topology update is for some reason outside of listeners registry + // logic + Entity[] ents = update.device.getEntities(); + Entity e = ents[ents.length-1]; + NodeConnector p = e.getPort(); + Node node = p.getNode(); + Host h = null; + try { + byte[] mac = NetUtils.longToByteArray6(e.getMacAddress()); + DataLinkAddress dla = new EthernetAddress( + mac); + e.getIpv4Address(); + InetAddress.getAllByName(e.getIpv4Address().toString()); + h = new org.opendaylight.controller.sal.core.Host(dla, + InetAddress.getByName(e.getIpv4Address().toString())); + } catch (ConstructionException ce) { + p = null; + h = null; + } catch (UnknownHostException ue){ + p = null; + h = null; + } + + if (topology != null && p != null && h != null) { + if (update.change.equals(DeviceUpdate.Change.ADD)) { + Tier tier = new Tier(1); + switchManager.setNodeProp(node, tier); + topology.updateHostLink(p, h, UpdateType.ADDED, null); + } else { + // No need to reset the tiering if no other hosts are currently + // connected + // If this switch was discovered to be an access switch, it + // still is even if the host is down + Tier tier = new Tier(0); + switchManager.setNodeProp(node, tier); + topology.updateHostLink(p, h, UpdateType.REMOVED, null); + } + } + if (listeners == null && newHostNotify.isEmpty()) { return; }