package net.onrc.onos.apps.proxyarp;

import java.net.InetAddress;
import java.util.List;

import net.floodlightcontroller.core.module.IFloodlightService;
import net.floodlightcontroller.util.MACAddress;

// Extends IFloodlightService so we can access it from REST API resources
/**
 * Provides ARP services to other modules.
 */
public interface IProxyArpService extends IFloodlightService {
    /**
     * Returns the MAC address if there is a valid entry in the cache. Otherwise
     * returns null.
     *
     * @param ipAddress the IP address to request the ARP mapping for
     * @return the MACAddress that maps to the specified IP address, or null if
     *         no mapping is found
     */
    public MACAddress getMacAddress(InetAddress ipAddress);

    /**
     * Tell the IProxyArpService to send an ARP request for the IP address. The
     * request will be broadcast out all edge ports in the network.
     *
     * @param ipAddress the IP address to send an ARP request for
     * @param requester the {@link IArpRequester} object that will be called if
     *                  a reply is received
     * @param retry whether to keep sending requests until the MAC is learnt
     */
    public void sendArpRequest(InetAddress ipAddress, IArpRequester requester,
            boolean retry);

    /**
     * Returns a snapshot of the entire ARP cache.
     *
     * @return a list of mappings formatted as a human-readable string
     */
    public List<String> getMappings();
}
