def _handle_HostEvent (self, event): entry = event.entry if event.move: log.warn('cannot handle moving hosts (%s)' % entry) return host = core.topology.getEntityByID(entry.macaddr) if host is None: host = Host(entry.macaddr) core.topology.addEntity(host) if core.Outband.t.mac(entry.macaddr): host.dpid = core.Outband.t.mac(entry.macaddr).dpid else: log.debug('mac not found %s' % entry.macaddr) val = 0 for i, v in enumerate(entry.macaddr.toTuple()): val += (256 ** (5 - i)) * v host.dpid = val sw = core.topology.getEntityByID(entry.dpid) if sw is None: log.warn('unknown host (%s)' % entry.dpid) return if event.entry.port not in sw.ports: log.warn('unknown port (%s, %s)' % (entry.dpid, entry.port)) return if event.join: log.debug('join (%s %s)' % (sw, host.id)) sw.ports[entry.port].addEntity(host, single=True) else: log.debug('leave (%s %s)' % (sw, host.id)) sw.ports[entry.port].entities.discard(host)
def __init__(self, macAddr, ofp, ipAddr = None): if not macAddr: raise AssertionError("ScnOpenFlowHost should have a Mac address") Host.__init__(self) EventMixin.__init__(self) self.macAddr = macAddr self.ipAddr = ipAddr self.ofp = ofp log.debug("ScnOpenFlowHost :%s", str(self))