package net.onrc.onos.ofcontroller.proxyarp;



// TODO This class is too generic to be handled by ProxyArpService.
// TODO The generic broadcast packet shouldn't contain an IP address which is
// only for ARP packets.
/**
 * Notification to all ONOS instances to broadcast this packet out the edge of
 * the network. The edge is defined as any port that doesn't have a link to
 * another switch. The one exception is the port that the packet was received
 * on.
 *
 */
public class BroadcastPacketOutNotification extends PacketOutNotification {

    private static final long serialVersionUID = 1L;

    private final int address;
    private final long inSwitch;
    private final short inPort;

    protected BroadcastPacketOutNotification() {
    	super();
        this.address = -1;
        this.inSwitch = -1;
        this.inPort = -1;
    }
    /**
     * Class constructor.
     *
     * @param packet
     *        packet data to send in the packet-out
     * @param address
     *        target IP address if the packet is an ARP packet
     * @param inSwitch
     *        dpid of the switch the packet was received on
     * @param inPort
     *        port number of the receiving port
     */
    public BroadcastPacketOutNotification(byte[] packet, int address,
            long inSwitch, short inPort) {
        super(packet);

        this.address = address;
        this.inSwitch = inSwitch;
        this.inPort = inPort;
    }
    
    /**
     * Get the dpid of the switch the packet was received on.
     *
     * @return receiving switch dpid
     */
    public long getInSwitch() {
        return inSwitch;
    }

    /**
     * Get the port number of the port the packet was received on.
     *
     * @return receiving port number
     */
    public short getInPort() {
        return inPort;
    }

    /**
     * Get the target IP address if the packet is an ARP packet.
     *
     * @return the target IP address for ARP packets, or null if the packet is
     *         not an ARP packet
     */
    public int getTargetAddress() {
        return address;
    }
}
