alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 1 | package org.onlab.onos.net.flow.instructions; |
2 | |||||
alshabib | 99b8fdc | 2014-09-25 14:30:22 -0700 | [diff] [blame] | 3 | import static com.google.common.base.MoreObjects.toStringHelper; |
4 | |||||
Ayaka Koshibe | 1d56fe4 | 2014-09-19 16:51:58 -0700 | [diff] [blame] | 5 | import org.onlab.packet.IpPrefix; |
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 6 | |
7 | /** | ||||
8 | * Abstraction of a single traffic treatment step. | ||||
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 9 | */ |
10 | public abstract class L3ModificationInstruction implements Instruction { | ||||
11 | |||||
12 | /** | ||||
13 | * Represents the type of traffic treatment. | ||||
14 | */ | ||||
alshabib | 35edb1a | 2014-09-16 17:44:44 -0700 | [diff] [blame] | 15 | public enum L3SubType { |
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 16 | /** |
17 | * Ether src modification. | ||||
18 | */ | ||||
alshabib | 99b8fdc | 2014-09-25 14:30:22 -0700 | [diff] [blame] | 19 | IP_SRC, |
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 20 | |
21 | /** | ||||
22 | * Ether dst modification. | ||||
23 | */ | ||||
alshabib | 99b8fdc | 2014-09-25 14:30:22 -0700 | [diff] [blame] | 24 | IP_DST |
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 25 | |
26 | //TODO: remaining types | ||||
27 | } | ||||
28 | |||||
29 | /** | ||||
30 | * Returns the subtype of the modification instruction. | ||||
31 | * @return type of instruction | ||||
32 | */ | ||||
alshabib | 35edb1a | 2014-09-16 17:44:44 -0700 | [diff] [blame] | 33 | public abstract L3SubType subtype(); |
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 34 | |
35 | @Override | ||||
36 | public Type type() { | ||||
alshabib | 35edb1a | 2014-09-16 17:44:44 -0700 | [diff] [blame] | 37 | return Type.L3MODIFICATION; |
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 38 | } |
39 | |||||
40 | /** | ||||
41 | * Represents a L3 src/dst modification instruction. | ||||
42 | */ | ||||
43 | public static final class ModIPInstruction extends L3ModificationInstruction { | ||||
44 | |||||
alshabib | 35edb1a | 2014-09-16 17:44:44 -0700 | [diff] [blame] | 45 | private final L3SubType subtype; |
Ayaka Koshibe | 1d56fe4 | 2014-09-19 16:51:58 -0700 | [diff] [blame] | 46 | private final IpPrefix ip; |
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 47 | |
Ayaka Koshibe | 1d56fe4 | 2014-09-19 16:51:58 -0700 | [diff] [blame] | 48 | public ModIPInstruction(L3SubType subType, IpPrefix addr) { |
alshabib | 64231f6 | 2014-09-16 17:58:36 -0700 | [diff] [blame] | 49 | |
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 50 | this.subtype = subType; |
51 | this.ip = addr; | ||||
52 | } | ||||
53 | |||||
54 | @Override | ||||
alshabib | 35edb1a | 2014-09-16 17:44:44 -0700 | [diff] [blame] | 55 | public L3SubType subtype() { |
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 56 | return this.subtype; |
57 | } | ||||
58 | |||||
Ayaka Koshibe | 1d56fe4 | 2014-09-19 16:51:58 -0700 | [diff] [blame] | 59 | public IpPrefix ip() { |
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 60 | return this.ip; |
61 | } | ||||
62 | |||||
alshabib | 99b8fdc | 2014-09-25 14:30:22 -0700 | [diff] [blame] | 63 | @Override |
64 | public String toString() { | ||||
65 | return toStringHelper(subtype().toString()) | ||||
66 | .add("ip", ip).toString(); | ||||
67 | } | ||||
68 | |||||
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 69 | } |
alshabib | 7410fea | 2014-09-16 13:48:39 -0700 | [diff] [blame] | 70 | } |