if (log.isDebugEnabled()) { log.debug("getHardwareAddress(" + address + ", " + myAddress + ", " + device.getId() + ", " + timeout + ")"); }
	public HardwareAddress getHardwareAddress(ProtocolAddress address, ProtocolAddress myAddress, Device device, long timeout)	throws TimeoutException, NetworkException {		final long start = System.currentTimeMillis();		long lastReq = 0;				if (address.equals(myAddress)) {			// This is simple, just return my address			return getAPI(device).getAddress();		}				while (true) {			final HardwareAddress hwAddress = cache.get(address);			if (hwAddress != null) {				return hwAddress;			}			final long now = System.currentTimeMillis();			if ((now - start) >= timeout) {				// Still not correct response				throw new TimeoutException("Timeout in ARP request");			}			// Try to send a request every few seconds			if ((now - lastReq) >= ARP_REQUEST_DELAY) {				lastReq = now;				request(address, myAddress, device);			} else {				cache.waitForChanges(Math.min(timeout, ARP_REQUEST_DELAY));			}		}			}