| package net.onrc.onos.core.packetservice; |
| |
| import java.io.Serializable; |
| import java.util.Arrays; |
| |
| import net.onrc.onos.core.topology.Topology; |
| |
| import com.google.common.collect.Multimap; |
| |
| /** |
| * A PacketOutNotification contains data sent between ONOS instances that |
| * directs other instances to send a packet out a set of ports. This is an |
| * abstract base class that will be subclassed by specific types of |
| * notifications. |
| */ |
| public abstract class PacketOutNotification implements Serializable { |
| |
| private static final long serialVersionUID = 1L; |
| |
| private final byte[] packet; |
| |
| /** |
| * Default constructor, used for deserialization. |
| */ |
| protected PacketOutNotification() { |
| packet = null; |
| } |
| |
| /** |
| * Class constructor. |
| * |
| * @param packet the packet data to send in the packet-out |
| */ |
| public PacketOutNotification(byte[] packet) { |
| this.packet = Arrays.copyOf(packet, packet.length); |
| } |
| |
| /** |
| * Gets the packet that needs to be sent into the network. |
| * |
| * @return the packet data as a serialized byte array |
| */ |
| public byte[] getPacketData() { |
| return Arrays.copyOf(packet, packet.length); |
| } |
| |
| /** |
| * Calculate a list of local ports that the packet should be sent out. |
| * <p/> |
| * A {@link PacketOutNotification} contains a high-level description of the |
| * where to send the packet. The receiver of the notification needs to know |
| * an explicit list of ports to send the packet out. This function will |
| * calculate that list, given the list of edge ports controlled by this |
| * instance. |
| * |
| * @param localPorts the map of locally-controlled ports |
| * @param topology an instance of the global topology |
| * @return a multimap of ports that the packet should be sent out, |
| * in the form |
| * {@code {dpid1 => {portnum1, portnum2, ...}, dpid2 => {portnum1}, ...}} |
| */ |
| public abstract Multimap<Long, Short> calculateOutPorts( |
| Multimap<Long, Short> localPorts, Topology topology); |
| } |