blob: 30b32fe0903a4126ab1498341d94901c1f7bfd7e [file] [log] [blame]
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2014-present Open Networking Foundation
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.net.packet;
tom613d8142014-09-11 15:09:37 -070017
Brian O'Connorabafb502014-12-02 22:26:20 -080018import org.onosproject.net.DeviceId;
Thiago Santosa4a17cb2019-01-30 14:23:58 -080019import org.onosproject.net.PortNumber;
Brian O'Connorabafb502014-12-02 22:26:20 -080020import org.onosproject.net.flow.TrafficTreatment;
tom613d8142014-09-11 15:09:37 -070021
22import java.nio.ByteBuffer;
tom613d8142014-09-11 15:09:37 -070023
24/**
25 * Represents an outbound data packet that is to be emitted to network via
26 * an infrastructure device.
27 */
28public interface OutboundPacket {
29
30 /**
31 * Returns the identity of a device through which this packet should be
32 * sent.
33 *
34 * @return device identity
35 */
36 DeviceId sendThrough();
37
38 /**
tom8bb16062014-09-12 14:47:46 -070039 * Returns how the outbound packet should be treated.
tom613d8142014-09-11 15:09:37 -070040 *
41 * @return output treatment
42 */
tom8bb16062014-09-12 14:47:46 -070043 TrafficTreatment treatment();
tom613d8142014-09-11 15:09:37 -070044
45 /**
tom8bb16062014-09-12 14:47:46 -070046 * Returns immutable view of the raw data to be sent.
tom613d8142014-09-11 15:09:37 -070047 *
48 * @return data to emit
49 */
50 ByteBuffer data();
51
Thiago Santosa4a17cb2019-01-30 14:23:58 -080052 /**
53 * Returns the input port of this packet.
54 *
55 * Defaults to controller port. This is useful for actions that involve the input port
56 * such as ALL or FLOOD.
57 *
58 * @return the input port to be used for this packet.
59 */
60 default PortNumber inPort() {
61 return PortNumber.CONTROLLER;
62 }
tom613d8142014-09-11 15:09:37 -070063}