package net.onrc.onos.apps.proxyarp;

import java.io.Serializable;

import net.floodlightcontroller.util.MACAddress;

/**
 * Inter-instance notification that an ARP reply has been received. The
 * notification contains both the IP address and the MAC address.
 */
public class ArpReplyNotification implements Serializable {

    private static final long serialVersionUID = 1L;

    private int targetAddress;
    private MACAddress targetMacAddress;

    protected ArpReplyNotification() {
    }

    /**
     * Class constructor.
     *
     * @param targetAddress    IP address received from the ARP reply
     * @param targetMacAddress MAC address received from the ARP reply
     */
    public ArpReplyNotification(int targetAddress,
                                MACAddress targetMacAddress) {
        this.targetAddress = targetAddress;
        this.targetMacAddress = targetMacAddress;
    }

    /**
     * Returns the IP address of the ARP reply.
     *
     * @return the IP address
     */
    public int getTargetAddress() {
        return targetAddress;
    }

    /**
     * Returns the MAC address of the ARP reply.
     *
     * @return the MAC address
     */
    public MACAddress getTargetMacAddress() {
        return targetMacAddress;
    }

}
