protected void sendPacket( String fromHostId, String fromInterfaceId, final ByteChunk packet ) {
		Host h = hosts.get(fromHostId);
		if( h == null ) return;
		
		String linkId = h.interfaceLinkIds.get(fromInterfaceId);
		if( linkId == null ) return;
		
		Link l = links.get(linkId);
		if( l == null ) return;
		
		final String toHostId, toInterfaceId;
		if( fromHostId.equals(l.host1) && fromInterfaceId.equals(l.if1) ) {
			toHostId = l.host2;
			toInterfaceId = l.if2;
		} else {
			toHostId = l.host1;
			toInterfaceId = l.if1;
		}
		
		teq.enqueue( tickAfterDelay(l.delay), new SimulatorEvent() {
			public void run( Simulator s ) {
				s.deliverPacket(toHostId, toInterfaceId, packet);
			}
		});
	}