blob: e7eb85d0c819628b48556178fc8b1901b959c28b [file] [log] [blame]
Thomas Vachuska83e090e2014-10-22 14:25:35 -07001/*
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07002 * Copyright 2014 Open Networking Laboratory
Thomas Vachuska83e090e2014-10-22 14:25:35 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * 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
Thomas Vachuska83e090e2014-10-22 14:25:35 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * 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.
Thomas Vachuska83e090e2014-10-22 14:25:35 -070015 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.net.flow;
tom8bb16062014-09-12 14:47:46 -070017
18import java.util.List;
19
Brian O'Connorabafb502014-12-02 22:26:20 -080020import org.onosproject.net.PortNumber;
21import org.onosproject.net.flow.instructions.Instruction;
Pavlin Radoslavov855ea2d2014-10-30 15:32:39 -070022import org.onlab.packet.IpAddress;
alshabib010c31d2014-09-26 10:01:12 -070023import org.onlab.packet.MacAddress;
24import org.onlab.packet.VlanId;
alshabib55a55d92014-09-16 11:59:31 -070025
tom8bb16062014-09-12 14:47:46 -070026/**
27 * Abstraction of network traffic treatment.
28 */
29public interface TrafficTreatment {
30
31 /**
32 * Returns list of instructions on how to treat traffic.
33 *
34 * @return list of treatment instructions
35 */
36 List<Instruction> instructions();
37
38 /**
39 * Builder of traffic treatment entities.
40 */
41 public interface Builder {
42
43 /**
alshabib010c31d2014-09-26 10:01:12 -070044 * Adds an instruction to the builder.
Sho SHIMIZUbdaea832014-11-12 11:29:38 -080045 *
alshabib010c31d2014-09-26 10:01:12 -070046 * @param instruction an instruction
47 * @return a treatment builder
tom8bb16062014-09-12 14:47:46 -070048 */
alshabib369d2942014-09-12 17:59:35 -070049 Builder add(Instruction instruction);
tom8bb16062014-09-12 14:47:46 -070050
51 /**
Thomas Vachuskaf4df0052015-01-06 12:30:11 -080052 * Adds a drop instruction.
53 *
54 * @return a treatment builder
alshabib010c31d2014-09-26 10:01:12 -070055 */
Thomas Vachuskaf4df0052015-01-06 12:30:11 -080056 public Builder drop();
57
58 /**
59 * Adds a punt-to-controller instruction.
60 *
61 * @return a treatment builder
62 */
63 public Builder punt();
alshabib010c31d2014-09-26 10:01:12 -070064
65 /**
66 * Set the output port.
Sho SHIMIZUbdaea832014-11-12 11:29:38 -080067 *
alshabib010c31d2014-09-26 10:01:12 -070068 * @param number the out port
69 * @return a treatment builder
70 */
71 public Builder setOutput(PortNumber number);
72
73 /**
74 * Sets the src l2 address.
Sho SHIMIZUbdaea832014-11-12 11:29:38 -080075 *
alshabib010c31d2014-09-26 10:01:12 -070076 * @param addr a macaddress
77 * @return a treatment builder
78 */
79 public Builder setEthSrc(MacAddress addr);
80
81 /**
82 * Sets the dst l2 address.
Sho SHIMIZUbdaea832014-11-12 11:29:38 -080083 *
alshabib010c31d2014-09-26 10:01:12 -070084 * @param addr a macaddress
85 * @return a treatment builder
86 */
87 public Builder setEthDst(MacAddress addr);
88
89 /**
90 * Sets the vlan id.
Sho SHIMIZUbdaea832014-11-12 11:29:38 -080091 *
alshabib010c31d2014-09-26 10:01:12 -070092 * @param id a vlanid
93 * @return a treatment builder
94 */
95 public Builder setVlanId(VlanId id);
96
97 /**
98 * Sets the vlan priority.
Sho SHIMIZUbdaea832014-11-12 11:29:38 -080099 *
alshabib010c31d2014-09-26 10:01:12 -0700100 * @param pcp a vlan priority
101 * @return a treatment builder
102 */
103 public Builder setVlanPcp(Byte pcp);
104
105 /**
106 * Sets the src l3 address.
Sho SHIMIZUbdaea832014-11-12 11:29:38 -0800107 *
alshabib010c31d2014-09-26 10:01:12 -0700108 * @param addr an ip
109 * @return a treatment builder
110 */
Pavlin Radoslavov855ea2d2014-10-30 15:32:39 -0700111 public Builder setIpSrc(IpAddress addr);
alshabib010c31d2014-09-26 10:01:12 -0700112
113 /**
114 * Sets the dst l3 address.
Sho SHIMIZUbdaea832014-11-12 11:29:38 -0800115 *
alshabib010c31d2014-09-26 10:01:12 -0700116 * @param addr an ip
117 * @return a treatment builder
118 */
Pavlin Radoslavov855ea2d2014-10-30 15:32:39 -0700119 public Builder setIpDst(IpAddress addr);
alshabib010c31d2014-09-26 10:01:12 -0700120
121 /**
Praseed Balakrishnan8c67d172014-11-10 10:15:41 -0800122 * Push MPLS ether type.
Thomas Vachuskaf4df0052015-01-06 12:30:11 -0800123 *
Praseed Balakrishnan8c67d172014-11-10 10:15:41 -0800124 * @return a treatment builder.
125 */
126 public Builder pushMpls();
127
128 /**
129 * Pops MPLS ether type.
Thomas Vachuskaf4df0052015-01-06 12:30:11 -0800130 *
Praseed Balakrishnan8c67d172014-11-10 10:15:41 -0800131 * @return a treatment builder.
132 */
133 public Builder popMpls();
134
135 /**
136 * Sets the mpls label.
Thomas Vachuskaf4df0052015-01-06 12:30:11 -0800137 *
Praseed Balakrishnan8c67d172014-11-10 10:15:41 -0800138 * @param mplsLabel MPLS label.
139 * @return a treatment builder.
140 */
141 public Builder setMpls(Integer mplsLabel);
142
143 /**
Marc De Leenheer49087752014-10-23 13:54:09 -0700144 * Sets the optical channel ID or lambda.
Sho SHIMIZUbdaea832014-11-12 11:29:38 -0800145 *
Marc De Leenheer49087752014-10-23 13:54:09 -0700146 * @param lambda optical channel ID
147 * @return a treatment builder
148 */
149 public Builder setLambda(short lambda);
150
151 /**
tom8bb16062014-09-12 14:47:46 -0700152 * Builds an immutable traffic treatment descriptor.
153 *
154 * @return traffic treatment
155 */
156 TrafficTreatment build();
157 }
158
159}