/*
 * Copyright 2017-present Open Networking Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.onosproject.net.behaviour;

import org.onosproject.net.driver.HandlerBehaviour;
import org.onosproject.net.host.HostDescription;

import java.util.Set;
import java.util.concurrent.CompletableFuture;

/**
 * Retrieving host information from the device
 * and creating host descriptions.
 */
public interface HostsDiscovery extends HandlerBehaviour {

    /**
     * Returns a collection of discovered host descriptions.
     * @return CompletableFuture containing, when completed, a collection of HostDescription
     */
    CompletableFuture<Set<HostDescription>> getHosts();
}
